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

192 lines
4.9 KiB
GDScript

extends GutTest
class SuperButton:
extends Button
func p(s1='', s2='', s3='', s4='', s5='', s6=''):
print(s1, s2, s3, s4, s5, s6)
func pevent(txt, event):
return
print(txt, ': ', event)
# if(event is InputEventMouse):
# print(txt, ': ', event.position, event.global_position)
# else:
# print(txt, ': ', event)
func _gui_input(event):
pevent('gui: ', event)
func _input(event):
pevent('input: ', event)
func _unhandled_input(event):
pevent('unhandled: ', event)
class DraggableButton:
extends SuperButton
var _mouse_down = false
func _gui_input(event):
super._gui_input(event)
if(event is InputEventMouseButton):
_mouse_down = event.pressed
elif(event is InputEventMouseMotion and _mouse_down):
position += event.relative
func should_skip_script():
return 'takes too long and these shouldnt even be here'
func _print_emitted_signals(thing):
_signal_watcher.print_signal_summary(thing)
return
func test_draw_mouse():
var sender = InputSender.new(Input)
sender.mouse_warp = false
sender.draw_mouse = true
var pos = Vector2(200, 200)
sender\
.mouse_left_button_down(pos)\
.wait(1)\
.mouse_left_button_up()\
.mouse_right_button_down()\
.wait(1)\
.mouse_right_button_up()\
.mouse_relative_motion(Vector2(10, 10)).wait(.5)\
.mouse_relative_motion(Vector2(10, 10)).wait(.5)\
.mouse_left_button_down().hold_for(.5)\
.mouse_relative_motion(Vector2(10, 10)).wait(.5)\
.mouse_relative_motion(Vector2(10, 10)).wait(.5)\
.mouse_right_button_down().hold_for(.5)\
.mouse_relative_motion(Vector2(10, 10)).wait(.5)\
.mouse_left_button_down()\
.mouse_right_button_down()\
.wait(2)
await sender.idle
func test_drag_something():
var btn = DraggableButton.new()
watch_signals(btn)
btn.size = Vector2(100, 100)
btn.position = Vector2(50, 50)
add_child_autofree(btn)
# works with Input and btn, btn does not fire signals, Input seems to be
# having some trouble firigin the button up event.
var sender = InputSender.new(Input)
sender.set_auto_flush_input(true)
sender.mouse_warp = false
sender.draw_mouse = true
sender.mouse_left_button_down(btn.position + Vector2(10, 10)).wait(.1)
for i in range(10):
await sender.mouse_relative_motion(Vector2(10, 10)).wait(.1).idle
print('-- ', btn.position, ' --')
assert_true(Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT), 'left button is down')
await sender\
.mouse_left_button_up()\
.wait('1f')\
.mouse_relative_motion(Vector2(1, 1))\
.wait(.2).idle
assert_false(Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT), 'left button is up')
var after_first_drag_pos = btn.position
# drag again after mouse up which shouldn't move
for i in range(10):
await sender.mouse_relative_motion(Vector2(10, 10)).wait(.1).idle
print('-- ', btn.position, ' --')
_print_emitted_signals(btn)
assert_signal_emitted(btn, 'button_down')
assert_signal_emitted(btn, 'button_up')
assert_ne(btn.position, Vector2(50, 50), 'has moved')
assert_false(btn._mouse_down, 'button mouse down')
assert_eq(btn.position, after_first_drag_pos, 'does not move after releasing button')
# 50 ->| |<- 150
func test_clicking_things_with_input_as_receiver():
var btn = SuperButton.new()
watch_signals(btn)
btn.size = Vector2(100, 100)
btn.position = Vector2(50, 50)
add_child_autofree(btn)
var sender = InputSender.new(Input)
sender.mouse_warp = true
var start_pos = Vector2i(25, 75)
for i in 15:
var new_pos = start_pos + Vector2i(i * 10, 0)
await sender.wait(.1)\
.mouse_left_button_down(new_pos)\
.hold_for(.1)\
.wait(.1).idle
_print_emitted_signals(btn)
assert_signal_emitted(btn, 'pressed')
assert_signal_emitted(btn, 'button_down')
assert_signal_emitted(btn, 'button_up')
assert_signal_emitted(btn, 'gui_input')
func test_clicking_two_buttons_triggers_focus_events():
var btn = SuperButton.new()
watch_signals(btn)
btn.size = Vector2(100, 100)
btn.position = Vector2(50, 50)
add_child_autofree(btn)
var btn2 = SuperButton.new()
watch_signals(btn2)
btn2.size = Vector2(100, 100)
btn2.position = Vector2(160, 50)
add_child_autofree(btn2)
var sender = InputSender.new(Input)
sender.mouse_warp = true
var start_pos = Vector2(100, 75)
for i in 10:
var new_pos = start_pos + Vector2(i * 10, 0)
await sender.mouse_left_click_at(new_pos).idle
_print_emitted_signals(btn)
_print_emitted_signals(btn2)
func test_clicking_things_with_button_as_receiver():
var btn = SuperButton.new()
watch_signals(btn)
btn.size = Vector2(100, 100)
btn.position = Vector2(50, 50)
add_child_autofree(btn)
var sender = InputSender.new(btn)
sender.mouse_warp = true
var start_pos = Vector2i(25, 75)
for i in 15:
var new_pos = start_pos + Vector2i(i * 10, 0)
await sender.wait(.1)\
.mouse_left_button_down(new_pos)\
.hold_for(.1)\
.wait(.1).idle
_print_emitted_signals(btn)
assert_signal_not_emitted(btn, 'pressed')
assert_signal_not_emitted(btn, 'button_down')
assert_signal_not_emitted(btn, 'button_up')
assert_signal_not_emitted(btn, 'gui_input')