NowPlaying, QuizToolbar and SongControls become their own scenes, the auto repeat switch moves into the music player scene, and downloading songs moves into a SongLoader node. The quiz only wires the parts together. Every node keeps its place on screen. Screenshots of every UI state are pixel-identical to before, the layout test still matches the original baseline, and each new part has its own tests.
86 lines
2.4 KiB
GDScript
86 lines
2.4 KiB
GDScript
extends GdUnitTestSuite
|
|
## Show answer and Next: each reports its press, also from its keyboard shortcut, and
|
|
## Next is only enabled while a song is ready.
|
|
|
|
var _runner: GdUnitSceneRunner
|
|
var _controls: SongControls
|
|
|
|
|
|
func before_test() -> void:
|
|
_runner = scene_runner("res://SongControls.tscn")
|
|
_controls = _runner.scene()
|
|
|
|
|
|
func _click(button: Button) -> void:
|
|
_runner.set_mouse_position(_controls.get_viewport().get_final_transform()
|
|
* button.get_global_rect().get_center())
|
|
await _runner.simulate_mouse_button_pressed(MOUSE_BUTTON_LEFT)
|
|
await _runner.await_input_processed()
|
|
|
|
|
|
func _press_keys(keys: Array[Key]) -> void:
|
|
for key: Key in keys:
|
|
_runner.simulate_key_press(key)
|
|
await _runner.await_input_processed()
|
|
keys.reverse()
|
|
for key: Key in keys:
|
|
_runner.simulate_key_release(key)
|
|
await _runner.await_input_processed()
|
|
|
|
|
|
func test_next_starts_disabled() -> void:
|
|
assert_bool(_controls.next_button.disabled).is_true()
|
|
|
|
|
|
func test_clicking_show_answer_reports_it() -> void:
|
|
var signals: GdUnitSignalAssert = assert_signal(monitor_signals(_controls))
|
|
|
|
await _click(_controls.show_answer_button)
|
|
|
|
await signals.is_emitted("show_answer_pressed")
|
|
|
|
|
|
func test_clicking_next_reports_it_when_enabled() -> void:
|
|
_controls.set_next_enabled(true)
|
|
var signals: GdUnitSignalAssert = assert_signal(monitor_signals(_controls))
|
|
|
|
await _click(_controls.next_button)
|
|
|
|
await signals.is_emitted("next_pressed")
|
|
|
|
|
|
func test_clicking_disabled_next_does_nothing() -> void:
|
|
var signals: GdUnitSignalAssert = assert_signal(monitor_signals(_controls))
|
|
|
|
await _click(_controls.next_button)
|
|
|
|
await signals.wait_until(200).is_not_emitted("next_pressed")
|
|
|
|
|
|
func test_alt_v_shows_answer_and_alt_c_plays_next() -> void:
|
|
_controls.set_next_enabled(true)
|
|
var signals: GdUnitSignalAssert = assert_signal(monitor_signals(_controls))
|
|
|
|
await _press_keys([KEY_ALT, KEY_V])
|
|
await signals.is_emitted("show_answer_pressed")
|
|
await _press_keys([KEY_ALT, KEY_C])
|
|
await signals.is_emitted("next_pressed")
|
|
|
|
|
|
func test_locking_disables_both() -> void:
|
|
_controls.set_next_enabled(true)
|
|
|
|
_controls.set_locked(true)
|
|
|
|
assert_bool(_controls.show_answer_button.disabled).is_true()
|
|
assert_bool(_controls.next_button.disabled).is_true()
|
|
|
|
|
|
func test_unlocking_enables_show_answer_but_waits_for_a_song_for_next() -> void:
|
|
_controls.set_locked(true)
|
|
|
|
_controls.set_locked(false)
|
|
|
|
assert_bool(_controls.show_answer_button.disabled).is_false()
|
|
assert_bool(_controls.next_button.disabled).is_true()
|