@@ -83,7 +83,7 @@ impl Run for TestCommand {
83
83
84
84
impl TestCommand {
85
85
pub fn collect_testcases ( & self , manifest : & Manifest ) -> Vec < TestCase > {
86
- let mut tests = vec ! [ ] ;
86
+ let mut cases = vec ! [ ] ;
87
87
88
88
let verbose = self . verbose ;
89
89
@@ -94,7 +94,7 @@ impl TestCommand {
94
94
let name = format ! ( "examples/{}" , filename. to_string_lossy( ) ) ;
95
95
let output_file = manifest. out_dir . join ( "examples" ) . join ( filename) ;
96
96
let testcase = TestCase :: new ( name, case, output_file, TestType :: Compile , verbose) ;
97
- tests . push ( testcase) ;
97
+ cases . push ( testcase) ;
98
98
}
99
99
100
100
// Codegen tests
@@ -104,7 +104,7 @@ impl TestCommand {
104
104
let name = format ! ( "codegen/{}" , filename. to_string_lossy( ) ) ;
105
105
let output_file = manifest. out_dir . join ( "tests/codegen" ) . join ( filename) ;
106
106
let testcase = TestCase :: new ( name, case, output_file, TestType :: FileCheck , verbose) ;
107
- tests . push ( testcase) ;
107
+ cases . push ( testcase) ;
108
108
}
109
109
110
110
// Bless tests - the output should be the same as the last run
@@ -114,30 +114,37 @@ impl TestCommand {
114
114
let name = format ! ( "bless/{}" , filename. to_string_lossy( ) ) ;
115
115
let output_file = manifest. out_dir . join ( "tests/bless" ) . join ( filename) ;
116
116
let testcase = TestCase :: new ( name, case, output_file, TestType :: Bless , verbose) ;
117
- tests . push ( testcase) ;
117
+ cases . push ( testcase) ;
118
118
}
119
119
120
120
// Collect test-auxiliary
121
- let aux_use = regex:: Regex :: new ( r"^//@\s*aux-build:(?P<fname>.*)" ) . unwrap ( ) ;
122
- let mut auxiliary = vec ! [ ] ;
123
- for case in tests. iter ( ) {
124
- let source = std:: fs:: read_to_string ( & case. source ) . unwrap ( ) ;
125
- for cap in aux_use. captures_iter ( & source) {
121
+ let aux_use = regex:: Regex :: new ( r"(?m)//@\s*aux-build:(?P<fname>.*)" ) . unwrap ( ) ;
122
+ let mut auxiliaries = vec ! [ ] ;
123
+ for case in cases. iter ( ) {
124
+ let content = std:: fs:: read_to_string ( & case. source ) . unwrap ( ) ;
125
+ for cap in aux_use. captures_iter ( & content) {
126
+ println ! ( "{:?}" , case. source) ;
126
127
let fname = cap. name ( "fname" ) . unwrap ( ) . as_str ( ) ;
127
128
let source = Path :: new ( "tests/auxiliary" ) . join ( fname) ;
128
129
let filename = source. file_stem ( ) . unwrap ( ) ;
129
130
let name = format ! ( "auxiliary/{}" , filename. to_string_lossy( ) ) ;
131
+
132
+ // deduplication
133
+ if auxiliaries. iter ( ) . any ( |aux : & TestCase | aux. name == name) {
134
+ continue ;
135
+ }
136
+
130
137
let output_file = manifest. out_dir . join ( filename) ; // aux files are output to the base directory
131
138
let testcase =
132
139
TestCase :: new ( name, source, output_file, TestType :: CompileLib , verbose) ;
133
- auxiliary . push ( testcase) ;
140
+ auxiliaries . push ( testcase) ;
134
141
}
135
142
}
136
143
137
144
// Compile auxiliary before the tests
138
- let mut cases = auxiliary ;
139
- cases . extend ( tests ) ;
140
- cases
145
+ let mut testcases = auxiliaries ;
146
+ testcases . extend ( cases ) ;
147
+ testcases
141
148
}
142
149
}
143
150
0 commit comments