From 7395229086d9d4db06ebd5936bdd326dbe346834 Mon Sep 17 00:00:00 2001 From: Kevin Jahns Date: Tue, 18 Oct 2022 16:45:30 +0200 Subject: [PATCH] Port test from @PatrickShaw #432. Allow infinite captureTimeout in UndoManager #431. Closes #432 --- src/utils/UndoManager.js | 2 +- tests/undo-redo.tests.js | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/utils/UndoManager.js b/src/utils/UndoManager.js index 894a532f..5293cb96 100644 --- a/src/utils/UndoManager.js +++ b/src/utils/UndoManager.js @@ -224,7 +224,7 @@ export class UndoManager extends Observable { }) const now = time.getUnixTime() let didAdd = false - if (now - this.lastChange < this.captureTimeout && stack.length > 0 && !undoing && !redoing) { + if (this.lastChange > 0 && now - this.lastChange < this.captureTimeout && stack.length > 0 && !undoing && !redoing) { // append change to last stack op const lastOp = stack[stack.length - 1] lastOp.deletions = mergeDeleteSets([lastOp.deletions, transaction.deleteSet]) diff --git a/tests/undo-redo.tests.js b/tests/undo-redo.tests.js index 3b3794f0..3ee65d18 100644 --- a/tests/undo-redo.tests.js +++ b/tests/undo-redo.tests.js @@ -3,6 +3,19 @@ import { init, compare, applyRandomTests, Doc } from './testHelper.js' // eslint import * as Y from '../src/index.js' import * as t from 'lib0/testing' +/** + * @param {t.TestCase} tc + */ +export const testInfiniteCaptureTimeout = tc => { + const { array0 } = init(tc, { users: 3 }) + const undoManager = new Y.UndoManager(array0, { captureTimeout: Number.MAX_VALUE }) + array0.push([1, 2, 3]) + undoManager.stopCapturing() + array0.push([4, 5, 6]) + undoManager.undo() + t.compare(array0.toArray(), [1, 2, 3]) +} + /** * @param {t.TestCase} tc */