Files
MusicPlayer/tests/integration/test_song_controls.gd
T
Sansan e94c75e84d Split now playing, the quiz buttons and song loading out of the quiz
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.
2026-10-06 11:11:18 +02:00

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()