From bc34bc61f70dcbb6dd23fd8be88167390e98b9aa Mon Sep 17 00:00:00 2001 From: Steven Wroblewski Date: Thu, 1 Oct 2026 13:26:30 +0200 Subject: [PATCH] =?UTF-8?q?Tests:=20Speichern=20beim=20Schlie=C3=9Fen=20un?= =?UTF-8?q?d=20automatisches=20Speichern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beides setzt Konzept 9 um („automatisch in festen Abständen“, Speichern beim Schließen), und beides ließ sich entfernen, ohne dass ein Test rot wurde. - Schließen: Die Hauptszene bekommt NOTIFICATION_WM_CLOSE_REQUEST. Danach meldet ein SaveStore im selben Ordner einen Spielstand und genau eine Aufzeichnung. - Automatisch: Die Hauptszene läuft per _run_tick bis zum Takt vor AUTOSAVE_TICKS, ohne Bilder abzuwarten. Bis dahin gibt es keinen Spielstand, einen Takt später gibt es einen. Entfernt man das Speichern beim Schließen, schlägt der erste Test fehl; entfernt man das automatische Speichern in _run_tick, der zweite. Ohne das Schreiben der Aufzeichnung beim Schließen schlägt der erste ebenfalls fehl. Co-Authored-By: Claude Sonnet 5.5 --- game/tests/test_main.gd | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/game/tests/test_main.gd b/game/tests/test_main.gd index ab79971..ff63a94 100644 --- a/game/tests/test_main.gd +++ b/game/tests/test_main.gd @@ -46,6 +46,33 @@ func test_a_saved_game_is_continued_on_the_next_start() -> void: TestFiles.remove_dir(directory) +func test_closing_the_window_saves_the_game_and_records_the_session() -> void: + var directory := TestFiles.temporary_dir("close") + var main := _start_main(directory) + await tree.process_frame + main.notification(Node.NOTIFICATION_WM_CLOSE_REQUEST) + var store := SaveStore.new(directory) + check(store.has_save(), "the game was saved") + check_eq(store.recordings().size(), 1, "the session was recorded") + _stop_main(main) + TestFiles.remove_dir(directory) + + +func test_the_game_is_saved_automatically_every_two_minutes() -> void: + var directory := TestFiles.temporary_dir("autosave") + var main := _start_main(directory) + var store := SaveStore.new(directory) + check(not store.has_save(), "there is no save at the start") + # No frames are awaited, so only these ticks run. + while main.session.tick() < main.AUTOSAVE_TICKS - 1: + main._run_tick() + check(not store.has_save(), "still no save one tick before the interval ends") + main._run_tick() + check(store.has_save(), "saved when the interval ends") + _stop_main(main) + TestFiles.remove_dir(directory) + + func test_an_unusable_save_is_set_aside_and_a_new_world_starts() -> void: var directory := TestFiles.temporary_dir("broken") var store := SaveStore.new(directory)