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

222 lines
7.2 KiB
GDScript

extends GutInternalTester
func should_skip_script():
return skip_if_debugger_active()
var _added_tracker
func before_all():
gut.error_tracker.disabled = true
func before_each():
_added_tracker = GutErrorTracker.new()
GutErrorTracker.register_logger(_added_tracker)
_added_tracker.errors.items.clear()
func after_each():
GutErrorTracker.deregister_logger(_added_tracker)
_added_tracker = null
func after_all():
gut.error_tracker.disabled = false
func _divide_these(a, b):
return a / b
func _assert_a_equals_b(a, b, extra_text):
assert(a == b, extra_text)
func test_can_make_one():
var inst = GutErrorTracker.new()
assert_not_null(inst)
func test_add_gut_error_adds_error_to_none():
var inst = GutErrorTracker.new()
var err = inst.add_gut_error('this is an error')
assert_eq(err.code, 'this is an error', 'code')
assert_eq(err.error_type, GutUtils.GUT_ERROR_TYPE, 'error_type')
assert_true(err.is_gut_error(), 'is_gut_error')
assert_eq(inst.errors.items[GutUtils.NO_TEST][0], err, 'tracked')
assert_false(err.is_engine_error(), 'is_engine_error')
func test_when_adding_gut_error_during_a_test_addtional_info_filled_in():
var inst = GutErrorTracker.new()
inst.start_test('test_when_adding_gut_error_during_a_test_addtional_info_filled_in')
var err = inst.add_gut_error('error in a test')
assert_eq(err.function, 'test_when_adding_gut_error_during_a_test_addtional_info_filled_in')
assert_eq(err.file, "res://test/unit/test_error_tracker.gd")
# use between because the line number keeps changing as I work and a range
# is a good enough check that we are getting an expected value back.
assert_between(err.line, 40, 60, 'this can break if this file changes')
assert_eq(err.backtrace[0].function, 'test_when_adding_gut_error_during_a_test_addtional_info_filled_in')
func test_when_engine_error_data():
_divide_these(22, 'foo')
var last_error = _added_tracker.errors.items[GutUtils.NO_TEST][0]
assert_not_null(last_error)
assert_true(last_error.is_engine_error())
func test_when_push_error_data():
push_error("manually pushed error")
var last_error = _added_tracker.errors.items[GutUtils.NO_TEST][0]
assert_not_null(last_error)
assert_true(last_error.is_push_error())
# func test_assert_fails_data():
# _assert_a_equals_b('foo', 'bar', '')
# var err = _added_tracker.errors.items[GutErrorTracker.NO_TEST][0]
# assert_not_null(err)
# assert_true(err.is_assert())
# assert_eq(err.error_type, Logger.ERROR_TYPE_SCRIPT)
# func test_assert_fails_data_with_assert_text():
# _assert_a_equals_b('foo', 'bar', '')
# var err = _added_tracker.errors.items[GutErrorTracker.NO_TEST][0]
# assert_true(err.is_assert())
func test_should_fail_true_for_gut_error():
_added_tracker.treat_gut_errors_as = GutUtils.TREAT_AS.NOTHING
_added_tracker.start_test('test')
_added_tracker.add_gut_error('this is a gut error')
assert_false(_added_tracker.should_test_fail_from_errors('test'))
func test_should_fail_true_for_gut_error_when_flag_set():
# _added_tracker.treat_gut_errors_as = GutErrorTracker.TREAT_AS.FAILURE
_added_tracker.start_test('test')
_added_tracker.add_gut_error('this is a gut error')
assert_true(_added_tracker.should_test_fail_from_errors('test'))
func test_should_fail_false_for_engine_error():
_added_tracker.treat_engine_errors_as = GutUtils.TREAT_AS.NOTHING
_added_tracker.start_test('test')
_divide_these('word', 'sentence')
assert_false(_added_tracker.should_test_fail_from_errors('test'))
func test_should_fail_true_for_engine_error_when_flag_set():
# _added_tracker.treat_engine_errors_as = GutErrorTracker.TREAT_AS.FAILURE
_added_tracker.start_test('test')
_divide_these('word', 'sentence')
assert_true(_added_tracker.should_test_fail_from_errors('test'))
func test_should_fail_false_for_push_error():
_added_tracker.treat_push_error_as = GutUtils.TREAT_AS.NOTHING
_added_tracker.start_test('test')
push_error("this is a push error")
assert_false(_added_tracker.should_test_fail_from_errors('test'))
func test_should_fail_true_for_push_error_when_flag_set():
# _added_tracker.treat_push_error_as = GutErrorTracker.TREAT_AS.FAILURE
_added_tracker.start_test('test')
push_error("this is a push error")
assert_true(_added_tracker.should_test_fail_from_errors('test'))
func test_should_fail_finds_second_error():
# _added_tracker.treat_gut_errors_as = GutErrorTracker.TREAT_AS.FAILURE
_added_tracker.start_test('test')
push_error('this is the first error')
_added_tracker.add_gut_error('this is a gut error')
assert_true(_added_tracker.should_test_fail_from_errors('test'))
func test_should_fail_does_not_push_for_engine_error():
_added_tracker.treat_push_error_as = GutUtils.TREAT_AS.NOTHING
_added_tracker.treat_gut_errors_as = GutUtils.TREAT_AS.NOTHING
_added_tracker.start_test('test')
push_error('this is the first error')
_added_tracker.add_gut_error('this is a gut error')
assert_false(_added_tracker.should_test_fail_from_errors('test'))
# var fail_text_params = ParameterFactory.named_parameters(
# ['error_fail', 'gut_fail', 'push_fail', 'do_error', 'do_push', 'do_gut'],
# [GutErrorTracker.TREAT_AS.FAILURE, GutErrorTracker.TREAT_AS.NOTHING, GutErrorTracker.TREAT_AS.NOTHING,
# true, false, false]
# )
# func test_fail_text(params=use_parameters(fail_text_params)):
# _added_tracker.treat_engine_errors_as = params.error_fail
func test_fail_text_includes_all_by_default():
push_error('push nope')
_added_tracker.add_gut_error('gut error nope')
_divide_these('nope', 44)
var error_text = _added_tracker.get_fail_text_for_errors()
assert_string_contains(error_text, 'Invalid operands')
assert_string_contains(error_text, 'gut error nope')
assert_string_contains(error_text, 'push nope')
func test_fail_text_can_exclude_push():
_added_tracker.treat_push_error_as = GutUtils.TREAT_AS.NOTHING
push_error('push nope')
_added_tracker.add_gut_error('gut error nope')
_divide_these('nope', 44)
var error_text = _added_tracker.get_fail_text_for_errors()
assert_string_contains(error_text, 'Invalid operands')
assert_string_contains(error_text, 'gut error nope')
assert_eq(error_text.find("push nope"), -1)
func test_fail_text_can_exclude_engine_error():
_added_tracker.treat_engine_errors_as = GutUtils.TREAT_AS.NOTHING
push_error('push nope')
_added_tracker.add_gut_error('gut error nope')
_divide_these('nope', 44)
var error_text = _added_tracker.get_fail_text_for_errors()
assert_eq(error_text.find('Invalid operands'), -1)
assert_string_contains(error_text, 'gut error nope')
assert_string_contains(error_text, 'push nope')
func test_fail_text_can_exclude_gut_error():
_added_tracker.treat_gut_errors_as = GutUtils.TREAT_AS.NOTHING
push_error('push nope')
_added_tracker.add_gut_error('gut error nope')
_divide_these('nope', 44)
var error_text = _added_tracker.get_fail_text_for_errors()
assert_string_contains(error_text, 'Invalid operands')
assert_eq(error_text.find('gut error nope'), -1)
assert_string_contains(error_text, 'push nope')
func test_should_fail_false_for_push_warning():
push_warning("Warning, live without warning")
assert_false(_added_tracker.should_test_fail_from_errors(GutUtils.NO_TEST))
func test_get_errors_for_test_contains_warnings():
push_warning("emergency evacuation protest")
var errors = _added_tracker.errors.items[GutUtils.NO_TEST]
assert_eq(errors.size(), 1)