@@ -33,6 +33,7 @@ class CLIRunner:
3333 var _headless_mode_ignore := false
3434 var _runner_config := GdUnitRunnerConfig .new ()
3535 var _runner_config_file := ""
36+ var _debug_cmd_args : = PackedStringArray ()
3637 var _console := CmdConsole .new ()
3738 var _cmd_options := CmdOptions .new ([
3839 CmdOption .new (
@@ -105,9 +106,10 @@ class CLIRunner:
105106 func _ready () -> void :
106107 _state = INIT
107108 _report_dir = GdUnitFileAccess .current_dir () + "reports"
108- _executor = load ( "res://addons/gdUnit4/src/core/execution/ GdUnitTestSuiteExecutor.gd" ) .new ()
109+ _executor = GdUnitTestSuiteExecutor .new ()
109110 # stop checked first test failure to fail fast
110- _executor .fail_fast (true )
111+ @warning_ignore ("unsafe_cast" )
112+ (_executor as GdUnitTestSuiteExecutor ).fail_fast (true )
111113 if GdUnit4CSharpApiLoader .is_mono_supported ():
112114 prints ("GdUnit4Net version '%s ' loaded." % GdUnit4CSharpApiLoader .version ())
113115 _cs_executor = GdUnit4CSharpApiLoader .create_executor (self )
@@ -123,6 +125,7 @@ class CLIRunner:
123125 prints ("Finallize .. done" )
124126
125127
128+ @warning_ignore ("unsafe_method_access" )
126129 func _process (_delta :float ) -> void :
127130 match _state :
128131 INIT :
@@ -135,7 +138,8 @@ class CLIRunner:
135138 else :
136139 set_process (false )
137140 # process next test suite
138- var test_suite := _test_suites_to_process .pop_front () as Node
141+ var test_suite : Node = _test_suites_to_process .pop_front ()
142+
139143 if _cs_executor != null and _cs_executor .IsExecutable (test_suite ):
140144 _cs_executor .Execute (test_suite )
141145 await _cs_executor .ExecutionCompleted
@@ -185,6 +189,7 @@ class CLIRunner:
185189 "Disabled fail fast!" ,
186190 Color .DEEP_SKY_BLUE
187191 )
192+ @warning_ignore ("unsafe_method_access" )
188193 _executor .fail_fast (false )
189194
190195
@@ -199,13 +204,13 @@ class CLIRunner:
199204
200205 func show_version () -> void :
201206 _console .prints_color (
202- "Godot %s " % Engine .get_version_info ().get ("string" ),
207+ "Godot %s " % Engine .get_version_info ().get ("string" ) as String ,
203208 Color .DARK_SALMON
204209 )
205210 var config := ConfigFile .new ()
206211 config .load ("addons/gdUnit4/plugin.cfg" )
207212 _console .prints_color (
208- "GdUnit4 %s " % config .get_value ("plugin" , "version" ),
213+ "GdUnit4 %s " % config .get_value ("plugin" , "version" ) as String ,
209214 Color .DARK_SALMON
210215 )
211216 quit (RETURN_SUCCESS )
@@ -274,6 +279,12 @@ class CLIRunner:
274279 quit (RETURN_SUCCESS )
275280
276281
282+ func get_cmdline_args () -> PackedStringArray :
283+ if _debug_cmd_args .is_empty ():
284+ return OS .get_cmdline_args ()
285+ return _debug_cmd_args
286+
287+
277288 func init_gd_unit () -> void :
278289 _console .prints_color (
279290 """
@@ -284,7 +295,7 @@ class CLIRunner:
284295 ).new_line ()
285296
286297 var cmd_parser := CmdArgumentParser .new (_cmd_options , "GdUnitCmdTool.gd" )
287- var result := cmd_parser .parse (OS . get_cmdline_args ())
298+ var result := cmd_parser .parse (get_cmdline_args ())
288299 if result .is_error ():
289300 show_options ()
290301 _console .prints_error (result .error_message ())
@@ -297,7 +308,8 @@ class CLIRunner:
297308 return
298309 # build runner config by given commands
299310 var commands :Array [CmdCommand ] = []
300- commands .append_array (result .value ())
311+ @warning_ignore ("unsafe_cast" )
312+ commands .append_array (result .value () as Array )
301313 result = (
302314 CmdCommandHandler .new (_cmd_options )
303315 .register_cb ("-help" , Callable (self , "show_help" ))
@@ -412,7 +424,9 @@ class CLIRunner:
412424 # if no tests skipped test the complete suite is skipped
413425 if skipped_tests .is_empty ():
414426 _console .prints_warning ("Mark test suite '%s ' as skipped!" % suite_to_skip )
427+ @warning_ignore ("unsafe_property_access" )
415428 test_suite .__is_skipped = true
429+ @warning_ignore ("unsafe_property_access" )
416430 test_suite .__skip_reason = skip_reason
417431 else :
418432 # skip tests
@@ -443,10 +457,8 @@ class CLIRunner:
443457 func _on_gdunit_event (event : GdUnitEvent ) -> void :
444458 match event .type ():
445459 GdUnitEvent .INIT :
446- _report = GdUnitHtmlReport .new (_report_dir )
460+ _report = GdUnitHtmlReport .new (_report_dir , _report_max )
447461 GdUnitEvent .STOP :
448- if _report == null :
449- _report = GdUnitHtmlReport .new (_report_dir )
450462 var report_path := _report .write ()
451463 _report .delete_history (_report_max )
452464 JUnitXmlReport .new (_report ._report_path , _report .iteration ()).write (_report )
@@ -464,45 +476,31 @@ class CLIRunner:
464476 Color .CORNFLOWER_BLUE
465477 )
466478 GdUnitEvent .TESTSUITE_BEFORE :
467- _report .add_testsuite_report (
468- GdUnitTestSuiteReport .new (event .resource_path (), event .suite_name (), event .total_count ())
469- )
479+ _report .add_testsuite_report (event .resource_path (), event .suite_name (), event .total_count ())
470480 GdUnitEvent .TESTSUITE_AFTER :
471- _report .update_test_suite_report (
481+ _report .add_testsuite_reports (
472482 event .resource_path (),
473- event .elapsed_time (),
474- event .is_error (),
475- event .is_failed (),
476- event .is_warning (),
477- event .is_skipped (),
478- event .skipped_count (),
483+ event .error_count (),
479484 event .failed_count (),
480485 event .orphan_nodes (),
486+ event .elapsed_time (),
481487 event .reports ()
482488 )
483489 GdUnitEvent .TESTCASE_BEFORE :
484- _report .add_testcase_report (
485- event .resource_path (),
486- GdUnitTestCaseReport .new (
487- event .resource_path (),
488- event .suite_name (),
489- event .test_name ()
490- )
491- )
490+ _report .add_testcase (event .resource_path (), event .suite_name (), event .test_name ())
492491 GdUnitEvent .TESTCASE_AFTER :
493- var test_report := GdUnitTestCaseReport .new (
494- event .resource_path (),
495- event .suite_name (),
492+ _report .set_testcase_counters (event .resource_path (),
496493 event .test_name (),
497494 event .is_error (),
498- event .is_failed (),
499495 event .failed_count (),
500496 event .orphan_nodes (),
501497 event .is_skipped (),
502- event .reports (),
503- event .elapsed_time ()
504- )
505- _report .update_testcase_report (event .resource_path (), test_report )
498+ event .is_flaky (),
499+ event .elapsed_time ())
500+ _report .add_testcase_reports (event .resource_path (), event .test_name (), event .reports ())
501+ GdUnitEvent .TESTCASE_STATISTICS :
502+ _report .update_testsuite_counters (event .resource_path (), event .is_error (), event .failed_count (), event .orphan_nodes (),\
503+ event .is_skipped (), event .is_flaky (), event .elapsed_time ())
506504 print_status (event )
507505
508506
@@ -556,11 +554,12 @@ class CLIRunner:
556554 _print_failure_report (event .reports ())
557555 _print_status (event )
558556 _console .prints_color (
559- "Statistics: | %d tests cases | %d error | %d failed | %d skipped | %d orphans |\n "
557+ "Statistics: | %d tests cases | %d error | %d failed | %d flaky | %d skipped | %d orphans |\n "
560558 % [
561559 _report .test_count (),
562560 _report .error_count (),
563561 _report .failure_count (),
562+ _report .flaky_count (),
564563 _report .skipped_count (),
565564 _report .orphan_count ()
566565 ],
@@ -587,14 +586,22 @@ class CLIRunner:
587586
588587
589588 func _print_status (event : GdUnitEvent ) -> void :
590- if event .is_skipped ():
589+ if event .is_flaky () and event .is_success ():
590+ var retries :int = event .statistic (GdUnitEvent .RETRY_COUNT )
591+ _console .print_color ("FLAKY (%d retries)" % retries , Color .GREEN_YELLOW , CmdConsole .BOLD | CmdConsole .ITALIC )
592+ elif event .is_success ():
593+ _console .print_color ("PASSED" , Color .FOREST_GREEN , CmdConsole .BOLD )
594+ elif event .is_skipped ():
591595 _console .print_color ("SKIPPED" , Color .GOLDENROD , CmdConsole .BOLD | CmdConsole .ITALIC )
592596 elif event .is_failed () or event .is_error ():
593- _console .print_color ("FAILED" , Color .FIREBRICK , CmdConsole .BOLD )
594- elif event .orphan_nodes () > 0 :
595- _console .print_color ("PASSED" , Color .GOLDENROD , CmdConsole .BOLD | CmdConsole .UNDERLINE )
596- else :
597- _console .print_color ("PASSED" , Color .FOREST_GREEN , CmdConsole .BOLD )
597+ var retries :int = event .statistic (GdUnitEvent .RETRY_COUNT )
598+ if retries > 1 :
599+ _console .print_color ("FAILED (retry %d )" % retries , Color .FIREBRICK , CmdConsole .BOLD )
600+ else :
601+ _console .print_color ("FAILED" , Color .FIREBRICK , CmdConsole .BOLD )
602+ elif event .is_warning ():
603+ _console .print_color ("WARNING" , Color .GOLDENROD , CmdConsole .BOLD | CmdConsole .UNDERLINE )
604+
598605 _console .prints_color (
599606 " %s " % LocalTime .elapsed (event .elapsed_time ()), Color .CORNFLOWER_BLUE
600607 )
0 commit comments