main/ holds the main window and top bar, quiz/ the quiz and its parts, player/ the music player, popups/ every popup and what they share, data/ the songs, players, playlist and settings, server/ the MusicServer client, common/ the list row and GameLog, and themes/ the themes and style boxes.
148 lines
4.5 KiB
GDScript
148 lines
4.5 KiB
GDScript
extends GdUnitTestSuite
|
|
## The player list on its own: adding players through the name field, removing them
|
|
## and asking for a new character.
|
|
|
|
var _snapshot: AutoloadSnapshot
|
|
var _runner: GdUnitSceneRunner
|
|
var _panel: PlayersPanel
|
|
|
|
|
|
func before_test() -> void:
|
|
_snapshot = AutoloadSnapshot.take([Settings])
|
|
Settings.player_array.clear()
|
|
Settings.edit_players = false
|
|
_runner = scene_runner("res://quiz/PlayersPanel.tscn")
|
|
_panel = _runner.scene()
|
|
|
|
|
|
func after_test() -> void:
|
|
await await_idle_frame()
|
|
_snapshot.restore()
|
|
|
|
|
|
func _rows() -> Array[Node]:
|
|
return _panel.players_list_container.get_children()
|
|
|
|
|
|
func _add(player_name: String) -> void:
|
|
_panel.new_player_name_field.text = player_name
|
|
_panel.add_player()
|
|
|
|
|
|
func _click(control: Control) -> void:
|
|
_runner.set_mouse_position(_panel.get_viewport().get_final_transform()
|
|
* control.get_global_rect().get_center())
|
|
await _runner.simulate_mouse_button_pressed(MOUSE_BUTTON_LEFT)
|
|
await _runner.await_input_processed()
|
|
|
|
|
|
func test_add_button_shows_and_hides_the_add_row() -> void:
|
|
assert_bool(_panel.add_player_container.visible).is_false()
|
|
|
|
await _click(_panel.add_players_button)
|
|
assert_bool(_panel.add_player_container.visible).is_true()
|
|
assert_bool(Settings.edit_players).is_true()
|
|
|
|
await _click(_panel.add_players_button)
|
|
assert_bool(_panel.add_player_container.visible).is_false()
|
|
assert_bool(Settings.edit_players).is_false()
|
|
|
|
|
|
func test_adding_a_name_adds_a_player_and_a_row() -> void:
|
|
var signals: GdUnitSignalAssert = assert_signal(monitor_signals(_panel))
|
|
|
|
_add("Crono")
|
|
|
|
assert_int(Settings.player_array.size()).is_equal(1)
|
|
var crono: PlayerObject = Settings.player_array[0]
|
|
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 PlayerRow).player_object).is_same(crono)
|
|
|
|
|
|
func test_add_button_in_the_row_adds_the_player() -> void:
|
|
await _click(_panel.add_players_button)
|
|
_panel.new_player_name_field.text = "Marle"
|
|
|
|
await _click(_panel.add_player_button)
|
|
|
|
assert_int(Settings.player_array.size()).is_equal(1)
|
|
|
|
|
|
func test_enter_in_the_name_field_adds_the_player() -> void:
|
|
await _click(_panel.add_players_button)
|
|
_panel.new_player_name_field.text = "Lucca"
|
|
_panel.new_player_name_field.grab_focus()
|
|
|
|
_runner.simulate_key_pressed(KEY_ENTER)
|
|
await _runner.await_input_processed()
|
|
|
|
assert_array(Settings.player_array.map(
|
|
func(p: PlayerObject) -> String: return p.player_name)).contains_exactly(["Lucca"])
|
|
|
|
|
|
func test_empty_name_adds_nobody() -> void:
|
|
var signals: GdUnitSignalAssert = assert_signal(monitor_signals(_panel))
|
|
|
|
_add("")
|
|
|
|
assert_array(Settings.player_array).is_empty()
|
|
assert_array(_rows()).is_empty()
|
|
await signals.wait_until(200).is_not_emitted("player_added")
|
|
|
|
|
|
func test_cannot_add_more_than_max_players() -> void:
|
|
for i: int in Settings.MAX_NUMBER_OF_PLAYERS + 1:
|
|
_add("Player %d" % i)
|
|
|
|
assert_int(Settings.player_array.size()).is_equal(Settings.MAX_NUMBER_OF_PLAYERS)
|
|
assert_int(_rows().size()).is_equal(Settings.MAX_NUMBER_OF_PLAYERS)
|
|
|
|
|
|
func test_rows_follow_player_order_and_numbering() -> void:
|
|
_add("Crono")
|
|
_add("Marle")
|
|
_add("Lucca")
|
|
|
|
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: PlayerRow) -> int: return row.list_index)) \
|
|
.contains_exactly([0, 1, 2])
|
|
|
|
|
|
func test_remove_button_removes_the_player_and_row() -> void:
|
|
_add("Crono")
|
|
_add("Marle")
|
|
var crono: PlayerObject = Settings.player_array[0]
|
|
var signals: GdUnitSignalAssert = assert_signal(monitor_signals(_panel))
|
|
|
|
(_rows()[0].get_node("HBoxContainer/RemovePlayer") as BaseButton).pressed.emit()
|
|
|
|
await signals.is_emitted("player_removed", [crono])
|
|
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 PlayerRow).list_index).is_equal(0)
|
|
|
|
|
|
func test_character_button_asks_for_a_new_character() -> void:
|
|
_add("Crono")
|
|
var row: PlayerRow = _rows()[0]
|
|
var signals: GdUnitSignalAssert = assert_signal(monitor_signals(_panel))
|
|
|
|
(row.get_node("HBoxContainer/Character") as BaseButton).pressed.emit()
|
|
|
|
await signals.is_emitted("change_character_requested", [row, "Crono"])
|
|
|
|
|
|
func test_reload_shows_new_scores() -> void:
|
|
_add("Crono")
|
|
Settings.player_array[0].player_score = 3
|
|
|
|
_panel.reload()
|
|
|
|
assert_str(((_rows()[0] as PlayerRow).get_node("HBoxContainer/Name") as Label).text) \
|
|
.ends_with("Crono: 3")
|