Some checks failed
Create tag and build when new code gets to main / Export (push) Failing after 3m40s
188 lines
5.9 KiB
GDScript
188 lines
5.9 KiB
GDScript
extends GdUnitVectorAssert
|
|
|
|
var _base: GdUnitAssertImpl
|
|
var _current_type: int
|
|
var _type_check: bool
|
|
|
|
func _init(current: Variant, type_check := true) -> void:
|
|
_type_check = type_check
|
|
_base = GdUnitAssertImpl.new(current)
|
|
# save the actual assert instance on the current thread context
|
|
GdUnitThreadManager.get_current_context().set_assert(self)
|
|
if not _validate_value_type(current):
|
|
@warning_ignore("return_value_discarded")
|
|
report_error("GdUnitVectorAssert error, the type <%s> is not supported." % GdObjects.typeof_as_string(current))
|
|
_current_type = typeof(current)
|
|
|
|
|
|
func _notification(event :int) -> void:
|
|
if event == NOTIFICATION_PREDELETE:
|
|
if _base != null:
|
|
_base.notification(event)
|
|
_base = null
|
|
|
|
|
|
func _validate_value_type(value :Variant) -> bool:
|
|
return (
|
|
value == null
|
|
or typeof(value) in [
|
|
TYPE_VECTOR2,
|
|
TYPE_VECTOR2I,
|
|
TYPE_VECTOR3,
|
|
TYPE_VECTOR3I,
|
|
TYPE_VECTOR4,
|
|
TYPE_VECTOR4I
|
|
]
|
|
)
|
|
|
|
|
|
func _validate_is_vector_type(value :Variant) -> bool:
|
|
var type := typeof(value)
|
|
if type == _current_type or _current_type == TYPE_NIL:
|
|
return true
|
|
@warning_ignore("return_value_discarded")
|
|
report_error(GdAssertMessages.error_is_wrong_type(_current_type, type))
|
|
return false
|
|
|
|
|
|
func current_value() -> Variant:
|
|
return _base.current_value()
|
|
|
|
|
|
func report_success() -> GdUnitVectorAssert:
|
|
@warning_ignore("return_value_discarded")
|
|
_base.report_success()
|
|
return self
|
|
|
|
|
|
func report_error(error :String) -> GdUnitVectorAssert:
|
|
@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) -> GdUnitVectorAssert:
|
|
@warning_ignore("return_value_discarded")
|
|
_base.override_failure_message(message)
|
|
return self
|
|
|
|
|
|
func append_failure_message(message :String) -> GdUnitVectorAssert:
|
|
@warning_ignore("return_value_discarded")
|
|
_base.append_failure_message(message)
|
|
return self
|
|
|
|
|
|
func is_null() -> GdUnitVectorAssert:
|
|
@warning_ignore("return_value_discarded")
|
|
_base.is_null()
|
|
return self
|
|
|
|
|
|
func is_not_null() -> GdUnitVectorAssert:
|
|
@warning_ignore("return_value_discarded")
|
|
_base.is_not_null()
|
|
return self
|
|
|
|
|
|
func is_equal(expected: Variant) -> GdUnitVectorAssert:
|
|
if _type_check and not _validate_is_vector_type(expected):
|
|
return self
|
|
@warning_ignore("return_value_discarded")
|
|
_base.is_equal(expected)
|
|
return self
|
|
|
|
|
|
func is_not_equal(expected: Variant) -> GdUnitVectorAssert:
|
|
if _type_check and not _validate_is_vector_type(expected):
|
|
return self
|
|
@warning_ignore("return_value_discarded")
|
|
_base.is_not_equal(expected)
|
|
return self
|
|
|
|
|
|
@warning_ignore("shadowed_global_identifier")
|
|
func is_equal_approx(expected :Variant, approx :Variant) -> GdUnitVectorAssert:
|
|
if not _validate_is_vector_type(expected) or not _validate_is_vector_type(approx):
|
|
return self
|
|
var current :Variant = current_value()
|
|
var from :Variant = expected - approx
|
|
var to :Variant = expected + approx
|
|
if current == null or (not _is_equal_approx(current, from, to)):
|
|
return report_error(GdAssertMessages.error_is_value(Comparator.BETWEEN_EQUAL, current, from, to))
|
|
return report_success()
|
|
|
|
|
|
func _is_equal_approx(current :Variant, from :Variant, to :Variant) -> bool:
|
|
match typeof(current):
|
|
TYPE_VECTOR2, TYPE_VECTOR2I:
|
|
return ((current.x >= from.x and current.y >= from.y)
|
|
and (current.x <= to.x and current.y <= to.y))
|
|
TYPE_VECTOR3, TYPE_VECTOR3I:
|
|
return ((current.x >= from.x and current.y >= from.y and current.z >= from.z)
|
|
and (current.x <= to.x and current.y <= to.y and current.z <= to.z))
|
|
TYPE_VECTOR4, TYPE_VECTOR4I:
|
|
return ((current.x >= from.x and current.y >= from.y and current.z >= from.z and current.w >= from.w)
|
|
and (current.x <= to.x and current.y <= to.y and current.z <= to.z and current.w <= to.w))
|
|
_:
|
|
push_error("Missing implementation '_is_equal_approx' for vector type %s" % typeof(current))
|
|
return false
|
|
|
|
|
|
func is_less(expected :Variant) -> GdUnitVectorAssert:
|
|
if not _validate_is_vector_type(expected):
|
|
return self
|
|
var current :Variant = current_value()
|
|
if current == null or current >= expected:
|
|
return report_error(GdAssertMessages.error_is_value(Comparator.LESS_THAN, current, expected))
|
|
return report_success()
|
|
|
|
|
|
func is_less_equal(expected :Variant) -> GdUnitVectorAssert:
|
|
if not _validate_is_vector_type(expected):
|
|
return self
|
|
var current :Variant = current_value()
|
|
if current == null or current > expected:
|
|
return report_error(GdAssertMessages.error_is_value(Comparator.LESS_EQUAL, current, expected))
|
|
return report_success()
|
|
|
|
|
|
func is_greater(expected :Variant) -> GdUnitVectorAssert:
|
|
if not _validate_is_vector_type(expected):
|
|
return self
|
|
var current :Variant = current_value()
|
|
if current == null or current <= expected:
|
|
return report_error(GdAssertMessages.error_is_value(Comparator.GREATER_THAN, current, expected))
|
|
return report_success()
|
|
|
|
|
|
func is_greater_equal(expected :Variant) -> GdUnitVectorAssert:
|
|
if not _validate_is_vector_type(expected):
|
|
return self
|
|
var current :Variant = current_value()
|
|
if current == null or current < expected:
|
|
return report_error(GdAssertMessages.error_is_value(Comparator.GREATER_EQUAL, current, expected))
|
|
return report_success()
|
|
|
|
|
|
func is_between(from :Variant, to :Variant) -> GdUnitVectorAssert:
|
|
if not _validate_is_vector_type(from) or not _validate_is_vector_type(to):
|
|
return self
|
|
var current :Variant = current_value()
|
|
if current == null or not (current >= from and current <= to):
|
|
return report_error(GdAssertMessages.error_is_value(Comparator.BETWEEN_EQUAL, current, from, to))
|
|
return report_success()
|
|
|
|
|
|
func is_not_between(from :Variant, to :Variant) -> GdUnitVectorAssert:
|
|
if not _validate_is_vector_type(from) or not _validate_is_vector_type(to):
|
|
return self
|
|
var current :Variant = current_value()
|
|
if (current != null and current >= from and current <= to):
|
|
return report_error(GdAssertMessages.error_is_value(Comparator.NOT_BETWEEN_EQUAL, current, from, to))
|
|
return report_success()
|