From 595d1217d9010fe1f3f4bd8bfc59a504d8b7be66 Mon Sep 17 00:00:00 2001 From: Hermes godot-vr Date: Thu, 15 Oct 2026 15:33:13 +0000 Subject: [PATCH] =?UTF-8?q?test=5Fux:=20Undo-Ketten-Z=C3=A4hlung=20korrigi?= =?UTF-8?q?ert=20=E2=80=94=204=20Commits=20brauchen=204=20Undos=20(Karte?= =?UTF-8?q?=20t=5Ff6f29d86)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Off-by-one im Test erwartete nach 2 Undos den Zustand nach move1, obwohl 3 Züge davorliegen (Zug, Kanten-Clamp, zurück ins Feld). Der Code war korrekt (EINE Aktion = EIN Undo-Schritt), der Test zählte falsch. Jetzt wird jeder Schritt einzeln verifiziert inkl. geclamptem Kanten-Zustand. Suite: 253 Checks grün. --- tests/test_ux.gd | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/test_ux.gd b/tests/test_ux.gd index 53f757b..7eed62c 100644 --- a/tests/test_ux.gd +++ b/tests/test_ux.gd @@ -464,15 +464,19 @@ func _test_group_move_rotate_undo() -> void: _check(center_after.distance_to(center) < 0.5, "Drehen: Schwerpunkt bleibt (Rotation um die Mitte)") # UND JETZT das Kern-Versprechen: EINE Aktion = EIN Undo-Schritt. + # 4 Commits (Zug, Kanten-Clamp, zurück ins Feld, Drehen) → 4 Undos bis zum Anfang. var steps_before := hist.entries.size() - hist.undo() # nimmt Rotation zurück → Zustand nach "zurück ins Feld" + hist.undo() # nimmt die Rotation zurück → Zustand nach "zurück ins Feld" _check(absf(float(objects[0]["rot_y_deg"]) - 0.0) < 0.001, "undo: Rotation zurück") _check(GroupOps.group_id(objects[0]) == 0 and GroupOps.group_id(objects[1]) == 0, "undo: Gruppen-Bindung bleibt (Feld reist im objects-Snapshot)") _check(hist.entries.size() == steps_before, "kein Eintrag verlorengegangen") - hist.undo() # nimmt den letzten Zug zurück → Zustand nach move1 (4/-3) + hist.undo() # nimmt "zurück ins Feld" zurück → geclampte Kanten-Position + _check(float(objects[0]["pos"][0]) <= 128.0 and absf(float(objects[0]["pos"][1]) - 0.0) < 0.001, + "undo: Kanten-Zug zurück (geclampter Zustand, EIN Schritt)") + hist.undo() # nimmt den Kanten-Zug zurück → Zustand nach move1 (4/-3) _check(absf(float(objects[0]["pos"][0]) - 4.0) < 0.001 and absf(float(objects[0]["pos"][2]) - -3.0) < 0.001, "undo: Zug komplett zurück (beide Mitglieder EIN Schritt)") - hist.redo() # setzt die geclampte Kanten-Position wieder ein + hist.redo() # setzt den Kanten-Zug wieder ein _check(float(objects[0]["pos"][0]) <= 128.0 and absf(float(objects[0]["pos"][1]) - 0.0) < 0.001, "redo: Zug wieder da (geclampt auf die gleiche Stelle)") _check(GroupOps.group_id(objects[1]) == 0, "redo: Gruppe bleibt gebunden")