Skip to content

Commit 4432cbe

Browse files
committed
tests: print diffs on test failures
1 parent 5fbf60a commit 4432cbe

File tree

3 files changed

+69
-19
lines changed

3 files changed

+69
-19
lines changed

Cargo.lock

Lines changed: 39 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ otel = [
3737
]
3838

3939
# Exports code dependent on private interfaces for the integration test suite
40-
test = ["dep:walkdir"]
40+
test = ["dep:similar-asserts", "dep:walkdir"]
4141

4242
# Sorted by alphabetic order
4343
[dependencies]
@@ -77,6 +77,7 @@ semver = "1.0"
7777
serde = { version = "1.0", features = ["derive"] }
7878
sha2 = "0.10"
7979
sharded-slab = "0.1.1"
80+
similar-asserts = { version = "1.7", optional = true } # test-only
8081
strsim = "0.11"
8182
tar = "0.4.26"
8283
tempfile = "3.8"

src/test/clitools.rs

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use std::{
1818
};
1919

2020
use enum_map::{Enum, EnumMap, enum_map};
21+
use similar_asserts::SimpleDiff;
2122
use tempfile::TempDir;
2223
use url::Url;
2324

@@ -236,12 +237,14 @@ impl Config {
236237
let out = self.run(args[0], &args[1..], env).await;
237238
if !out.ok || out.stdout != stdout || out.stderr != stderr {
238239
print_command(args, &out);
239-
println!("expected.ok: true");
240-
print_indented("expected.stdout", stdout);
241-
print_indented("expected.stderr", stderr);
242-
dbg!(out.stdout == stdout);
243-
dbg!(out.stderr == stderr);
244-
panic!();
240+
print_diff(stdout, &out.stdout);
241+
print_diff(stderr, &out.stderr);
242+
panic!(
243+
"expected OK, differences found: ok = {}, stdout = {}, stderr = {}",
244+
out.ok,
245+
out.stdout == stdout,
246+
out.stderr == stderr
247+
);
245248
}
246249
}
247250

@@ -250,18 +253,14 @@ impl Config {
250253
let out = self.run(args[0], &args[1..], &[]).await;
251254
if out.ok || out.stdout != stdout || out.stderr != stderr {
252255
print_command(args, &out);
253-
println!("expected.ok: false");
254-
print_indented("expected.stdout", stdout);
255-
print_indented("expected.stderr", stderr);
256-
if out.ok {
257-
panic!("expected command to fail");
258-
} else if out.stdout != stdout {
259-
panic!("expected stdout to match");
260-
} else if out.stderr != stderr {
261-
panic!("expected stderr to match");
262-
} else {
263-
unreachable!()
264-
}
256+
print_diff(stdout, &out.stdout);
257+
print_diff(stderr, &out.stderr);
258+
panic!(
259+
"expected error, differences found: ok = {}, stdout = {}, stderr = {}",
260+
out.ok,
261+
out.stdout == stdout,
262+
out.stderr == stderr
263+
);
265264
}
266265
}
267266

@@ -430,6 +429,17 @@ impl Config {
430429
}
431430
}
432431

432+
fn print_diff(expected: &str, actual: &str) {
433+
if expected == actual {
434+
return;
435+
}
436+
437+
println!(
438+
"{}",
439+
SimpleDiff::from_str(expected, actual, "expected", "actual")
440+
);
441+
}
442+
433443
// Describes all the features of the mock dist server.
434444
// Building the mock server is slow, so use simple scenario when possible.
435445
#[derive(Copy, Clone, Debug, Eq, PartialEq, Enum)]

0 commit comments

Comments
 (0)