184 lines
4.6 KiB
GDScript
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])
|
|
|