diff --git a/src/Types/Array.js b/src/Types/Array.js index 189d79bf..24cc37e3 100644 --- a/src/Types/Array.js +++ b/src/Types/Array.js @@ -144,19 +144,21 @@ this.eventHandler.addUserEventListener(f) } * _changed (transaction, op) { - if (op.struct === 'Insert') { - var l = op.left - var left - while (l != null) { - left = yield* transaction.getOperation(l) - if (!left.deleted) { - break + if (!op.deleted) { + if (op.struct === 'Insert') { + var l = op.left + var left + while (l != null) { + left = yield* transaction.getOperation(l) + if (!left.deleted) { + break + } + l = left.left } - l = left.left + op.left = l } - op.left = l + this.eventHandler.receivedOp(op) } - this.eventHandler.receivedOp(op) } } diff --git a/src/Types/Array.spec.js b/src/Types/Array.spec.js index d7060132..9b0fbb49 100644 --- a/src/Types/Array.spec.js +++ b/src/Types/Array.spec.js @@ -1,7 +1,7 @@ /* global createUsers, wait, Y, compareAllUsers, getRandomNumber, applyRandomTransactions */ /* eslint-env browser,jasmine */ -var numberOfYArrayTests = 10 +var numberOfYArrayTests = 100 describe('Array Type', function () { var y1, y2, y3, yconfig1, yconfig2, yconfig3, flushAll @@ -95,6 +95,17 @@ describe('Array Type', function () { expect(l1.toArray()).toEqual(l2.toArray()) done() }) + it('Handles deletions in late sync (2)', async function (done) { + var l1, l2 + l1 = await y1.set('Array', Y.Array) + await flushAll() + l2 = await y2.get('Array') + l1.insert(0, ['x', 'y']) + l1.delete(0, 2) + await flushAll() + expect(l1.toArray()).toEqual(l2.toArray()) + done() + }) it('Basic insert. Then delete the whole array', async function (done) { var l1, l2, l3 l1 = await y1.set('Array', Y.Array) @@ -208,13 +219,6 @@ describe('Array Type', function () { done() }) it(`succeed after ${numberOfYArrayTests} actions`, async function (done) { - while (this.users.length > 2) { - this.users.pop().disconnect() - this.arrays.pop() - } - for (var u of this.users) { - u.connector.debug = true - } await applyRandomTransactions(this.users, this.arrays, randomArrayTransactions, numberOfYArrayTests) await flushAll() await compareArrayValues(this.arrays)