Files
MusicPlayer/tests/integration/test_quiz_toolbar.gd
T
Sansan b510aa47f2
Build / test (push) Successful in 44s
Build / build (push) Successful in 1m13s
Split settings into a quiz card and an application Settings popup
- A Quiz settings button under the player bar opens a small card above
  it with the quiz settings, including Auto repeat, which moves there
  from under the player bar. The card does not dim the quiz, so it can
  be changed during a song, and grows to fit its rows.
- A Settings button in the top bar opens the application settings:
  server, fullscreen and songs to download ahead. Quick sync is gone,
  as the server no longer has it, and the server list is in Settings.
- Labels use sentence case, and seconds to hide show as whole numbers.
- Debug builds switch to the local server and a low winning score in
  the Settings autoload, before any scene asks the server for anything.
  The DEBUG label moves to the top bar, so it shows on every tab.
- Search moves from the top bar back to the quiz toolbar, as the
  Statistics tab has its own search.
2026-10-07 16:05:13 +02:00

70 lines
2.1 KiB
GDScript

extends GdUnitTestSuite
## The row of quiz buttons: each button reports its press, and locking disables the
## buttons that use the song list.
const BUTTON_SIGNALS: Dictionary = {
"SearchButton": "search_pressed",
"ResetPlaylistButton": "reset_playlist_pressed",
"ResetPointsButton": "reset_points_pressed",
"SoundTestButton": "sound_test_pressed",
}
var _runner: GdUnitSceneRunner
var _toolbar: QuizToolbar
func before_test() -> void:
_runner = scene_runner("res://quiz/QuizToolbar.tscn")
_toolbar = _runner.scene()
func _button(button_name: String) -> Button:
return _toolbar.get_node(button_name)
func _click(button_name: String) -> void:
_runner.set_mouse_position(_toolbar.get_viewport().get_final_transform()
* _button(button_name).get_global_rect().get_center())
await _runner.simulate_mouse_button_pressed(MOUSE_BUTTON_LEFT)
await _runner.await_input_processed()
func test_clicking_each_button_reports_it() -> void:
for button_name: String in BUTTON_SIGNALS:
var signals: GdUnitSignalAssert = assert_signal(monitor_signals(_toolbar))
await _click(button_name)
await signals.override_failure_message(button_name + " not reported") \
.is_emitted(BUTTON_SIGNALS[button_name])
func test_buttons_are_in_order_left_to_right() -> void:
var lefts: Array = ["SearchButton", "ResetPlaylistButton", "ResetPointsButton",
"SoundTestButton"] \
.map(func(n: String) -> float: return _button(n).position.x)
for i: int in lefts.size() - 1:
assert_float(lefts[i]).is_less(lefts[i + 1])
func test_locking_disables_only_buttons_that_use_the_song_list() -> void:
_toolbar.set_locked(true)
assert_bool(_button("ResetPlaylistButton").disabled).is_true()
assert_bool(_button("SoundTestButton").disabled).is_true()
assert_bool(_button("ResetPointsButton").disabled).is_false()
func test_unlocking_enables_them_again() -> void:
_toolbar.set_locked(true)
_toolbar.set_locked(false)
assert_bool(_button("ResetPlaylistButton").disabled).is_false()
assert_bool(_button("SoundTestButton").disabled).is_false()
func test_clicks_between_buttons_go_through() -> void:
assert_int(_toolbar.mouse_filter).is_equal(Control.MOUSE_FILTER_IGNORE)