## Tests for GiftBox — CLOSED/OPENING/OPEN state machine transitions. extends GutTest var _box: GiftBox func before_each() -> void: _box = preload("res://scenes/objects/GiftBox.tscn").instantiate() as GiftBox add_child_autofree(_box) func test_initial_state_is_closed() -> void: assert_eq(_box._state, GiftBox.State.CLOSED) func test_ready_hides_gift_node() -> void: var gift: Node2D = _box.get_node("Gift") as Node2D assert_eq(gift.modulate.a, 0.0) func test_start_opening_transitions_to_opening() -> void: _box._start_opening() assert_eq(_box._state, GiftBox.State.OPENING) func test_on_lid_opened_transitions_to_open() -> void: _box._start_opening() _box._on_lid_opened() assert_eq(_box._state, GiftBox.State.OPEN) func test_input_ignored_when_state_is_opening() -> void: _box._state = GiftBox.State.OPENING var event: InputEventScreenTouch = InputEventScreenTouch.new() event.pressed = true event.position = _box.global_position _box._input(event) assert_eq(_box._state, GiftBox.State.OPENING) func test_input_ignored_when_state_is_open() -> void: _box._state = GiftBox.State.OPEN var event: InputEventScreenTouch = InputEventScreenTouch.new() event.pressed = true event.position = _box.global_position _box._input(event) assert_eq(_box._state, GiftBox.State.OPEN) func test_tap_outside_hitbox_does_not_open() -> void: var event: InputEventScreenTouch = InputEventScreenTouch.new() event.pressed = true event.position = _box.global_position + Vector2(200.0, 200.0) _box._input(event) assert_eq(_box._state, GiftBox.State.CLOSED) func test_release_event_does_not_open() -> void: var event: InputEventScreenTouch = InputEventScreenTouch.new() event.pressed = false event.position = _box.global_position _box._input(event) assert_eq(_box._state, GiftBox.State.CLOSED)