summaryrefslogtreecommitdiff
path: root/addons/gdUnit4/src/asserts/GdUnitObjectAssertImpl.gd
diff options
context:
space:
mode:
Diffstat (limited to 'addons/gdUnit4/src/asserts/GdUnitObjectAssertImpl.gd')
-rw-r--r--addons/gdUnit4/src/asserts/GdUnitObjectAssertImpl.gd166
1 files changed, 166 insertions, 0 deletions
diff --git a/addons/gdUnit4/src/asserts/GdUnitObjectAssertImpl.gd b/addons/gdUnit4/src/asserts/GdUnitObjectAssertImpl.gd
new file mode 100644
index 0000000..955e1ef
--- /dev/null
+++ b/addons/gdUnit4/src/asserts/GdUnitObjectAssertImpl.gd
@@ -0,0 +1,166 @@
+extends GdUnitObjectAssert
+
+var _base: GdUnitAssertImpl
+
+
+func _init(current: Variant) -> void:
+ _base = GdUnitAssertImpl.new(current)
+ # save the actual assert instance on the current thread context
+ GdUnitThreadManager.get_current_context().set_assert(self)
+ if (current != null
+ and (GdUnitAssertions.validate_value_type(current, TYPE_BOOL)
+ or GdUnitAssertions.validate_value_type(current, TYPE_INT)
+ or GdUnitAssertions.validate_value_type(current, TYPE_FLOAT)
+ or GdUnitAssertions.validate_value_type(current, TYPE_STRING))):
+ @warning_ignore("return_value_discarded")
+ report_error("GdUnitObjectAssert inital error, unexpected type <%s>" % GdObjects.typeof_as_string(current))
+
+
+func _notification(event: int) -> void:
+ if event == NOTIFICATION_PREDELETE:
+ if _base != null:
+ _base.notification(event)
+ _base = null
+
+
+func current_value() -> Variant:
+ return _base.current_value()
+
+
+func report_success() -> GdUnitObjectAssert:
+ @warning_ignore("return_value_discarded")
+ _base.report_success()
+ return self
+
+
+func report_error(error: String) -> GdUnitObjectAssert:
+ @warning_ignore("return_value_discarded")
+ _base.report_error(error)
+ return self
+
+
+func failure_message() -> String:
+ return _base.failure_message()
+
+
+func override_failure_message(message: String) -> GdUnitObjectAssert:
+ @warning_ignore("return_value_discarded")
+ _base.override_failure_message(message)
+ return self
+
+
+func append_failure_message(message: String) -> GdUnitObjectAssert:
+ @warning_ignore("return_value_discarded")
+ _base.append_failure_message(message)
+ return self
+
+
+func is_equal(expected: Variant) -> GdUnitObjectAssert:
+ @warning_ignore("return_value_discarded")
+ _base.is_equal(expected)
+ return self
+
+
+func is_not_equal(expected: Variant) -> GdUnitObjectAssert:
+ @warning_ignore("return_value_discarded")
+ _base.is_not_equal(expected)
+ return self
+
+
+func is_null() -> GdUnitObjectAssert:
+ @warning_ignore("return_value_discarded")
+ _base.is_null()
+ return self
+
+
+func is_not_null() -> GdUnitObjectAssert:
+ @warning_ignore("return_value_discarded")
+ _base.is_not_null()
+ return self
+
+
+@warning_ignore("shadowed_global_identifier")
+func is_same(expected: Variant) -> GdUnitObjectAssert:
+ var current: Variant = current_value()
+ if not is_same(current, expected):
+ return report_error(GdAssertMessages.error_is_same(current, expected))
+ return report_success()
+
+
+func is_not_same(expected: Variant) -> GdUnitObjectAssert:
+ var current: Variant = current_value()
+ if is_same(current, expected):
+ return report_error(GdAssertMessages.error_not_same(current, expected))
+ return report_success()
+
+
+func is_instanceof(type: Variant) -> GdUnitObjectAssert:
+ var current: Variant = current_value()
+ if current == null or not is_instance_of(current, type):
+ var result_expected := GdObjects.extract_class_name(type)
+ var result_current := GdObjects.extract_class_name(current)
+ return report_error(GdAssertMessages.error_is_instanceof(result_current, result_expected))
+ return report_success()
+
+
+func is_not_instanceof(type: Variant) -> GdUnitObjectAssert:
+ var current: Variant = current_value()
+ if is_instance_of(current, type):
+ var result := GdObjects.extract_class_name(type)
+ if result.is_success():
+ return report_error("Expected not be a instance of <%s>" % str(result.value()))
+
+ push_error("Internal ERROR: %s" % result.error_message())
+ return self
+ return report_success()
+
+
+## Checks whether the current object inherits from the specified type.
+func is_inheriting(type: Variant) -> GdUnitObjectAssert:
+ var current: Variant = current_value()
+ if not is_instance_of(current, TYPE_OBJECT):
+ return report_error("Expected '%s' to inherit from at least Object." % str(current))
+ var result := _inherits(current, type)
+ if result.is_success():
+ return report_success()
+ return report_error(result.error_message())
+
+
+## Checks whether the current object does NOT inherit from the specified type.
+func is_not_inheriting(type: Variant) -> GdUnitObjectAssert:
+ var current: Variant = current_value()
+ if not is_instance_of(current, TYPE_OBJECT):
+ return report_error("Expected '%s' to inherit from at least Object." % str(current))
+ var result := _inherits(current, type)
+ if result.is_success():
+ return report_error("Expected type to not inherit from <%s>" % _extract_class_type(type))
+ return report_success()
+
+
+func _inherits(current: Variant, type: Variant) -> GdUnitResult:
+ var type_as_string := _extract_class_type(type)
+ if type_as_string == "Object":
+ return GdUnitResult.success("")
+
+ var obj: Object = current
+ for p in obj.get_property_list():
+ var clazz_name :String = p["name"]
+ if p["usage"] == PROPERTY_USAGE_CATEGORY and clazz_name == p["hint_string"] and clazz_name == type_as_string:
+ return GdUnitResult.success("")
+ var script: Script = obj.get_script()
+ if script != null:
+ while script != null:
+ var result := GdObjects.extract_class_name(script)
+ if result.is_success() and result.value() == type_as_string:
+ return GdUnitResult.success("")
+ script = script.get_base_script()
+ return GdUnitResult.error("Expected type to inherit from <%s>" % type_as_string)
+
+
+func _extract_class_type(type: Variant) -> String:
+ if type is String:
+ return type
+ var result := GdObjects.extract_class_name(type)
+ if result.is_error():
+ return ""
+ return result.value()