Vendor gdUnit4 for Godot 4 client testing (D-030). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1063 lines
39 KiB
GDScript
1063 lines
39 KiB
GDScript
@warning_ignore_start("redundant_await", "unsafe_method_access")
|
|
# GdUnit generated TestSuite
|
|
extends GdUnitTestSuite
|
|
|
|
# TestSuite generated from
|
|
const __source = 'res://addons/gdUnit4/src/core/GdUnitSceneRunner.gd'
|
|
|
|
|
|
var _runner :GdUnitSceneRunner
|
|
var _scene_spy :Node
|
|
|
|
|
|
func before_test() -> void:
|
|
_scene_spy = spy("res://addons/gdUnit4/test/mocker/resources/scenes/TestScene.tscn")
|
|
_runner = scene_runner(_scene_spy)
|
|
# do handle outstanding events
|
|
await _runner.await_input_processed()
|
|
assert_initial_action_state()
|
|
assert_inital_mouse_state()
|
|
assert_inital_key_state()
|
|
# reset to inital state
|
|
reset(_scene_spy)
|
|
verify_no_more_interactions(_scene_spy)
|
|
|
|
|
|
# asserts to action strings
|
|
func assert_initial_action_state() -> void:
|
|
for action in InputMap.get_actions():
|
|
assert_bool(Input.is_action_pressed(action, true)).is_false()
|
|
|
|
|
|
# asserts to KeyList Enums
|
|
func assert_inital_key_state() -> void:
|
|
# scacode 4194304-4194415
|
|
for key in range(KEY_SPECIAL, KEY_LAUNCHF):
|
|
assert_bool(Input.is_key_pressed(key)).is_false()
|
|
assert_bool(Input.is_physical_key_pressed(key)).is_false()
|
|
# keycode 32-255
|
|
for key in range(KEY_SPACE, KEY_SECTION):
|
|
assert_bool(Input.is_key_pressed(key)).is_false()
|
|
assert_bool(Input.is_physical_key_pressed(key)).is_false()
|
|
|
|
|
|
#asserts to Mouse ButtonList Enums
|
|
func assert_inital_mouse_state() -> void:
|
|
for button :int in [
|
|
MOUSE_BUTTON_LEFT,
|
|
MOUSE_BUTTON_MIDDLE,
|
|
MOUSE_BUTTON_RIGHT,
|
|
MOUSE_BUTTON_XBUTTON1,
|
|
MOUSE_BUTTON_XBUTTON2,
|
|
MOUSE_BUTTON_WHEEL_UP,
|
|
MOUSE_BUTTON_WHEEL_DOWN,
|
|
MOUSE_BUTTON_WHEEL_LEFT,
|
|
MOUSE_BUTTON_WHEEL_RIGHT,
|
|
]:
|
|
assert_bool(Input.is_mouse_button_pressed(button))\
|
|
.override_failure_message("Expecting mouse button %s is not pressed state!" % 1)\
|
|
.is_false()
|
|
assert_that(Input.get_mouse_button_mask())\
|
|
.override_failure_message("Expecting mouse button mask %s is '0'!" % Input.get_mouse_button_mask())\
|
|
.is_equal(0)
|
|
|
|
|
|
func test_reset_to_inital_state_on_release() -> void:
|
|
var runner := scene_runner("res://addons/gdUnit4/test/mocker/resources/scenes/TestScene.tscn")
|
|
# simulate mouse buttons and key press but we never released it
|
|
runner.simulate_action_press("ui_up")
|
|
runner.simulate_mouse_button_press(MOUSE_BUTTON_LEFT)
|
|
runner.simulate_mouse_button_press(MOUSE_BUTTON_RIGHT)
|
|
runner.simulate_mouse_button_press(MOUSE_BUTTON_MIDDLE)
|
|
runner.simulate_key_press(KEY_0)
|
|
runner.simulate_key_press(KEY_X)
|
|
await await_idle_frame()
|
|
assert_bool(Input.is_action_pressed("ui_up")).is_true()
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT)).is_true()
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT)).is_true()
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_MIDDLE)).is_true()
|
|
assert_bool(Input.is_key_pressed(KEY_0)).is_true()
|
|
assert_bool(Input.is_key_pressed(KEY_X)).is_true()
|
|
# unreference the scene runner to enforce reset to initial Input state
|
|
runner._notification(NOTIFICATION_PREDELETE)
|
|
await await_idle_frame()
|
|
assert_bool(Input.is_action_pressed("ui_up")).is_false()
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT)).is_false()
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT)).is_false()
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_MIDDLE)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_0)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_X)).is_false()
|
|
|
|
|
|
func test_simulate_action_press() -> void:
|
|
# iterate over some example actions
|
|
var actions_to_simmulate :Array[String] = ["ui_up", "ui_down", "ui_left", "ui_right"]
|
|
for action in actions_to_simmulate:
|
|
assert_bool(InputMap.has_action(action)).is_true()
|
|
_runner.simulate_action_press(action)
|
|
await _runner.await_input_processed()
|
|
|
|
assert_bool(Input.is_action_pressed(action))\
|
|
.override_failure_message("Expect the action '%s' is pressed" % action).is_true()
|
|
assert_float(Input.get_action_strength(action))\
|
|
.is_equal_approx(1.0, 0.1)
|
|
assert_float(_runner.get_property("_last_pressed_strength"))\
|
|
.is_equal_approx(1.0, 0.1)
|
|
|
|
# other actions are not pressed
|
|
for action :String in ["ui_accept", "ui_select", "ui_cancel"]:
|
|
assert_bool(Input.is_action_pressed(action))\
|
|
.override_failure_message("Expect the action '%s' is NOT pressed" % action).is_false()
|
|
|
|
|
|
func test_simulate_action_release() -> void:
|
|
# iterate over some example actions
|
|
var actions_to_simmulate :Array[String] = ["ui_up", "ui_down", "ui_left", "ui_right"]
|
|
for action in actions_to_simmulate:
|
|
assert_bool(InputMap.has_action(action)).is_true()
|
|
_runner.simulate_action_press(action)
|
|
await await_idle_frame()
|
|
_runner.simulate_action_release(action)
|
|
|
|
assert_bool(Input.is_action_just_released(action))\
|
|
.override_failure_message("Expect the action '%s' is released" % action).is_true()
|
|
# other actions are not pressed
|
|
for action :String in ["ui_accept", "ui_select", "ui_cancel"]:
|
|
assert_bool(Input.is_action_pressed(action))\
|
|
.override_failure_message("Expect the action '%s' is NOT pressed" % action).is_false()
|
|
|
|
|
|
func test_simulate_key_press() -> void:
|
|
# iterate over some example keys
|
|
for key :int in [KEY_A, KEY_D, KEY_X, KEY_0]:
|
|
_runner.simulate_key_press(key)
|
|
await _runner.await_input_processed()
|
|
|
|
var event := InputEventKey.new()
|
|
event.keycode = key as Key
|
|
event.physical_keycode = key as Key
|
|
event.unicode = key
|
|
event.pressed = true
|
|
verify(_scene_spy, 1)._input(event)
|
|
assert_bool(Input.is_key_pressed(key)).is_true()
|
|
# verify all this keys are still handled as pressed
|
|
assert_bool(Input.is_key_pressed(KEY_A)).is_true()
|
|
assert_bool(Input.is_key_pressed(KEY_D)).is_true()
|
|
assert_bool(Input.is_key_pressed(KEY_X)).is_true()
|
|
assert_bool(Input.is_key_pressed(KEY_0)).is_true()
|
|
# other keys are not pressed
|
|
assert_bool(Input.is_key_pressed(KEY_B)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_G)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_Z)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_1)).is_false()
|
|
|
|
|
|
# Simulates pressing shift+A
|
|
# Verified with "res://addons/gdUnit4/test/core/InputEventTestScene.tscn"
|
|
func test_simulate_key_press_SHIFT_and_A() -> void:
|
|
# press shift + A
|
|
_runner.simulate_key_press(KEY_SHIFT)
|
|
_runner.simulate_key_press(KEY_A)
|
|
await _runner.await_input_processed()
|
|
|
|
# We expect key A is pressed and also the modifier shift key
|
|
assert_bool(Input.is_key_pressed(KEY_A)).is_true()
|
|
assert_bool(Input.is_key_pressed(KEY_SHIFT)).is_true()
|
|
assert_bool(Input.is_key_pressed(KEY_ALT)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_CTRL)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_META)).is_false()
|
|
|
|
# In addition we need to verify we emit two input events:
|
|
# first the shift key is pressing (Shift)
|
|
var event := InputEventKey.new()
|
|
event.keycode = KEY_SHIFT
|
|
event.physical_keycode = KEY_SHIFT
|
|
event.unicode = KEY_SHIFT as int
|
|
event.pressed = true
|
|
event.shift_pressed = false
|
|
event.alt_pressed = false
|
|
event.ctrl_pressed = false
|
|
event.meta_pressed = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
# second in addition the key A is pressing (Shift+A)
|
|
event = InputEventKey.new()
|
|
event.keycode = KEY_A
|
|
event.physical_keycode = KEY_A
|
|
event.unicode = KEY_A as int
|
|
event.pressed = true
|
|
event.shift_pressed = true
|
|
event.alt_pressed = false
|
|
event.ctrl_pressed = false
|
|
event.meta_pressed = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
verify_no_more_interactions(_scene_spy)
|
|
|
|
|
|
# Simulate pressing key A and shift
|
|
# Verified with "res://addons/gdUnit4/test/core/InputEventTestScene.tscn"
|
|
func test_simulate_key_press_A_and_SHIFT() -> void:
|
|
# press key A + shift
|
|
_runner.simulate_key_press(KEY_A)
|
|
_runner.simulate_key_press(KEY_SHIFT)
|
|
await _runner.await_input_processed()
|
|
|
|
# We expect key A is pressed and also the modifier shift key
|
|
assert_bool(Input.is_key_pressed(KEY_A)).is_true()
|
|
assert_bool(Input.is_key_pressed(KEY_SHIFT)).is_true()
|
|
assert_bool(Input.is_key_pressed(KEY_ALT)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_CTRL)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_META)).is_false()
|
|
|
|
# In addition we need to verify we emit two input events:
|
|
# first the shift a is pressing (A)
|
|
var event := InputEventKey.new()
|
|
event.keycode = KEY_A
|
|
event.physical_keycode = KEY_A
|
|
event.unicode = KEY_A as int
|
|
event.pressed = true
|
|
event.shift_pressed = false
|
|
event.alt_pressed = false
|
|
event.ctrl_pressed = false
|
|
event.meta_pressed = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
# second in addition the key shift is pressing (Shift)
|
|
event = InputEventKey.new()
|
|
event.keycode = KEY_SHIFT
|
|
event.physical_keycode = KEY_SHIFT
|
|
event.unicode = KEY_SHIFT as int
|
|
event.pressed = true
|
|
event.shift_pressed = false
|
|
event.alt_pressed = false
|
|
event.ctrl_pressed = false
|
|
event.meta_pressed = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
verify_no_more_interactions(_scene_spy)
|
|
|
|
|
|
# Simulate releasing key shift+A
|
|
# Verified with "res://addons/gdUnit4/test/core/InputEventTestScene.tscn"
|
|
func test_simulate_key_released_SHIFT_and_A() -> void:
|
|
# release shift + A
|
|
_runner.simulate_key_release(KEY_SHIFT)
|
|
_runner.simulate_key_release(KEY_A)
|
|
await _runner.await_input_processed()
|
|
|
|
# We expect key A is NOT pressed (it was released) and no modifier keys
|
|
assert_bool(Input.is_key_pressed(KEY_A)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_SHIFT)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_ALT)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_CTRL)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_META)).is_false()
|
|
|
|
# In addition we need to verify we emit two input events:
|
|
# first the shift+a key is released (Shift+A)
|
|
var event := InputEventKey.new()
|
|
event.keycode = KEY_A
|
|
event.physical_keycode = KEY_A
|
|
event.unicode = KEY_A as int
|
|
event.pressed = false
|
|
event.shift_pressed = true
|
|
event.alt_pressed = false
|
|
event.ctrl_pressed = false
|
|
event.meta_pressed = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
# second in addition the shift is released (Shift)
|
|
event = InputEventKey.new()
|
|
event.keycode = KEY_SHIFT
|
|
event.physical_keycode = KEY_SHIFT
|
|
event.unicode = KEY_SHIFT as int
|
|
event.pressed = false
|
|
event.shift_pressed = false
|
|
event.alt_pressed = false
|
|
event.ctrl_pressed = false
|
|
event.meta_pressed = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
verify_no_more_interactions(_scene_spy)
|
|
|
|
|
|
# Simulate pressed key shift+A
|
|
# Verified with "res://addons/gdUnit4/test/core/InputEventTestScene.tscn"
|
|
func test_simulate_key_pressed_SHIFT_and_A() -> void:
|
|
# release shift + A
|
|
await _runner.simulate_key_pressed(KEY_SHIFT)
|
|
await _runner.simulate_key_pressed(KEY_A)
|
|
|
|
# We expect key A is NOT pressed (it was press and released) and no modifier keys
|
|
assert_bool(Input.is_key_pressed(KEY_A)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_SHIFT)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_ALT)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_CTRL)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_META)).is_false()
|
|
|
|
# In addition, we need to check whether we output two input events:
|
|
# first the shift key is pressing (Shift+A)
|
|
var event := InputEventKey.new()
|
|
event.keycode = KEY_A
|
|
event.physical_keycode = KEY_A
|
|
event.unicode = KEY_A as int
|
|
event.pressed = true
|
|
event.shift_pressed = true
|
|
event.alt_pressed = false
|
|
event.ctrl_pressed = false
|
|
event.meta_pressed = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
# second in addition the key A is released (Shift+A)
|
|
event = InputEventKey.new()
|
|
event.keycode = KEY_A
|
|
event.physical_keycode = KEY_A
|
|
event.unicode = KEY_A as int
|
|
event.pressed = false
|
|
event.shift_pressed = true
|
|
event.alt_pressed = false
|
|
event.ctrl_pressed = false
|
|
event.meta_pressed = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
|
|
# Simulate pressing key A + set shift modifier
|
|
# @deprecated
|
|
func test_simulate_key_press_A_with_shift_modifier() -> void:
|
|
# press key A + modifier shift
|
|
_runner.simulate_key_press(KEY_A, true)
|
|
await _runner.await_input_processed()
|
|
|
|
# We expect key A is pressing only and no modifier keys
|
|
assert_bool(Input.is_key_pressed(KEY_A)).is_true()
|
|
assert_bool(Input.is_key_pressed(KEY_SHIFT)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_ALT)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_CTRL)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_META)).is_false()
|
|
|
|
# In addition we need to verify we emit one input events:
|
|
# the key A + modifier shift is pressing (Shift+A)
|
|
var event := InputEventKey.new()
|
|
event = InputEventKey.new()
|
|
event.keycode = KEY_A
|
|
event.physical_keycode = KEY_A
|
|
event.unicode = KEY_A as int
|
|
event.pressed = true
|
|
event.shift_pressed = true
|
|
event.alt_pressed = false
|
|
event.ctrl_pressed = false
|
|
event.meta_pressed = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
verify_no_more_interactions(_scene_spy)
|
|
|
|
|
|
# Simulate releasing key A + set shift modifier
|
|
# @deprecated
|
|
func test_simulate_key_released_A_with_shift_modifier() -> void:
|
|
# release key A + modifiere shift
|
|
_runner.simulate_key_release(KEY_A, true)
|
|
await _runner.await_input_processed()
|
|
|
|
# We expect key A is NOT pressing and also no modifier keys
|
|
assert_bool(Input.is_key_pressed(KEY_A)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_SHIFT)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_ALT)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_CTRL)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_META)).is_false()
|
|
|
|
# In addition we need to verify we emit one input events:
|
|
# The key A and modifier shift is released (Shift+A)
|
|
var event := InputEventKey.new()
|
|
event.keycode = KEY_A
|
|
event.physical_keycode = KEY_A
|
|
event.unicode = KEY_A as int
|
|
event.pressed = false
|
|
event.shift_pressed = true
|
|
event.alt_pressed = false
|
|
event.ctrl_pressed = false
|
|
event.meta_pressed = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
verify_no_more_interactions(_scene_spy)
|
|
|
|
|
|
# Simulate pressed key A + set shift modifier
|
|
# @deprecated
|
|
func test_simulate_key_pressed_A_with_shift_modifier() -> void:
|
|
# release key A + modifier shift
|
|
await _runner.simulate_key_pressed(KEY_A, true)
|
|
|
|
# We expect key A is NOT pressing (was press and released) and also no modifier keys
|
|
assert_bool(Input.is_key_pressed(KEY_SHIFT)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_ALT)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_CTRL)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_META)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_A)).is_false()
|
|
|
|
# In addition, we need to check whether we output two input events:
|
|
# first the key a + modifier shift is pressing (Shift+A)
|
|
var event := InputEventKey.new()
|
|
event.keycode = KEY_A
|
|
event.physical_keycode = KEY_A
|
|
event.unicode = KEY_A as int
|
|
event.pressed = true
|
|
event.shift_pressed = true
|
|
event.alt_pressed = false
|
|
event.ctrl_pressed = false
|
|
event.meta_pressed = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
# second in addition the key a + modifier shift is released (Shift+A)
|
|
event = InputEventKey.new()
|
|
event.keycode = KEY_A
|
|
event.physical_keycode = KEY_A
|
|
event.unicode = KEY_A as int
|
|
event.pressed = false
|
|
event.shift_pressed = true
|
|
event.alt_pressed = false
|
|
event.ctrl_pressed = false
|
|
event.meta_pressed = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
verify_no_more_interactions(_scene_spy)
|
|
|
|
|
|
func test_simulate_many_keys_press() -> void:
|
|
# press and hold keys W and Z
|
|
_runner.simulate_key_press(KEY_W)
|
|
_runner.simulate_key_press(KEY_Z)
|
|
await _runner.await_input_processed()
|
|
|
|
assert_bool(Input.is_key_pressed(KEY_W)).is_true()
|
|
assert_bool(Input.is_physical_key_pressed(KEY_W)).is_true()
|
|
assert_bool(Input.is_key_pressed(KEY_Z)).is_true()
|
|
assert_bool(Input.is_physical_key_pressed(KEY_Z)).is_true()
|
|
|
|
#now release key w
|
|
_runner.simulate_key_release(KEY_W)
|
|
await _runner.await_input_processed()
|
|
|
|
assert_bool(Input.is_key_pressed(KEY_W)).is_false()
|
|
assert_bool(Input.is_physical_key_pressed(KEY_W)).is_false()
|
|
assert_bool(Input.is_key_pressed(KEY_Z)).is_true()
|
|
assert_bool(Input.is_physical_key_pressed(KEY_Z)).is_true()
|
|
|
|
|
|
@warning_ignore("unsafe_property_access")
|
|
func test_simulate_keypressed_as_action() -> void:
|
|
# add custom action `player_jump` for key 'Space' is pressed
|
|
var event := InputEventKey.new()
|
|
event.keycode = KEY_SPACE
|
|
InputMap.add_action("player_jump")
|
|
InputMap.action_add_event("player_jump", event)
|
|
var runner := scene_runner("res://addons/gdUnit4/test/core/resources/scenes/input_actions/InputEventTestScene.tscn")
|
|
|
|
# precondition checks
|
|
var action_event := InputMap.action_get_events("player_jump")
|
|
assert_array(action_event).contains_exactly([event])
|
|
assert_bool(Input.is_action_just_released("player_jump", true)).is_false()
|
|
assert_bool(Input.is_action_just_released("ui_accept", true)).is_false()
|
|
assert_bool(Input.is_action_just_released("ui_select", true)).is_false()
|
|
@warning_ignore("unsafe_property_access")
|
|
assert_bool(runner.scene()._player_jump_action_released).is_false()
|
|
|
|
await runner.simulate_key_pressed(KEY_SPACE)
|
|
# it is important do not wait for next frame here, otherwise the input action cache is cleared and can't be use to verify
|
|
assert_bool(Input.is_action_just_released("player_jump", true)).is_true()
|
|
assert_bool(Input.is_action_just_released("ui_accept", true)).is_true()
|
|
assert_bool(Input.is_action_just_released("ui_select", true)).is_true()
|
|
@warning_ignore("unsafe_property_access")
|
|
assert_bool(runner.scene()._player_jump_action_released).is_true()
|
|
|
|
# test a key event is not trigger the custom action event
|
|
# simulate press only space+ctrl
|
|
runner._reset_input_to_default()
|
|
# @deprecated
|
|
runner.simulate_key_pressed(KEY_SPACE, false, true)
|
|
# it is important do not wait for next frame here, otherwise the input action cache is cleared and can't be use to verify
|
|
assert_bool(Input.is_action_just_released("player_jump", true)).is_false()
|
|
assert_bool(Input.is_action_just_released("ui_accept", true)).is_false()
|
|
assert_bool(Input.is_action_just_released("ui_select", true)).is_false()
|
|
@warning_ignore("unsafe_property_access")
|
|
assert_bool(runner.scene()._player_jump_action_released).is_false()
|
|
|
|
# cleanup custom action
|
|
InputMap.action_erase_events("player_jump")
|
|
InputMap.erase_action("player_jump")
|
|
|
|
|
|
func test_simulate_set_mouse_pos() -> void:
|
|
# save current global mouse pos
|
|
var gmp := _runner.get_global_mouse_position()
|
|
# set mouse to pos 100, 100
|
|
_runner.set_mouse_position(Vector2(100, 100))
|
|
await _runner.await_input_processed()
|
|
var event := InputEventMouseMotion.new()
|
|
event.position = Vector2(100, 100)
|
|
GodotVersionFixures.set_event_global_position(event, gmp)
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
# set mouse to pos 800, 400
|
|
gmp = _runner.get_global_mouse_position()
|
|
_runner.set_mouse_position(Vector2(800, 400))
|
|
await _runner.await_input_processed()
|
|
event = InputEventMouseMotion.new()
|
|
event.position = Vector2(800, 400)
|
|
GodotVersionFixures.set_event_global_position(event, gmp)
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
# and again back to 100,100
|
|
reset(_scene_spy)
|
|
gmp = _runner.get_global_mouse_position()
|
|
_runner.set_mouse_position(Vector2(100, 100))
|
|
await _runner.await_input_processed()
|
|
event = InputEventMouseMotion.new()
|
|
event.position = Vector2(100, 100)
|
|
GodotVersionFixures.set_event_global_position(event, gmp)
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
|
|
func test_simulate_set_mouse_pos_with_modifiers() -> void:
|
|
var is_alt := false
|
|
var is_control := false
|
|
var is_shift := false
|
|
|
|
for modifier :int in [KEY_SHIFT, KEY_CTRL, KEY_ALT]:
|
|
is_alt = is_alt or KEY_ALT == modifier
|
|
is_control = is_control or KEY_CTRL == modifier
|
|
is_shift = is_shift or KEY_SHIFT == modifier
|
|
|
|
for mouse_button :int in [MOUSE_BUTTON_LEFT, MOUSE_BUTTON_MIDDLE, MOUSE_BUTTON_RIGHT]:
|
|
# simulate press shift, set mouse pos and final press mouse button
|
|
var gmp := _runner.get_global_mouse_position()
|
|
_runner.simulate_key_press(modifier)
|
|
_runner.set_mouse_position(Vector2.ZERO)
|
|
_runner.simulate_mouse_button_press(mouse_button)
|
|
await _runner.await_input_processed()
|
|
|
|
var event := InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.alt_pressed = is_alt
|
|
event.ctrl_pressed = is_control
|
|
event.shift_pressed = is_shift
|
|
event.pressed = true
|
|
event.button_index = mouse_button as MouseButton
|
|
event.button_mask = GdUnitSceneRunnerImpl.MAP_MOUSE_BUTTON_MASKS.get(mouse_button)
|
|
verify(_scene_spy, 1)._input(event)
|
|
assert_bool(Input.is_mouse_button_pressed(mouse_button)).is_true()
|
|
# finally release it
|
|
_runner.simulate_mouse_button_release(mouse_button)
|
|
await _runner.await_input_processed()
|
|
|
|
|
|
func test_simulate_mouse_move() -> void:
|
|
_runner.set_mouse_position(Vector2(10, 10))
|
|
var gmp := _runner.get_global_mouse_position()
|
|
_runner.simulate_mouse_move(Vector2(400, 100))
|
|
await _runner.await_input_processed()
|
|
|
|
var event := InputEventMouseMotion.new()
|
|
event.position = Vector2(400, 100)
|
|
GodotVersionFixures.set_event_global_position(event, gmp)
|
|
event.relative = Vector2(400, 100) - Vector2(10, 10)
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
# move mouse to next pos
|
|
gmp = _runner.get_global_mouse_position()
|
|
_runner.simulate_mouse_move(Vector2(55, 42))
|
|
await await_idle_frame()
|
|
|
|
event = InputEventMouseMotion.new()
|
|
event.position = Vector2(55, 42)
|
|
GodotVersionFixures.set_event_global_position(event, gmp)
|
|
event.relative = Vector2(55, 42) - Vector2(400, 100)
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
|
|
func test_simulate_mouse_move_relative() -> void:
|
|
#OS.window_minimized = false
|
|
_runner.set_mouse_position(Vector2(10, 10))
|
|
await _runner.await_input_processed()
|
|
assert_that(_runner.get_mouse_position()).is_equal(Vector2(10, 10))
|
|
|
|
# move the mouse in time of 1 second
|
|
# the final position is current + relative = Vector2(10, 10) + (Vector2(900, 400)
|
|
await _runner.simulate_mouse_move_relative(Vector2(900, 400), 1)
|
|
assert_vector(_runner.get_mouse_position()).is_equal_approx(Vector2(910, 410), Vector2.ONE)
|
|
|
|
# move the mouse back in time of 0.1 second
|
|
# Use the negative value of the previously moved action to move it back to the starting position
|
|
await _runner.simulate_mouse_move_relative(Vector2(-900, -400), 0.1)
|
|
assert_vector(_runner.get_mouse_position()).is_equal_approx(Vector2(10, 10), Vector2.ONE)
|
|
|
|
|
|
func test_simulate_mouse_move_absolute() -> void:
|
|
#OS.window_minimized = false
|
|
_runner.set_mouse_position(Vector2(10, 10))
|
|
await _runner.await_input_processed()
|
|
assert_that(_runner.get_mouse_position()).is_equal(Vector2(10, 10))
|
|
|
|
# move the mouse in time of 1 second
|
|
await _runner.simulate_mouse_move_absolute(Vector2(900, 400), 1)
|
|
assert_vector(_runner.get_mouse_position()).is_equal_approx(Vector2(900, 400), Vector2.ONE)
|
|
|
|
# move the mouse back in time of 0.1 second
|
|
await _runner.simulate_mouse_move_absolute(Vector2(10, 10), 0.1)
|
|
assert_vector(_runner.get_mouse_position()).is_equal_approx(Vector2(10, 10), Vector2.ONE)
|
|
|
|
|
|
func test_simulate_mouse_button_press_left() -> void:
|
|
# simulate mouse button press and hold
|
|
var gmp := _runner.get_global_mouse_position()
|
|
_runner.simulate_mouse_button_press(MOUSE_BUTTON_LEFT)
|
|
await _runner.await_input_processed()
|
|
|
|
var event := InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = true
|
|
event.button_index = MOUSE_BUTTON_LEFT
|
|
event.button_mask = GdUnitSceneRunnerImpl.MAP_MOUSE_BUTTON_MASKS.get(MOUSE_BUTTON_LEFT)
|
|
verify(_scene_spy, 1)._input(event)
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT)).is_true()
|
|
|
|
|
|
func test_simulate_mouse_button_press_left_doubleclick() -> void:
|
|
# simulate mouse button press double_click
|
|
var gmp := _runner.get_global_mouse_position()
|
|
_runner.simulate_mouse_button_press(MOUSE_BUTTON_LEFT, true)
|
|
await _runner.await_input_processed()
|
|
|
|
var event := InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = true
|
|
event.double_click = true
|
|
event.button_index = MOUSE_BUTTON_LEFT
|
|
event.button_mask = GdUnitSceneRunnerImpl.MAP_MOUSE_BUTTON_MASKS.get(MOUSE_BUTTON_LEFT)
|
|
verify(_scene_spy, 1)._input(event)
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT)).is_true()
|
|
|
|
|
|
func test_simulate_mouse_button_press_right() -> void:
|
|
# simulate mouse button press and hold
|
|
var gmp := _runner.get_global_mouse_position()
|
|
_runner.simulate_mouse_button_press(MOUSE_BUTTON_RIGHT)
|
|
await _runner.await_input_processed()
|
|
|
|
var event := InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = true
|
|
event.button_index = MOUSE_BUTTON_RIGHT
|
|
event.button_mask = GdUnitSceneRunnerImpl.MAP_MOUSE_BUTTON_MASKS.get(MOUSE_BUTTON_RIGHT)
|
|
verify(_scene_spy, 1)._input(event)
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT)).is_true()
|
|
|
|
|
|
func test_simulate_mouse_button_press_left_and_right() -> void:
|
|
# simulate mouse button press left+right
|
|
var gmp := _runner.get_global_mouse_position()
|
|
_runner.simulate_mouse_button_press(MOUSE_BUTTON_LEFT)
|
|
_runner.simulate_mouse_button_press(MOUSE_BUTTON_RIGHT)
|
|
await _runner.await_input_processed()
|
|
|
|
# results in two events, first is left mouse button
|
|
var event := InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = true
|
|
event.button_index = MOUSE_BUTTON_LEFT
|
|
event.button_mask = MOUSE_BUTTON_MASK_LEFT
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
# second is left+right and combined mask
|
|
event = InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = true
|
|
event.button_index = MOUSE_BUTTON_RIGHT
|
|
event.button_mask = MOUSE_BUTTON_MASK_LEFT|MOUSE_BUTTON_MASK_RIGHT
|
|
verify(_scene_spy, 1)._input(event)
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT)).is_true()
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT)).is_true()
|
|
assert_that(Input.get_mouse_button_mask()).is_equal(MOUSE_BUTTON_MASK_LEFT|MOUSE_BUTTON_MASK_RIGHT)
|
|
|
|
|
|
func test_simulate_mouse_button_press_left_and_right_and_release() -> void:
|
|
# simulate mouse button press left+right
|
|
var gmp := _runner.get_global_mouse_position()
|
|
_runner.simulate_mouse_button_press(MOUSE_BUTTON_LEFT)
|
|
_runner.simulate_mouse_button_press(MOUSE_BUTTON_RIGHT)
|
|
await _runner.await_input_processed()
|
|
|
|
# will results into two events
|
|
# first for left mouse button
|
|
var event := InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = true
|
|
event.button_index = MOUSE_BUTTON_LEFT
|
|
event.button_mask = MOUSE_BUTTON_MASK_LEFT
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
# second is left+right and combined mask
|
|
event = InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = true
|
|
event.button_index = MOUSE_BUTTON_RIGHT
|
|
event.button_mask = MOUSE_BUTTON_MASK_LEFT|MOUSE_BUTTON_MASK_RIGHT
|
|
verify(_scene_spy, 1)._input(event)
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT)).is_true()
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT)).is_true()
|
|
assert_that(Input.get_mouse_button_mask()).is_equal(MOUSE_BUTTON_MASK_LEFT|MOUSE_BUTTON_MASK_RIGHT)
|
|
|
|
# now release the right button
|
|
gmp = _runner.get_global_mouse_position()
|
|
_runner.simulate_mouse_button_pressed(MOUSE_BUTTON_RIGHT)
|
|
await _runner.await_input_processed()
|
|
# will result in right button press false but stay with mask for left pressed
|
|
event = InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = false
|
|
event.button_index = MOUSE_BUTTON_RIGHT
|
|
event.button_mask = MOUSE_BUTTON_MASK_LEFT
|
|
verify(_scene_spy, 1)._input(event)
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT)).is_true()
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT)).is_false()
|
|
assert_that(Input.get_mouse_button_mask()).is_equal(MOUSE_BUTTON_MASK_LEFT)
|
|
|
|
# finally relase left button
|
|
gmp = _runner.get_global_mouse_position()
|
|
_runner.simulate_mouse_button_pressed(MOUSE_BUTTON_LEFT)
|
|
await _runner.await_input_processed()
|
|
# will result in right button press false but stay with mask for left pressed
|
|
event = InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = false
|
|
event.button_index = MOUSE_BUTTON_LEFT
|
|
event.button_mask = 0
|
|
verify(_scene_spy, 1)._input(event)
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT)).is_false()
|
|
assert_bool(Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT)).is_false()
|
|
assert_that(Input.get_mouse_button_mask()).is_equal(0)
|
|
|
|
|
|
func test_simulate_mouse_button_pressed() -> void:
|
|
for mouse_button :int in [MOUSE_BUTTON_LEFT, MOUSE_BUTTON_MIDDLE, MOUSE_BUTTON_RIGHT]:
|
|
# simulate mouse button press and release
|
|
var gmp := _runner.get_global_mouse_position()
|
|
_runner.simulate_mouse_button_pressed(mouse_button)
|
|
await _runner.await_input_processed()
|
|
|
|
# it genrates two events, first for press and second as released
|
|
var event := InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = true
|
|
event.button_index = mouse_button as MouseButton
|
|
event.button_mask = GdUnitSceneRunnerImpl.MAP_MOUSE_BUTTON_MASKS.get(mouse_button)
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
event = InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = false
|
|
event.button_index = mouse_button as MouseButton
|
|
event.button_mask = 0
|
|
verify(_scene_spy, 1)._input(event)
|
|
assert_bool(Input.is_mouse_button_pressed(mouse_button)).is_false()
|
|
verify(_scene_spy, 2)._input(any_class(InputEventMouseButton))
|
|
reset(_scene_spy)
|
|
|
|
|
|
func test_simulate_mouse_button_pressed_doubleclick() -> void:
|
|
for mouse_button :int in [MOUSE_BUTTON_LEFT, MOUSE_BUTTON_MIDDLE, MOUSE_BUTTON_RIGHT]:
|
|
# simulate mouse button press and release by double_click
|
|
var gmp := _runner.get_global_mouse_position()
|
|
_runner.simulate_mouse_button_pressed(mouse_button, true)
|
|
await _runner.await_input_processed()
|
|
|
|
# it genrates two events, first for press and second as released
|
|
var event := InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = true
|
|
event.double_click = true
|
|
event.button_index = mouse_button as MouseButton
|
|
event.button_mask = GdUnitSceneRunnerImpl.MAP_MOUSE_BUTTON_MASKS.get(mouse_button)
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
event = InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = false
|
|
event.double_click = false
|
|
event.button_index = mouse_button as MouseButton
|
|
event.button_mask = 0
|
|
verify(_scene_spy, 1)._input(event)
|
|
assert_bool(Input.is_mouse_button_pressed(mouse_button)).is_false()
|
|
verify(_scene_spy, 2)._input(any_class(InputEventMouseButton))
|
|
reset(_scene_spy)
|
|
|
|
|
|
func test_simulate_mouse_button_press_and_release() -> void:
|
|
for mouse_button :int in [MOUSE_BUTTON_LEFT, MOUSE_BUTTON_MIDDLE, MOUSE_BUTTON_RIGHT]:
|
|
var gmp := _runner.get_global_mouse_position()
|
|
# simulate mouse button press and release
|
|
_runner.simulate_mouse_button_press(mouse_button)
|
|
await _runner.await_input_processed()
|
|
|
|
var event := InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = true
|
|
event.button_index = mouse_button as MouseButton
|
|
event.button_mask = GdUnitSceneRunnerImpl.MAP_MOUSE_BUTTON_MASKS.get(mouse_button)
|
|
verify(_scene_spy, 1)._input(event)
|
|
assert_bool(Input.is_mouse_button_pressed(mouse_button)).is_true()
|
|
|
|
# now simulate mouse button release
|
|
gmp = _runner.get_global_mouse_position()
|
|
_runner.simulate_mouse_button_release(mouse_button)
|
|
await _runner.await_input_processed()
|
|
|
|
event = InputEventMouseButton.new()
|
|
event.position = Vector2.ZERO
|
|
event.global_position = gmp
|
|
event.pressed = false
|
|
event.button_index = mouse_button as MouseButton
|
|
#event.button_mask = 0
|
|
verify(_scene_spy, 1)._input(event)
|
|
assert_bool(Input.is_mouse_button_pressed(mouse_button)).is_false()
|
|
|
|
|
|
#####################################################################################################################
|
|
# Tests of simulate touch screen inputs #
|
|
#####################################################################################################################
|
|
func test_simulate_screen_touch_press() -> void:
|
|
# simulate pressing the touching screen
|
|
_runner.simulate_screen_touch_press(0, Vector2(683, 339))
|
|
await _runner.await_input_processed()
|
|
|
|
# verify the InputEventScreenTouch is emitted
|
|
assert_that(_runner.get_screen_touch_drag_position(0)).is_equal(Vector2(683, 339))
|
|
var event := InputEventScreenTouch.new()
|
|
event.index = 0
|
|
event.position = Vector2(683, 339)
|
|
event.pressed = true
|
|
event.double_tap = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
verify(_scene_spy, 1)._on_touch_1_pressed()
|
|
verify(_scene_spy, 0)._on_touch_1_released()
|
|
|
|
|
|
func test_simulate_screen_touch_press_double_click() -> void:
|
|
# simulate pressing the touch screen by a double click
|
|
_runner.simulate_screen_touch_press(0, Vector2(683, 339), true)
|
|
await _runner.await_input_processed()
|
|
|
|
# verify the InputEventScreenTouch is emitted
|
|
assert_that(_runner.get_screen_touch_drag_position(0)).is_equal(Vector2(683, 339))
|
|
var event := InputEventScreenTouch.new()
|
|
event.index = 0
|
|
event.position = Vector2(683, 339)
|
|
event.pressed = true
|
|
event.double_tap = true
|
|
verify(_scene_spy, 1)._input(event)
|
|
verify(_scene_spy, 1)._on_touch_1_pressed()
|
|
verify(_scene_spy, 0)._on_touch_1_released()
|
|
|
|
|
|
func test_simulate_screen_touch_pressed() -> void:
|
|
# simulate has touched the screen
|
|
_runner.simulate_screen_touch_pressed(0, Vector2(683, 339))
|
|
await _runner.await_input_processed()
|
|
|
|
# verify the InputEventScreenTouch is emitted
|
|
assert_that(_runner.get_screen_touch_drag_position(0)).is_equal(Vector2(683, 339))
|
|
var event := InputEventScreenTouch.new()
|
|
event.index = 0
|
|
event.position = Vector2(683, 339)
|
|
event.pressed = true
|
|
event.double_tap = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
event.pressed = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
verify(_scene_spy, 1)._on_touch_1_pressed()
|
|
verify(_scene_spy, 1)._on_touch_1_released()
|
|
|
|
|
|
func test_simulate_screen_touch_pressed_double_click() -> void:
|
|
# simulate have touched the touch screen by a double click
|
|
_runner.simulate_screen_touch_pressed(0, Vector2(683, 339), true)
|
|
await _runner.await_input_processed()
|
|
|
|
# verify the InputEventScreenTouch is emitted
|
|
assert_that(_runner.get_screen_touch_drag_position(0)).is_equal(Vector2(683, 339))
|
|
verify(_scene_spy, 1)._on_touch_1_pressed()
|
|
verify(_scene_spy, 1)._on_touch_1_released()
|
|
|
|
|
|
func test_simulate_screen_touch_release() -> void:
|
|
# setup touch is actual pressing
|
|
_runner.simulate_screen_touch_press(0, Vector2(683, 339))
|
|
# simulate no longer touches the screen
|
|
_runner.simulate_screen_touch_release(0)
|
|
await _runner.await_input_processed()
|
|
|
|
# verify the InputEventScreenTouch is emitted
|
|
assert_that(_runner.get_screen_touch_drag_position(0)).is_equal(Vector2(683, 339))
|
|
var event := InputEventScreenTouch.new()
|
|
event.index = 0
|
|
event.position = Vector2(683, 339)
|
|
event.pressed = false
|
|
event.double_tap = false
|
|
verify(_scene_spy, 1)._input(event)
|
|
verify(_scene_spy, 1)._on_touch_1_released()
|
|
|
|
|
|
func test_simulate_screen_touch_release_double_click() -> void:
|
|
# setup touch is actual pressing
|
|
_runner.simulate_screen_touch_press(0, Vector2(683, 339), true)
|
|
# simulate that no longer touches the screen as a double click
|
|
_runner.simulate_screen_touch_release(0, true)
|
|
await _runner.await_input_processed()
|
|
|
|
# verify the InputEventScreenTouch is emitted
|
|
assert_that(_runner.get_screen_touch_drag_position(0)).is_equal(Vector2(683, 339))
|
|
var event := InputEventScreenTouch.new()
|
|
event.index = 0
|
|
event.position = Vector2(683, 339)
|
|
event.pressed = false
|
|
event.double_tap = true
|
|
verify(_scene_spy, 1)._input(event)
|
|
verify(_scene_spy, 1)._on_touch_1_released()
|
|
|
|
|
|
func test_simulate_screen_touch_get_drag_position() -> void:
|
|
# press the touch screen by two fingers
|
|
_runner.simulate_screen_touch_press(0, Vector2(300, 100))
|
|
_runner.simulate_screen_touch_press(1, Vector2(300, 200))
|
|
|
|
# verify the drag position is saved for each index
|
|
assert_that(_runner.get_screen_touch_drag_position(0)).is_equal(Vector2(300, 100))
|
|
assert_that(_runner.get_screen_touch_drag_position(1)).is_equal(Vector2(300, 200))
|
|
|
|
|
|
func test_simulate_screen_touch_drag() -> void:
|
|
_runner.simulate_screen_touch_drag(0, Vector2(300, 100))
|
|
|
|
# verify the InputEventScreenTouch is emitted
|
|
assert_that(_runner.get_screen_touch_drag_position(0)).is_equal(Vector2(300, 100))
|
|
var event := InputEventScreenDrag.new()
|
|
event.index = 0
|
|
event.position = Vector2(300, 100)
|
|
event.relative = Vector2.ZERO
|
|
event.pressure = 1.0
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
# drag to next position
|
|
_runner.simulate_screen_touch_drag(0, Vector2(400, 100))
|
|
|
|
# verify the InputEventScreenTouch is emitted
|
|
assert_that(_runner.get_screen_touch_drag_position(0)).is_equal(Vector2(400, 100))
|
|
event.index = 0
|
|
event.position = Vector2(400, 100)
|
|
event.relative = Vector2(300, 100) - Vector2(400, 100)
|
|
event.velocity = event.relative / get_tree().root.get_process_delta_time()
|
|
event.pressure = 1.0
|
|
verify(_scene_spy, 1)._input(event)
|
|
|
|
|
|
# Simulates a gesture in which two fingers are used as input
|
|
func test_simulate_screen_touch_gesture_press() -> void:
|
|
# simulate gesture with two fingers is touching the screen
|
|
# finger one has index=0
|
|
_runner.simulate_screen_touch_press(0, Vector2(300, 100))
|
|
# finger one has index=1
|
|
_runner.simulate_screen_touch_press(1, Vector2(300, 200))
|
|
|
|
# verify the InputEventScreenTouch is emitted for finger one
|
|
var touch_fg1 := InputEventScreenTouch.new()
|
|
touch_fg1.index = 0
|
|
touch_fg1.position = Vector2(300, 100)
|
|
touch_fg1.pressed = true
|
|
touch_fg1.double_tap = false
|
|
verify(_scene_spy, 1)._input(touch_fg1)
|
|
|
|
# and verify the InputEventScreenTouch is emitted for finger one
|
|
var touch_fg2 := InputEventScreenTouch.new()
|
|
touch_fg2.index = 1
|
|
touch_fg2.position = Vector2(300, 200)
|
|
touch_fg2.pressed = true
|
|
touch_fg2.double_tap = false
|
|
verify(_scene_spy, 1)._input(touch_fg2)
|
|
|
|
|
|
# Simulates a gesture in which two fingers are used as input
|
|
func test_simulate_screen_touch_gesture_release() -> void:
|
|
# setup two fingers are pressing the touch screen
|
|
# finger one has index=0
|
|
# finger one has index=1
|
|
_runner.simulate_screen_touch_press(0, Vector2(300, 100))
|
|
_runner.simulate_screen_touch_press(1, Vector2(300, 200))
|
|
|
|
# simulate gesture with two fingers is untouch the screen
|
|
_runner.simulate_screen_touch_release(0)
|
|
_runner.simulate_screen_touch_release(1)
|
|
|
|
# verify the InputEventScreenTouch is emitted for finger one
|
|
var touch_fg1 := InputEventScreenTouch.new()
|
|
touch_fg1.index = 0
|
|
touch_fg1.position = Vector2(300, 100)
|
|
touch_fg1.pressed = false
|
|
touch_fg1.double_tap = false
|
|
verify(_scene_spy, 1)._input(touch_fg1)
|
|
|
|
# and verify the InputEventScreenTouch is emitted for finger one
|
|
var touch_fg2 := InputEventScreenTouch.new()
|
|
touch_fg2.index = 1
|
|
touch_fg2.position = Vector2(300, 200)
|
|
touch_fg2.pressed = false
|
|
touch_fg2.double_tap = false
|
|
verify(_scene_spy, 1)._input(touch_fg2)
|
|
|
|
|
|
# Simulates a gesture in which two fingers are used as input
|
|
func test_simulate_screen_touch_gesture_zoom_out() -> void:
|
|
# setup two fingers are pressing the touch screen
|
|
# finger one has index=0
|
|
# finger one has index=1
|
|
var finger_one := Vector2(300, 200)
|
|
var finger_two := Vector2(300, 250)
|
|
_runner.simulate_screen_touch_press(0, finger_one)
|
|
_runner.simulate_screen_touch_press(1, finger_two)
|
|
|
|
# now simulate gestures by moving the points of contact away from each other
|
|
for y_pos in range(0, 105, 5):
|
|
_runner.simulate_screen_touch_drag(0, finger_one - Vector2(0, y_pos))
|
|
_runner.simulate_screen_touch_drag(1, finger_two + Vector2(0, y_pos))
|
|
|
|
# verify final position are correct
|
|
assert_that(_runner.get_screen_touch_drag_position(0)).is_equal(Vector2(300, 100))
|
|
assert_that(_runner.get_screen_touch_drag_position(1)).is_equal(Vector2(300, 350))
|
|
|
|
|
|
func test_text_input_processing() -> void:
|
|
_runner.move_window_to_foreground()
|
|
var lineEdit := _runner.find_child("TextInput") as LineEdit
|
|
|
|
# Focus the text input and clear any existing content
|
|
lineEdit.grab_focus()
|
|
assert_bool(lineEdit.has_focus()).is_true()
|
|
lineEdit.text = ""
|
|
|
|
# Type individual characters
|
|
_runner.simulate_key_pressed(KEY_H)
|
|
_runner.simulate_key_pressed(KEY_I)
|
|
await _runner.await_input_processed()
|
|
await _runner.simulate_frames(100)
|
|
|
|
# Verify text accumulation
|
|
assert_that(lineEdit.text).is_equal("HI");
|