@@ -14,71 +14,81 @@ use crate::{
1414 test:: { parse_tests, print_diff, print_diff_key, strip_sexp_fields, TestEntry } ,
1515 util,
1616} ;
17- use std:: { env, fs} ;
17+ use std:: { collections :: HashSet , env, fs} ;
1818use tree_sitter:: { LogType , Node , Parser , Point , Range , Tree } ;
1919use tree_sitter_proc_macro:: test_with_seed;
2020
2121#[ test_with_seed( retry=10 , seed=* START_SEED , seed_fn=new_seed) ]
2222fn test_corpus_for_bash ( seed : usize ) {
23- test_language_corpus ( seed, "bash" ) ;
23+ test_language_corpus (
24+ "bash" ,
25+ seed,
26+ Some ( & [
27+ // Fragile tests where edit customization changes
28+ // lead to significant parse tree structure changes.
29+ "bash - corpus - commands - Nested Heredocs" ,
30+ "bash - corpus - commands - Quoted Heredocs" ,
31+ "bash - corpus - commands - Heredocs with weird characters" ,
32+ ] ) ,
33+ ) ;
2434}
2535
2636#[ test_with_seed( retry=10 , seed=* START_SEED , seed_fn=new_seed) ]
2737fn test_corpus_for_c ( seed : usize ) {
28- test_language_corpus ( seed , "c" ) ;
38+ test_language_corpus ( "c" , seed , None ) ;
2939}
3040
3141#[ test_with_seed( retry=10 , seed=* START_SEED , seed_fn=new_seed) ]
3242fn test_corpus_for_cpp ( seed : usize ) {
33- test_language_corpus ( seed , "cpp" ) ;
43+ test_language_corpus ( "cpp" , seed , None ) ;
3444}
3545
3646#[ test_with_seed( retry=10 , seed=* START_SEED , seed_fn=new_seed) ]
3747fn test_corpus_for_embedded_template ( seed : usize ) {
38- test_language_corpus ( seed , "embedded-template" ) ;
48+ test_language_corpus ( "embedded-template" , seed , None ) ;
3949}
4050
4151#[ test_with_seed( retry=10 , seed=* START_SEED , seed_fn=new_seed) ]
4252fn test_corpus_for_go ( seed : usize ) {
43- test_language_corpus ( seed , "go" ) ;
53+ test_language_corpus ( "go" , seed , None ) ;
4454}
4555
4656#[ test_with_seed( retry=10 , seed=* START_SEED , seed_fn=new_seed) ]
4757fn test_corpus_for_html ( seed : usize ) {
48- test_language_corpus ( seed , "html" ) ;
58+ test_language_corpus ( "html" , seed , None ) ;
4959}
5060
5161#[ test_with_seed( retry=10 , seed=* START_SEED , seed_fn=new_seed) ]
5262fn test_corpus_for_javascript ( seed : usize ) {
53- test_language_corpus ( seed , "javascript" ) ;
63+ test_language_corpus ( "javascript" , seed , None ) ;
5464}
5565
5666#[ test_with_seed( retry=10 , seed=* START_SEED , seed_fn=new_seed) ]
5767fn test_corpus_for_json ( seed : usize ) {
58- test_language_corpus ( seed , "json" ) ;
68+ test_language_corpus ( "json" , seed , None ) ;
5969}
6070
6171#[ test_with_seed( retry=10 , seed=* START_SEED , seed_fn=new_seed) ]
6272fn test_corpus_for_php ( seed : usize ) {
63- test_language_corpus ( seed , "php" ) ;
73+ test_language_corpus ( "php" , seed , None ) ;
6474}
6575
6676#[ test_with_seed( retry=10 , seed=* START_SEED , seed_fn=new_seed) ]
6777fn test_corpus_for_python ( seed : usize ) {
68- test_language_corpus ( seed , "python" ) ;
78+ test_language_corpus ( "python" , seed , None ) ;
6979}
7080
7181#[ test_with_seed( retry=10 , seed=* START_SEED , seed_fn=new_seed) ]
7282fn test_corpus_for_ruby ( seed : usize ) {
73- test_language_corpus ( seed , "ruby" ) ;
83+ test_language_corpus ( "ruby" , seed , None ) ;
7484}
7585
7686#[ test_with_seed( retry=10 , seed=* START_SEED , seed_fn=new_seed) ]
7787fn test_corpus_for_rust ( seed : usize ) {
78- test_language_corpus ( seed , "rust" ) ;
88+ test_language_corpus ( "rust" , seed , None ) ;
7989}
8090
81- fn test_language_corpus ( start_seed : usize , language_name : & str ) {
91+ fn test_language_corpus ( language_name : & str , start_seed : usize , skipped : Option < & [ & str ] > ) {
8292 let grammars_dir = fixtures_dir ( ) . join ( "grammars" ) ;
8393 let error_corpus_dir = fixtures_dir ( ) . join ( "error_corpus" ) ;
8494 let template_corpus_dir = fixtures_dir ( ) . join ( "template_corpus" ) ;
@@ -100,6 +110,8 @@ fn test_language_corpus(start_seed: usize, language_name: &str) {
100110 t
101111 } ) ) ;
102112
113+ let skipped = skipped. map ( |x| HashSet :: < & str > :: from_iter ( x. iter ( ) . map ( |x| * x) ) ) ;
114+
103115 let language = get_language ( language_name) ;
104116 let mut failure_count = 0 ;
105117
@@ -112,7 +124,14 @@ fn test_language_corpus(start_seed: usize, language_name: &str) {
112124
113125 println ! ( ) ;
114126 for ( test_index, test) in tests. iter ( ) . enumerate ( ) {
115- let test_name = format ! ( "{language_name} example - {}" , test. name) ;
127+ let test_name = format ! ( "{language_name} - {}" , test. name) ;
128+
129+ if let Some ( skipped) = skipped. as_ref ( ) {
130+ if skipped. contains ( test_name. as_str ( ) ) {
131+ println ! ( " {test_index}. {test_name} - SKIPPED" ) ;
132+ continue ;
133+ }
134+ }
116135
117136 println ! ( " {test_index}. {test_name}" ) ;
118137
@@ -129,10 +148,7 @@ fn test_language_corpus(start_seed: usize, language_name: &str) {
129148 }
130149
131150 if actual_output != test. output {
132- println ! (
133- "Incorrect initial parse for {} - {}" ,
134- language_name, test. name,
135- ) ;
151+ println ! ( "Incorrect initial parse for {test_name}" ) ;
136152 print_diff_key ( ) ;
137153 print_diff ( & actual_output, & test. output ) ;
138154 println ! ( "" ) ;
@@ -219,10 +235,7 @@ fn test_language_corpus(start_seed: usize, language_name: &str) {
219235 }
220236
221237 if actual_output != test. output {
222- println ! (
223- "Incorrect parse for {} - {} - seed {}" ,
224- language_name, test. name, seed
225- ) ;
238+ println ! ( "Incorrect parse for {test_name} - seed {seed}" ) ;
226239 print_diff_key ( ) ;
227240 print_diff ( & actual_output, & test. output ) ;
228241 println ! ( "" ) ;
0 commit comments