summaryrefslogtreecommitdiff
path: root/addons/gdUnit4/src/matchers
diff options
context:
space:
mode:
Diffstat (limited to 'addons/gdUnit4/src/matchers')
-rw-r--r--addons/gdUnit4/src/matchers/AnyArgumentMatcher.gd11
-rw-r--r--addons/gdUnit4/src/matchers/AnyArgumentMatcher.gd.uid1
-rw-r--r--addons/gdUnit4/src/matchers/AnyBuildInTypeArgumentMatcher.gd50
-rw-r--r--addons/gdUnit4/src/matchers/AnyBuildInTypeArgumentMatcher.gd.uid1
-rw-r--r--addons/gdUnit4/src/matchers/AnyClazzArgumentMatcher.gd32
-rw-r--r--addons/gdUnit4/src/matchers/AnyClazzArgumentMatcher.gd.uid1
-rw-r--r--addons/gdUnit4/src/matchers/ChainedArgumentMatcher.gd22
-rw-r--r--addons/gdUnit4/src/matchers/ChainedArgumentMatcher.gd.uid1
-rw-r--r--addons/gdUnit4/src/matchers/EqualsArgumentMatcher.gd22
-rw-r--r--addons/gdUnit4/src/matchers/EqualsArgumentMatcher.gd.uid1
-rw-r--r--addons/gdUnit4/src/matchers/GdUnitArgumentMatcher.gd13
-rw-r--r--addons/gdUnit4/src/matchers/GdUnitArgumentMatcher.gd.uid1
-rw-r--r--addons/gdUnit4/src/matchers/GdUnitArgumentMatchers.gd42
-rw-r--r--addons/gdUnit4/src/matchers/GdUnitArgumentMatchers.gd.uid1
14 files changed, 199 insertions, 0 deletions
diff --git a/addons/gdUnit4/src/matchers/AnyArgumentMatcher.gd b/addons/gdUnit4/src/matchers/AnyArgumentMatcher.gd
new file mode 100644
index 0000000..bd50313
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/AnyArgumentMatcher.gd
@@ -0,0 +1,11 @@
+class_name AnyArgumentMatcher
+extends GdUnitArgumentMatcher
+
+
+@warning_ignore("unused_parameter")
+func is_match(value :Variant) -> bool:
+ return true
+
+
+func _to_string() -> String:
+ return "any()"
diff --git a/addons/gdUnit4/src/matchers/AnyArgumentMatcher.gd.uid b/addons/gdUnit4/src/matchers/AnyArgumentMatcher.gd.uid
new file mode 100644
index 0000000..03ccbea
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/AnyArgumentMatcher.gd.uid
@@ -0,0 +1 @@
+uid://n0fqyyrngu3p
diff --git a/addons/gdUnit4/src/matchers/AnyBuildInTypeArgumentMatcher.gd b/addons/gdUnit4/src/matchers/AnyBuildInTypeArgumentMatcher.gd
new file mode 100644
index 0000000..ba34431
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/AnyBuildInTypeArgumentMatcher.gd
@@ -0,0 +1,50 @@
+class_name AnyBuildInTypeArgumentMatcher
+extends GdUnitArgumentMatcher
+
+var _type : PackedInt32Array = []
+
+
+func _init(type :PackedInt32Array) -> void:
+ _type = type
+
+
+func is_match(value :Variant) -> bool:
+ return _type.has(typeof(value))
+
+
+func _to_string() -> String:
+ match _type[0]:
+ TYPE_BOOL: return "any_bool()"
+ TYPE_STRING, TYPE_STRING_NAME: return "any_string()"
+ TYPE_INT: return "any_int()"
+ TYPE_FLOAT: return "any_float()"
+ TYPE_COLOR: return "any_color()"
+ TYPE_VECTOR2: return "any_vector2()" if _type.size() == 1 else "any_vector()"
+ TYPE_VECTOR2I: return "any_vector2i()"
+ TYPE_VECTOR3: return "any_vector3()"
+ TYPE_VECTOR3I: return "any_vector3i()"
+ TYPE_VECTOR4: return "any_vector4()"
+ TYPE_VECTOR4I: return "any_vector4i()"
+ TYPE_RECT2: return "any_rect2()"
+ TYPE_RECT2I: return "any_rect2i()"
+ TYPE_PLANE: return "any_plane()"
+ TYPE_QUATERNION: return "any_quat()"
+ TYPE_AABB: return "any_aabb()"
+ TYPE_BASIS: return "any_basis()"
+ TYPE_TRANSFORM2D: return "any_transform_2d()"
+ TYPE_TRANSFORM3D: return "any_transform_3d()"
+ TYPE_NODE_PATH: return "any_node_path()"
+ TYPE_RID: return "any_rid()"
+ TYPE_OBJECT: return "any_object()"
+ TYPE_DICTIONARY: return "any_dictionary()"
+ TYPE_ARRAY: return "any_array()"
+ TYPE_PACKED_BYTE_ARRAY: return "any_packed_byte_array()"
+ TYPE_PACKED_INT32_ARRAY: return "any_packed_int32_array()"
+ TYPE_PACKED_INT64_ARRAY: return "any_packed_int64_array()"
+ TYPE_PACKED_FLOAT32_ARRAY: return "any_packed_float32_array()"
+ TYPE_PACKED_FLOAT64_ARRAY: return "any_packed_float64_array()"
+ TYPE_PACKED_STRING_ARRAY: return "any_packed_string_array()"
+ TYPE_PACKED_VECTOR2_ARRAY: return "any_packed_vector2_array()"
+ TYPE_PACKED_VECTOR3_ARRAY: return "any_packed_vector3_array()"
+ TYPE_PACKED_COLOR_ARRAY: return "any_packed_color_array()"
+ _: return "any()"
diff --git a/addons/gdUnit4/src/matchers/AnyBuildInTypeArgumentMatcher.gd.uid b/addons/gdUnit4/src/matchers/AnyBuildInTypeArgumentMatcher.gd.uid
new file mode 100644
index 0000000..68f1c4f
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/AnyBuildInTypeArgumentMatcher.gd.uid
@@ -0,0 +1 @@
+uid://cjg3dte8ifp72
diff --git a/addons/gdUnit4/src/matchers/AnyClazzArgumentMatcher.gd b/addons/gdUnit4/src/matchers/AnyClazzArgumentMatcher.gd
new file mode 100644
index 0000000..b5e3de3
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/AnyClazzArgumentMatcher.gd
@@ -0,0 +1,32 @@
+class_name AnyClazzArgumentMatcher
+extends GdUnitArgumentMatcher
+
+var _clazz :Object
+
+
+func _init(clazz :Object) -> void:
+ _clazz = clazz
+
+
+func is_match(value :Variant) -> bool:
+ if typeof(value) != TYPE_OBJECT:
+ return false
+ if is_instance_valid(value) and GdObjects.is_script(_clazz):
+ @warning_ignore("unsafe_cast")
+ return (value as Object).get_script() == _clazz
+ return is_instance_of(value, _clazz)
+
+
+func _to_string() -> String:
+ if (_clazz as Object).is_class("GDScriptNativeClass"):
+ @warning_ignore("unsafe_method_access")
+ var instance :Object = _clazz.new()
+ var clazz_name := instance.get_class()
+ if not instance is RefCounted:
+ instance.free()
+ return "any_class(<"+clazz_name+">)";
+ if _clazz is GDScript:
+ var result := GdObjects.extract_class_name(_clazz)
+ if result.is_success():
+ return "any_class(<"+ result.value() + ">)"
+ return "any_class()"
diff --git a/addons/gdUnit4/src/matchers/AnyClazzArgumentMatcher.gd.uid b/addons/gdUnit4/src/matchers/AnyClazzArgumentMatcher.gd.uid
new file mode 100644
index 0000000..e6d4402
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/AnyClazzArgumentMatcher.gd.uid
@@ -0,0 +1 @@
+uid://b331ucr86yg1o
diff --git a/addons/gdUnit4/src/matchers/ChainedArgumentMatcher.gd b/addons/gdUnit4/src/matchers/ChainedArgumentMatcher.gd
new file mode 100644
index 0000000..f779bd7
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/ChainedArgumentMatcher.gd
@@ -0,0 +1,22 @@
+class_name ChainedArgumentMatcher
+extends GdUnitArgumentMatcher
+
+var _matchers :Array
+
+
+func _init(matchers :Array) -> void:
+ _matchers = matchers
+
+
+func is_match(arguments :Variant) -> bool:
+ var arg_array: Array = arguments
+ if arg_array == null or arg_array.size() != _matchers.size():
+ return false
+
+ for index in arg_array.size():
+ var arg: Variant = arg_array[index]
+ var matcher: GdUnitArgumentMatcher = _matchers[index]
+
+ if not matcher.is_match(arg):
+ return false
+ return true
diff --git a/addons/gdUnit4/src/matchers/ChainedArgumentMatcher.gd.uid b/addons/gdUnit4/src/matchers/ChainedArgumentMatcher.gd.uid
new file mode 100644
index 0000000..364cd27
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/ChainedArgumentMatcher.gd.uid
@@ -0,0 +1 @@
+uid://b2tgtmtmgsl44
diff --git a/addons/gdUnit4/src/matchers/EqualsArgumentMatcher.gd b/addons/gdUnit4/src/matchers/EqualsArgumentMatcher.gd
new file mode 100644
index 0000000..2d387ed
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/EqualsArgumentMatcher.gd
@@ -0,0 +1,22 @@
+class_name EqualsArgumentMatcher
+extends GdUnitArgumentMatcher
+
+var _current :Variant
+var _auto_deep_check_mode :bool
+
+
+func _init(current :Variant, auto_deep_check_mode := false) -> void:
+ _current = current
+ _auto_deep_check_mode = auto_deep_check_mode
+
+
+func is_match(value :Variant) -> bool:
+ var case_sensitive_check := true
+ return GdObjects.equals(_current, value, case_sensitive_check, compare_mode(value))
+
+
+func compare_mode(value :Variant) -> GdObjects.COMPARE_MODE:
+ if _auto_deep_check_mode and is_instance_valid(value):
+ # we do deep check on all InputEvent's
+ return GdObjects.COMPARE_MODE.PARAMETER_DEEP_TEST if value is InputEvent else GdObjects.COMPARE_MODE.OBJECT_REFERENCE
+ return GdObjects.COMPARE_MODE.OBJECT_REFERENCE
diff --git a/addons/gdUnit4/src/matchers/EqualsArgumentMatcher.gd.uid b/addons/gdUnit4/src/matchers/EqualsArgumentMatcher.gd.uid
new file mode 100644
index 0000000..916a23c
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/EqualsArgumentMatcher.gd.uid
@@ -0,0 +1 @@
+uid://diq5b7mgjyplv
diff --git a/addons/gdUnit4/src/matchers/GdUnitArgumentMatcher.gd b/addons/gdUnit4/src/matchers/GdUnitArgumentMatcher.gd
new file mode 100644
index 0000000..d5adc4b
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/GdUnitArgumentMatcher.gd
@@ -0,0 +1,13 @@
+## The base class of all argument matchers
+class_name GdUnitArgumentMatcher
+extends RefCounted
+
+
+@warning_ignore("unused_parameter")
+func is_match(value: Variant) -> bool:
+ return true
+
+
+func _to_string() -> String:
+ assert(false, "`_to_string()` Is not implemented!")
+ return ""
diff --git a/addons/gdUnit4/src/matchers/GdUnitArgumentMatcher.gd.uid b/addons/gdUnit4/src/matchers/GdUnitArgumentMatcher.gd.uid
new file mode 100644
index 0000000..b061e03
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/GdUnitArgumentMatcher.gd.uid
@@ -0,0 +1 @@
+uid://dj5ysoawmt5ht
diff --git a/addons/gdUnit4/src/matchers/GdUnitArgumentMatchers.gd b/addons/gdUnit4/src/matchers/GdUnitArgumentMatchers.gd
new file mode 100644
index 0000000..6a70cc1
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/GdUnitArgumentMatchers.gd
@@ -0,0 +1,42 @@
+class_name GdUnitArgumentMatchers
+extends RefCounted
+
+const TYPE_ANY = TYPE_MAX + 100
+
+
+static func to_matcher(arguments: Array[Variant], auto_deep_check_mode := false) -> ChainedArgumentMatcher:
+ var matchers: Array[Variant] = []
+ for arg: Variant in arguments:
+ # argument is already a matcher
+ if arg is GdUnitArgumentMatcher:
+ matchers.append(arg)
+ else:
+ # pass argument into equals matcher
+ matchers.append(EqualsArgumentMatcher.new(arg, auto_deep_check_mode))
+ return ChainedArgumentMatcher.new(matchers)
+
+
+static func any() -> GdUnitArgumentMatcher:
+ return AnyArgumentMatcher.new()
+
+
+static func by_type(type: int) -> GdUnitArgumentMatcher:
+ return AnyBuildInTypeArgumentMatcher.new([type])
+
+
+static func by_types(types: PackedInt32Array) -> GdUnitArgumentMatcher:
+ return AnyBuildInTypeArgumentMatcher.new(types)
+
+
+static func any_class(clazz: Object) -> GdUnitArgumentMatcher:
+ return AnyClazzArgumentMatcher.new(clazz)
+
+
+static func is_variant_string_matching(value: Variant) -> GdUnitResult:
+ if value is String or value is StringName:
+ return GdUnitResult.success()
+ if value is GdUnitArgumentMatcher:
+ if str(value) == "any()" or str(value) == "any_string()":
+ return GdUnitResult.success()
+ return GdUnitResult.error("Only 'any()' and 'any_string()' argument matchers are allowed!")
+ return GdUnitResult.error("Only String or StringName types are allowed!")
diff --git a/addons/gdUnit4/src/matchers/GdUnitArgumentMatchers.gd.uid b/addons/gdUnit4/src/matchers/GdUnitArgumentMatchers.gd.uid
new file mode 100644
index 0000000..c17d859
--- /dev/null
+++ b/addons/gdUnit4/src/matchers/GdUnitArgumentMatchers.gd.uid
@@ -0,0 +1 @@
+uid://ct81jyk5s7osa