smartxml: transactions fix - ignore empty transactions
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Tue, 17 Dec 2013 11:52:33 +0000 (12:52 +0100)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Tue, 17 Dec 2013 11:52:33 +0000 (12:52 +0100)
Handle doc.transactionStart(); doc.transactionEnd() without actual
transformations performed in between.

src/smartxml/smartxml.js
src/smartxml/smartxml.test.js

index d9e44be..f92bf01 100644 (file)
@@ -509,8 +509,10 @@ $.extend(Document.prototype, Backbone.Events, {
             throw new Error('End of transaction requested, but there is no transaction in progress!');
         }
         this._transactionInProgress = false;
-        this.undoStack.push(this._transactionStack);
-        this._transactionStack = [];
+        if(this._transactionStack.length) {
+            this.undoStack.push(this._transactionStack);
+            this._transactionStack = [];
+        }
     },
 
     getNodeByPath: function(path) {
index cc68cdd..57f11cc 100644 (file)
@@ -1273,6 +1273,13 @@ describe('smartxml', function() {
                 expect(doc.root.getAttr('test'), '3');
             });
 
+            it('ignores empty transactions', function() {
+                var doc = getDocumentFromXML('<div></div>');
+                doc.startTransaction();
+                doc.endTransaction();
+                expect(doc.undoStack).to.have.length(0, 'empty transaction doesn\'t get pushed into undo stack');
+            });
+
             it('doesn\'t break on optimizations', function() {
                 // This is a smoke test checking if optimizations made to transaction undoing
                 // doesnt't break anything.