Files
MusicPlayer/tests/integration/test_players_panel.gd
T

147 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://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 Player).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: Player) -> String: return row.player_object.player_name)) \
.contains_exactly(["Crono", "Marle", "Lucca"])
assert_array(_rows().map(func(row: Player) -> 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 Player).list_index).is_equal(0)
func test_character_button_asks_for_a_new_character() -> void:
_add("Crono")
var row: Player = _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 Player).get_node("HBoxContainer/Name") as Label).text) \
.ends_with("Crono: 3")