@@ -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,36 @@ 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"\s* //@\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
126
let fname = cap. name ( "fname" ) . unwrap ( ) . as_str ( ) ;
127
127
let source = Path :: new ( "tests/auxiliary" ) . join ( fname) ;
128
128
let filename = source. file_stem ( ) . unwrap ( ) ;
129
129
let name = format ! ( "auxiliary/{}" , filename. to_string_lossy( ) ) ;
130
+
131
+ // deduplication
132
+ if auxiliaries. iter ( ) . any ( |aux : & TestCase | aux. name == name) {
133
+ continue ;
134
+ }
135
+
130
136
let output_file = manifest. out_dir . join ( filename) ; // aux files are output to the base directory
131
137
let testcase =
132
138
TestCase :: new ( name, source, output_file, TestType :: CompileLib , verbose) ;
133
- auxiliary . push ( testcase) ;
139
+ auxiliaries . push ( testcase) ;
134
140
}
135
141
}
136
142
137
143
// Compile auxiliary before the tests
138
- let mut cases = auxiliary ;
139
- cases . extend ( tests ) ;
140
- cases
144
+ let mut testcases = auxiliaries ;
145
+ testcases . extend ( cases ) ;
146
+ testcases
141
147
}
142
148
}
143
149
0 commit comments