92 lines
2.8 KiB
GDScript
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)
|