@@ -135,12 +135,20 @@ async fn run_serial(test_suite: &mut TestSuite, files: Vec<PathBuf>, engine: DbT
135
135
136
136
for file in files {
137
137
let engine = open_db ( & engine) . await ?;
138
+ let db_name = engine. engine_name ( ) . to_string ( ) ;
138
139
let runner = Runner :: new ( engine) ;
139
140
let filename = file. to_string_lossy ( ) . to_string ( ) ;
140
141
let test_case_name = filename. replace ( [ '/' , ' ' , '.' , '-' ] , "_" ) ;
141
- let case = match run_test_file ( & mut std:: io:: stdout ( ) , runner, & file) . await {
142
- Ok ( duration) => {
143
- let mut case = TestCase :: new ( test_case_name, TestCaseStatus :: success ( ) ) ;
142
+ let case = match run_test_file ( & mut std:: io:: stdout ( ) , runner, & file, & db_name) . await {
143
+ Ok ( ( skipped, duration) ) => {
144
+ let status = if skipped {
145
+ TestCaseStatus :: skipped ( )
146
+ } else {
147
+ TestCaseStatus :: success ( )
148
+ } ;
149
+
150
+ let mut case = TestCase :: new ( test_case_name, status) ;
151
+
144
152
case. set_time ( duration) ;
145
153
case. set_timestamp ( Local :: now ( ) ) ;
146
154
case. set_classname ( TEST_NAME ) ;
@@ -169,10 +177,11 @@ async fn run_serial(test_suite: &mut TestSuite, files: Vec<PathBuf>, engine: DbT
169
177
}
170
178
println ! ( ) ;
171
179
172
- let total = test_suite. tests ;
180
+ let total = test_suite. tests - test_suite . disabled ;
173
181
let failed = test_suite. failures + test_suite. errors ;
174
- let ok = test_suite . tests - failed;
182
+ let ok = total - failed;
175
183
println ! ( "{}: {}" , style( "[FAILED]" ) . red( ) . bold( ) , failed) ;
184
+ println ! ( "{}: {}" , style( "[SKIP ]" ) . yellow( ) . bold( ) , test_suite. disabled) ;
176
185
println ! ( "{}: {}" , style( "[OK ]" ) . green( ) . bold( ) , ok) ;
177
186
println ! ( "{}: {}%" , style( "[PASS ]" ) . blue( ) . bold( ) , ( ok * 100 ) / total) ;
178
187
println ! ( "{}: {:?}" , style( "[Elapsed]" ) . reverse( ) . bold( ) , start. elapsed( ) ) ;
@@ -186,12 +195,15 @@ async fn run_test_file<T: std::io::Write, D: AsyncDB>(
186
195
out : & mut T ,
187
196
mut runner : Runner < D > ,
188
197
filename : impl AsRef < Path > ,
189
- ) -> anyhow:: Result < Duration > {
198
+ db_name : & str ,
199
+ ) -> anyhow:: Result < ( bool , Duration ) > {
190
200
let filename = filename. as_ref ( ) ;
191
201
let records = sqllogictest:: parse_file ( filename) . map_err ( |e| anyhow ! ( "{:?}" , e) ) ?;
192
202
193
203
let mut begin_times = vec ! [ ] ;
194
204
let mut did_pop = false ;
205
+ let mut skipped = 0 ;
206
+ let mut total = 0 ;
195
207
196
208
writeln ! ( out, "{: <60} .. " , filename. to_string_lossy( ) ) ?;
197
209
flush ( out) . await ?;
@@ -212,11 +224,23 @@ async fn run_test_file<T: std::io::Write, D: AsyncDB>(
212
224
flush ( out) . await ?;
213
225
}
214
226
Record :: Injected ( Injected :: EndInclude ( file) ) => {
215
- finish_test_file ( out, & mut begin_times, & mut did_pop, file) . await ?;
227
+ finish_test_file ( out, & mut begin_times, & mut did_pop, file, total - skipped == 0 ) . await ?;
216
228
}
217
229
_ => { }
218
230
}
219
231
232
+ let will_skip = match & record {
233
+ Record :: Statement { conditions, .. } | Record :: Query { conditions, .. } => {
234
+ total += 1 ;
235
+ conditions. iter ( ) . any ( |c| c. should_skip ( db_name) )
236
+ }
237
+ _ => false ,
238
+ } ;
239
+
240
+ if will_skip {
241
+ skipped += 1 ;
242
+ }
243
+
220
244
runner
221
245
. run ( record)
222
246
. map_err ( |e| anyhow ! ( "{}" , e. display( console:: colors_enabled( ) ) ) )
@@ -225,20 +249,35 @@ async fn run_test_file<T: std::io::Write, D: AsyncDB>(
225
249
226
250
let duration = begin_times[ 0 ] . elapsed ( ) ;
227
251
228
- finish_test_file ( out, & mut begin_times, & mut did_pop, & filename. to_string_lossy ( ) ) . await ?;
252
+ let skipped = total - skipped == 0 ;
253
+
254
+ finish_test_file (
255
+ out,
256
+ & mut begin_times,
257
+ & mut did_pop,
258
+ & filename. to_string_lossy ( ) ,
259
+ skipped,
260
+ )
261
+ . await ?;
229
262
230
263
writeln ! ( out) ?;
231
264
232
- Ok ( duration)
265
+ Ok ( ( skipped , duration) )
233
266
}
234
267
235
268
async fn finish_test_file < T : std:: io:: Write > (
236
269
out : & mut T ,
237
270
time_stack : & mut Vec < Instant > ,
238
271
did_pop : & mut bool ,
239
272
file : & str ,
273
+ skipped : bool ,
240
274
) -> anyhow:: Result < ( ) > {
241
275
let begin_time = time_stack. pop ( ) . unwrap ( ) ;
276
+ let result = if skipped {
277
+ style ( "[SKIP]" ) . yellow ( ) . strikethrough ( ) . bold ( )
278
+ } else {
279
+ style ( "[OK]" ) . green ( ) . bold ( )
280
+ } ;
242
281
243
282
if * did_pop {
244
283
// start a new line if the result is not immediately after the item
@@ -248,17 +287,12 @@ async fn finish_test_file<T: std::io::Write>(
248
287
"| " . repeat( time_stack. len( ) ) ,
249
288
style( "[END]" ) . blue( ) . bold( ) ,
250
289
file,
251
- style ( "[OK]" ) . green ( ) . bold ( ) ,
290
+ result ,
252
291
begin_time. elapsed( ) . as_millis( )
253
292
) ?;
254
293
} else {
255
294
// otherwise, append time to the previous line
256
- write ! (
257
- out,
258
- "{} in {} ms" ,
259
- style( "[OK]" ) . green( ) . bold( ) ,
260
- begin_time. elapsed( ) . as_millis( )
261
- ) ?;
295
+ write ! ( out, "{} in {} ms" , result, begin_time. elapsed( ) . as_millis( ) ) ?;
262
296
}
263
297
264
298
* did_pop = true ;
@@ -392,7 +426,7 @@ async fn update_test_file<T: std::io::Write, D: AsyncDB>(
392
426
Record :: Injected ( Injected :: EndInclude ( file) ) => {
393
427
override_with_outfile ( filename, outfilename, outfile) ?;
394
428
stack. pop ( ) ;
395
- finish_test_file ( out, & mut begin_times, & mut did_pop, file) . await ?;
429
+ finish_test_file ( out, & mut begin_times, & mut did_pop, file, false ) . await ?;
396
430
}
397
431
_ => {
398
432
if * halt {
@@ -424,7 +458,7 @@ async fn update_test_file<T: std::io::Write, D: AsyncDB>(
424
458
}
425
459
}
426
460
427
- finish_test_file ( out, & mut begin_times, & mut did_pop, & filename. to_string_lossy ( ) ) . await ?;
461
+ finish_test_file ( out, & mut begin_times, & mut did_pop, & filename. to_string_lossy ( ) , false ) . await ?;
428
462
429
463
let Item {
430
464
filename,
0 commit comments