Files
MovementTests/addons/gdUnit4/src/asserts/GdUnitDictionaryAssertImpl.gd
Minimata 72bf3d4cc5
All checks were successful
Create tag and build when new code gets to main / Export (push) Successful in 7m6s
making sure the issue comes from GDUnit addon folder
2026-01-26 08:51:14 +01:00

208 lines
7.5 KiB
GDScript

extends GdUnitDictionaryAssert
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 not GdUnitAssertions.validate_value_type(current, TYPE_DICTIONARY):
@warning_ignore("return_value_discarded")
report_error("GdUnitDictionaryAssert 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 report_success() -> GdUnitDictionaryAssert:
@warning_ignore("return_value_discarded")
_base.report_success()
return self
func report_error(error :String) -> GdUnitDictionaryAssert:
@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) -> GdUnitDictionaryAssert:
@warning_ignore("return_value_discarded")
_base.override_failure_message(message)
return self
func append_failure_message(message: String) -> GdUnitDictionaryAssert:
@warning_ignore("return_value_discarded")
_base.append_failure_message(message)
return self
func current_value() -> Variant:
return _base.current_value()
func is_null() -> GdUnitDictionaryAssert:
@warning_ignore("return_value_discarded")
_base.is_null()
return self
func is_not_null() -> GdUnitDictionaryAssert:
@warning_ignore("return_value_discarded")
_base.is_not_null()
return self
func is_equal(expected: Variant) -> GdUnitDictionaryAssert:
var current :Variant = current_value()
if current == null:
return report_error(GdAssertMessages.error_equal(null, GdAssertMessages.format_dict(expected)))
if not GdObjects.equals(current, expected):
var c := GdAssertMessages.format_dict(current)
var e := GdAssertMessages.format_dict(expected)
return report_error(GdAssertMessages.error_equal(c, e))
return report_success()
func is_not_equal(expected: Variant) -> GdUnitDictionaryAssert:
var current: Variant = current_value()
if GdObjects.equals(current, expected):
return report_error(GdAssertMessages.error_not_equal(current, expected))
return report_success()
@warning_ignore("unused_parameter", "shadowed_global_identifier")
func is_same(expected :Variant) -> GdUnitDictionaryAssert:
var current :Variant = current_value()
if current == null:
return report_error(GdAssertMessages.error_equal(null, GdAssertMessages.format_dict(expected)))
if not is_same(current, expected):
var c := GdAssertMessages.format_dict(current)
var e := GdAssertMessages.format_dict(expected)
return report_error(GdAssertMessages.error_is_same(c, e))
return report_success()
@warning_ignore("unused_parameter", "shadowed_global_identifier")
func is_not_same(expected :Variant) -> GdUnitDictionaryAssert:
var current :Variant = current_value()
if is_same(current, expected):
return report_error(GdAssertMessages.error_not_same(current, expected))
return report_success()
func is_empty() -> GdUnitDictionaryAssert:
var current :Variant = current_value()
@warning_ignore("unsafe_cast")
if current == null or not (current as Dictionary).is_empty():
return report_error(GdAssertMessages.error_is_empty(current))
return report_success()
func is_not_empty() -> GdUnitDictionaryAssert:
var current :Variant = current_value()
@warning_ignore("unsafe_cast")
if current == null or (current as Dictionary).is_empty():
return report_error(GdAssertMessages.error_is_not_empty())
return report_success()
func has_size(expected: int) -> GdUnitDictionaryAssert:
var current :Variant = current_value()
if current == null:
return report_error(GdAssertMessages.error_is_not_null())
@warning_ignore("unsafe_cast")
if (current as Dictionary).size() != expected:
return report_error(GdAssertMessages.error_has_size(current, expected))
return report_success()
func _contains_keys(expected: Array, compare_mode: GdObjects.COMPARE_MODE) -> GdUnitDictionaryAssert:
var current :Variant = current_value()
var expected_value: Array = _extract_variadic_value(expected)
if current == null:
return report_error(GdAssertMessages.error_is_not_null())
# find expected keys
@warning_ignore("unsafe_cast")
var keys_not_found :Array = expected_value.filter(_filter_by_key.bind((current as Dictionary).keys(), compare_mode))
if not keys_not_found.is_empty():
@warning_ignore("unsafe_cast")
return report_error(GdAssertMessages.error_contains_keys((current as Dictionary).keys() as Array, expected_value,
keys_not_found, compare_mode))
return report_success()
func _contains_key_value(key :Variant, value :Variant, compare_mode :GdObjects.COMPARE_MODE) -> GdUnitDictionaryAssert:
var current :Variant = current_value()
var expected := [key]
if current == null:
return report_error(GdAssertMessages.error_is_not_null())
var dict_current: Dictionary = current
var keys_not_found :Array = expected.filter(_filter_by_key.bind(dict_current.keys(), compare_mode))
if not keys_not_found.is_empty():
return report_error(GdAssertMessages.error_contains_keys(dict_current.keys() as Array, expected, keys_not_found, compare_mode))
if not GdObjects.equals(dict_current[key], value, false, compare_mode):
return report_error(GdAssertMessages.error_contains_key_value(key, value, dict_current[key], compare_mode))
return report_success()
func _not_contains_keys(expected: Array, compare_mode: GdObjects.COMPARE_MODE) -> GdUnitDictionaryAssert:
var current :Variant = current_value()
var expected_value: Array = _extract_variadic_value(expected)
if current == null:
return report_error(GdAssertMessages.error_is_not_null())
var dict_current: Dictionary = current
var keys_found :Array = dict_current.keys().filter(_filter_by_key.bind(expected_value, compare_mode, true))
if not keys_found.is_empty():
return report_error(GdAssertMessages.error_not_contains_keys(dict_current.keys() as Array, expected_value, keys_found, compare_mode))
return report_success()
func contains_keys(...expected: Array) -> GdUnitDictionaryAssert:
return _contains_keys(expected, GdObjects.COMPARE_MODE.PARAMETER_DEEP_TEST)
func contains_key_value(key :Variant, value :Variant) -> GdUnitDictionaryAssert:
return _contains_key_value(key, value, GdObjects.COMPARE_MODE.PARAMETER_DEEP_TEST)
func not_contains_keys(...expected: Array) -> GdUnitDictionaryAssert:
return _not_contains_keys(expected, GdObjects.COMPARE_MODE.PARAMETER_DEEP_TEST)
func contains_same_keys(expected :Array) -> GdUnitDictionaryAssert:
return _contains_keys(expected, GdObjects.COMPARE_MODE.OBJECT_REFERENCE)
func contains_same_key_value(key :Variant, value :Variant) -> GdUnitDictionaryAssert:
return _contains_key_value(key, value, GdObjects.COMPARE_MODE.OBJECT_REFERENCE)
func not_contains_same_keys(...expected: Array) -> GdUnitDictionaryAssert:
return _not_contains_keys(expected, GdObjects.COMPARE_MODE.OBJECT_REFERENCE)
func _filter_by_key(element :Variant, values :Array, compare_mode :GdObjects.COMPARE_MODE, is_not :bool = false) -> bool:
for key :Variant in values:
if GdObjects.equals(key, element, false, compare_mode):
return is_not
return !is_not
## Small helper to support the old expected arguments as single array and variadic arguments
func _extract_variadic_value(values: Variant) -> Variant:
@warning_ignore("unsafe_method_access")
if values != null and values.size() == 1 and GdArrayTools.is_array_type(values[0]):
return values[0]
return values