Raising the cache size used to have no effect until the next song was played. Downloads now start when the settings window closes, so clicking the number up and down while it is open does not start any downloads.
217 lines
7.4 KiB
GDScript
217 lines
7.4 KiB
GDScript
extends MainWindowTestSuite
|
|
## Main window flows: startup, playing songs and resetting.
|
|
|
|
|
|
func test_startup_loads_soundtracks_and_preloads_a_song() -> void:
|
|
assert_int(_server.count("/music/list")).is_equal(1)
|
|
assert_int(_server.count("/music/all")).is_equal(1)
|
|
assert_array(_server.requested_paths).contains(["/music/rand", "/music/addQue", "/music/info"])
|
|
assert_int(Playlist.song_object_array.size()).is_equal(1)
|
|
assert_bool((_window.get_node("NextButton") as Button).disabled).is_false()
|
|
|
|
|
|
func test_low_played_mode_fetches_from_low_played_endpoint() -> void:
|
|
Settings.use_low_played_mode = true
|
|
_server.respond_bytes(
|
|
"/music/rand/low", FileAccess.get_file_as_bytes("res://tests/data/short.mp3"))
|
|
|
|
_runner.invoke("fetch_song")
|
|
|
|
assert_int(_server.count("/music/rand/low")).is_equal(1)
|
|
|
|
|
|
func test_next_plays_preloaded_song_and_fetches_another() -> void:
|
|
_next_song_is(SONG_INFO[1])
|
|
|
|
_press("NextButton")
|
|
await _runner.simulate_frames(2)
|
|
|
|
assert_int(Playlist.currently_playing_song).is_equal(0)
|
|
assert_bool(Playlist.song_object_array[0].has_played).is_true()
|
|
assert_int(Playlist.song_object_array.size()).is_equal(2)
|
|
assert_int(_server.count("/music/rand")).is_equal(2)
|
|
|
|
|
|
func test_title_is_hidden_until_answer_is_shown() -> void:
|
|
var soundtrack_label: Label = _window.get_node("VBoxContainer/SoundtrackLabel")
|
|
_press("NextButton")
|
|
await _runner.simulate_frames(2)
|
|
|
|
assert_str(soundtrack_label.text).is_equal("????????")
|
|
|
|
_press("ShowAnswerButton")
|
|
|
|
assert_str(soundtrack_label.text).is_equal("Chrono Trigger")
|
|
assert_int(_server.count("/music/played?song=0")).is_equal(1)
|
|
|
|
|
|
func test_reset_playlist_clears_server_and_preloads_again() -> void:
|
|
_press("NextButton")
|
|
await _runner.simulate_frames(2)
|
|
|
|
_press("ResetPlaylistButton")
|
|
|
|
assert_int(_server.count("/music/reset")).is_equal(1)
|
|
assert_int(Playlist.currently_playing_song).is_equal(-1)
|
|
assert_int(Playlist.song_object_array.size()).is_equal(1)
|
|
assert_bool(Playlist.song_object_array[0].has_played).is_false()
|
|
|
|
|
|
func test_reset_points_sets_all_scores_to_zero() -> void:
|
|
_add_player("Crono").add_point()
|
|
_add_player("Marle").add_point()
|
|
|
|
_press("ResetPointsButton")
|
|
|
|
assert_int(Settings.player_array[0].player_score).is_equal(0)
|
|
assert_int(Settings.player_array[1].player_score).is_equal(0)
|
|
|
|
|
|
func test_cannot_add_more_than_max_players() -> void:
|
|
for i: int in Settings.MAX_NUMBER_OF_PLAYERS + 1:
|
|
_add_player("Player %d" % i)
|
|
|
|
assert_int(Settings.player_array.size()).is_equal(Settings.MAX_NUMBER_OF_PLAYERS)
|
|
|
|
|
|
func test_cannot_add_player_without_name() -> void:
|
|
_add_player("")
|
|
|
|
assert_array(Settings.player_array).is_empty()
|
|
|
|
|
|
func test_failed_song_download_is_retried_until_the_server_answers() -> void:
|
|
_window.song_fetch_retry_seconds = 0.05
|
|
var songs_before: int = Playlist.song_object_array.size()
|
|
var mp3: PackedByteArray = FileAccess.get_file_as_bytes("res://tests/data/short.mp3")
|
|
_server.respond_bytes("/music/rand", PackedByteArray(), 503)
|
|
var rand_requests_before: int = _server.count("/music/rand")
|
|
|
|
_runner.invoke("fetch_song")
|
|
await await_millis(200)
|
|
|
|
assert_int(_server.count("/music/rand") - rand_requests_before).is_greater(1)
|
|
assert_int(Playlist.song_object_array.size()).is_equal(songs_before)
|
|
assert_bool(Playlist.is_song_downloading).is_true()
|
|
|
|
_server.respond_bytes("/music/rand", mp3)
|
|
await await_millis(200)
|
|
|
|
assert_int(Playlist.song_object_array.size()).is_equal(songs_before + 1)
|
|
assert_bool(Playlist.is_song_downloading).is_false()
|
|
|
|
|
|
func test_failed_song_info_retries_only_that_step() -> void:
|
|
_window.song_fetch_retry_seconds = 0.05
|
|
var songs_before: int = Playlist.song_object_array.size()
|
|
_server.respond_bytes("/music/info", PackedByteArray(), 503)
|
|
var rand_before: int = _server.count("/music/rand")
|
|
var queue_before: int = _server.count("/music/addQue")
|
|
|
|
_runner.invoke("fetch_song")
|
|
await await_millis(200)
|
|
_next_song_is(SONG_INFO[1])
|
|
await await_millis(200)
|
|
|
|
# The song was downloaded and queued once; only the info request was repeated
|
|
assert_int(_server.count("/music/rand") - rand_before).is_equal(1)
|
|
assert_int(_server.count("/music/addQue") - queue_before).is_equal(1)
|
|
assert_int(Playlist.song_object_array.size()).is_equal(songs_before + 1)
|
|
assert_str(Playlist.song_object_array.back().song_title).is_equal("Dancing Mad")
|
|
assert_bool(Playlist.is_song_downloading).is_false()
|
|
|
|
|
|
func test_preloads_as_many_songs_as_the_cache_setting() -> void:
|
|
Playlist.number_of_tracks_to_preload = 3
|
|
|
|
_runner.invoke("fetch_song")
|
|
|
|
assert_int(Playlist.get_preloaded_songs()).is_equal(3)
|
|
assert_bool(Playlist.is_song_downloading).is_false()
|
|
|
|
|
|
func test_playing_a_song_tops_the_cache_up_again() -> void:
|
|
Playlist.number_of_tracks_to_preload = 3
|
|
_runner.invoke("fetch_song")
|
|
|
|
await _play_first_song()
|
|
|
|
assert_int(Playlist.get_preloaded_songs()).is_equal(3)
|
|
assert_int(Playlist.song_object_array.size()).is_equal(4)
|
|
|
|
|
|
func test_cache_keeps_filling_after_a_failed_download() -> void:
|
|
_window.song_fetch_retry_seconds = 0.05
|
|
Playlist.number_of_tracks_to_preload = 3
|
|
var mp3: PackedByteArray = FileAccess.get_file_as_bytes("res://tests/data/short.mp3")
|
|
# One more download works, then the server stops answering
|
|
_server.fail_after("/music/rand", 1)
|
|
|
|
_runner.invoke("fetch_song")
|
|
await await_millis(150)
|
|
|
|
assert_int(Playlist.get_preloaded_songs()).is_equal(2)
|
|
assert_bool(Playlist.is_song_downloading).is_true()
|
|
|
|
_server.respond_bytes("/music/rand", mp3)
|
|
await await_millis(150)
|
|
|
|
assert_int(Playlist.get_preloaded_songs()).is_equal(3)
|
|
assert_bool(Playlist.is_song_downloading).is_false()
|
|
|
|
|
|
func _open_settings() -> void:
|
|
_press("SettingsButton")
|
|
|
|
|
|
func _close_settings() -> void:
|
|
(_window.get_node("SettingsWindow") as Control).visible = false
|
|
|
|
|
|
func _press_settings_button(unique_name: String) -> void:
|
|
(_window.get_node("SettingsWindow").get_node("%" + unique_name) as Button).pressed.emit()
|
|
|
|
|
|
func test_raising_cache_size_does_not_download_while_settings_are_open() -> void:
|
|
var downloads_before: int = _server.count("/music/rand")
|
|
_open_settings()
|
|
|
|
_press_settings_button("IncreaseCacheButton")
|
|
_press_settings_button("IncreaseCacheButton")
|
|
|
|
assert_int(Playlist.number_of_tracks_to_preload).is_equal(3)
|
|
assert_int(_server.count("/music/rand")).is_equal(downloads_before)
|
|
|
|
|
|
func test_closing_settings_fills_cache_to_new_size() -> void:
|
|
_open_settings()
|
|
_press_settings_button("IncreaseCacheButton")
|
|
_press_settings_button("IncreaseCacheButton")
|
|
|
|
_close_settings()
|
|
|
|
assert_int(Playlist.get_preloaded_songs()).is_equal(3)
|
|
|
|
|
|
func test_changing_cache_size_back_and_forth_downloads_only_what_is_needed() -> void:
|
|
var downloads_before: int = _server.count("/music/rand")
|
|
_open_settings()
|
|
for i: int in 5:
|
|
_press_settings_button("IncreaseCacheButton")
|
|
_press_settings_button("LowerCacheButton")
|
|
_press_settings_button("IncreaseCacheButton")
|
|
|
|
_close_settings()
|
|
|
|
assert_int(_server.count("/music/rand") - downloads_before).is_equal(1)
|
|
assert_int(Playlist.get_preloaded_songs()).is_equal(2)
|
|
|
|
|
|
func test_closing_settings_with_full_cache_downloads_nothing() -> void:
|
|
var downloads_before: int = _server.count("/music/rand")
|
|
_open_settings()
|
|
|
|
_close_settings()
|
|
|
|
assert_int(_server.count("/music/rand")).is_equal(downloads_before)
|