Files
game-cards/addons/gut/test/integration/test_doubler_and_spy.gd
2026-05-29 09:16:10 +08:00

75 lines
2.8 KiB
GDScript

extends GutInternalTester
class TestBoth:
extends GutInternalTester
const INIT_PARAMETERS = 'res://test/resources/stub_test_objects/init_parameters.gd'
var InitParameters = load(INIT_PARAMETERS)
var _spy = null
var _doubler = null
func before_each():
_spy = GutUtils.Spy.new()
_doubler = GutUtils.Doubler.new()
_doubler.set_spy(_spy)
# var stubber = GutUtils.Stubber.new()
# _doubler.set_stubber(stubber)
func after_each():
_spy.clear()
func test_spy_is_set_in_metadata():
var inst = autofree(_doubler.double(DoubleMe).new())
assert_eq(inst.__gutdbl.spy_ref.get_ref(), _spy)
func test_when_doubled_method_called_spy_sees_it():
var inst = autofree(_doubler.double(DoubleMe).new())
inst.set_value(5)
assert_true(_spy.was_called(inst, 'set_value'))
func test_when_doubled_method_called_it_sends_parameters():
var inst = autofree(_doubler.double(DoubleMe).new())
inst.set_value(5)
assert_true(_spy.was_called(inst, 'set_value', [5]))
func test_it_works_with_two_parameters_too():
var inst = autofree(_doubler.double(DoubleMe).new())
inst.has_two_params_one_default('a', 'b')
assert_false(_spy.was_called(inst, 'has_two_params_one_default', ['c', 'd']), 'should not match')
assert_true(_spy.was_called(inst, 'has_two_params_one_default', ['a', 'b']), 'should match')
func test_can_spy_on_built_ins_when_doing_a_full_double():
_doubler.set_strategy(DOUBLE_STRATEGY.INCLUDE_NATIVE)
var inst = autofree(_doubler.double(DoubleMe).new())
# add_user_signal is a function on Object that isn't in our subclass.
inst.add_user_signal('new_signal', [])
inst.add_user_signal('signal_with_params', ['a', 'b'])
assert_true(_spy.was_called(inst, 'add_user_signal'), 'added first signal')
assert_true(_spy.was_called(inst, 'add_user_signal', ['signal_with_params', ['a', 'b']]), 'second signal added')
func test_can_spy_on_native_doubles():
var inst = autofree(_doubler.partial_double_gdnative(Node2D).new())
inst.set_position(Vector2(20, 20))
assert_true(_spy.was_called(inst, 'set_position'))
assert_true(_spy.was_called(inst, 'set_position', [Vector2(20, 20)]))
func test_can_spy_on_singleton_doubles():
var inst = _doubler.double_singleton(Input).new()
inst.is_action_just_pressed("foobar")
assert_true(_spy.was_called(inst, "is_action_just_pressed"))
func test_can_spy_on_singleton_parameters():
var inst = _doubler.double_singleton(OS).new()
inst.is_process_running(5)
assert_true(_spy.was_called(inst, 'is_process_running', [5]))
func test_can_spy_on_init():
var inst = _doubler.double(InitParameters).new('test_value')
assert_true(_spy.was_called(inst, '_init'))
func test_can_spy_on_init_parameters():
var inst = _doubler.double(InitParameters).new('test_value')
assert_true(_spy.was_called(inst, '_init', ['test_value']))