diff --git a/lalrpop-test/src/lib.rs b/lalrpop-test/src/lib.rs index 6696e83..ae0ab11 100644 --- a/lalrpop-test/src/lib.rs +++ b/lalrpop-test/src/lib.rs @@ -940,8 +940,9 @@ fn verify_lalrpop_generates_itself() { let actual = fs::read_to_string(grammar_file.with_extension("rs")).unwrap(); let expected = fs::read_to_string(copied_grammar_file.with_extension("rs")).unwrap(); - assert!( - actual == expected, + util::compare_str( + &actual, + &expected, "The snapshot does not match what lalrpop generates now.\n\ Use ./snap.sh to generate a new snapshot of the lrgrammar", ); diff --git a/lalrpop-test/src/util/mod.rs b/lalrpop-test/src/util/mod.rs index b7f73fc..7281c50 100644 --- a/lalrpop-test/src/util/mod.rs +++ b/lalrpop-test/src/util/mod.rs @@ -84,7 +84,15 @@ pub fn compare(actual: D, expected: E) { let actual_s = format!("{:#?}", actual); let expected_s = format!("{:#?}", expected); - for diff in diff::lines(&actual_s, &expected_s) { + compare_str(&actual_s, &expected_s, ""); + } +} + +pub fn compare_str(actual: &str, expected: &str, msg: &str) { + if actual != expected { + let mut lines = 0; + for diff in diff::lines(actual, expected).into_iter().take(100) { + lines += 1; match diff { diff::Result::Right(r) => println!("- {}", r), diff::Result::Left(l) => println!("+ {}", l), @@ -92,6 +100,9 @@ pub fn compare(actual: D, expected: E) { } } - assert!(false); + if lines >= 100 { + println!("... more"); + } + assert!(false, "{}", msg); } }