godot-xterm/test/unit/terminal.test.gd
Leroy Hopson d558b07fd4 Prevent loss of focus on Tab/Arrow key press
Prevents Terminal losing focus when in a scene with other inputs and
the Tab or Arrow keys are pressed.

Fixes #51.
2022-08-05 10:55:24 +12:00

75 lines
2 KiB
GDScript

extends "res://addons/gut/test.gd"
const Terminal := preload("res://addons/godot_xterm/terminal.gd")
var term: Terminal
func before_each():
term = Terminal.new()
term.rect_size = Vector2(400, 200)
add_child_autofree(term)
func test_bell() -> void:
term.bell_cooldown = 0
term.write(char(7))
term.write(char(0x07))
term.write("\a")
term.write("\u0007")
term.write("'Ask not for whom the \a tolls; it tolls for thee' - John Donne")
yield(yield_to(term, "bell", 5), YIELD)
assert_signal_emit_count(term, "bell", 5)
func test_bell_cooldown() -> void:
watch_signals(term)
term.bell_cooldown = 0.5
term.write("\a")
term.write("\a")
yield(yield_for(1), YIELD)
term.write("\a")
yield(yield_to(term, "bell", 5), YIELD)
assert_signal_emit_count(term, "bell", 2)
class TestMultipleInputs:
# Tests for when Terminal is around other input nodes and arrow keys or TAB
# key is pressed. Focus should not change to other inputs when pressing these
# keys (same behaviour as TextEdit node).
# See: https://github.com/lihop/godot-xterm/issues/51
extends "res://addons/gut/test.gd"
const KEYS := {
KEY_LEFT = KEY_LEFT,
KEY_UP = KEY_UP,
KEY_RIGHT = KEY_RIGHT,
KEY_DOWN = KEY_DOWN,
KEY_TAB = KEY_TAB,
}
var terminal: Control
func press_key(scancode: int, unicode := 0) -> void:
var key_down = InputEventKey.new()
key_down.scancode = scancode
key_down.pressed = true
Input.parse_input_event(key_down)
yield(get_tree().create_timer(0.1), "timeout")
var key_up = InputEventKey.new()
key_up.scancode = scancode
key_up.pressed = false
Input.parse_input_event(key_up)
func before_each():
var scene := preload("../scenes/multiple_inputs.tscn").instance()
add_child_autofree(scene)
terminal = scene.find_node("Terminal")
terminal.grab_focus()
func test_terminal_keeps_focus_when_certain_keys_pressed():
for key in KEYS.keys():
press_key(KEYS[key])
assert_true(
terminal.has_focus(), "Terminal should still have focus after %s is pressed." % key
)