From 0a486d508fe14c9f6a7a94c478dbfdb340aae33e Mon Sep 17 00:00:00 2001 From: Amaan Qureshi Date: Sun, 1 Sep 2024 04:31:59 -0400 Subject: [PATCH] fix(test): exit with an error if a test marked with `:error` has no error --- cli/src/test.rs | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/cli/src/test.rs b/cli/src/test.rs index 250c8efe..a3bf5e88 100644 --- a/cli/src/test.rs +++ b/cli/src/test.rs @@ -59,6 +59,7 @@ pub enum TestEntry { header_delim_len: usize, divider_delim_len: usize, has_fields: bool, + attributes_str: String, attributes: TestAttributes, }, } @@ -171,10 +172,22 @@ pub fn run_tests_at_path(parser: &mut Parser, opts: &mut TestOptions) -> Result< print_diff_key(); } for (i, (name, actual, expected)) in failures.iter().enumerate() { - println!("\n {}. {name}:", i + 1); - let actual = format_sexp(actual, 2); - let expected = format_sexp(expected, 2); - print_diff(&actual, &expected, opts.color); + if expected == "NO ERROR" { + println!("\n {}. {name}:\n", i + 1); + println!(" Expected an ERROR node, but got:"); + println!( + " {}", + paint( + opts.color.then_some(AnsiColor::Red), + &format_sexp(actual, 2) + ) + ); + } else { + println!("\n {}. {name}:", i + 1); + let actual = format_sexp(actual, 2); + let expected = format_sexp(expected, 2); + print_diff(&actual, &expected, opts.color); + } } if has_parse_errors { @@ -382,6 +395,11 @@ fn run_tests( opts.test_num, paint(opts.color.then_some(AnsiColor::Red), &name) ); + failures.push(( + name.clone(), + tree.root_node().to_sexp(), + "NO ERROR".to_string(), + )); } if attributes.fail_fast {