Skip to content

Commit 00e18a6

Browse files
Define assert_diff_eq macro for context&unified diff comparison
1 parent 72da7fc commit 00e18a6

File tree

7 files changed

+39
-33
lines changed

7 files changed

+39
-33
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ path = "src/main.rs"
1717
[dependencies]
1818
chrono = "0.4.35"
1919
diff = "0.1.10"
20-
regex = "1.10.4"
20+
regex = "1.10.3"
2121
same-file = "1.0.6"
2222
unicode-width = "0.1.11"
2323

src/context_diff.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -726,9 +726,8 @@ mod tests {
726726

727727
#[test]
728728
fn test_stop_early() {
729-
use regex::Regex;
729+
use crate::assert_diff_eq;
730730
use std::fs::File;
731-
use std::str;
732731

733732
let target = "target/context-diff";
734733
let _ = std::fs::create_dir(target);
@@ -749,10 +748,6 @@ mod tests {
749748
},
750749
);
751750

752-
let diff_full_text = str::from_utf8(&diff_full).unwrap();
753-
let re = Regex::new(r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ [+-]\d{4}").unwrap();
754-
let diff_full = re.replace_all(diff_full_text, "");
755-
756751
let expected_full = [
757752
"*** target/context-diff/foo\t",
758753
"--- target/context-diff/bar\t",
@@ -768,7 +763,7 @@ mod tests {
768763
"",
769764
]
770765
.join("\n");
771-
assert_eq!(diff_full, expected_full);
766+
assert_diff_eq!(diff_full, expected_full);
772767

773768
let diff_brief = diff(
774769
from.as_bytes(),
@@ -781,16 +776,13 @@ mod tests {
781776
},
782777
);
783778

784-
let diff_brief_text = str::from_utf8(&diff_brief).unwrap();
785-
let re = Regex::new(r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ [+-]\d{4}").unwrap();
786-
let diff_brief = re.replace_all(diff_brief_text, "");
787779
let expected_brief = [
788780
"*** target/context-diff/foo\t",
789781
"--- target/context-diff/bar\t",
790782
"",
791783
]
792784
.join("\n");
793-
assert_eq!(diff_brief, expected_brief);
785+
assert_diff_eq!(diff_brief, expected_brief);
794786

795787
let nodiff_full = diff(
796788
from.as_bytes(),

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
pub mod context_diff;
22
pub mod ed_diff;
3+
pub mod macros;
34
pub mod normal_diff;
45
pub mod params;
56
pub mod unified_diff;

src/macros.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#[macro_export]
2+
macro_rules! assert_diff_eq {
3+
($actual:expr, $expected:expr) => {{
4+
use regex::Regex;
5+
use std::str;
6+
7+
let diff = str::from_utf8(&$actual).unwrap();
8+
let re = Regex::new(r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ [+-]\d{4}").unwrap();
9+
let actual = re.replace_all(diff, "");
10+
11+
assert_eq!(actual, $expected);
12+
}};
13+
}

src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use std::process::{exit, ExitCode};
1212

1313
mod context_diff;
1414
mod ed_diff;
15+
mod macros;
1516
mod normal_diff;
1617
mod params;
1718
mod unified_diff;

src/unified_diff.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -880,9 +880,8 @@ mod tests {
880880

881881
#[test]
882882
fn test_stop_early() {
883-
use regex::Regex;
883+
use crate::assert_diff_eq;
884884
use std::fs::File;
885-
use std::str;
886885

887886
let target = "target/context-diff";
888887
let _ = std::fs::create_dir(target);
@@ -903,10 +902,6 @@ mod tests {
903902
},
904903
);
905904

906-
let diff_full_text = str::from_utf8(&diff_full).unwrap();
907-
let re = Regex::new(r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ [+-]\d{4}").unwrap();
908-
let diff_full = re.replace_all(diff_full_text, "");
909-
910905
let expected_full = [
911906
"--- target/context-diff/foo\t",
912907
"+++ target/context-diff/bar\t",
@@ -918,7 +913,7 @@ mod tests {
918913
"",
919914
]
920915
.join("\n");
921-
assert_eq!(diff_full, expected_full);
916+
assert_diff_eq!(diff_full, expected_full);
922917

923918
let diff_brief = diff(
924919
from.as_bytes(),
@@ -931,16 +926,13 @@ mod tests {
931926
},
932927
);
933928

934-
let diff_brief_text = str::from_utf8(&diff_brief).unwrap();
935-
let re = Regex::new(r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+ [+-]\d{4}").unwrap();
936-
let diff_brief = re.replace_all(diff_brief_text, "");
937929
let expected_brief = [
938930
"--- target/context-diff/foo\t",
939931
"+++ target/context-diff/bar\t",
940932
"",
941933
]
942934
.join("\n");
943-
assert_eq!(diff_brief, expected_brief);
935+
assert_diff_eq!(diff_brief, expected_brief);
944936

945937
let nodiff_full = diff(
946938
from.as_bytes(),

tests/integration.rs

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// files that was distributed with this source code.
55

66
use assert_cmd::cmd::Command;
7+
use diffutilslib::assert_diff_eq;
78
use predicates::prelude::*;
89
use std::io::Write;
910
use tempfile::NamedTempFile;
@@ -173,26 +174,32 @@ fn read_from_stdin() -> Result<(), Box<dyn std::error::Error>> {
173174
.arg(file1.path())
174175
.arg("-")
175176
.write_stdin("bar\n");
176-
cmd.assert()
177-
.code(predicate::eq(1))
178-
.failure()
179-
.stdout(predicate::eq(format!(
177+
cmd.assert().code(predicate::eq(1)).failure();
178+
179+
let output = cmd.output().unwrap().stdout;
180+
assert_diff_eq!(
181+
output,
182+
format!(
180183
"--- {}\t\n+++ /dev/stdin\t\n@@ -1 +1 @@\n-foo\n+bar\n",
181184
file1.path().to_string_lossy()
182-
)));
185+
)
186+
);
183187

184188
let mut cmd = Command::cargo_bin("diffutils")?;
185189
cmd.arg("-u")
186190
.arg("-")
187191
.arg(file2.path())
188192
.write_stdin("foo\n");
189-
cmd.assert()
190-
.code(predicate::eq(1))
191-
.failure()
192-
.stdout(predicate::eq(format!(
193+
cmd.assert().code(predicate::eq(1)).failure();
194+
195+
let output = cmd.output().unwrap().stdout;
196+
assert_diff_eq!(
197+
output,
198+
format!(
193199
"--- /dev/stdin\t\n+++ {}\t\n@@ -1 +1 @@\n-foo\n+bar\n",
194200
file2.path().to_string_lossy()
195-
)));
201+
)
202+
);
196203

197204
let mut cmd = Command::cargo_bin("diffutils")?;
198205
cmd.arg("-u").arg("-").arg("-").write_stdin("foo\n");

0 commit comments

Comments
 (0)