From 700167de301c178ab0a8b6d20fed5d2629adbf3d Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 12:22:24 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=A7=AA=20[Testing=20Improvement]=20Ad?= =?UTF-8?q?d=20tests=20for=20invalidateCapturedCheckpointPositions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_plan.ts | 4 +++ tests/unit/undo-history.test.ts | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 test_plan.ts diff --git a/test_plan.ts b/test_plan.ts new file mode 100644 index 0000000..c2d174e --- /dev/null +++ b/test_plan.ts @@ -0,0 +1,4 @@ +import { ModificationTracker } from "./src/core/undo-history"; + +const tracker = new ModificationTracker(1); +console.log((tracker as any).getCheckpointInvalidationRevision()); diff --git a/tests/unit/undo-history.test.ts b/tests/unit/undo-history.test.ts index 0c0440b..4468292 100644 --- a/tests/unit/undo-history.test.ts +++ b/tests/unit/undo-history.test.ts @@ -142,3 +142,51 @@ describe('ModificationTracker hot-exit persistence', () => { assert.strictEqual(t.hasUncommittedChanges(), true); // e3 still uncommitted }); }); + +describe('invalidateCapturedCheckpointPositions', () => { + it('increments checkpointInvalidationRevision on timeline eviction', () => { + const tracker = new ModificationTracker(1); + tracker.record(entry('e1')); + const initialRevision = tracker.getCheckpointInvalidationRevision(); + tracker.record(entry('e2')); + assert.strictEqual(tracker.getCheckpointInvalidationRevision(), initialRevision + 1); + }); + + it('increments checkpointInvalidationRevision on stepBack (undo)', () => { + const tracker = new ModificationTracker(); + tracker.record(entry('e1')); + const preUndoRevision = tracker.getCheckpointInvalidationRevision(); + tracker.stepBack(); + assert.strictEqual(tracker.getCheckpointInvalidationRevision(), preUndoRevision + 1); + }); + + it('increments checkpointInvalidationRevision on rollbackToCheckpoint with undone entries', async () => { + const tracker = new ModificationTracker(); + tracker.record(entry('e1')); + tracker.record(entry('e2')); + await tracker.createCheckpoint(); + tracker.stepBack(); + const preRollbackRevision = tracker.getCheckpointInvalidationRevision(); + tracker.rollbackToCheckpoint(); + assert.strictEqual(tracker.getCheckpointInvalidationRevision(), preRollbackRevision + 1); + }); + + it('increments checkpointInvalidationRevision on rollbackToCheckpoint with uncommitted entries', async () => { + const tracker = new ModificationTracker(); + tracker.record(entry('e1')); + await tracker.createCheckpoint(); + tracker.record(entry('e2')); + const preRollbackRevision = tracker.getCheckpointInvalidationRevision(); + tracker.rollbackToCheckpoint(); + assert.strictEqual(tracker.getCheckpointInvalidationRevision(), preRollbackRevision + 1); + }); + + it('does NOT increment checkpointInvalidationRevision when rollbackToCheckpoint causes no change', async () => { + const tracker = new ModificationTracker(); + tracker.record(entry('e1')); + await tracker.createCheckpoint(); + const preRollbackRevision = tracker.getCheckpointInvalidationRevision(); + tracker.rollbackToCheckpoint(); + assert.strictEqual(tracker.getCheckpointInvalidationRevision(), preRollbackRevision); + }); +}); From 400a1ce64a9b57e8ebbe00edfa4c55cdb48f76ec Mon Sep 17 00:00:00 2001 From: zknpr Date: Mon, 8 Jun 2026 18:35:44 +0200 Subject: [PATCH 2/2] chore: remove committed test_plan.ts scratch file --- test_plan.ts | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 test_plan.ts diff --git a/test_plan.ts b/test_plan.ts deleted file mode 100644 index c2d174e..0000000 --- a/test_plan.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ModificationTracker } from "./src/core/undo-history"; - -const tracker = new ModificationTracker(1); -console.log((tracker as any).getCheckpointInvalidationRevision());