chore(client): add gdUnit4 test framework addon
Vendor gdUnit4 for Godot 4 client testing (D-030). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
class_name GdUnitObjectInteractionsVerifier
|
||||
|
||||
var expected_interactions: int = -1
|
||||
var saved_interactions := Dictionary()
|
||||
var verified_interactions := Array()
|
||||
|
||||
|
||||
func save_function_interaction(func_name: String, args :Array[Variant]) -> void:
|
||||
var function_args := [func_name] + args
|
||||
var matcher := GdUnitArgumentMatchers.to_matcher(function_args, true)
|
||||
for index in saved_interactions.keys().size():
|
||||
var key: Variant = saved_interactions.keys()[index]
|
||||
if matcher.is_match(key):
|
||||
saved_interactions[key] += 1
|
||||
return
|
||||
saved_interactions[function_args] = 1
|
||||
|
||||
|
||||
func is_verify_interactions() -> bool:
|
||||
return expected_interactions != -1
|
||||
|
||||
|
||||
func do_verify_interactions(interactions_times: int = 1) -> void:
|
||||
expected_interactions = interactions_times
|
||||
|
||||
|
||||
func verify_interactions(func_name: String, args: Array[Variant]) -> void:
|
||||
var summary := Dictionary()
|
||||
var total_interactions := 0
|
||||
var function_args := [func_name] + args
|
||||
var matcher := GdUnitArgumentMatchers.to_matcher(function_args, true)
|
||||
for index in saved_interactions.keys().size():
|
||||
var key: Variant = saved_interactions.keys()[index]
|
||||
if matcher.is_match(key):
|
||||
var interactions: int = saved_interactions.get(key, 0)
|
||||
total_interactions += interactions
|
||||
summary[key] = interactions
|
||||
# add as verified
|
||||
verified_interactions.append(key)
|
||||
|
||||
var assert_tool := GdUnitAssertImpl.new("")
|
||||
if total_interactions != expected_interactions:
|
||||
var __expected_summary := {function_args : expected_interactions}
|
||||
var error_message: String
|
||||
# if no interactions macht collect not verified interactions for failure report
|
||||
if summary.is_empty():
|
||||
var __current_summary := verify_no_more_interactions()
|
||||
error_message = GdAssertMessages.error_validate_interactions(__current_summary, __expected_summary)
|
||||
else:
|
||||
error_message = GdAssertMessages.error_validate_interactions(summary, __expected_summary)
|
||||
@warning_ignore("return_value_discarded")
|
||||
assert_tool.report_error(error_message)
|
||||
else:
|
||||
@warning_ignore("return_value_discarded")
|
||||
assert_tool.report_success()
|
||||
expected_interactions = -1
|
||||
|
||||
|
||||
func verify_no_interactions() -> Dictionary:
|
||||
var summary := Dictionary()
|
||||
if not saved_interactions.is_empty():
|
||||
for index in saved_interactions.keys().size():
|
||||
var func_call: Variant = saved_interactions.keys()[index]
|
||||
summary[func_call] = saved_interactions[func_call]
|
||||
return summary
|
||||
|
||||
|
||||
func verify_no_more_interactions() -> Dictionary:
|
||||
var summary := Dictionary()
|
||||
var called_functions: Array[Variant] = saved_interactions.keys()
|
||||
if called_functions != verified_interactions:
|
||||
# collect the not verified functions
|
||||
var called_but_not_verified := called_functions.duplicate()
|
||||
for index in verified_interactions.size():
|
||||
called_but_not_verified.erase(verified_interactions[index])
|
||||
|
||||
for index in called_but_not_verified.size():
|
||||
var not_verified: Variant = called_but_not_verified[index]
|
||||
summary[not_verified] = saved_interactions[not_verified]
|
||||
return summary
|
||||
|
||||
|
||||
func reset_interactions() -> void:
|
||||
saved_interactions.clear()
|
||||
Reference in New Issue
Block a user