Skip to content

Commit ebc0861

Browse files
committed
feat: add snapshots test back
1 parent a1ebe78 commit ebc0861

File tree

1 file changed

+33
-21
lines changed

1 file changed

+33
-21
lines changed

Diff for: crates/parser/tests/statement_parser_test.rs

+33-21
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
use std::fs;
21
mod common;
2+
3+
use insta::{assert_debug_snapshot, Settings};
34
use log::{debug, info};
45
use parser::parse_source;
6+
use pg_query::split_with_parser;
7+
use std::{fs, panic};
58

69
const VALID_STATEMENTS_PATH: &str = "tests/data/statements/valid/";
710

@@ -15,29 +18,38 @@ fn valid_statements() {
1518
.collect();
1619
paths.sort_by_key(|dir| dir.path());
1720

18-
paths.iter().for_each(|f| {
21+
for f in paths.iter() {
1922
let path = f.path();
20-
let file_name = path.file_name().unwrap();
21-
let test_name = file_name.to_str().unwrap().replace(".sql", "");
23+
let test_name = path.file_stem().unwrap().to_str().unwrap();
2224

2325
let contents = fs::read_to_string(&path).unwrap();
26+
let cases = split_with_parser(&contents).unwrap();
27+
28+
for (i, case) in cases.iter().enumerate() {
29+
debug!("Parsing statement {}\n{}", test_name, case);
30+
31+
let result = panic::catch_unwind(|| parse_source(&case));
32+
33+
if result.is_err() {
34+
assert!(false, "Failed to parse statement {}:\n{}", test_name, case);
35+
} else {
36+
info!(
37+
"Successfully parsed statement {}\n'{}'\n{:#?}",
38+
test_name,
39+
case,
40+
result.as_ref().unwrap().cst
41+
);
42+
}
43+
44+
let mut settings = Settings::clone_current();
45+
settings.set_input_file(&path);
46+
settings.set_prepend_module_to_snapshot(false);
47+
settings.set_description(case.to_string());
48+
settings.set_omit_expression(true);
49+
settings.set_snapshot_path("snapshots/statements/valid");
50+
settings.set_snapshot_suffix((i + 1).to_string());
2451

25-
debug!("Parsing statement {}\n{}", test_name, contents);
26-
27-
let result = std::panic::catch_unwind(|| parse_source(&contents));
28-
if result.is_err() {
29-
assert!(
30-
false,
31-
"Failed to parse statement {}:\n{}",
32-
test_name, contents
33-
);
34-
} else {
35-
info!(
36-
"Successfully parsed statement {}\n'{}'\n{:#?}",
37-
test_name,
38-
contents,
39-
result.unwrap().cst
40-
);
52+
settings.bind(|| assert_debug_snapshot!(test_name, result.unwrap()));
4153
}
42-
});
54+
}
4355
}

0 commit comments

Comments
 (0)