summaryrefslogtreecommitdiff
path: root/addons/gdUnit4/src/asserts/GdUnitGodotErrorAssertImpl.gd
diff options
context:
space:
mode:
authorradiohotline <radoihotline@disroot.rg>2026-08-25 16:33:56 +0300
committerradiohotline <radoihotline@disroot.rg>2026-08-25 16:33:56 +0300
commita89e744ed0e8c759caf041a580112365bbfe4303 (patch)
treedd61e320904176995727e86a857d00c90d4933ba /addons/gdUnit4/src/asserts/GdUnitGodotErrorAssertImpl.gd
parent6d53d8cac78250dc888aa49d5f9d4175c6652feb (diff)
escoria updateHEADmain
Diffstat (limited to 'addons/gdUnit4/src/asserts/GdUnitGodotErrorAssertImpl.gd')
-rw-r--r--addons/gdUnit4/src/asserts/GdUnitGodotErrorAssertImpl.gd151
1 files changed, 151 insertions, 0 deletions
diff --git a/addons/gdUnit4/src/asserts/GdUnitGodotErrorAssertImpl.gd b/addons/gdUnit4/src/asserts/GdUnitGodotErrorAssertImpl.gd
new file mode 100644
index 0000000..ce5503d
--- /dev/null
+++ b/addons/gdUnit4/src/asserts/GdUnitGodotErrorAssertImpl.gd
@@ -0,0 +1,151 @@
+extends GdUnitGodotErrorAssert
+
+var _current_failure_message := ""
+var _custom_failure_message := ""
+var _additional_failure_message := ""
+var _callable: Callable
+var _logger := GodotGdErrorMonitor.GdUnitLogger.new(true, true)
+
+
+func _init(callable: Callable) -> void:
+ # save the actual assert instance on the current thread context
+ GdUnitThreadManager.get_current_context().set_assert(self)
+ GdAssertReports.reset_last_error_line_number()
+ _callable = callable
+
+
+func _execute() -> Array[ErrorLogEntry]:
+ await _callable.call()
+ return _logger.entries()
+
+
+func failure_message() -> String:
+ return _current_failure_message
+
+
+func _report_success() -> GdUnitAssert:
+ GdAssertReports.report_success()
+ return self
+
+
+func _report_error(error_message: String, failure_line_number: int = -1) -> GdUnitAssert:
+ var line_number := failure_line_number if failure_line_number != -1 else GdUnitAssertions.get_line_number()
+ _current_failure_message = GdAssertMessages.build_failure_message(error_message, _additional_failure_message, _custom_failure_message)
+ GdAssertReports.report_error(_current_failure_message, line_number)
+ return self
+
+
+func _has_log_entry(log_entries: Array[ErrorLogEntry], type: ErrorLogEntry.TYPE, error: Variant) -> bool:
+ for entry in log_entries:
+ if entry._type == type and GdObjects.equals(entry._message, error):
+ GdUnitThreadManager.get_current_context().get_execution_context().error_monitor.erase_log_entry(entry)
+ return true
+ return false
+
+
+func _to_list(log_entries: Array[ErrorLogEntry]) -> String:
+ if log_entries.is_empty():
+ return "no errors"
+
+ var values := []
+ for entry in log_entries:
+ values.append(entry)
+ return "\n".join(values)
+
+
+func is_null() -> GdUnitGodotErrorAssert:
+ return _report_error("Not implemented")
+
+
+func is_not_null() -> GdUnitGodotErrorAssert:
+ return _report_error("Not implemented")
+
+
+func is_equal(_expected: Variant) -> GdUnitGodotErrorAssert:
+ return _report_error("Not implemented")
+
+
+func is_not_equal(_expected: Variant) -> GdUnitGodotErrorAssert:
+ return _report_error("Not implemented")
+
+
+func override_failure_message(message: String) -> GdUnitGodotErrorAssert:
+ _custom_failure_message = message
+ return self
+
+
+func append_failure_message(message: String) -> GdUnitGodotErrorAssert:
+ _additional_failure_message = message
+ return self
+
+
+func is_success() -> GdUnitGodotErrorAssert:
+ if not _validate_callable():
+ return self
+
+ var log_entries := await _execute()
+ if log_entries.is_empty():
+ return _report_success()
+ return _report_error("""
+ Expecting: no error's are ocured.
+ but found: '%s'
+ """.dedent().trim_prefix("\n") % _to_list(log_entries))
+
+
+func is_runtime_error(expected_error: Variant) -> GdUnitGodotErrorAssert:
+ if not _validate_callable():
+ return self
+
+ var result := GdUnitArgumentMatchers.is_variant_string_matching(expected_error)
+ if result.is_error():
+ return _report_error(result.error_message())
+ var log_entries := await _execute()
+ if _has_log_entry(log_entries, ErrorLogEntry.TYPE.SCRIPT_ERROR, expected_error):
+ return _report_success()
+ return _report_error("""
+ Expecting: a runtime error is triggered.
+ expected: '%s'
+ current: '%s'
+ """.dedent().trim_prefix("\n") % [expected_error, _to_list(log_entries)])
+
+
+func is_push_warning(expected_warning: Variant) -> GdUnitGodotErrorAssert:
+ if not _validate_callable():
+ return self
+
+ var result := GdUnitArgumentMatchers.is_variant_string_matching(expected_warning)
+ if result.is_error():
+ return _report_error(result.error_message())
+ var log_entries := await _execute()
+ if _has_log_entry(log_entries, ErrorLogEntry.TYPE.PUSH_WARNING, expected_warning):
+ return _report_success()
+ return _report_error("""
+ Expecting: push_warning() is called.
+ expected: '%s'
+ current: '%s'
+ """.dedent().trim_prefix("\n") % [expected_warning, _to_list(log_entries)])
+
+
+func is_push_error(expected_error: Variant) -> GdUnitGodotErrorAssert:
+ if not _validate_callable():
+ return self
+
+ var result := GdUnitArgumentMatchers.is_variant_string_matching(expected_error)
+ if result.is_error():
+ return _report_error(result.error_message())
+ var log_entries := await _execute()
+ if _has_log_entry(log_entries, ErrorLogEntry.TYPE.PUSH_ERROR, expected_error):
+ return _report_success()
+ return _report_error("""
+ Expecting: push_error() is called.
+ expected: '%s'
+ current: '%s'
+ """.dedent().trim_prefix("\n") % [expected_error, _to_list(log_entries)])
+
+
+func _validate_callable() -> bool:
+ if _callable == null or not _callable.is_valid():
+ @warning_ignore("return_value_discarded")
+ _report_error("Invalid Callable '%s'" % _callable)
+ return false
+ return true