pollen-not-included/addons/gdUnit4/test/asserts/GdUnitFuncAssertImplTest.gd
2024-05-02 09:36:31 +01:00

368 lines
12 KiB
GDScript

# GdUnit generated TestSuite
class_name GdUnitFuncAssertImplTest
extends GdUnitTestSuite
@warning_ignore("unused_parameter")
# TestSuite generated from
const __source = 'res://addons/gdUnit4/src/asserts/GdUnitFuncAssertImpl.gd'
const GdUnitTools = preload("res://addons/gdUnit4/src/core/GdUnitTools.gd")
# we need to skip await fail test because of an bug in Godot 4.0 stable
func is_skip_fail_await() -> bool:
return Engine.get_version_info().hex < 0x40002
class TestValueProvider:
var _max_iterations :int
var _current_itteration := 0
func _init(iterations := 0):
_max_iterations = iterations
func bool_value() -> bool:
_current_itteration += 1
if _current_itteration == _max_iterations:
return true
return false
func int_value() -> int:
return 0
func float_value() -> float:
return 0.0
func string_value() -> String:
return "value"
func object_value() -> Object:
return Resource.new()
func array_value() -> Array:
return []
func dict_value() -> Dictionary:
return {}
func vec2_value() -> Vector2:
return Vector2.ONE
func vec3_value() -> Vector3:
return Vector3.ONE
func no_value() -> void:
pass
func unknown_value():
return Vector3.ONE
class ValueProvidersWithArguments:
func is_type(_type :int) -> bool:
return true
func get_index(_instance :Object, _name :String) -> int:
return 1
func get_index2(_instance :Object, _name :String, _recursive := false) -> int:
return 1
class TestIterativeValueProvider:
var _max_iterations :int
var _current_itteration := 0
var _inital_value
var _final_value
func _init(inital_value, iterations :int, final_value):
_max_iterations = iterations
_inital_value = inital_value
_final_value = final_value
func bool_value() -> bool:
_current_itteration += 1
if _current_itteration >= _max_iterations:
return _final_value
return _inital_value
func int_value() -> int:
_current_itteration += 1
if _current_itteration >= _max_iterations:
return _final_value
return _inital_value
func obj_value() -> Variant:
_current_itteration += 1
if _current_itteration >= _max_iterations:
return _final_value
return _inital_value
func has_type(type :int, _recursive :bool = true) -> int:
_current_itteration += 1
#await Engine.get_main_loop().idle_frame
if type == _current_itteration:
return _final_value
return _inital_value
func await_value() -> int:
_current_itteration += 1
await Engine.get_main_loop().process_frame
prints("yielded_value", _current_itteration)
if _current_itteration >= _max_iterations:
return _final_value
return _inital_value
func reset() -> void:
_current_itteration = 0
func iteration() -> int:
return _current_itteration
@warning_ignore("unused_parameter")
func test_is_null(timeout = 2000) -> void:
var value_provider := TestIterativeValueProvider.new(RefCounted.new(), 5, null)
# without default timeout od 2000ms
assert_func(value_provider, "obj_value").is_not_null()
await assert_func(value_provider, "obj_value").is_null()
assert_int(value_provider.iteration()).is_equal(5)
# with a timeout of 5s
value_provider.reset()
assert_func(value_provider, "obj_value").is_not_null()
await assert_func(value_provider, "obj_value").wait_until(5000).is_null()
assert_int(value_provider.iteration()).is_equal(5)
# failure case
if is_skip_fail_await():
return
value_provider = TestIterativeValueProvider.new(RefCounted.new(), 1, RefCounted.new())
(
await assert_failure_await(func(): await assert_func(value_provider, "obj_value", []).wait_until(100).is_null())
).has_message("Expected: is null but timed out after 100ms")
@warning_ignore("unused_parameter")
func test_is_not_null(timeout = 2000) -> void:
var value_provider := TestIterativeValueProvider.new(null, 5, RefCounted.new())
# without default timeout od 2000ms
assert_func(value_provider, "obj_value").is_null()
await assert_func(value_provider, "obj_value").is_not_null()
assert_int(value_provider.iteration()).is_equal(5)
# with a timeout of 5s
value_provider.reset()
assert_func(value_provider, "obj_value").is_null()
await assert_func(value_provider, "obj_value").wait_until(5000).is_not_null()
assert_int(value_provider.iteration()).is_equal(5)
# failure case
value_provider = TestIterativeValueProvider.new(null, 1, null)
if is_skip_fail_await():
return
(
await assert_failure_await(func(): await assert_func(value_provider, "obj_value", []).wait_until(100).is_not_null())
).has_message("Expected: is not null but timed out after 100ms")
@warning_ignore("unused_parameter")
func test_is_true(timeout = 2000) -> void:
var value_provider := TestIterativeValueProvider.new(false, 5, true)
# without default timeout od 2000ms
assert_func(value_provider, "bool_value").is_false()
await assert_func(value_provider, "bool_value").is_true()
assert_int(value_provider.iteration()).is_equal(5)
# with a timeout of 5s
value_provider.reset()
assert_func(value_provider, "bool_value").is_false()
await assert_func(value_provider, "bool_value").wait_until(5000).is_true()
assert_int(value_provider.iteration()).is_equal(5)
# failure case
value_provider = TestIterativeValueProvider.new(false, 1, false)
if is_skip_fail_await():
return
(
await assert_failure_await(func(): await assert_func(value_provider, "bool_value", []).wait_until(100).is_true())
).has_message("Expected: is true but timed out after 100ms")
@warning_ignore("unused_parameter")
func test_is_false(timeout = 2000) -> void:
var value_provider := TestIterativeValueProvider.new(true, 5, false)
# without default timeout od 2000ms
assert_func(value_provider, "bool_value").is_true()
await assert_func(value_provider, "bool_value").is_false()
assert_int(value_provider.iteration()).is_equal(5)
# with a timeout of 5s
value_provider.reset()
assert_func(value_provider, "bool_value").is_true()
await assert_func(value_provider, "bool_value").wait_until(5000).is_false()
assert_int(value_provider.iteration()).is_equal(5)
# failure case
value_provider = TestIterativeValueProvider.new(true, 1, true)
if is_skip_fail_await():
return
(
await assert_failure_await(func(): await assert_func(value_provider, "bool_value", []).wait_until(100).is_false())
).has_message("Expected: is false but timed out after 100ms")
@warning_ignore("unused_parameter")
func test_is_equal(timeout = 2000) -> void:
var value_provider := TestIterativeValueProvider.new(42, 5, 23)
# without default timeout od 2000ms
assert_func(value_provider, "int_value").is_equal(42)
await assert_func(value_provider, "int_value").is_equal(23)
assert_int(value_provider.iteration()).is_equal(5)
# with a timeout of 5s
value_provider.reset()
assert_func(value_provider, "int_value").is_equal(42)
await assert_func(value_provider, "int_value").wait_until(5000).is_equal(23)
assert_int(value_provider.iteration()).is_equal(5)
# failing case
value_provider = TestIterativeValueProvider.new(23, 1, 23)
if is_skip_fail_await():
return
(
await assert_failure_await(func(): await assert_func(value_provider, "int_value", []).wait_until(100).is_equal(25))
).has_message("Expected: is equal '25' but timed out after 100ms")
@warning_ignore("unused_parameter")
func test_is_not_equal(timeout = 2000) -> void:
var value_provider := TestIterativeValueProvider.new(42, 5, 23)
# without default timeout od 2000ms
assert_func(value_provider, "int_value").is_equal(42)
await assert_func(value_provider, "int_value").is_not_equal(42)
assert_int(value_provider.iteration()).is_equal(5)
# with a timeout of 5s
value_provider.reset()
assert_func(value_provider, "int_value").is_equal(42)
await assert_func(value_provider, "int_value").wait_until(5000).is_not_equal(42)
assert_int(value_provider.iteration()).is_equal(5)
# failing case
value_provider = TestIterativeValueProvider.new(23, 1, 23)
if is_skip_fail_await():
return
(
await assert_failure_await(func(): await assert_func(value_provider, "int_value", []).wait_until(100).is_not_equal(23))
).has_message("Expected: is not equal '23' but timed out after 100ms")
@warning_ignore("unused_parameter")
func test_is_equal_wiht_func_arg(timeout = 1300) -> void:
var value_provider := TestIterativeValueProvider.new(42, 10, 23)
# without default timeout od 2000ms
assert_func(value_provider, "has_type", [1]).is_equal(42)
await assert_func(value_provider, "has_type", [10]).is_equal(23)
assert_int(value_provider.iteration()).is_equal(10)
# with a timeout of 5s
value_provider.reset()
assert_func(value_provider, "has_type", [1]).is_equal(42)
await assert_func(value_provider, "has_type", [10]).wait_until(5000).is_equal(23)
assert_int(value_provider.iteration()).is_equal(10)
# abort test after 500ms to fail
@warning_ignore("unused_parameter")
func test_timeout_and_assert_fails(timeout = 500) -> void:
# disable temporary the timeout errors for this test
discard_error_interupted_by_timeout()
var value_provider := TestIterativeValueProvider.new(1, 10, 10)
# wait longer than test timeout, the value will be never '42'
await assert_func(value_provider, "int_value").wait_until(1000).is_equal(42)
fail("The test must be interrupted after 500ms")
func timed_function() -> Color:
var color = Color.RED
await await_millis(20)
color = Color.GREEN
await await_millis(20)
color = Color.BLUE
await await_millis(20)
color = Color.BLACK
return color
func test_timer_yielded_function() -> void:
await assert_func(self, "timed_function").is_equal(Color.BLACK)
# will be never red
await assert_func(self, "timed_function").wait_until(100).is_not_equal(Color.RED)
# failure case
if is_skip_fail_await():
return
(
await assert_failure_await(func(): await assert_func(self, "timed_function", []).wait_until(100).is_equal(Color.RED))
).has_message("Expected: is equal 'Color(1, 0, 0, 1)' but timed out after 100ms")
func test_timer_yielded_function_timeout() -> void:
if is_skip_fail_await():
return
(
await assert_failure_await(func(): await assert_func(self, "timed_function", []).wait_until(40).is_equal(Color.BLACK))
).has_message("Expected: is equal 'Color()' but timed out after 40ms")
func yielded_function() -> Color:
var color = Color.RED
await get_tree().process_frame
color = Color.GREEN
await get_tree().process_frame
color = Color.BLUE
await get_tree().process_frame
color = Color.BLACK
return color
func test_idle_frame_yielded_function() -> void:
await assert_func(self, "yielded_function").is_equal(Color.BLACK)
if is_skip_fail_await():
return
(
await assert_failure_await(func(): await assert_func(self, "yielded_function", []).wait_until(500).is_equal(Color.RED))
).has_message("Expected: is equal 'Color(1, 0, 0, 1)' but timed out after 500ms")
func test_has_failure_message() -> void:
if is_skip_fail_await():
return
var value_provider := TestIterativeValueProvider.new(10, 1, 10)
(
await assert_failure_await(func(): await assert_func(value_provider, "int_value", []).wait_until(500).is_equal(42))
).has_message("Expected: is equal '42' but timed out after 500ms")
func test_override_failure_message() -> void:
if is_skip_fail_await():
return
var value_provider := TestIterativeValueProvider.new(10, 1, 20)
(
await assert_failure_await(func(): await assert_func(value_provider, "int_value", []) \
.override_failure_message("Custom failure message") \
.wait_until(100) \
.is_equal(42))
).has_message("Custom failure message")
@warning_ignore("unused_parameter")
func test_invalid_function(timeout = 100):
if is_skip_fail_await():
return
(
await assert_failure_await(func(): await assert_func(self, "invalid_func_name", [])\
.wait_until(1000)\
.is_equal(42))
).starts_with_message("The function 'invalid_func_name' do not exists checked instance")