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() await _runner.simulate_frames(1) 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)