Profile, Startoptionen und vorsichtiges Lesen

Die Befehlszeile wählt ein Profil, einen Namen und einen Direktstart.
Zwei Fenster auf einem Rechner sind so zwei Spieler. Ein Schlüssel oder
Spielstand, der sich gerade nicht lesen lässt, wird nicht mehr ersetzt.
Name und zuletzt genutzte Adresse bleiben gespeichert.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Steven Wroblewski
2026-10-01 20:57:03 +02:00
parent a43ce66a89
commit d5debc5bcb
8 changed files with 229 additions and 9 deletions
+48
View File
@@ -126,3 +126,51 @@ func test_only_the_newest_recordings_are_kept() -> void:
check(FileAccess.file_exists(paths[paths.size() - 1]), "the newest is there")
check_eq(store.write_recording(PackedByteArray()), "", "an empty recording is not written")
TestFiles.remove_dir(directory)
func test_a_key_that_cannot_be_read_right_now_is_not_replaced() -> void:
var directory := TestFiles.temporary_dir("held-key")
var key := SaveStore.new(directory).player_key()
var store := HeldFileStore.new(directory)
store.unreadable = SaveStore.KEY_FILE
check_eq(store.player_key(), PackedByteArray(), "no key for now")
check_eq(store.last_read_error, ERR_FILE_CANT_READ, "the reason is kept")
check_eq(SaveStore.new(directory).player_key(), key, "the key on disk is the old one")
TestFiles.remove_dir(directory)
func test_a_damaged_key_is_replaced() -> void:
var directory := TestFiles.temporary_dir("damaged-key")
var file := FileAccess.open(directory.path_join(SaveStore.KEY_FILE), FileAccess.WRITE)
file.store_buffer(PackedByteArray([1, 2, 3]))
file.close()
var store := SaveStore.new(directory)
var key := store.player_key()
check_eq(key.size(), SaveStore.KEY_BYTES, "a new key")
check_eq(SaveStore.new(directory).player_key(), key, "which is kept")
TestFiles.remove_dir(directory)
func test_a_save_that_cannot_be_read_right_now_reports_why() -> void:
var directory := TestFiles.temporary_dir("held-save")
SaveStore.new(directory).write_save(PackedByteArray([1, 2, 3]))
var store := HeldFileStore.new(directory)
store.unreadable = SaveStore.SAVE_FILE
check_eq(store.read_save(), PackedByteArray(), "nothing read")
check_eq(store.last_read_error, ERR_FILE_CANT_READ, "the reason")
store.unreadable = ""
check_eq(store.read_save(), PackedByteArray([1, 2, 3]), "readable again later")
check_eq(store.last_read_error, OK, "no error now")
TestFiles.remove_dir(directory)
func test_the_settings_are_kept() -> void:
var directory := TestFiles.temporary_dir("settings")
var store := SaveStore.new(directory)
check_eq(store.player_name(), "", "no name at first")
store.set_player_name("Ada")
store.set_last_address("192.168.1.20")
var later := SaveStore.new(directory)
check_eq(later.player_name(), "Ada", "name")
check_eq(later.last_address(), "192.168.1.20", "address")
TestFiles.remove_dir(directory)