1
- use std:: fs;
2
1
mod common;
2
+
3
+ use insta:: { assert_debug_snapshot, Settings } ;
3
4
use log:: { debug, info} ;
4
5
use parser:: parse_source;
6
+ use pg_query:: split_with_parser;
7
+ use std:: { fs, panic} ;
5
8
6
9
const VALID_STATEMENTS_PATH : & str = "tests/data/statements/valid/" ;
7
10
@@ -15,29 +18,38 @@ fn valid_statements() {
15
18
. collect ( ) ;
16
19
paths. sort_by_key ( |dir| dir. path ( ) ) ;
17
20
18
- paths. iter ( ) . for_each ( |f| {
21
+ for f in paths. iter ( ) {
19
22
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 ( ) ;
22
24
23
25
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 ( ) ) ;
24
51
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( ) ) ) ;
41
53
}
42
- } ) ;
54
+ }
43
55
}
0 commit comments