@@ -10,7 +10,7 @@ use crate::builder::Builder;
10
10
use std:: io:: { BufRead , BufReader , Write } ;
11
11
use std:: process:: { ChildStdout , Command , Stdio } ;
12
12
use std:: time:: Duration ;
13
- use yansi_term :: Color ;
13
+ use termcolor :: { Color , ColorSpec , WriteColor } ;
14
14
15
15
const TERSE_TESTS_PER_LINE : usize = 88 ;
16
16
@@ -139,16 +139,12 @@ impl<'a> Renderer<'a> {
139
139
}
140
140
141
141
fn render_test_outcome_verbose ( & self , outcome : Outcome < ' _ > , test : & TestOutcome ) {
142
+ print ! ( "test {} ... " , test. name) ;
143
+ self . builder . colored_stdout ( |stdout| outcome. write_long ( stdout) ) . unwrap ( ) ;
142
144
if let Some ( exec_time) = test. exec_time {
143
- println ! (
144
- "test {} ... {} (in {:.2?})" ,
145
- test. name,
146
- outcome. long( self . builder) ,
147
- Duration :: from_secs_f64( exec_time)
148
- ) ;
149
- } else {
150
- println ! ( "test {} ... {}" , test. name, outcome. long( self . builder) ) ;
145
+ print ! ( " ({exec_time:.2?})" ) ;
151
146
}
147
+ println ! ( ) ;
152
148
}
153
149
154
150
fn render_test_outcome_terse ( & mut self , outcome : Outcome < ' _ > , _: & TestOutcome ) {
@@ -163,7 +159,7 @@ impl<'a> Renderer<'a> {
163
159
}
164
160
165
161
self . terse_tests_in_line += 1 ;
166
- print ! ( "{}" , outcome. short ( self . builder ) ) ;
162
+ self . builder . colored_stdout ( |stdout| outcome. write_short ( stdout ) ) . unwrap ( ) ;
167
163
let _ = std:: io:: stdout ( ) . flush ( ) ;
168
164
}
169
165
@@ -208,10 +204,11 @@ impl<'a> Renderer<'a> {
208
204
}
209
205
}
210
206
207
+ print ! ( "\n test result: " ) ;
208
+ self . builder . colored_stdout ( |stdout| outcome. write_long ( stdout) ) . unwrap ( ) ;
211
209
println ! (
212
- "\n test result: {}. {} passed; {} failed; {} ignored; {} measured; \
213
- {} filtered out; finished in {:.2?}\n ",
214
- outcome. long( self . builder) ,
210
+ ". {} passed; {} failed; {} ignored; {} measured; {} filtered out; \
211
+ finished in {:.2?}\n ",
215
212
suite. passed,
216
213
suite. failed,
217
214
suite. ignored,
@@ -276,25 +273,51 @@ enum Outcome<'a> {
276
273
}
277
274
278
275
impl Outcome < ' _ > {
279
- fn short ( & self , builder : & Builder < ' _ > ) -> String {
276
+ fn write_short ( & self , writer : & mut dyn WriteColor ) -> Result < ( ) , std :: io :: Error > {
280
277
match self {
281
- Outcome :: Ok => builder. color_for_stdout ( Color :: Green , "." ) ,
282
- Outcome :: BenchOk => builder. color_for_stdout ( Color :: Cyan , "b" ) ,
283
- Outcome :: Failed => builder. color_for_stdout ( Color :: Red , "F" ) ,
284
- Outcome :: Ignored { .. } => builder. color_for_stdout ( Color :: Yellow , "i" ) ,
278
+ Outcome :: Ok => {
279
+ writer. set_color ( & ColorSpec :: new ( ) . set_fg ( Some ( Color :: Green ) ) ) ?;
280
+ write ! ( writer, "." ) ?;
281
+ }
282
+ Outcome :: BenchOk => {
283
+ writer. set_color ( & ColorSpec :: new ( ) . set_fg ( Some ( Color :: Cyan ) ) ) ?;
284
+ write ! ( writer, "b" ) ?;
285
+ }
286
+ Outcome :: Failed => {
287
+ writer. set_color ( & ColorSpec :: new ( ) . set_fg ( Some ( Color :: Red ) ) ) ?;
288
+ write ! ( writer, "F" ) ?;
289
+ }
290
+ Outcome :: Ignored { .. } => {
291
+ writer. set_color ( & ColorSpec :: new ( ) . set_fg ( Some ( Color :: Yellow ) ) ) ?;
292
+ write ! ( writer, "i" ) ?;
293
+ }
285
294
}
295
+ writer. reset ( )
286
296
}
287
297
288
- fn long ( & self , builder : & Builder < ' _ > ) -> String {
298
+ fn write_long ( & self , writer : & mut dyn WriteColor ) -> Result < ( ) , std :: io :: Error > {
289
299
match self {
290
- Outcome :: Ok => builder. color_for_stdout ( Color :: Green , "ok" ) ,
291
- Outcome :: BenchOk => builder. color_for_stdout ( Color :: Cyan , "benchmarked" ) ,
292
- Outcome :: Failed => builder. color_for_stdout ( Color :: Red , "FAILED" ) ,
293
- Outcome :: Ignored { reason : None } => builder. color_for_stdout ( Color :: Yellow , "ignored" ) ,
294
- Outcome :: Ignored { reason : Some ( reason) } => {
295
- builder. color_for_stdout ( Color :: Yellow , & format ! ( "ignored, {reason}" ) )
300
+ Outcome :: Ok => {
301
+ writer. set_color ( & ColorSpec :: new ( ) . set_fg ( Some ( Color :: Green ) ) ) ?;
302
+ write ! ( writer, "ok" ) ?;
303
+ }
304
+ Outcome :: BenchOk => {
305
+ writer. set_color ( & ColorSpec :: new ( ) . set_fg ( Some ( Color :: Cyan ) ) ) ?;
306
+ write ! ( writer, "benchmarked" ) ?;
307
+ }
308
+ Outcome :: Failed => {
309
+ writer. set_color ( & ColorSpec :: new ( ) . set_fg ( Some ( Color :: Red ) ) ) ?;
310
+ write ! ( writer, "FAILED" ) ?;
311
+ }
312
+ Outcome :: Ignored { reason } => {
313
+ writer. set_color ( & ColorSpec :: new ( ) . set_fg ( Some ( Color :: Yellow ) ) ) ?;
314
+ write ! ( writer, "ignored" ) ?;
315
+ if let Some ( reason) = reason {
316
+ write ! ( writer, ", {reason}" ) ?;
317
+ }
296
318
}
297
319
}
320
+ writer. reset ( )
298
321
}
299
322
}
300
323
0 commit comments