Name popups *Popup and give scripts, scenes and classes matching names
Every popup is now called *Popup instead of *Window in its file, root node, node name, class and variable, and PopupWindow becomes BasePopup. Player is PlayerRow, SongListObject is SongRow and Character is CharacterCard. Script files are snake_case and scene files PascalCase, each matching its class or root node, and LightGrayTheme.tres is light_gray_theme.tres.
This commit is contained in:
1 parent
b7d67b573e
commit
390da577d7
78 files changed
+281
-258
No files matched your search
@@ -84,10 +84,10 @@ func _add_player(player_name: String) -> PlayerObject:
|
||||
|
||||
|
||||
## Returns the row in the player list that shows [param player_object].
|
||||
func _player_row(player_object: PlayerObject) -> Player:
|
||||
func _player_row(player_object: PlayerObject) -> PlayerRow:
|
||||
var rows: Node = _quiz.get_node(
|
||||
"PlayersPanel/VBoxContainer/ScrollContainer/PlayersListVBoxContainer")
|
||||
for row: Player in rows.get_children():
|
||||
for row: PlayerRow in rows.get_children():
|
||||
if row.player_object == player_object:
|
||||
return row
|
||||
return null
|
||||
|
||||
+31
-26
@@ -27,10 +27,15 @@ const SYNC_RESULT: Dictionary = {
|
||||
"total_time": "00:00:03",
|
||||
}
|
||||
|
||||
## Popups in the order the tour opens them.
|
||||
const POPUPS: Array[String] = [
|
||||
"Search", "SyncWindow", "SettingsWindow", "QRWindow", "NewCharacterSelect",
|
||||
"ShortcutsWindow", "AboutWindow", "WinnerWindow", "Log", "StatisticsPopupPanel",
|
||||
## Popups in the order the tour opens them: the state name, then the popup's node. The
|
||||
## state names are what the popups were first called, so screenshots taken before they
|
||||
## were renamed can still be compared with new ones.
|
||||
const POPUPS: Array[Array] = [
|
||||
["Search", "SearchPopup"], ["SyncWindow", "SyncPopup"],
|
||||
["SettingsWindow", "SettingsPopup"], ["QRWindow", "QRPopup"],
|
||||
["NewCharacterSelect", "CharacterSelectPopup"], ["ShortcutsWindow", "ShortcutsPopup"],
|
||||
["AboutWindow", "AboutPopup"], ["WinnerWindow", "WinnerPopup"], ["Log", "LogPopup"],
|
||||
["StatisticsPopupPanel", "StatisticsPopupPanel"],
|
||||
]
|
||||
|
||||
var _main: Control
|
||||
@@ -108,31 +113,31 @@ func run(on_state: Callable) -> void:
|
||||
await _settle()
|
||||
await on_state.call("playing", null)
|
||||
|
||||
for popup_name: String in POPUPS:
|
||||
var popup: Node = await _open_popup(popup_name)
|
||||
for state_and_node: Array in POPUPS:
|
||||
var popup: Node = await _open_popup(state_and_node[1])
|
||||
await _settle()
|
||||
await on_state.call("popup_" + popup_name, popup)
|
||||
await on_state.call("popup_" + state_and_node[0], popup)
|
||||
_close_popup(popup)
|
||||
await _settle()
|
||||
|
||||
var sync_window: PopupWindow = _node("SyncWindow")
|
||||
var sync_popup: BasePopup = _node("SyncPopup")
|
||||
Settings.currently_syncing = false
|
||||
sync_window.has_synced = false
|
||||
sync_window.start_sync()
|
||||
sync_window.sync_timer.stop()
|
||||
sync_window._on_sync_timeout()
|
||||
sync_popup.has_synced = false
|
||||
sync_popup.start_sync()
|
||||
sync_popup.sync_timer.stop()
|
||||
sync_popup._on_sync_timeout()
|
||||
await _settle()
|
||||
await on_state.call("sync_in_progress", sync_window)
|
||||
sync_window.close()
|
||||
await on_state.call("sync_in_progress", sync_popup)
|
||||
sync_popup.close()
|
||||
await _settle()
|
||||
await on_state.call("sync_buttons_locked", null)
|
||||
|
||||
_server().respond_json("/sync/progress", SYNC_RESULT)
|
||||
sync_window._on_sync_timeout()
|
||||
sync_window.open()
|
||||
sync_popup._on_sync_timeout()
|
||||
sync_popup.open()
|
||||
await _settle()
|
||||
await on_state.call("sync_result", sync_window)
|
||||
sync_window.close()
|
||||
await on_state.call("sync_result", sync_popup)
|
||||
sync_popup.close()
|
||||
await _settle()
|
||||
|
||||
|
||||
@@ -204,7 +209,7 @@ func _add_player(player_name: String) -> void:
|
||||
_call("add_player")
|
||||
|
||||
|
||||
func _player_row(index: int) -> Player:
|
||||
func _player_row(index: int) -> PlayerRow:
|
||||
return _node("PlayersPanel").get_node(
|
||||
"VBoxContainer/ScrollContainer/PlayersListVBoxContainer").get_child(index)
|
||||
|
||||
@@ -220,20 +225,20 @@ func _freeze_music_player() -> void:
|
||||
|
||||
## The log starts each row with the time of day; use a fixed time instead.
|
||||
func _fix_log_times() -> void:
|
||||
var log_window: PopupWindow = _node("Log")
|
||||
for row: Label in log_window.log_box.get_children():
|
||||
var log_popup: BasePopup = _node("LogPopup")
|
||||
for row: Label in log_popup.log_box.get_children():
|
||||
row.text = "12:00:00 " + row.text.substr(9)
|
||||
|
||||
|
||||
func _open_popup(popup_name: String) -> Node:
|
||||
var popup: Node = _node(popup_name)
|
||||
match popup_name:
|
||||
"SyncWindow":
|
||||
# Opening the window starts a sync; show the empty window instead
|
||||
"SyncPopup":
|
||||
# Opening the popup starts a sync; show the empty popup instead
|
||||
popup.open()
|
||||
"NewCharacterSelect":
|
||||
"CharacterSelectPopup":
|
||||
popup.show_grid("Crono")
|
||||
"WinnerWindow":
|
||||
"WinnerPopup":
|
||||
popup.show_winner(Settings.player_array[0])
|
||||
"StatisticsPopupPanel":
|
||||
_call("get_statistics")
|
||||
@@ -243,7 +248,7 @@ func _open_popup(popup_name: String) -> Node:
|
||||
|
||||
|
||||
func _close_popup(popup: Node) -> void:
|
||||
if popup is PopupWindow:
|
||||
if popup is BasePopup:
|
||||
popup.close()
|
||||
else:
|
||||
popup.visible = false
|
||||
@@ -10,33 +10,53 @@ extends GdUnitTestSuite
|
||||
|
||||
const BASELINE_PATH: String = "res://tests/data/layout_baseline.json"
|
||||
|
||||
## Nodes that moved from the main window into the Quiz scene, by their old name.
|
||||
const QUIZ_NODES: Array[String] = [
|
||||
"Open", "FileDialog", "MusicListPanel", "DebugLabel", "SettingsWindow",
|
||||
"NewCharacterSelect", "WinnerWindow",
|
||||
]
|
||||
|
||||
## Nodes that moved into the Quiz scene under another path: old name to new path in
|
||||
## the quiz.
|
||||
const RENAMED_QUIZ_NODES: Dictionary = {
|
||||
"Players": "PlayersPanel",
|
||||
"ScrollContainer": "InspirationList",
|
||||
"VBoxContainer": "NowPlaying",
|
||||
"MusicPlayer": "MusicPlayer/PlayerBar",
|
||||
"RepeatSongCheckButton": "MusicPlayer/RepeatSongCheckButton",
|
||||
"ResetPlaylistButton": "QuizToolbar/ResetPlaylistButton",
|
||||
"ResetPointsButton": "QuizToolbar/ResetPointsButton",
|
||||
"SettingsButton": "QuizToolbar/SettingsButton",
|
||||
"SoundTestButton": "QuizToolbar/SoundTestButton",
|
||||
"ShowAnswerButton": "SongControls/ShowAnswerButton",
|
||||
"NextButton": "SongControls/NextButton",
|
||||
## Where each node of the old main window lives now: its old name, and the path that
|
||||
## replaces it. Nodes that are not listed are still where they were.
|
||||
const MOVED: Dictionary = {
|
||||
# The top bar
|
||||
"TopPanelContainer": "TopBar/TopPanelContainer",
|
||||
"Title": "TopBar/Title",
|
||||
"SearchButton": "TopBar/SearchButton",
|
||||
"SyncButton": "TopBar/SyncButton",
|
||||
"StatisticsButton": "TopBar/StatisticsButton",
|
||||
"ShortcutsButton": "TopBar/ShortcutsButton",
|
||||
"AboutButton": "TopBar/AboutButton",
|
||||
"QRButton": "TopBar/QRButton",
|
||||
# The popups of the main window, renamed from *Window to *Popup
|
||||
"Search": "SearchPopup",
|
||||
"SyncWindow": "SyncPopup",
|
||||
"QRWindow": "QRPopup",
|
||||
"ShortcutsWindow": "ShortcutsPopup",
|
||||
"AboutWindow": "AboutPopup",
|
||||
"Log": "LogPopup",
|
||||
# The quiz and its parts
|
||||
"Open": "Quiz/Open",
|
||||
"FileDialog": "Quiz/FileDialog",
|
||||
"DebugLabel": "Quiz/DebugLabel",
|
||||
"MusicListPanel": "Quiz/MusicListPanel",
|
||||
"Players": "Quiz/PlayersPanel",
|
||||
"ScrollContainer": "Quiz/InspirationList",
|
||||
"VBoxContainer": "Quiz/NowPlaying",
|
||||
"MusicPlayer": "Quiz/MusicPlayer/PlayerBar",
|
||||
"RepeatSongCheckButton": "Quiz/MusicPlayer/RepeatSongCheckButton",
|
||||
"ResetPlaylistButton": "Quiz/QuizToolbar/ResetPlaylistButton",
|
||||
"ResetPointsButton": "Quiz/QuizToolbar/ResetPointsButton",
|
||||
"SettingsButton": "Quiz/QuizToolbar/SettingsButton",
|
||||
"SoundTestButton": "Quiz/QuizToolbar/SoundTestButton",
|
||||
"ShowAnswerButton": "Quiz/SongControls/ShowAnswerButton",
|
||||
"NextButton": "Quiz/SongControls/NextButton",
|
||||
"SettingsWindow": "Quiz/SettingsPopup",
|
||||
"NewCharacterSelect": "Quiz/CharacterSelectPopup",
|
||||
"WinnerWindow": "Quiz/WinnerPopup",
|
||||
}
|
||||
|
||||
## Nodes that moved from the main window into the TopBar scene, by their old name.
|
||||
const TOP_BAR_NODES: Array[String] = [
|
||||
"TopPanelContainer", "Title", "SearchButton", "SyncButton", "StatisticsButton",
|
||||
"ShortcutsButton", "AboutButton", "QRButton",
|
||||
]
|
||||
## Scenes that were renamed, by their old and new root name. A row added to a list is
|
||||
## named after its scene's root when the name is still free, so these show up deeper in a
|
||||
## path.
|
||||
const RENAMED_SCENES: Dictionary = {
|
||||
"SongListObject": "SongRow",
|
||||
"Player": "PlayerRow",
|
||||
}
|
||||
|
||||
## How far a node may be from its old place, in pixels.
|
||||
const TOLERANCE: float = 0.5
|
||||
@@ -71,14 +91,12 @@ func after() -> void:
|
||||
|
||||
## Where the node that used to be at [param old_path] in the main window is now.
|
||||
static func new_path(old_path: String) -> String:
|
||||
var first: String = old_path.get_slice("/", 0)
|
||||
if first in QUIZ_NODES:
|
||||
return "Quiz/" + old_path
|
||||
if first in RENAMED_QUIZ_NODES:
|
||||
return "Quiz/" + RENAMED_QUIZ_NODES[first] + old_path.trim_prefix(first)
|
||||
if first in TOP_BAR_NODES:
|
||||
return "TopBar/" + old_path
|
||||
return old_path
|
||||
var parts: PackedStringArray = old_path.split("/")
|
||||
for i: int in parts.size():
|
||||
parts[i] = RENAMED_SCENES.get(parts[i], parts[i])
|
||||
var first: String = parts[0]
|
||||
parts[0] = MOVED.get(first, first)
|
||||
return "/".join(parts)
|
||||
|
||||
|
||||
func _baseline() -> Dictionary:
|
||||
|
||||
@@ -165,11 +165,11 @@ func _open_settings() -> void:
|
||||
|
||||
|
||||
func _close_settings() -> void:
|
||||
(_quiz.get_node("SettingsWindow") as Control).visible = false
|
||||
(_quiz.get_node("SettingsPopup") as Control).visible = false
|
||||
|
||||
|
||||
func _press_settings_button(unique_name: String) -> void:
|
||||
(_quiz.get_node("SettingsWindow").get_node("%" + unique_name) as Button).pressed.emit()
|
||||
(_quiz.get_node("SettingsPopup").get_node("%" + unique_name) as Button).pressed.emit()
|
||||
|
||||
|
||||
func test_raising_cache_size_does_not_download_while_settings_are_open() -> void:
|
||||
@@ -229,7 +229,7 @@ func test_show_answer_before_first_song_does_not_reveal_next_song() -> void:
|
||||
|
||||
|
||||
func test_log_adds_one_row_per_point_with_padded_time() -> void:
|
||||
var log_box: VBoxContainer = _window.get_node("%Log").get_node("%LogVBoxContainer")
|
||||
var log_box: VBoxContainer = _window.get_node("%LogPopup").get_node("%LogVBoxContainer")
|
||||
var crono: PlayerObject = _add_player("Crono")
|
||||
await _play_first_song()
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ func test_starts_empty() -> void:
|
||||
func test_refresh_shows_one_row_per_song_in_order() -> void:
|
||||
_panel.refresh()
|
||||
|
||||
assert_array(_rows().map(func(row: SongListObject) -> int: return row.song_object.song_number)) \
|
||||
assert_array(_rows().map(func(row: SongRow) -> int: return row.song_object.song_number)) \
|
||||
.contains_exactly([0, 1, 2])
|
||||
|
||||
|
||||
|
||||
@@ -146,7 +146,7 @@ func test_player_list_shows_rows_in_player_order() -> void:
|
||||
var rows: Array[Node] = _quiz.get_node(
|
||||
"PlayersPanel/VBoxContainer/ScrollContainer/PlayersListVBoxContainer").get_children()
|
||||
|
||||
assert_array(rows.map(func(row: Player) -> PlayerObject: return row.player_object)) \
|
||||
assert_array(rows.map(func(row: PlayerRow) -> PlayerObject: return row.player_object)) \
|
||||
.contains_exactly([_marle, _lucca, robo])
|
||||
assert_array(rows.map(func(row: Player) -> int: return row.list_index)) \
|
||||
assert_array(rows.map(func(row: PlayerRow) -> int: return row.list_index)) \
|
||||
.contains_exactly([0, 1, 2])
|
||||
@@ -58,7 +58,7 @@ func test_adding_a_name_adds_a_player_and_a_row() -> void:
|
||||
assert_str(crono.player_name).is_equal("Crono")
|
||||
await signals.is_emitted("player_added", [crono])
|
||||
assert_str(_panel.new_player_name_field.text).is_empty()
|
||||
assert_object((_rows()[0] as Player).player_object).is_same(crono)
|
||||
assert_object((_rows()[0] as PlayerRow).player_object).is_same(crono)
|
||||
|
||||
|
||||
func test_add_button_in_the_row_adds_the_player() -> void:
|
||||
@@ -105,9 +105,9 @@ func test_rows_follow_player_order_and_numbering() -> void:
|
||||
_add("Marle")
|
||||
_add("Lucca")
|
||||
|
||||
assert_array(_rows().map(func(row: Player) -> String: return row.player_object.player_name)) \
|
||||
assert_array(_rows().map(func(row: PlayerRow) -> String: return row.player_object.player_name)) \
|
||||
.contains_exactly(["Crono", "Marle", "Lucca"])
|
||||
assert_array(_rows().map(func(row: Player) -> int: return row.list_index)) \
|
||||
assert_array(_rows().map(func(row: PlayerRow) -> int: return row.list_index)) \
|
||||
.contains_exactly([0, 1, 2])
|
||||
|
||||
|
||||
@@ -123,12 +123,12 @@ func test_remove_button_removes_the_player_and_row() -> void:
|
||||
assert_array(Settings.player_array.map(
|
||||
func(p: PlayerObject) -> String: return p.player_name)).contains_exactly(["Marle"])
|
||||
assert_int(_rows().size()).is_equal(1)
|
||||
assert_int((_rows()[0] as Player).list_index).is_equal(0)
|
||||
assert_int((_rows()[0] as PlayerRow).list_index).is_equal(0)
|
||||
|
||||
|
||||
func test_character_button_asks_for_a_new_character() -> void:
|
||||
_add("Crono")
|
||||
var row: Player = _rows()[0]
|
||||
var row: PlayerRow = _rows()[0]
|
||||
var signals: GdUnitSignalAssert = assert_signal(monitor_signals(_panel))
|
||||
|
||||
(row.get_node("HBoxContainer/Character") as BaseButton).pressed.emit()
|
||||
@@ -142,5 +142,5 @@ func test_reload_shows_new_scores() -> void:
|
||||
|
||||
_panel.reload()
|
||||
|
||||
assert_str(((_rows()[0] as Player).get_node("HBoxContainer/Name") as Label).text) \
|
||||
assert_str(((_rows()[0] as PlayerRow).get_node("HBoxContainer/Name") as Label).text) \
|
||||
.ends_with("Crono: 3")
|
||||
@@ -1,44 +1,44 @@
|
||||
extends MainWindowTestSuite
|
||||
## All popups share PopupWindow: clicking outside the panel closes them, the backdrop
|
||||
## All popups share BasePopup: clicking outside the panel closes them, the backdrop
|
||||
## dims the window behind them, and the closing click does not reach the main window.
|
||||
## The main window and the quiz each have their own popups and their own backdrop.
|
||||
|
||||
## Popups in the main window: the ones opened from the top bar, and the log.
|
||||
const MAIN_POPUPS: Array[String] = [
|
||||
"Search", "SyncWindow", "QRWindow", "ShortcutsWindow", "AboutWindow", "Log",
|
||||
"SearchPopup", "SyncPopup", "QRPopup", "ShortcutsPopup", "AboutPopup", "LogPopup",
|
||||
]
|
||||
|
||||
## Popups opened from the quiz, in the Quiz scene.
|
||||
const QUIZ_POPUPS: Array[String] = [
|
||||
"SettingsWindow", "NewCharacterSelect", "WinnerWindow",
|
||||
"SettingsPopup", "CharacterSelectPopup", "WinnerPopup",
|
||||
]
|
||||
|
||||
|
||||
func _popup(node_name: String) -> PopupWindow:
|
||||
func _popup(node_name: String) -> BasePopup:
|
||||
return _quiz.get_node(node_name) if node_name in QUIZ_POPUPS \
|
||||
else _window.get_node(node_name)
|
||||
|
||||
|
||||
## The backdrop that shows behind [param popup].
|
||||
func _backdrop(popup: PopupWindow = _popup("SettingsWindow")) -> ColorRect:
|
||||
func _backdrop(popup: BasePopup = _popup("SettingsPopup")) -> ColorRect:
|
||||
return popup.get_parent().get_node("PopupBackdrop")
|
||||
|
||||
|
||||
## A point on screen outside the popup's panel.
|
||||
func _outside(popup: PopupWindow) -> Vector2:
|
||||
func _outside(popup: BasePopup) -> Vector2:
|
||||
var rect: Rect2 = popup.panel.get_global_rect()
|
||||
return Vector2(rect.end.x + 5, rect.end.y + 5) if rect.end.x < 1900 \
|
||||
else Vector2(rect.position.x - 5, rect.position.y - 5)
|
||||
|
||||
|
||||
func test_backdrops_are_hidden_without_popups() -> void:
|
||||
assert_bool(_backdrop(_popup("SettingsWindow")).visible).is_false()
|
||||
assert_bool(_backdrop(_popup("AboutWindow")).visible).is_false()
|
||||
assert_bool(_backdrop(_popup("SettingsPopup")).visible).is_false()
|
||||
assert_bool(_backdrop(_popup("AboutPopup")).visible).is_false()
|
||||
|
||||
|
||||
func test_backdrops_cover_the_whole_window() -> void:
|
||||
for node_name: String in ["SettingsWindow", "AboutWindow"]:
|
||||
var popup: PopupWindow = _popup(node_name)
|
||||
for node_name: String in ["SettingsPopup", "AboutPopup"]:
|
||||
var popup: BasePopup = _popup(node_name)
|
||||
popup.open()
|
||||
|
||||
assert_object(_backdrop(popup).get_global_rect()).override_failure_message(
|
||||
@@ -49,12 +49,12 @@ func test_backdrops_cover_the_whole_window() -> void:
|
||||
|
||||
func test_every_popup_is_a_popup_window() -> void:
|
||||
for node_name: String in MAIN_POPUPS + QUIZ_POPUPS:
|
||||
assert_object(_popup(node_name)).is_instanceof(PopupWindow)
|
||||
assert_object(_popup(node_name)).is_instanceof(BasePopup)
|
||||
|
||||
|
||||
func test_every_popup_shows_backdrop_and_closes_on_outside_click() -> void:
|
||||
for node_name: String in MAIN_POPUPS + QUIZ_POPUPS:
|
||||
var popup: PopupWindow = _popup(node_name)
|
||||
var popup: BasePopup = _popup(node_name)
|
||||
popup.open()
|
||||
await _runner.simulate_frames(1)
|
||||
assert_bool(_backdrop(popup).visible).override_failure_message(
|
||||
@@ -69,7 +69,7 @@ func test_every_popup_shows_backdrop_and_closes_on_outside_click() -> void:
|
||||
|
||||
|
||||
func test_click_inside_popup_keeps_it_open() -> void:
|
||||
var settings: PopupWindow = _popup("SettingsWindow")
|
||||
var settings: BasePopup = _popup("SettingsPopup")
|
||||
settings.open()
|
||||
await _runner.simulate_frames(1)
|
||||
|
||||
@@ -79,7 +79,7 @@ func test_click_inside_popup_keeps_it_open() -> void:
|
||||
|
||||
|
||||
func test_closing_click_does_not_press_button_behind_popup() -> void:
|
||||
var settings: PopupWindow = _popup("SettingsWindow")
|
||||
var settings: BasePopup = _popup("SettingsPopup")
|
||||
var reset_button: Button = _quiz.get_node("QuizToolbar/ResetPlaylistButton")
|
||||
settings.open()
|
||||
await _runner.simulate_frames(1)
|
||||
@@ -101,7 +101,7 @@ func test_button_works_again_after_popup_closed() -> void:
|
||||
|
||||
|
||||
func test_closing_search_clears_the_search() -> void:
|
||||
var search: PopupWindow = _popup("Search")
|
||||
var search: BasePopup = _popup("SearchPopup")
|
||||
search.open()
|
||||
var search_bar: TextEdit = search.get_node("Searchbar")
|
||||
search_bar.text = "mario"
|
||||
@@ -112,7 +112,7 @@ func test_closing_search_clears_the_search() -> void:
|
||||
|
||||
|
||||
func test_closing_character_select_allows_song_clicks_again() -> void:
|
||||
var character_select: PopupWindow = _popup("NewCharacterSelect")
|
||||
var character_select: BasePopup = _popup("CharacterSelectPopup")
|
||||
character_select.show_grid("Crono")
|
||||
assert_bool(Settings.character_select_open).is_true()
|
||||
|
||||
@@ -122,7 +122,7 @@ func test_closing_character_select_allows_song_clicks_again() -> void:
|
||||
|
||||
|
||||
func test_toggle_opens_and_closes() -> void:
|
||||
var shortcuts: PopupWindow = _popup("ShortcutsWindow")
|
||||
var shortcuts: BasePopup = _popup("ShortcutsPopup")
|
||||
|
||||
shortcuts.toggle()
|
||||
assert_bool(shortcuts.visible).is_true()
|
||||
|
||||
@@ -5,8 +5,8 @@ extends MainWindowTestSuite
|
||||
## server and the keyboard shortcuts reach both the main window and the quiz.
|
||||
|
||||
const MAIN_WINDOW_CHILDREN: Array[String] = [
|
||||
"TopBar", "Quiz", "PopupBackdrop", "Search", "SyncWindow", "QRWindow",
|
||||
"ShortcutsWindow", "StatisticsPopupPanel", "AboutWindow", "Log",
|
||||
"TopBar", "Quiz", "PopupBackdrop", "SearchPopup", "SyncPopup", "QRPopup",
|
||||
"ShortcutsPopup", "StatisticsPopupPanel", "AboutPopup", "LogPopup",
|
||||
]
|
||||
|
||||
const TOP_BAR_CHILDREN: Array[String] = [
|
||||
@@ -16,12 +16,12 @@ const TOP_BAR_CHILDREN: Array[String] = [
|
||||
|
||||
## Each top bar button and the popup it opens in the main window.
|
||||
const TOP_BAR_POPUPS: Dictionary = {
|
||||
"SearchButton": "Search",
|
||||
"SyncButton": "SyncWindow",
|
||||
"SearchButton": "SearchPopup",
|
||||
"SyncButton": "SyncPopup",
|
||||
"StatisticsButton": "StatisticsPopupPanel",
|
||||
"ShortcutsButton": "ShortcutsWindow",
|
||||
"AboutButton": "AboutWindow",
|
||||
"QRButton": "QRWindow",
|
||||
"ShortcutsButton": "ShortcutsPopup",
|
||||
"AboutButton": "AboutPopup",
|
||||
"QRButton": "QRPopup",
|
||||
}
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ func test_clicking_each_top_bar_button_opens_its_popup() -> void:
|
||||
|
||||
assert_bool(popup.visible).override_failure_message(
|
||||
"%s did not open %s" % [button_name, popup.name]).is_true()
|
||||
if popup is PopupWindow:
|
||||
if popup is BasePopup:
|
||||
popup.close()
|
||||
else:
|
||||
popup.visible = false
|
||||
@@ -115,7 +115,7 @@ func test_clicking_a_song_in_the_music_list_plays_it() -> void:
|
||||
var rows: Array[Node] = _quiz.get_node("MusicListPanel/ScrollContainer/MusicList") \
|
||||
.get_children()
|
||||
var first_row: Control = rows.filter(
|
||||
func(row: SongListObject) -> bool: return row.song_object.song_number == 0)[0]
|
||||
func(row: SongRow) -> bool: return row.song_object.song_number == 0)[0]
|
||||
|
||||
await _click_at(first_row.get_global_rect().position + Vector2(20, first_row.size.y / 2))
|
||||
await get_tree().create_timer(0.7).timeout
|
||||
@@ -130,13 +130,13 @@ func test_points_from_the_player_list_reach_the_song_and_log() -> void:
|
||||
(_player_row(crono).get_node("HBoxContainer/AddPoint") as BaseButton).pressed.emit()
|
||||
|
||||
assert_array(Playlist.song_object_array[0].players_given_point).contains_exactly([crono.id])
|
||||
assert_int((_window.get_node("%Log").get_node("%LogVBoxContainer") as Node).get_child_count()) \
|
||||
assert_int((_window.get_node("%LogPopup").get_node("%LogVBoxContainer") as Node).get_child_count()) \
|
||||
.is_equal(1)
|
||||
|
||||
|
||||
func test_character_button_in_the_player_list_picks_a_new_character() -> void:
|
||||
var crono: PlayerObject = _add_player("Crono")
|
||||
var character_select: PopupWindow = _quiz.get_node("NewCharacterSelect")
|
||||
var character_select: BasePopup = _quiz.get_node("CharacterSelectPopup")
|
||||
|
||||
(_player_row(crono).get_node("HBoxContainer/Character") as BaseButton).pressed.emit()
|
||||
|
||||
@@ -167,12 +167,12 @@ func test_loaded_song_list_shows_in_the_music_list() -> void:
|
||||
_quiz.song_loader.load_song_list()
|
||||
|
||||
var rows: Array[Node] = _quiz.get_node("MusicListPanel/ScrollContainer/MusicList").get_children()
|
||||
assert_array(rows.map(func(row: SongListObject) -> int: return row.song_object.song_number)) \
|
||||
assert_array(rows.map(func(row: SongRow) -> int: return row.song_object.song_number)) \
|
||||
.contains_exactly([0, 1])
|
||||
|
||||
|
||||
func test_quiz_popup_backdrop_covers_the_top_bar() -> void:
|
||||
var settings: PopupWindow = _quiz.get_node("SettingsWindow")
|
||||
var settings: BasePopup = _quiz.get_node("SettingsPopup")
|
||||
settings.open()
|
||||
await _runner.simulate_frames(1)
|
||||
|
||||
@@ -184,8 +184,8 @@ func test_quiz_popup_backdrop_covers_the_top_bar() -> void:
|
||||
|
||||
|
||||
func test_click_on_top_bar_while_quiz_popup_is_open_only_closes_it() -> void:
|
||||
var settings: PopupWindow = _quiz.get_node("SettingsWindow")
|
||||
var search: PopupWindow = _window.get_node("Search")
|
||||
var settings: BasePopup = _quiz.get_node("SettingsPopup")
|
||||
var search: BasePopup = _window.get_node("SearchPopup")
|
||||
settings.open()
|
||||
await _runner.simulate_frames(1)
|
||||
|
||||
@@ -198,10 +198,10 @@ func test_click_on_top_bar_while_quiz_popup_is_open_only_closes_it() -> void:
|
||||
func test_sync_disables_quiz_buttons_until_finished() -> void:
|
||||
_server.respond_bytes("/sync", PackedByteArray())
|
||||
_server.respond_json("/sync/progress", {"progress": 10, "time_spent": "00:00:01"})
|
||||
var sync_window: PopupWindow = _window.get_node("SyncWindow")
|
||||
var sync_popup: BasePopup = _window.get_node("SyncPopup")
|
||||
|
||||
_top_bar_button("SyncButton").pressed.emit()
|
||||
sync_window.sync_timer.stop()
|
||||
sync_popup.sync_timer.stop()
|
||||
|
||||
for button_name: String in ["QuizToolbar/SoundTestButton", "QuizToolbar/ResetPlaylistButton", "SongControls/ShowAnswerButton",
|
||||
"SongControls/NextButton"]:
|
||||
@@ -211,7 +211,7 @@ func test_sync_disables_quiz_buttons_until_finished() -> void:
|
||||
|
||||
_server.respond_json("/sync/progress", UiTour.SYNC_RESULT)
|
||||
var reloads_before: int = _server.count("/music/all/order")
|
||||
sync_window._on_sync_timeout()
|
||||
sync_popup._on_sync_timeout()
|
||||
await _runner.simulate_frames(2)
|
||||
|
||||
for button_name: String in ["QuizToolbar/SoundTestButton", "QuizToolbar/ResetPlaylistButton", "SongControls/ShowAnswerButton",
|
||||
@@ -229,7 +229,7 @@ func test_changing_server_reloads_search_and_quiz() -> void:
|
||||
var player: PlayerObject = _add_player("Crono")
|
||||
player.add_point()
|
||||
|
||||
_quiz.get_node("SettingsWindow").server_changed.emit()
|
||||
_quiz.get_node("SettingsPopup").server_changed.emit()
|
||||
|
||||
assert_int(_server.count("/music/all/order")).is_equal(search_loads + 1)
|
||||
assert_int(_server.count("/music/all")).is_equal(inspiration_loads + 1)
|
||||
@@ -239,10 +239,10 @@ func test_changing_server_reloads_search_and_quiz() -> void:
|
||||
|
||||
func test_alt_k_opens_shortcuts_and_alt_l_opens_log() -> void:
|
||||
await _press_keys([KEY_ALT, KEY_K])
|
||||
assert_bool((_window.get_node("ShortcutsWindow") as Control).visible).is_true()
|
||||
assert_bool((_window.get_node("ShortcutsPopup") as Control).visible).is_true()
|
||||
|
||||
await _press_keys([KEY_ALT, KEY_L])
|
||||
assert_bool((_window.get_node("Log") as Control).visible).is_true()
|
||||
assert_bool((_window.get_node("LogPopup") as Control).visible).is_true()
|
||||
|
||||
|
||||
func test_alt_down_lowers_the_volume() -> void:
|
||||
@@ -258,7 +258,7 @@ func test_alt_down_lowers_the_volume() -> void:
|
||||
|
||||
|
||||
func test_alt_enter_switches_fullscreen_and_settings_shows_it() -> void:
|
||||
var settings: PopupWindow = _quiz.get_node("SettingsWindow")
|
||||
var settings: BasePopup = _quiz.get_node("SettingsPopup")
|
||||
var was_fullscreen: bool = Settings.fullscreen
|
||||
|
||||
await _press_keys([KEY_ALT, KEY_ENTER])
|
||||
|
||||
@@ -12,7 +12,7 @@ func before_test() -> void:
|
||||
|
||||
|
||||
func _stats_checkbox() -> CheckButton:
|
||||
return _quiz.get_node("SettingsWindow").get_node("%AddToDatabaseCheckButton")
|
||||
return _quiz.get_node("SettingsPopup").get_node("%AddToDatabaseCheckButton")
|
||||
|
||||
|
||||
func test_winning_turns_statistics_off() -> void:
|
||||
@@ -57,7 +57,7 @@ func test_songs_after_a_win_are_not_counted() -> void:
|
||||
|
||||
func test_winning_score_cannot_go_below_one() -> void:
|
||||
_press("QuizToolbar/SettingsButton")
|
||||
var lower_button: Button = _quiz.get_node("SettingsWindow").get_node("%LowerButton")
|
||||
var lower_button: Button = _quiz.get_node("SettingsPopup").get_node("%LowerButton")
|
||||
|
||||
for i: int in 3:
|
||||
lower_button.pressed.emit()
|
||||
|
||||
@@ -11,7 +11,7 @@ func before_test() -> void:
|
||||
Settings.currently_syncing = false
|
||||
_server = FakeHttpTransport.new().install()
|
||||
_server.respond_bytes("/sync", PackedByteArray())
|
||||
_runner = scene_runner("res://SyncWindow.tscn")
|
||||
_runner = scene_runner("res://SyncPopup.tscn")
|
||||
_window = _runner.scene()
|
||||
|
||||
|
||||
File renamed without changes.
@@ -1,6 +1,6 @@
|
||||
extends GdUnitTestSuite
|
||||
|
||||
const SearchWindowScript: GDScript = preload("res://SearchWindow.gd")
|
||||
const SearchWindowScript: GDScript = preload("res://search_popup.gd")
|
||||
|
||||
var _search: Control
|
||||
|
||||
|
||||
Reference in new issue
Block a user