Skip to content

Commit

Permalink
Make relative-paths work with binary files
Browse files Browse the repository at this point in the history
`relativize_path_maybe()` was not called in this case. Added
test and converted a few existing ones to insta.
  • Loading branch information
th1000s committed Jul 8, 2024
1 parent 159ad08 commit ce02461
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 21 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
41 changes: 41 additions & 0 deletions src/handlers/diff_header.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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
"###)
});
}
}
3 changes: 3 additions & 0 deletions src/handlers/diff_header_misc.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use crate::delta::{DiffType, Source, State, StateMachine};
use crate::utils::path::relativize_path_maybe;

impl<'a> StateMachine<'a> {
#[inline]
Expand Down Expand Up @@ -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);
Expand Down
58 changes: 38 additions & 20 deletions src/tests/test_example_diffs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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]
Expand Down

0 comments on commit ce02461

Please sign in to comment.