summaryrefslogtreecommitdiff
path: root/addons/gdUnit4/src/doubler/GdUnitObjectInteractionsVerifier.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/doubler/GdUnitObjectInteractionsVerifier.gd
parent6d53d8cac78250dc888aa49d5f9d4175c6652feb (diff)
escoria updateHEADmain
Diffstat (limited to 'addons/gdUnit4/src/doubler/GdUnitObjectInteractionsVerifier.gd')
-rw-r--r--addons/gdUnit4/src/doubler/GdUnitObjectInteractionsVerifier.gd84
1 files changed, 84 insertions, 0 deletions
diff --git a/addons/gdUnit4/src/doubler/GdUnitObjectInteractionsVerifier.gd b/addons/gdUnit4/src/doubler/GdUnitObjectInteractionsVerifier.gd
new file mode 100644
index 0000000..36aa978
--- /dev/null
+++ b/addons/gdUnit4/src/doubler/GdUnitObjectInteractionsVerifier.gd
@@ -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()