Divec has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/405926 )

Change subject: ve.dm.Change: Truncate stores as well as transactions on 
conflict
......................................................................

ve.dm.Change: Truncate stores as well as transactions on conflict

Change-Id: I5e07579ded9715384875a2d83498d54a9eb0f808
---
M src/dm/ve.dm.Change.js
M tests/dm/ve.dm.Change.test.js
2 files changed, 43 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor 
refs/changes/26/405926/1

diff --git a/src/dm/ve.dm.Change.js b/src/dm/ve.dm.Change.js
index 5ff3bdf..a582371 100644
--- a/src/dm/ve.dm.Change.js
+++ b/src/dm/ve.dm.Change.js
@@ -432,6 +432,7 @@
                        if ( rebases[ 0 ] === null ) {
                                rejected = uncommitted.mostRecent( 
uncommitted.start + i );
                                transactionsB.length = i;
+                               storesB.length = i;
                                selectionsB = {};
                                break bLoop;
                        }
@@ -658,16 +659,13 @@
  */
 ve.dm.Change.prototype.unapplyTo = function ( surface ) {
        var doc = surface.documentModel,
-               historyLength = doc.completeHistory.length - this.getLength(),
-               storeLength = doc.store.getLength();
-       this.stores.forEach( function ( store ) {
-               storeLength -= store.getLength();
-       } );
+               historyLength = doc.completeHistory.length - this.getLength();
        this.transactions.slice().reverse().forEach( function ( tx ) {
                surface.change( tx.reversed() );
        } );
        doc.completeHistory.length = historyLength;
-       doc.store.truncate( storeLength );
+       doc.storeLengthAtHistoryLength.length = historyLength + 1;
+       doc.store.truncate( doc.storeLengthAtHistoryLength[ historyLength ] );
 };
 
 /**
diff --git a/tests/dm/ve.dm.Change.test.js b/tests/dm/ve.dm.Change.test.js
index dc9aea1..76f5855 100644
--- a/tests/dm/ve.dm.Change.test.js
+++ b/tests/dm/ve.dm.Change.test.js
@@ -276,6 +276,45 @@
        );
 } );
 
+QUnit.test( 'Rebase with conflicting annotations', function ( assert ) {
+       var setBold, remove, result,
+               origData = [ { type: 'paragraph' }, 'A', { type: '/paragraph' } 
],
+               newSurface = function () {
+                       return new ve.dm.Surface(
+                               ve.dm.example.createExampleDocumentFromData( 
origData )
+                       );
+               },
+               surface = newSurface(),
+               doc = surface.documentModel,
+               TxRemove = ve.dm.TransactionBuilder.static.newFromRemoval,
+               TxAnnotate = ve.dm.TransactionBuilder.static.newFromAnnotation,
+               b = ve.dm.example.bold,
+               emptyStore = new ve.dm.IndexValueStore(),
+               bStore = new ve.dm.IndexValueStore( [ b ] );
+
+       assert.expect( 3 );
+
+       // Canonical history: text was removed
+       remove = new ve.dm.Change( 1, [ TxRemove( doc, new ve.Range( 1, 2 ) ) 
], [ emptyStore ], {} );
+       setBold = new ve.dm.Change( 1, [ TxAnnotate( doc, new ve.Range( 1, 2 ), 
'set', b ) ], [ bStore ], {} );
+       result = ve.dm.Change.static.rebaseUncommittedChange( remove, setBold );
+       assert.deepEqual(
+               result.rebased.serialize(),
+               new ve.dm.Change( 2, [], [], {} ).serialize(),
+               'Nothing got rebased'
+       );
+       assert.deepEqual(
+               result.rejected.serialize(),
+               setBold.serialize(),
+               'setBold got rejected'
+       );
+       assert.deepEqual(
+               result.transposedHistory.serialize(),
+               remove.serialize(),
+               'remove got transposed'
+       );
+} );
+
 QUnit.test( 'Serialize/deserialize', function ( assert ) {
        var origData = [ { type: 'paragraph' }, 'b', 'a', 'r', { type: 
'/paragraph' } ],
                newSurface = function () {

-- 
To view, visit https://gerrit.wikimedia.org/r/405926
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5e07579ded9715384875a2d83498d54a9eb0f808
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Divec <da...@troi.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to