summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Otto <th1000s@posteo.net>2024-07-06 08:48:52 +0200
committerDan Davison <dandavison7@gmail.com>2024-07-09 00:00:18 +0100
commit5d538b23039058d50f218611f714ff40d5cd883d (patch)
treebc8f48644efa13fa62a6bddf0df8e1a74af3d2d2 /src
parent995dc41525a1a53c71f89a4371f8b24c2edf9ead (diff)
Make relative-paths work with binary files
`relativize_path_maybe()` was not called in this case. Added test and converted a few existing ones to insta.
Diffstat (limited to 'src')
-rw-r--r--src/handlers/diff_header.rs41
-rw-r--r--src/handlers/diff_header_misc.rs3
-rw-r--r--src/tests/test_example_diffs.rs58
3 files changed, 82 insertions, 20 deletions
diff --git a/src/handlers/diff_header.rs b/src/handlers/diff_header.rs
index 7379f2f..4614611 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 b120fb2..0a75b37 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 0d208e3..9ee3ca5 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]