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://quiz/SongControls.tscn") _controls = _runner.scene() await _runner.simulate_frames(1) 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()