1
1
use std:: fs:: File ;
2
- use std:: path:: PathBuf ;
2
+ use std:: path:: { Path , PathBuf } ;
3
3
4
4
use anstream:: { eprint as print, eprintln as println} ;
5
5
use clap:: Args ;
@@ -65,24 +65,15 @@ impl Run for TestCommand {
65
65
66
66
impl TestCommand {
67
67
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 ! [ ] ;
78
69
79
70
// Examples
80
71
for case in glob ( "examples/*.rs" ) . unwrap ( ) {
81
72
let case = case. unwrap ( ) ;
82
73
let filename = case. file_stem ( ) . unwrap ( ) ;
83
74
let name = format ! ( "examples/{}" , filename. to_string_lossy( ) ) ;
84
75
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 } )
86
77
}
87
78
88
79
// Codegen tests
@@ -91,7 +82,7 @@ impl TestCommand {
91
82
let filename = case. file_stem ( ) . unwrap ( ) ;
92
83
let name = format ! ( "codegen/{}" , filename. to_string_lossy( ) ) ;
93
84
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 } )
95
86
}
96
87
97
88
// Bless tests - the output should be the same as the last run
@@ -100,10 +91,28 @@ impl TestCommand {
100
91
let filename = case. file_stem ( ) . unwrap ( ) ;
101
92
let name = format ! ( "bless/{}" , filename. to_string_lossy( ) ) ;
102
93
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
+ }
104
110
}
105
111
106
- result
112
+ // Compile auxiliary before the tests
113
+ let mut cases = auxiliary;
114
+ cases. extend ( tests) ;
115
+ cases
107
116
}
108
117
}
109
118
0 commit comments