chore: add GUT test framework
This commit is contained in:
191
addons/gut/test/integration/test_more_input_ideas.gd
Normal file
191
addons/gut/test/integration/test_more_input_ideas.gd
Normal file
@@ -0,0 +1,191 @@
|
||||
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')
|
||||
Reference in New Issue
Block a user