11import sys
22import trace
3+ from _colorize import get_colors # type: ignore[import-not-found]
34from typing import TYPE_CHECKING
45
56from .runtests import RunTests
@@ -59,19 +60,24 @@ def no_tests_run(self) -> bool:
5960
6061 def get_state (self , fail_env_changed : bool ) -> str :
6162 state = []
63+ ansi = get_colors ()
64+ green = ansi .GREEN
65+ red = ansi .BOLD_RED
66+ reset = ansi .RESET
67+ yellow = ansi .YELLOW
6268 if self .bad :
63- state .append (" FAILURE" )
69+ state .append (f" { red } FAILURE{ reset } " )
6470 elif fail_env_changed and self .env_changed :
65- state .append (" ENV CHANGED" )
71+ state .append (f" { yellow } ENV CHANGED{ reset } " )
6672 elif self .no_tests_run ():
67- state .append (" NO TESTS RAN" )
73+ state .append (f" { yellow } NO TESTS RAN{ reset } " )
6874
6975 if self .interrupted :
70- state .append (" INTERRUPTED" )
76+ state .append (f" { yellow } INTERRUPTED{ reset } " )
7177 if self .worker_bug :
72- state .append (" WORKER BUG" )
78+ state .append (f" { red } WORKER BUG{ reset } " )
7379 if not state :
74- state .append (" SUCCESS" )
80+ state .append (f" { green } SUCCESS{ reset } " )
7581
7682 return ', ' .join (state )
7783
@@ -197,27 +203,51 @@ def write_junit(self, filename: StrPath) -> None:
197203 f .write (s )
198204
199205 def display_result (self , tests : TestTuple , quiet : bool , print_slowest : bool ) -> None :
206+ ansi = get_colors ()
207+ green = ansi .GREEN
208+ red = ansi .BOLD_RED
209+ reset = ansi .RESET
210+ yellow = ansi .YELLOW
211+
200212 if print_slowest :
201213 self .test_times .sort (reverse = True )
202214 print ()
203- print (" 10 slowest tests:" )
215+ print (f" { yellow } 10 slowest tests:{ reset } " )
204216 for test_time , test in self .test_times [:10 ]:
205- print ("- %s: %s" % ( test , format_duration (test_time )) )
217+ print (f "- { test } : { format_duration (test_time )} " )
206218
207219 all_tests = []
208220 omitted = set (tests ) - self .get_executed ()
209221
210222 # less important
211- all_tests .append ((sorted (omitted ), "test" , "{} omitted:" ))
223+ all_tests .append (
224+ (sorted (omitted ), "test" , f"{ yellow } {{}} omitted:{ reset } " )
225+ )
212226 if not quiet :
213- all_tests .append ((self .skipped , "test" , "{} skipped:" ))
214- all_tests .append ((self .resource_denied , "test" , "{} skipped (resource denied):" ))
215- all_tests .append ((self .run_no_tests , "test" , "{} run no tests:" ))
227+ all_tests .append (
228+ (self .skipped , "test" , f"{ yellow } {{}} skipped:{ reset } " )
229+ )
230+ all_tests .append (
231+ (
232+ self .resource_denied ,
233+ "test" ,
234+ f"{ yellow } {{}} skipped (resource denied):{ reset } " ,
235+ )
236+ )
237+ all_tests .append (
238+ (self .run_no_tests , "test" , f"{ yellow } {{}} run no tests:{ reset } " )
239+ )
216240
217241 # more important
218- all_tests .append ((self .env_changed , "test" , "{} altered the execution environment (env changed):" ))
219- all_tests .append ((self .rerun , "re-run test" , "{}:" ))
220- all_tests .append ((self .bad , "test" , "{} failed:" ))
242+ all_tests .append (
243+ (
244+ self .env_changed ,
245+ "test" ,
246+ f"{ yellow } {{}} altered the execution environment (env changed):{ reset } " ,
247+ )
248+ )
249+ all_tests .append ((self .rerun , "re-run test" , f"{ yellow } {{}}:{ reset } " ))
250+ all_tests .append ((self .bad , "test" , f"{ red } {{}} failed:{ reset } " ))
221251
222252 for tests_list , count_text , title_format in all_tests :
223253 if tests_list :
@@ -229,26 +259,29 @@ def display_result(self, tests: TestTuple, quiet: bool, print_slowest: bool) ->
229259 if self .good and not quiet :
230260 print ()
231261 text = count (len (self .good ), "test" )
232- text = f"{ text } OK."
233- if ( self .is_all_good () and len (self .good ) > 1 ) :
262+ text = f"{ green } { text } OK.{ reset } "
263+ if self .is_all_good () and len (self .good ) > 1 :
234264 text = f"All { text } "
235265 print (text )
236266
237267 if self .interrupted :
238268 print ()
239- print (" Test suite interrupted by signal SIGINT." )
269+ print (f" { yellow } Test suite interrupted by signal SIGINT.{ reset } " )
240270
241271 def display_summary (self , first_runtests : RunTests , filtered : bool ) -> None :
242272 # Total tests
273+ ansi = get_colors ()
274+ red , reset , yellow = ansi .RED , ansi .RESET , ansi .YELLOW
275+
243276 stats = self .stats
244277 text = f'run={ stats .tests_run :,} '
245278 if filtered :
246279 text = f"{ text } (filtered)"
247280 report = [text ]
248281 if stats .failures :
249- report .append (f'failures={ stats .failures :,} ' )
282+ report .append (f'{ red } failures={ stats .failures :,} { reset } ' )
250283 if stats .skipped :
251- report .append (f'skipped={ stats .skipped :,} ' )
284+ report .append (f'{ yellow } skipped={ stats .skipped :,} { reset } ' )
252285 print (f"Total tests: { ' ' .join (report )} " )
253286
254287 # Total test files
@@ -263,14 +296,14 @@ def display_summary(self, first_runtests: RunTests, filtered: bool) -> None:
263296 if filtered :
264297 text = f"{ text } (filtered)"
265298 report = [text ]
266- for name , tests in (
267- ('failed' , self .bad ),
268- ('env_changed' , self .env_changed ),
269- ('skipped' , self .skipped ),
270- ('resource_denied' , self .resource_denied ),
271- ('rerun' , self .rerun ),
272- ('run_no_tests' , self .run_no_tests ),
299+ for name , tests , color in (
300+ ('failed' , self .bad , red ),
301+ ('env_changed' , self .env_changed , yellow ),
302+ ('skipped' , self .skipped , yellow ),
303+ ('resource_denied' , self .resource_denied , yellow ),
304+ ('rerun' , self .rerun , yellow ),
305+ ('run_no_tests' , self .run_no_tests , yellow ),
273306 ):
274307 if tests :
275- report .append (f'{ name } ={ len (tests )} ' )
308+ report .append (f'{ color } { name } ={ len (tests )} { reset } ' )
276309 print (f"Total test files: { ' ' .join (report )} " )
0 commit comments