125 lines
4.4 KiB
GDScript
125 lines
4.4 KiB
GDScript
# GdUnit generated TestSuite
|
|
#warning-ignore-all:unused_argument
|
|
#warning-ignore-all:return_value_discarded
|
|
class_name GodotGdErrorMonitorTest
|
|
extends GdUnitTestSuite
|
|
|
|
# TestSuite generated from
|
|
const __source = 'res://addons/gdUnit4/src/monitor/GodotGdErrorMonitor.gd'
|
|
|
|
|
|
const error_report = """
|
|
USER ERROR: this is an error
|
|
at: push_error (core/variant/variant_utility.cpp:880)
|
|
"""
|
|
const script_error = """
|
|
USER SCRIPT ERROR: Trying to call a function on a previously freed instance.
|
|
at: GdUnitScriptTypeTest.test_xx (res://addons/gdUnit4/test/GdUnitScriptTypeTest.gd:22)
|
|
"""
|
|
|
|
|
|
var _save_is_report_push_errors :bool
|
|
var _save_is_report_script_errors :bool
|
|
|
|
|
|
func before():
|
|
_save_is_report_push_errors = GdUnitSettings.is_report_push_errors()
|
|
_save_is_report_script_errors = GdUnitSettings.is_report_script_errors()
|
|
# disable default error reporting for testing
|
|
ProjectSettings.set_setting(GdUnitSettings.REPORT_PUSH_ERRORS, false)
|
|
ProjectSettings.set_setting(GdUnitSettings.REPORT_SCRIPT_ERRORS, false)
|
|
|
|
|
|
func after():
|
|
ProjectSettings.set_setting(GdUnitSettings.REPORT_PUSH_ERRORS, _save_is_report_push_errors)
|
|
ProjectSettings.set_setting(GdUnitSettings.REPORT_SCRIPT_ERRORS, _save_is_report_script_errors)
|
|
|
|
|
|
func write_log(content :String) -> String:
|
|
var log_file := create_temp_file("/test_logs/", "test.log")
|
|
log_file.store_string(content)
|
|
log_file.flush()
|
|
return log_file.get_path_absolute()
|
|
|
|
|
|
func test_scan_for_push_errors() -> void:
|
|
var monitor := mock(GodotGdErrorMonitor, CALL_REAL_FUNC) as GodotGdErrorMonitor
|
|
monitor._godot_log_file = write_log(error_report)
|
|
monitor._report_enabled = true
|
|
|
|
# with disabled push_error reporting
|
|
do_return(false).on(monitor)._is_report_push_errors()
|
|
await monitor.scan()
|
|
assert_array(monitor.to_reports()).is_empty()
|
|
|
|
# with enabled push_error reporting
|
|
do_return(true).on(monitor)._is_report_push_errors()
|
|
|
|
var entry := ErrorLogEntry.new(ErrorLogEntry.TYPE.PUSH_ERROR, -1,
|
|
"this is an error",
|
|
"at: push_error (core/variant/variant_utility.cpp:880)")
|
|
var expected_report := GodotGdErrorMonitor._to_report(entry)
|
|
monitor._eof = 0
|
|
await monitor.scan()
|
|
assert_array(monitor.to_reports()).contains_exactly([expected_report])
|
|
|
|
|
|
func test_scan_for_script_errors() -> void:
|
|
var log_file := write_log(script_error)
|
|
var monitor := mock(GodotGdErrorMonitor, CALL_REAL_FUNC) as GodotGdErrorMonitor
|
|
monitor._godot_log_file = log_file
|
|
monitor._report_enabled = true
|
|
|
|
# with disabled push_error reporting
|
|
do_return(false).on(monitor)._is_report_script_errors()
|
|
await monitor.scan()
|
|
assert_array(monitor.to_reports()).is_empty()
|
|
|
|
# with enabled push_error reporting
|
|
do_return(true).on(monitor)._is_report_script_errors()
|
|
|
|
var entry := ErrorLogEntry.new(ErrorLogEntry.TYPE.PUSH_ERROR, 22,
|
|
"Trying to call a function on a previously freed instance.",
|
|
"at: GdUnitScriptTypeTest.test_xx (res://addons/gdUnit4/test/GdUnitScriptTypeTest.gd:22)")
|
|
var expected_report := GodotGdErrorMonitor._to_report(entry)
|
|
monitor._eof = 0
|
|
await monitor.scan()
|
|
assert_array(monitor.to_reports()).contains_exactly([expected_report])
|
|
|
|
|
|
func test_custom_log_path() -> void:
|
|
# save original log_path
|
|
var log_path :String = ProjectSettings.get_setting("debug/file_logging/log_path")
|
|
# set custom log path
|
|
var custom_log_path := "user://logs/test-run.log"
|
|
FileAccess.open(custom_log_path, FileAccess.WRITE).store_line("test-log")
|
|
ProjectSettings.set_setting("debug/file_logging/log_path", custom_log_path)
|
|
var monitor := GodotGdErrorMonitor.new()
|
|
|
|
assert_that(monitor._godot_log_file).is_equal(custom_log_path)
|
|
# restore orignal log_path
|
|
ProjectSettings.set_setting("debug/file_logging/log_path", log_path)
|
|
|
|
|
|
func test_integration_test() -> void:
|
|
var monitor := GodotGdErrorMonitor.new()
|
|
monitor._report_enabled = true
|
|
# no errors reported
|
|
monitor.start()
|
|
monitor.stop()
|
|
await monitor.scan(true)
|
|
assert_array(monitor.to_reports()).is_empty()
|
|
|
|
# push error
|
|
monitor.start()
|
|
push_error("Test GodotGdErrorMonitor 'push_error' reporting")
|
|
push_warning("Test GodotGdErrorMonitor 'push_warning' reporting")
|
|
monitor.stop()
|
|
await monitor.scan(true)
|
|
var reports := monitor.to_reports()
|
|
assert_array(reports).has_size(2)
|
|
if not reports.is_empty():
|
|
assert_str(reports[0].message()).contains("Test GodotGdErrorMonitor 'push_error' reporting")
|
|
assert_str(reports[1].message()).contains("Test GodotGdErrorMonitor 'push_warning' reporting")
|
|
else:
|
|
fail("Expect reporting runtime errors")
|