extends SceneTree const BootService = preload("res://entry/boot_service.gd") const SETTINGS_PATH := "user://dev1_boot_settings_test.json" const SAVE_PATH := "user://dev1_boot_save_test.json" var failures: Array[String] = [] func _initialize() -> void: call_deferred("run_test") func run_test() -> void: _cleanup() verify_clean_boot() verify_recoverable_resource_retry() verify_settings_and_save_diagnostics() _cleanup() if failures.is_empty(): print("ABG_DEV1_BOOT_OK resources=true storage=true settings=true save=true recoverable_retry=true diagnostics=safe") quit(0) else: for failure in failures: push_error(failure) quit(1) func verify_clean_boot() -> void: var service: RefCounted = _service() var terminal := _run(service) expect(terminal.state == "complete", "clean install reaches complete: %s" % str(terminal)) expect(terminal.completed == terminal.total, "complete counts every named check") func verify_recoverable_resource_retry() -> void: var service: RefCounted = _service() service.required_resources = ["res://entry/not-present.tres"] var failed := _run(service) expect(failed.state == "error" and failed.code == "REQUIRED_RESOURCE_UNAVAILABLE", "missing resource is recoverable and coded") expect(not failed.has("path"), "player diagnostic does not expose a local path") service.required_resources = ["res://entry/entry_shell.gd"] var retried := _run(service) expect(retried.state == "complete", "retry re-runs the verification operation") func verify_settings_and_save_diagnostics() -> void: _write(SETTINGS_PATH, "not-json") var settings_failure := _run(_service()) expect(settings_failure.code == "SETTINGS_FILE_INVALID", "invalid settings block with a stable diagnostic") _cleanup() _write(SAVE_PATH, JSON.stringify({"unexpected": true})) var save_failure := _run(_service()) expect(save_failure.code == "SAVE_REVIEW_REQUIRED", "unsafe save requires review rather than reset") func _service() -> RefCounted: var service: RefCounted = BootService.new() service.required_resources = [ "res://main.tscn", "res://entry/entry_shell.gd", "res://assets/backgrounds/p9_3_guild_hall.png", ] service.preferences_path = SETTINGS_PATH service.save_path = SAVE_PATH return service func _run(service: RefCounted) -> Dictionary: var snapshot: Dictionary = service.begin() while snapshot.state == "running": snapshot = service.verify_next() return snapshot func _write(path: String, text: String) -> void: var file := FileAccess.open(path, FileAccess.WRITE) file.store_string(text) file.close() func _cleanup() -> void: for path in [SETTINGS_PATH, SAVE_PATH]: if FileAccess.file_exists(path): DirAccess.remove_absolute(path) func expect(condition: bool, message: String) -> void: if not condition: failures.append("DEV-1 Boot: %s" % message)