diff --git a/Cargo.lock b/Cargo.lock index beb49b57..19e6547c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -652,6 +652,7 @@ dependencies = [ "console", "lazy_static", "linked-hash-map", + "regex", "similar", ] diff --git a/Cargo.toml b/Cargo.toml index d5be556e..3234a717 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -68,7 +68,7 @@ default-features = false features = [] [dev-dependencies] -insta = { version = "1.*", features = ["colors"] } +insta = { version = "1.*", features = ["colors", "filters"] } [profile.test] opt-level = 2 diff --git a/src/handlers/diff_header.rs b/src/handlers/diff_header.rs index 7379f2fc..46146110 100644 --- a/src/handlers/diff_header.rs +++ b/src/handlers/diff_header.rs @@ -468,6 +468,8 @@ pub fn get_file_change_description_from_file_paths( #[cfg(test)] mod tests { use super::*; + use crate::tests::integration_test_utils::{make_config_from_args, DeltaTest}; + use insta::assert_snapshot; #[test] fn test_get_filename_from_marker_line() { @@ -637,4 +639,43 @@ mod tests { Some(".config/Code - Insiders/User/settings.json".to_string()) ); } + + pub const BIN_AND_TXT_FILE_ADDED: &str = "\ +diff --git a/BIN b/BIN +new file mode 100644 +index 0000000..a5d0c46 +Binary files /dev/null and b/BIN differ +diff --git a/TXT b/TXT +new file mode 100644 +index 0000000..323fae0 +--- /dev/null ++++ b/TXT +@@ -0,0 +1 @@ ++plain text"; + + #[test] + fn test_diff_header_relative_paths() { + // rustfmt ignores the assert macro arguments, so do the setup outside + let mut cfg = make_config_from_args(&["--relative-paths", "-s"]); + cfg.cwd_relative_to_repo_root = Some("src/utils/".into()); + let result = DeltaTest::with_config(&cfg) + .with_input(BIN_AND_TXT_FILE_ADDED) + .output; + // convert windows '..\' to unix '../' paths + insta::with_settings!({filters => vec![(r"\.\.\\", "../")]}, { + assert_snapshot!(result, @r###" + + added: ../../BIN (binary file) + ─────────────────────────────────────────── + + added: ../../TXT + ─────────────────────────────────────────── + + ───┐ + 1: │ + ───┘ + │ │ │ 1 │plain text + "###) + }); + } } diff --git a/src/handlers/diff_header_misc.rs b/src/handlers/diff_header_misc.rs index b120fb2f..0a75b372 100644 --- a/src/handlers/diff_header_misc.rs +++ b/src/handlers/diff_header_misc.rs @@ -1,4 +1,5 @@ use crate::delta::{DiffType, Source, State, StateMachine}; +use crate::utils::path::relativize_path_maybe; impl<'a> StateMachine<'a> { #[inline] @@ -29,9 +30,11 @@ impl<'a> StateMachine<'a> { } if self.minus_file != "/dev/null" { + relativize_path_maybe(&mut self.minus_file, self.config); self.minus_file.push_str(" (binary file)"); } if self.plus_file != "/dev/null" { + relativize_path_maybe(&mut self.plus_file, self.config); self.plus_file.push_str(" (binary file)"); } return Ok(true); diff --git a/src/tests/test_example_diffs.rs b/src/tests/test_example_diffs.rs index 0d208e30..9ee3ca5b 100644 --- a/src/tests/test_example_diffs.rs +++ b/src/tests/test_example_diffs.rs @@ -8,6 +8,7 @@ mod tests { use crate::tests::ansi_test_utils::ansi_test_utils; use crate::tests::integration_test_utils; use crate::tests::integration_test_utils::DeltaTest; + use insta::assert_snapshot; #[test] fn test_added_file() { @@ -126,7 +127,6 @@ mod tests { "bash", ]); let output = integration_test_utils::run_delta(MODIFIED_BASH_AND_CSHARP_FILES, &config); - eprintln!("{}", &output); ansi_test_utils::assert_line_has_syntax_highlighted_substring( &output, 19, @@ -311,37 +311,55 @@ index 0123456..1234567 100644 #[test] fn test_binary_files_differ() { - let config = - integration_test_utils::make_config_from_args(&["--file-modified-label", "modified:"]); - let output = integration_test_utils::run_delta(BINARY_FILES_DIFFER, &config); - let output = strip_ansi_codes(&output); - assert!(output.contains("\nmodified: foo (binary file)\n")); + let output = DeltaTest::with_args(&["--file-modified-label", "modified:"]) + .with_input(BINARY_FILES_DIFFER) + .skip_header(); + + assert_snapshot!(output, @r###" + + modified: foo (binary file) + ─────────────────────────────────────────── + "###); } #[test] fn test_binary_file_added() { - let config = integration_test_utils::make_config_from_args(&[]); - let output = integration_test_utils::run_delta(BINARY_FILE_ADDED, &config); - let output = strip_ansi_codes(&output); - assert!(output.contains("\nadded: foo (binary file)\n")); + let output = DeltaTest::with_args(&[]) + .with_input(BINARY_FILE_ADDED) + .skip_header(); + assert_snapshot!(output, @r###" + + added: foo (binary file) + ─────────────────────────────────────────── + "###); } #[test] fn test_binary_file_removed() { - let config = integration_test_utils::make_config_from_args(&[]); - let output = integration_test_utils::run_delta(BINARY_FILE_REMOVED, &config); - let output = strip_ansi_codes(&output); - assert!(output.contains("\nremoved: foo (binary file)\n")); + let output = DeltaTest::with_args(&[]) + .with_input(BINARY_FILE_REMOVED) + .skip_header(); + assert_snapshot!(output, @r###" + + removed: foo (binary file) + ─────────────────────────────────────────── + "###); } #[test] fn test_binary_files_differ_after_other() { - let config = - integration_test_utils::make_config_from_args(&["--file-modified-label", "modified:"]); - let output = integration_test_utils::run_delta(BINARY_FILES_DIFFER_AFTER_OTHER, &config); - let output = strip_ansi_codes(&output); - assert!(output.contains("\nrenamed: foo ⟶ bar\n")); - assert!(output.contains("\nmodified: qux (binary file)\n")); + let output = DeltaTest::with_args(&["--file-modified-label", "modified:"]) + .with_input(BINARY_FILES_DIFFER_AFTER_OTHER) + .output; + assert_snapshot!(output, @r###" + + + renamed: foo ⟶ bar + ─────────────────────────────────────────── + + modified: qux (binary file) + ─────────────────────────────────────────── + "###); } #[test]