forked from woofmeow/straywild
135 lines
4.4 KiB
GDScript
135 lines
4.4 KiB
GDScript
extends SceneTree
|
|
|
|
const MainScene: PackedScene = preload("res://main/main.tscn")
|
|
|
|
|
|
func _initialize() -> void:
|
|
call_deferred("_run")
|
|
|
|
|
|
func _run() -> void:
|
|
root.size = Vector2i(1280, 720)
|
|
var main: Node = MainScene.instantiate()
|
|
root.add_child(main)
|
|
for _frame: int in 4:
|
|
await process_frame
|
|
if not bool(main.get("_application_initialized")):
|
|
main.call("_activate_selected_data_path", "", true)
|
|
for _frame: int in 8:
|
|
await process_frame
|
|
assert(bool(main.get("_application_initialized")))
|
|
|
|
var save_manager := main.get("_save_manager") as PlayerSaveManager
|
|
var player := main.get("_player") as Player
|
|
var data_root := main.get("_data_root") as PlayerDataRoot
|
|
assert(save_manager != null and player != null and data_root != null)
|
|
assert(save_manager.initialize_new_game(864209))
|
|
save_manager.set_autosave_enabled(true)
|
|
assert(player.wallet.restore_balance(4321))
|
|
assert(player.bag.add_item(&"coffee"))
|
|
assert(save_manager.save_now())
|
|
|
|
var save_path: String = str(save_manager.get("_save_path"))
|
|
assert(save_path.ends_with("player/player_save.nfsave"))
|
|
assert(FileAccess.file_exists(save_path))
|
|
assert(not FileAccess.file_exists(save_path.get_base_dir().path_join(
|
|
"player_save.json"
|
|
)))
|
|
_assert_opaque(save_path)
|
|
var decoded: Dictionary = ProgressionSaveCodec.read_local_save(save_path)
|
|
assert(bool(decoded.get("ok", false)))
|
|
assert(int((decoded["data"] as Dictionary)["save_version"]) == 10)
|
|
|
|
var archive_path: String = data_root.progression_backup_directory().path_join(
|
|
"progression-test.nfsave"
|
|
)
|
|
var exported: Dictionary = save_manager.export_progression_archive(
|
|
archive_path
|
|
)
|
|
assert(bool(exported.get("ok", false)))
|
|
assert(FileAccess.file_exists(archive_path))
|
|
_assert_opaque(archive_path)
|
|
var inspected: Dictionary = save_manager.inspect_progression_archive(
|
|
archive_path
|
|
)
|
|
assert(bool(inspected.get("ok", false)))
|
|
assert(int(inspected.get("wallet_balance", -1)) == 4321)
|
|
assert(int(inspected.get("world_seed", -1)) == 864209)
|
|
|
|
assert(player.wallet.restore_balance(7))
|
|
assert(save_manager.save_now())
|
|
var imported: Dictionary = save_manager.import_progression_archive(
|
|
archive_path
|
|
)
|
|
assert(bool(imported.get("ok", false)))
|
|
assert(save_manager.load_player_data())
|
|
assert(player.wallet.get_balance() == 4321)
|
|
assert(save_manager.get_world_seed() == 864209)
|
|
|
|
var legacy_data: Dictionary = (
|
|
ProgressionSaveCodec.read_local_save(save_path)["data"]
|
|
)
|
|
assert(save_manager.delete_progression_save())
|
|
var legacy_path: String = save_path.get_base_dir().path_join(
|
|
"player_save.json"
|
|
)
|
|
var legacy_file := FileAccess.open(legacy_path, FileAccess.WRITE)
|
|
assert(legacy_file != null)
|
|
legacy_file.store_string(JSON.stringify(legacy_data, "\t"))
|
|
legacy_file.close()
|
|
assert(save_manager.load_player_data())
|
|
assert(FileAccess.file_exists(save_path))
|
|
assert(not FileAccess.file_exists(legacy_path))
|
|
_assert_opaque(save_path)
|
|
|
|
var settings_panels: Array[Node] = main.find_children(
|
|
"*", "SettingsPanel", true, false
|
|
)
|
|
assert(settings_panels.size() == 2)
|
|
for settings_panel: SettingsPanel in settings_panels:
|
|
var export_button := settings_panel.get_node(
|
|
"%ExportProgression"
|
|
) as Button
|
|
var import_button := settings_panel.get_node(
|
|
"%ImportProgression"
|
|
) as Button
|
|
assert(export_button != null and import_button != null)
|
|
assert(not export_button.disabled and not import_button.disabled)
|
|
assert(
|
|
export_button.get_node(export_button.focus_neighbor_right)
|
|
== import_button
|
|
)
|
|
assert(
|
|
import_button.get_node(import_button.focus_neighbor_left)
|
|
== export_button
|
|
)
|
|
|
|
var migrated_root: String = data_root.root_path.get_base_dir().path_join(
|
|
"progression-migrated-data"
|
|
)
|
|
var data_migration: Dictionary = PortableDataMigration.migrate_active_to(
|
|
data_root, migrated_root
|
|
)
|
|
assert(bool(data_migration.get("ok", false)))
|
|
var migrated_save: String = migrated_root.path_join(
|
|
"player/player_save.nfsave"
|
|
)
|
|
assert(FileAccess.file_exists(migrated_save))
|
|
assert(bool(
|
|
ProgressionSaveCodec.read_local_save(migrated_save).get("ok", false)
|
|
))
|
|
|
|
main.queue_free()
|
|
for _frame: int in 4:
|
|
await process_frame
|
|
await create_timer(0.1).timeout
|
|
print("Progression archive validation: PASS")
|
|
quit()
|
|
|
|
|
|
func _assert_opaque(path: String) -> void:
|
|
var bytes: PackedByteArray = PortableFileGuard.read_bytes(path)
|
|
assert(not bytes.is_empty())
|
|
var encoded_hex: String = bytes.hex_encode()
|
|
assert("save_version".to_utf8_buffer().hex_encode() not in encoded_hex)
|
|
assert("wallet".to_utf8_buffer().hex_encode() not in encoded_hex)
|