mirror of
https://github.com/lihop/godot-xterm.git
synced 2025-05-23 11:15:32 +02:00
chore(test): update tests
Adds additional tests for the interface. Creates a new base test class GodotXtermTest that adds some additional assert methods. Tests inheriting from this should override the got_described_class() method. Add instance of the described class named 'subject' will be created and added to the scene tree before each test.
This commit is contained in:
parent
cb86cc95d7
commit
1a5f0f96da
5 changed files with 387 additions and 125 deletions
|
@ -1,36 +1,38 @@
|
|||
# SPDX-FileCopyrightText: 2024 Leroy Hopson <godot-xterm@leroy.nix.nz>
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
class_name RenderingTest extends GutTest
|
||||
class_name RenderingTest extends GodotXtermTest
|
||||
|
||||
var terminal: Terminal
|
||||
|
||||
func get_described_class():
|
||||
return Terminal
|
||||
|
||||
|
||||
# Return the color in the center of the given cell.
|
||||
func pick_cell_color(cell := Vector2i(0, 0)) -> Color:
|
||||
var cell_size = terminal.get_cell_size()
|
||||
var cell_size = subject.get_cell_size()
|
||||
var pixelv = Vector2(cell) * cell_size + (cell_size / 2)
|
||||
return get_viewport().get_texture().get_image().get_pixelv(cell_size / 2)
|
||||
|
||||
|
||||
func before_each():
|
||||
terminal = Terminal.new()
|
||||
terminal.add_theme_font_override("normal_font", preload("res://themes/fonts/regular.tres"))
|
||||
terminal.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||
watch_signals(terminal)
|
||||
call_deferred("add_child_autofree", terminal)
|
||||
await wait_for_signal(terminal.ready, 5)
|
||||
subject = described_class.new()
|
||||
subject.add_theme_font_override("normal_font", preload("res://themes/fonts/regular.tres"))
|
||||
subject.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||
watch_signals(subject)
|
||||
call_deferred("add_child_autofree", subject)
|
||||
await wait_for_signal(subject.ready, 5)
|
||||
|
||||
|
||||
class TestRendering:
|
||||
extends RenderingTest
|
||||
|
||||
func test_update():
|
||||
terminal.write("\u001b[38;2;255;0;0m")
|
||||
terminal.write("█".repeat(terminal.get_cols() * terminal.get_rows()))
|
||||
subject.write("\u001b[38;2;255;0;0m")
|
||||
subject.write("█".repeat(subject.get_cols() * subject.get_rows()))
|
||||
await get_tree().physics_frame
|
||||
terminal.queue_redraw()
|
||||
await wait_for_signal(terminal.draw, 3)
|
||||
subject.queue_redraw()
|
||||
await wait_for_signal(subject.draw, 3)
|
||||
await wait_frames(15)
|
||||
var cell_color = pick_cell_color(Vector2i(0, 0))
|
||||
assert_eq(cell_color, Color.RED)
|
||||
|
@ -44,7 +46,7 @@ class TestKeyPressed:
|
|||
func before_each():
|
||||
await super.before_each()
|
||||
|
||||
terminal.grab_focus()
|
||||
subject.grab_focus()
|
||||
|
||||
input_event = InputEventKey.new()
|
||||
input_event.pressed = true
|
||||
|
@ -54,38 +56,38 @@ class TestKeyPressed:
|
|||
input_event.keycode = KEY_A
|
||||
input_event.unicode = "a".unicode_at(0)
|
||||
|
||||
await wait_for_signal(terminal.key_pressed, 1)
|
||||
assert_signal_emitted(terminal, "key_pressed")
|
||||
await wait_for_signal(subject.key_pressed, 1)
|
||||
assert_signal_emitted(subject, "key_pressed")
|
||||
|
||||
func test_key_pressed_emitted_only_once_per_key_input():
|
||||
input_event.keycode = KEY_B
|
||||
input_event.unicode = "b".unicode_at(0)
|
||||
|
||||
await wait_for_signal(terminal.key_pressed, 1)
|
||||
assert_signal_emit_count(terminal, "key_pressed", 1)
|
||||
await wait_for_signal(subject.key_pressed, 1)
|
||||
assert_signal_emit_count(subject, "key_pressed", 1)
|
||||
|
||||
func test_key_pressed_emits_interpreted_key_input_as_first_param():
|
||||
input_event.keycode = KEY_UP
|
||||
input_event.unicode = 0
|
||||
|
||||
await wait_for_signal(terminal.key_pressed, 1)
|
||||
await wait_for_signal(subject.key_pressed, 1)
|
||||
|
||||
var signal_parameters = get_signal_parameters(terminal, "key_pressed", 0)
|
||||
var signal_parameters = get_signal_parameters(subject, "key_pressed", 0)
|
||||
assert_eq(signal_parameters[0], "\u001b[A")
|
||||
|
||||
func test_key_pressed_emits_original_input_event_as_second_param():
|
||||
input_event.keycode = KEY_L
|
||||
input_event.unicode = "l".unicode_at(0)
|
||||
|
||||
await wait_for_signal(terminal.key_pressed, 1)
|
||||
await wait_for_signal(subject.key_pressed, 1)
|
||||
|
||||
var signal_parameters = get_signal_parameters(terminal, "key_pressed", 0)
|
||||
var signal_parameters = get_signal_parameters(subject, "key_pressed", 0)
|
||||
assert_eq(signal_parameters[1], input_event)
|
||||
|
||||
func test_key_pressed_not_emitted_when_writing_to_terminal():
|
||||
terminal.write("a")
|
||||
func test_key_pressed_not_emitted_when_writing_to_subject():
|
||||
subject.write("a")
|
||||
await wait_frames(1)
|
||||
assert_signal_emit_count(terminal, "key_pressed", 0)
|
||||
assert_signal_emit_count(subject, "key_pressed", 0)
|
||||
|
||||
func test_key_pressed_not_emitted_by_other_input_type():
|
||||
var mouse_input = InputEventMouseButton.new()
|
||||
|
@ -93,5 +95,5 @@ class TestKeyPressed:
|
|||
mouse_input.pressed = true
|
||||
Input.call_deferred("parse_input_event", mouse_input)
|
||||
|
||||
await wait_for_signal(terminal.gui_input, 1)
|
||||
assert_signal_emit_count(terminal, "key_pressed", 0)
|
||||
await wait_for_signal(subject.gui_input, 1)
|
||||
assert_signal_emit_count(subject, "key_pressed", 0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue