From 81c601c65f17d74318472d366a8ac2be7399330a Mon Sep 17 00:00:00 2001
From: Kevin Jahns <kevin.jahns@rwth-aachen.de>
Date: Sat, 25 Jul 2015 23:58:57 +0000
Subject: [PATCH] fixed late sync with deletions

---
 src/Types/Array.js      | 22 ++++++++++++----------
 src/Types/Array.spec.js | 20 ++++++++++++--------
 2 files changed, 24 insertions(+), 18 deletions(-)

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)
-- 
GitLab