Files
Cinderwild/tests/test_boot.gd

72 lines
3.2 KiB
GDScript

extends SceneTree
## The rename (Emberwild -> Cinderwild, 0.6.1): the first start copies your
## saves, identity and settings across from the old user-data folder, once,
## without overwriting anything already there, and only from the newest old
## name (so a world you deleted under Emberwild doesn't come back from the
## Valheimlike folder).
## Run: godot --headless --path . --script res://tests/test_boot.gd
var _fails := 0
func check(cond: bool, what: String) -> void:
print((" ok " if cond else " FAIL ") + what)
if not cond:
_fails += 1
func _write(path: String, text: String) -> void:
DirAccess.make_dir_recursive_absolute(path.get_base_dir())
var f := FileAccess.open(path, FileAccess.WRITE)
f.store_string(text)
f.close()
func _read(path: String) -> String:
return FileAccess.get_file_as_string(path) if FileAccess.file_exists(path) else ""
func _rm(dir: String) -> void:
if not DirAccess.dir_exists_absolute(dir):
return
var da := DirAccess.open(dir)
for f in da.get_files():
DirAccess.remove_absolute(dir.path_join(f))
for d in da.get_directories():
_rm(dir.path_join(d))
DirAccess.remove_absolute(dir)
func _initialize() -> void:
var B: Node = root.get_node("Boot")
var base := OS.get_user_data_dir().path_join("test_boot")
_rm(base)
var ember := base.path_join("Emberwild")
var valheim := base.path_join("Valheimlike")
var cinder := base.path_join("Cinderwild")
_write(ember.path_join("worlds/home/state.json"), "ember home")
_write(ember.path_join("identity.json"), "me")
_write(ember.path_join("logs/godot.log"), "old log")
_write(ember.path_join("migrated_from_valheimlike.txt"), "old marker")
_write(valheim.path_join("worlds/deleted/state.json"), "gone")
_write(cinder.path_join("audio.json"), "new settings")
_write(ember.path_join("audio.json"), "old settings")
print("the first start")
var n: int = 0
for old_name in B.OLD_NAMES:
var old_dir := base.path_join(old_name)
if DirAccess.dir_exists_absolute(old_dir):
n = B.migrate_from(old_dir, cinder, old_name)
break
check(n == 2, "copies the old folder's files (%d)" % n)
check(_read(cinder.path_join("worlds/home/state.json")) == "ember home" and _read(cinder.path_join("identity.json")) == "me",
"your worlds and identity come across")
check(_read(cinder.path_join("audio.json")) == "new settings", "nothing already there is overwritten")
check(not FileAccess.file_exists(cinder.path_join("logs/godot.log")), "logs stay behind")
check(not FileAccess.file_exists(cinder.path_join("worlds/deleted/state.json")), "the older Valheimlike folder isn't raked over")
check(FileAccess.file_exists(ember.path_join("identity.json")), "the old folder's left as it was")
check(FileAccess.file_exists(cinder.path_join("migrated_from_emberwild.txt")) and not FileAccess.file_exists(cinder.path_join("migrated_from_valheimlike.txt")),
"a marker says it's done")
print("the next start")
_write(ember.path_join("worlds/later/state.json"), "later")
check(B.migrate_from(ember, cinder, "Emberwild") == 0 and not FileAccess.file_exists(cinder.path_join("worlds/later/state.json")), "it only happens once")
_rm(base)
print("RESULT: %s (%d failures)" % ["PASS" if _fails == 0 else "FAIL", _fails])
quit(1 if _fails > 0 else 0)