chore: add GUT test framework
This commit is contained in:
258
addons/gut/test/unit/test_test_await_methods.gd
Normal file
258
addons/gut/test/unit/test_test_await_methods.gd
Normal file
@@ -0,0 +1,258 @@
|
||||
extends GutTest
|
||||
|
||||
class TimedSignaler:
|
||||
extends Node2D
|
||||
|
||||
signal the_signal
|
||||
|
||||
var _timer = null
|
||||
|
||||
func _ready():
|
||||
_timer = Timer.new()
|
||||
add_child(_timer)
|
||||
_timer.timeout.connect(_on_timer_timeout)
|
||||
_timer.one_shot = true
|
||||
|
||||
func _on_timer_timeout():
|
||||
# print(self, " emitting the_signal")
|
||||
the_signal.emit()
|
||||
|
||||
func emit_after(time):
|
||||
_timer.set_wait_time(time)
|
||||
_timer.start()
|
||||
|
||||
|
||||
class Counter:
|
||||
extends Node
|
||||
|
||||
var idle_time = 0.0
|
||||
var idle_frames = 0
|
||||
|
||||
var physics_time = 0.0
|
||||
var physics_frames = 0
|
||||
|
||||
func _physics_process(delta):
|
||||
physics_time += delta
|
||||
physics_frames += 1
|
||||
|
||||
func _process(delta):
|
||||
idle_time += delta
|
||||
idle_frames += 1
|
||||
|
||||
|
||||
class PredicateMethods:
|
||||
var times_called = 0
|
||||
|
||||
func called_x_times(x):
|
||||
times_called += 1
|
||||
return times_called == x
|
||||
|
||||
func not_called_x_times(x):
|
||||
times_called += 1
|
||||
return times_called != x
|
||||
|
||||
|
||||
class TestYeOldYieldMethods:
|
||||
extends GutTest
|
||||
|
||||
var counter = null
|
||||
func before_each():
|
||||
counter = add_child_autoqfree(Counter.new())
|
||||
|
||||
func test_wait_frames_waits_for_x_frames():
|
||||
await yield_frames(30)
|
||||
assert_between(counter.physics_frames, 29, 31)
|
||||
|
||||
func test_wait_to_ends_when_signal_emitted(_x = run_x_times(5)):
|
||||
var signaler = add_child_autoqfree(TimedSignaler.new())
|
||||
signaler.emit_after(.5)
|
||||
await yield_to(signaler, 'the_signal', 10)
|
||||
assert_between(counter.idle_time, .49, .54)
|
||||
|
||||
func test_wait_to_ends_at_max_wait_if_signal_not_emitted():
|
||||
var signaler = add_child_autoqfree(TimedSignaler.new())
|
||||
await yield_to(signaler, 'the_signal', 1)
|
||||
assert_between(counter.idle_time, .9, 1.1)
|
||||
|
||||
func test_wait_for_waits_for_x_seconds():
|
||||
await wait_seconds(.5)
|
||||
assert_between(counter.physics_time, .49, .54)
|
||||
|
||||
|
||||
|
||||
class TestTheNewWaitMethods:
|
||||
extends GutInternalTester
|
||||
|
||||
var counter = null
|
||||
func before_each():
|
||||
counter = add_child_autoqfree(Counter.new())
|
||||
|
||||
func test_wait_frames_is_deprecated():
|
||||
var t = autofree(GutTest.new())
|
||||
t.set_logger(GutLogger.new())
|
||||
t._awaiter = autofree(double(load('res://addons/gut/awaiter.gd')).new())
|
||||
t.wait_frames(5)
|
||||
assert_deprecated(t)
|
||||
|
||||
func test_wait_for_waits_for_x_seconds():
|
||||
await wait_seconds(.5)
|
||||
assert_between(counter.physics_time, .49, .54)
|
||||
|
||||
func test_wait_physics_frames_waits_for_x_frames():
|
||||
await wait_physics_frames(30)
|
||||
assert_between(counter.physics_frames, 29, 31)
|
||||
|
||||
func test_wait_process_frames_waits_for_x_frames():
|
||||
await wait_process_frames(30)
|
||||
assert_between(counter.idle_frames, 29, 31)
|
||||
|
||||
func test_wait_idle_frames_waits_for_x_frames():
|
||||
await wait_idle_frames(30)
|
||||
assert_between(counter.idle_frames, 29, 31)
|
||||
|
||||
|
||||
func test_wait_for_signal_does_not_wait_too_long(_x = run_x_times(5)):
|
||||
var signaler = add_child_autoqfree(TimedSignaler.new())
|
||||
signaler.emit_after(.5)
|
||||
await wait_for_signal(signaler.the_signal, 10)
|
||||
assert_between(counter.idle_time, .49, .54)
|
||||
|
||||
|
||||
func test_wait_for_signal_ends_when_signal_emitted():
|
||||
var signaler = add_child_autoqfree(TimedSignaler.new())
|
||||
signaler.emit_after(.5)
|
||||
await wait_for_signal(signaler.the_signal, 10)
|
||||
assert_almost_eq(counter.idle_time, .5, .05)
|
||||
assert_false(did_wait_timeout(), 'did_wait_timeout')
|
||||
|
||||
func test_wait_to_ends_at_max_wait_if_signal_not_emitted():
|
||||
var signaler = add_child_autoqfree(TimedSignaler.new())
|
||||
await wait_for_signal(signaler.the_signal, 1)
|
||||
assert_between(counter.idle_time, .9, 1.1)
|
||||
assert_true(did_wait_timeout(), 'did_wait_timeout')
|
||||
|
||||
func test_wait_for_signal_returns_true_when_signal_emitted():
|
||||
var signaler = add_child_autoqfree(TimedSignaler.new())
|
||||
signaler.emit_after(.5)
|
||||
var result = await wait_for_signal(signaler.the_signal, 10)
|
||||
assert_true(result)
|
||||
|
||||
func test_wait_for_signal_returns_false_when_signal_not_emitted():
|
||||
var signaler = add_child_autoqfree(TimedSignaler.new())
|
||||
signaler.emit_after(10)
|
||||
var result = await wait_for_signal(signaler.the_signal, .5)
|
||||
assert_false(result)
|
||||
|
||||
|
||||
class TestWaitUntil:
|
||||
extends GutInternalTester
|
||||
|
||||
var counter = null
|
||||
func before_each():
|
||||
counter = add_child_autoqfree(Counter.new())
|
||||
|
||||
|
||||
func test_wait_until_waits_ends_when_method_returns_true():
|
||||
var all_is_good = func():
|
||||
return counter.physics_time > .25
|
||||
|
||||
await wait_until(all_is_good, .5)
|
||||
assert_almost_eq(counter.idle_time, .25, .05)
|
||||
assert_false(did_wait_timeout(), 'did_wait_timeout')
|
||||
|
||||
func test_wait_until_times_out():
|
||||
var all_is_good = func():
|
||||
return false
|
||||
|
||||
await wait_until(all_is_good, .5)
|
||||
assert_almost_eq(counter.idle_time, .5, .05)
|
||||
assert_true(did_wait_timeout(), 'did_wait_timeout')
|
||||
|
||||
func test_wait_until_returns_true_when_it_finishes():
|
||||
var all_is_good = func():
|
||||
return counter.physics_time > .25
|
||||
|
||||
var result = await wait_until(all_is_good, .5)
|
||||
assert_true(result)
|
||||
|
||||
func test_wait_until_returns_false_when_it_times_out():
|
||||
var all_is_good = func():
|
||||
return false
|
||||
|
||||
var result = await wait_until(all_is_good, .5)
|
||||
assert_false(result)
|
||||
|
||||
|
||||
func test_wait_until_accepts_time_between():
|
||||
var pred_methods = PredicateMethods.new()
|
||||
var method = pred_methods.called_x_times.bind(10)
|
||||
|
||||
await wait_until(method, 1.1, .25)
|
||||
assert_eq(pred_methods.times_called, 4)
|
||||
|
||||
|
||||
func test_wait_until_resets_time_between_counter():
|
||||
var pred_methods = PredicateMethods.new()
|
||||
var method = pred_methods.called_x_times.bind(10)
|
||||
|
||||
await wait_until(method, 1.1, .75)
|
||||
pred_methods.times_called = 0
|
||||
await wait_until(method, 1.1, .2)
|
||||
assert_eq(pred_methods.times_called, 5)
|
||||
|
||||
|
||||
|
||||
|
||||
class TestWaitWhile:
|
||||
extends GutInternalTester
|
||||
|
||||
var counter = null
|
||||
func before_each():
|
||||
counter = add_child_autoqfree(Counter.new())
|
||||
|
||||
|
||||
func test_ends_when_method_returns_false():
|
||||
var all_is_bad = func():
|
||||
return counter.idle_time < .25
|
||||
|
||||
await wait_while(all_is_bad, .5)
|
||||
assert_almost_eq(counter.idle_time, .25, .05)
|
||||
assert_false(did_wait_timeout(), 'did_wait_timeout')
|
||||
|
||||
|
||||
func test_times_out():
|
||||
var never_false = func(): return true
|
||||
|
||||
await wait_while(never_false, .5)
|
||||
assert_almost_eq(counter.idle_time, .5, .05)
|
||||
assert_true(did_wait_timeout(), 'did_wait_timeout')
|
||||
|
||||
func test_wait_until_returns_true_when_it_finishes():
|
||||
var all_is_bad = func():
|
||||
return counter.idle_time < .25
|
||||
|
||||
var result = await wait_while(all_is_bad, .5)
|
||||
assert_true(result)
|
||||
|
||||
func test_wait_until_returns_false_when_it_times_out():
|
||||
var never_false = func(): return true
|
||||
var result = await wait_while(never_false, .5)
|
||||
assert_false(result)
|
||||
|
||||
|
||||
func test_wait_until_accepts_time_between():
|
||||
var pred_methods = PredicateMethods.new()
|
||||
var method = pred_methods.not_called_x_times.bind(10)
|
||||
|
||||
await wait_while(method, 1.1, .25)
|
||||
assert_eq(pred_methods.times_called, 4)
|
||||
|
||||
|
||||
func test_wait_until_resets_time_between_counter():
|
||||
var pred_methods = PredicateMethods.new()
|
||||
var method = pred_methods.not_called_x_times.bind(10)
|
||||
|
||||
await wait_while(method, 1.1, .75)
|
||||
pred_methods.times_called = 0
|
||||
await wait_while(method, 1.1, .2)
|
||||
assert_eq(pred_methods.times_called, 5)
|
||||
Reference in New Issue
Block a user