@@ -10,7 +10,7 @@ use crate::builder::Builder;
1010use std:: io:: { BufRead , BufReader , Write } ;
1111use std:: process:: { ChildStdout , Command , Stdio } ;
1212use std:: time:: Duration ;
13- use yansi_term :: Color ;
13+ use termcolor :: { Color , ColorSpec , WriteColor } ;
1414
1515const TERSE_TESTS_PER_LINE : usize = 88 ;
1616
@@ -139,16 +139,12 @@ impl<'a> Renderer<'a> {
139139 }
140140
141141 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 ( ) ;
142144 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?})" ) ;
151146 }
147+ println ! ( ) ;
152148 }
153149
154150 fn render_test_outcome_terse ( & mut self , outcome : Outcome < ' _ > , _: & TestOutcome ) {
@@ -163,7 +159,7 @@ impl<'a> Renderer<'a> {
163159 }
164160
165161 self . terse_tests_in_line += 1 ;
166- print ! ( "{}" , outcome. short ( self . builder ) ) ;
162+ self . builder . colored_stdout ( |stdout| outcome. write_short ( stdout ) ) . unwrap ( ) ;
167163 let _ = std:: io:: stdout ( ) . flush ( ) ;
168164 }
169165
@@ -208,10 +204,11 @@ impl<'a> Renderer<'a> {
208204 }
209205 }
210206
207+ print ! ( "\n test result: " ) ;
208+ self . builder . colored_stdout ( |stdout| outcome. write_long ( stdout) ) . unwrap ( ) ;
211209 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 ",
215212 suite. passed,
216213 suite. failed,
217214 suite. ignored,
@@ -276,25 +273,51 @@ enum Outcome<'a> {
276273}
277274
278275impl Outcome < ' _ > {
279- fn short ( & self , builder : & Builder < ' _ > ) -> String {
276+ fn write_short ( & self , writer : & mut dyn WriteColor ) -> Result < ( ) , std :: io :: Error > {
280277 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+ }
285294 }
295+ writer. reset ( )
286296 }
287297
288- fn long ( & self , builder : & Builder < ' _ > ) -> String {
298+ fn write_long ( & self , writer : & mut dyn WriteColor ) -> Result < ( ) , std :: io :: Error > {
289299 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+ }
296318 }
297319 }
320+ writer. reset ( )
298321 }
299322}
300323
0 commit comments