11use std:: fs:: File ;
2- use std:: path:: PathBuf ;
2+ use std:: path:: { Path , PathBuf } ;
33
44use anstream:: { eprint as print, eprintln as println} ;
55use clap:: Args ;
@@ -65,24 +65,15 @@ impl Run for TestCommand {
6565
6666impl TestCommand {
6767 pub fn collect_testcases ( & self , manifest : & Manifest ) -> Vec < TestCase > {
68- let mut result = vec ! [ ] ;
69-
70- // Test auxiliary (should compile first)
71- for case in glob ( "tests/auxiliary/*.rs" ) . unwrap ( ) {
72- let case = case. unwrap ( ) ;
73- let filename = case. file_stem ( ) . unwrap ( ) ;
74- let name = format ! ( "auxiliary/{}" , filename. to_string_lossy( ) ) ;
75- let output_file = manifest. out_dir . join ( filename) ;
76- result. push ( TestCase { name, source : case, output_file, test : TestType :: CompileLib } )
77- }
68+ let mut tests = vec ! [ ] ;
7869
7970 // Examples
8071 for case in glob ( "examples/*.rs" ) . unwrap ( ) {
8172 let case = case. unwrap ( ) ;
8273 let filename = case. file_stem ( ) . unwrap ( ) ;
8374 let name = format ! ( "examples/{}" , filename. to_string_lossy( ) ) ;
8475 let output_file = manifest. out_dir . join ( "examples" ) . join ( filename) ;
85- result . push ( TestCase { name, source : case, output_file, test : TestType :: Compile } )
76+ tests . push ( TestCase { name, source : case, output_file, test : TestType :: Compile } )
8677 }
8778
8879 // Codegen tests
@@ -91,7 +82,7 @@ impl TestCommand {
9182 let filename = case. file_stem ( ) . unwrap ( ) ;
9283 let name = format ! ( "codegen/{}" , filename. to_string_lossy( ) ) ;
9384 let output_file = manifest. out_dir . join ( "tests/codegen" ) . join ( filename) ;
94- result . push ( TestCase { name, source : case, output_file, test : TestType :: FileCheck } )
85+ tests . push ( TestCase { name, source : case, output_file, test : TestType :: FileCheck } )
9586 }
9687
9788 // Bless tests - the output should be the same as the last run
@@ -100,10 +91,28 @@ impl TestCommand {
10091 let filename = case. file_stem ( ) . unwrap ( ) ;
10192 let name = format ! ( "bless/{}" , filename. to_string_lossy( ) ) ;
10293 let output_file = manifest. out_dir . join ( "tests/bless" ) . join ( filename) ;
103- result. push ( TestCase { name, source : case, output_file, test : TestType :: Bless } )
94+ tests. push ( TestCase { name, source : case, output_file, test : TestType :: Bless } )
95+ }
96+
97+ // Collect test-auxiliary
98+ let aux_use = regex:: Regex :: new ( r"^//@\s*aux-build:(?P<fname>.*)" ) . unwrap ( ) ;
99+ let mut auxiliary = vec ! [ ] ;
100+ for case in tests. iter ( ) {
101+ let source = std:: fs:: read_to_string ( & case. source ) . unwrap ( ) ;
102+ for cap in aux_use. captures_iter ( & source) {
103+ let fname = cap. name ( "fname" ) . unwrap ( ) . as_str ( ) ;
104+ let source = Path :: new ( "tests/auxiliary" ) . join ( fname) ;
105+ let filename = source. file_stem ( ) . unwrap ( ) ;
106+ let name = format ! ( "auxiliary/{}" , filename. to_string_lossy( ) ) ;
107+ let output_file = manifest. out_dir . join ( filename) ; // aux files are output to the base directory
108+ auxiliary. push ( TestCase { name, source, output_file, test : TestType :: CompileLib } )
109+ }
104110 }
105111
106- result
112+ // Compile auxiliary before the tests
113+ let mut cases = auxiliary;
114+ cases. extend ( tests) ;
115+ cases
107116 }
108117}
109118
0 commit comments