Files
game-cards/addons/gut/test/unit/test_gut_runner.gd
2026-05-29 09:16:10 +08:00

184 lines
4.6 KiB
GDScript

extends GutTest
var GutRunner = load('res://addons/gut/gui/GutRunner.tscn')
func before_all():
register_inner_classes(get_script())
func test_can_make_one():
var gr = autofree(GutRunner.instantiate())
assert_not_null(gr)
class TestQuit:
extends GutInternalTester
class PostRunHook:
extends GutHookScript
var use_this_exit_code = 0
func run():
set_exit_code(use_this_exit_code)
# func should_skip_script():
# return "Skipping until all the stupid globals are worked out."
var GutRunner = load('res://addons/gut/gui/GutRunner.tscn')
var PDblRunner = null
# Added .5s to end of GUT run so this had to be introduced and bumped up.
const MIN_FRAMES_TO_RUN_TESTS = 50
var _created_runners = []
func before_all():
verbose = true
PDblRunner = partial_double(GutRunner)
func after_each():
for r in _created_runners:
if(r.error_tracker != GutUtils.get_error_tracker()):
GutErrorTracker.deregister_logger(r.error_tracker)
_created_runners.clear()
func _create_runner():
verbose = true
var gr = PDblRunner.instantiate()
gr.lgr = GutLogger.new()
gr.error_tracker = GutErrorTracker.new()
gr.gut_config = GutUtils.GutConfig.new()
gr.gut_config.options.dirs = ['res://not_real']
stub(gr, 'quit').to_do_nothing()
gr.gut = new_partial_double_gut(verbose)
# Use this script's error tracker so errors in tests actually
# cause failures.
gr.gut.error_tracker = gut.error_tracker
stub(gr.gut.add_directory).to_do_nothing()
_created_runners.append(gr)
return gr
func test_does_not_quit_when_gut_config_does_not_say_to():
if(GutUtils.is_headless()):
pending("cannot be tested when run headless.")
return
var gr = _create_runner()
add_child_autofree(gr)
gr.run_tests()
await wait_physics_frames(MIN_FRAMES_TO_RUN_TESTS)
assert_not_called(gr, 'quit')
func test_quits_with_exit_code_0_when_should_exit_and_everything_ok():
var gr = _create_runner()
gr.gut_config.options.should_exit = true
add_child_autofree(gr)
gr.run_tests()
await wait_physics_frames(MIN_FRAMES_TO_RUN_TESTS)
assert_called(gr, 'quit', [0])
func test_quits_with_exit_code_0_when_exit_on_success_and_everything_ok():
var gr = _create_runner()
gr.gut_config.options.should_exit_on_success = true
add_child_autofree(gr)
gr.run_tests()
await wait_physics_frames(MIN_FRAMES_TO_RUN_TESTS)
assert_called(gr, 'quit', [0])
func test_sets_exit_code_from_post_run_hook():
var hook_inst = PostRunHook.new()
hook_inst.use_this_exit_code = 456
var gr = _create_runner()
gr.gut_config.options.should_exit = true
stub(gr.gut, 'get_post_run_script_instance').to_return(hook_inst)
add_child_autofree(gr)
gr.run_tests()
await wait_physics_frames(MIN_FRAMES_TO_RUN_TESTS)
assert_called(gr, 'quit', [456])
func test_exit_code_is_1_when_any_test_fails():
var gr = _create_runner()
gr.gut_config.options.should_exit = true
stub(gr.gut, 'get_fail_count').to_return(1)
add_child_autofree(gr)
gr.run_tests()
await wait_physics_frames(MIN_FRAMES_TO_RUN_TESTS)
assert_called(gr, 'quit', [1])
func test_hook_script_overrides_fail_count_exit_code():
var hook_inst = PostRunHook.new()
hook_inst.use_this_exit_code = 456
var gr = _create_runner()
gr.gut_config.options.should_exit = true
stub(gr.gut, 'get_post_run_script_instance').to_return(hook_inst)
stub(gr.gut, 'get_fail_count').to_return(99)
add_child_autofree(gr)
gr.run_tests()
await wait_physics_frames(MIN_FRAMES_TO_RUN_TESTS)
assert_called(gr, 'quit', [456])
func test_does_not_quit_when_exit_on_success_but_has_failing_tests():
if(GutUtils.is_headless()):
pending("cannot be tested when run headless.")
return
var gr = _create_runner()
gr.gut_config.options.should_exit_on_success = true
stub(gr.gut, 'get_fail_count').to_return(1)
add_child_autofree(gr)
gr.run_tests()
await wait_physics_frames(MIN_FRAMES_TO_RUN_TESTS)
assert_not_called(gr, 'quit')
func test_quits_when_exit_on_success_and_has_risky_tests():
var gr = _create_runner()
gr.gut_config.options.should_exit_on_success = true
stub(gr.gut, 'get_pending_count').to_return(1)
add_child_autofree(gr)
gr.run_tests()
await wait_physics_frames(MIN_FRAMES_TO_RUN_TESTS)
assert_called(gr, 'quit', [0])
func test_quits_with_exit_code_1_when_no_directories_are_configured():
var gr = _create_runner()
gr.gut_config.options.should_exit = true
gr.gut_config.options.dirs = []
add_child_autofree(gr)
gr.run_tests()
await wait_physics_frames(MIN_FRAMES_TO_RUN_TESTS)
assert_logger_errored(gr.lgr)
assert_push_error("directories configured,")
assert_called(gr, 'quit', [1])