Files
aetherbound-guild/runtime/tests/dev1/boot_service_test.gd
T

92 lines
2.8 KiB
GDScript

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)