Refine world setup copy and validation fixtures

This commit is contained in:
Alexander Sellite 2026-08-20 22:38:37 -04:00
parent 3d34ed0bee
commit 4731bfae61
4 changed files with 63 additions and 9 deletions

View file

@ -145,7 +145,10 @@ wait_for_network_host() {
sleep 2 sleep 2
return 0 return 0
fi fi
for _attempt in {1..100}; do # A cold generated-world startup can take longer than ten seconds before
# NetworkSession is ready to bind. Keep the client launch tied to the actual
# listener instead of treating that normal startup work as a host failure.
for _attempt in {1..600}; do
if ! kill -0 "${host_pid}" 2>/dev/null; then if ! kill -0 "${host_pid}" 2>/dev/null; then
return 1 return 1
fi fi
@ -231,7 +234,7 @@ run_session_switch_network_test() {
--headless --path "${PROJECT_ROOT}" --script "${script}" -- second_host \ --headless --path "${PROJECT_ROOT}" --script "${script}" -- second_host \
>"${second_root}/output.log" 2>&1 & >"${second_root}/output.log" 2>&1 &
second_pid=$! second_pid=$!
for _attempt in {1..100}; do for _attempt in {1..600}; do
if ! kill -0 "${first_pid}" 2>/dev/null \ if ! kill -0 "${first_pid}" 2>/dev/null \
|| ! kill -0 "${second_pid}" 2>/dev/null; then || ! kill -0 "${second_pid}" 2>/dev/null; then
break break

View file

@ -353,6 +353,8 @@ func _validate_data_settings_navigation() -> void:
"Open Data Folder left a controller-activatable dialog behind.", "Open Data Folder left a controller-activatable dialog behind.",
) )
var change_data_folder := panel.get_node("%ChangeDataFolder") as Button var change_data_folder := panel.get_node("%ChangeDataFolder") as Button
var export_progression := panel.get_node("%ExportProgression") as Button
var import_progression := panel.get_node("%ImportProgression") as Button
var copy_fingerprint := panel.get_node("%CopyPlayerFingerprint") as Button var copy_fingerprint := panel.get_node("%CopyPlayerFingerprint") as Button
var export_player := panel.get_node("%ExportPlayerIdentity") as Button var export_player := panel.get_node("%ExportPlayerIdentity") as Button
var import_player := panel.get_node("%ImportPlayerIdentity") as Button var import_player := panel.get_node("%ImportPlayerIdentity") as Button
@ -362,6 +364,8 @@ func _validate_data_settings_navigation() -> void:
data_tab, data_tab,
open_data_folder, open_data_folder,
change_data_folder, change_data_folder,
export_progression,
import_progression,
copy_fingerprint, copy_fingerprint,
export_player, export_player,
import_player, import_player,
@ -385,7 +389,7 @@ func _validate_data_settings_navigation() -> void:
_assert_neighbor( _assert_neighbor(
open_data_folder, open_data_folder,
&"focus_neighbor_bottom", &"focus_neighbor_bottom",
copy_fingerprint, export_progression,
) )
_assert_neighbor( _assert_neighbor(
change_data_folder, change_data_folder,
@ -395,12 +399,42 @@ func _validate_data_settings_navigation() -> void:
_assert_neighbor( _assert_neighbor(
change_data_folder, change_data_folder,
&"focus_neighbor_bottom", &"focus_neighbor_bottom",
import_progression,
)
_assert_neighbor(
export_progression,
&"focus_neighbor_top",
open_data_folder,
)
_assert_neighbor(
export_progression,
&"focus_neighbor_right",
import_progression,
)
_assert_neighbor(
export_progression,
&"focus_neighbor_bottom",
copy_fingerprint,
)
_assert_neighbor(
import_progression,
&"focus_neighbor_top",
change_data_folder,
)
_assert_neighbor(
import_progression,
&"focus_neighbor_left",
export_progression,
)
_assert_neighbor(
import_progression,
&"focus_neighbor_bottom",
copy_fingerprint, copy_fingerprint,
) )
_assert_neighbor( _assert_neighbor(
copy_fingerprint, copy_fingerprint,
&"focus_neighbor_top", &"focus_neighbor_top",
open_data_folder, export_progression,
) )
_assert_neighbor( _assert_neighbor(
copy_fingerprint, copy_fingerprint,

View file

@ -2,6 +2,7 @@ extends SceneTree
const MainScene = preload("res://main/main.tscn") const MainScene = preload("res://main/main.tscn")
const FishingSpotType = preload("res://fishing/fishing_spot.gd") const FishingSpotType = preload("res://fishing/fishing_spot.gd")
const TEST_SEED: int = 864209
func _initialize() -> void: func _initialize() -> void:
@ -22,9 +23,23 @@ func _run() -> void:
func _run_host() -> void: func _run_host() -> void:
var main: Node = await _create_initialized_main() var main: Node = await _create_initialized_main()
assert(bool(main.call(
"_apply_world",
WorldLayout.STARTER_ISLAND,
TEST_SEED,
true,
)))
assert(bool(main.call(
"_prepare_host_world",
WorldLayout.STARTER_ISLAND,
TEST_SEED,
)))
assert(bool(main.call("_prepare_private_host"))) assert(bool(main.call("_prepare_private_host")))
var save_manager := main.get("_save_manager") as PlayerSaveManager var save_manager := main.get("_save_manager") as PlayerSaveManager
assert(save_manager.initialize_new_game()) assert(save_manager.initialize_new_game(
TEST_SEED,
WorldLayout.STARTER_ISLAND,
))
main.call("_enter_gameplay") main.call("_enter_gameplay")
var session := main.get_node("%NetworkSession") as NetworkSession var session := main.get_node("%NetworkSession") as NetworkSession
assert(session.set_host_open(true)) assert(session.set_host_open(true))
@ -217,7 +232,9 @@ func _run_client() -> void:
int(player.get("_fishing_visual_phase")) int(player.get("_fishing_visual_phase"))
== Player.FishingVisualPhase.CASTING == Player.FishingVisualPhase.CASTING
) )
for _frame: int in 30: # Keep the transient pull-back pose visible long enough for the separate host
# process to observe it even when a cold validation run is CPU-bound.
for _frame: int in 120:
await physics_frame await physics_frame
player.set_fishing_visual(false) player.set_fishing_visual(false)
player.call("_set_sitting", true, true) player.call("_set_sitting", true, true)

View file

@ -187,10 +187,10 @@ func _refresh_presentation() -> void:
_generated_button.set_pressed_no_signal(generated) _generated_button.set_pressed_no_signal(generated)
_starter_button.set_pressed_no_signal(not generated) _starter_button.set_pressed_no_signal(not generated)
_world_description.text = ( _world_description.text = (
"build a new island from terrain chunks. the same seed always " "build a new island from terrain chunks.\n"
+ "builds the same world." + "the same seed always builds the same world."
if generated if generated
else "play on the authored starter island." else "play on the starter island."
) )
_seed_section.visible = generated _seed_section.visible = generated
_random_seed_button.set_pressed_no_signal( _random_seed_button.set_pressed_no_signal(