From 79e2e6ae2e5401604be0032a3abcfe423badfd4b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Aleksander=20=C5=81ukasz?= Date: Mon, 24 Mar 2014 13:18:45 +0100 Subject: [PATCH] smartxml: transaction calls error handler instead of throwing error --- src/smartxml/smartxml.js | 12 ++++++++---- src/smartxml/smartxml.test.js | 16 ++++++++-------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/smartxml/smartxml.js b/src/smartxml/smartxml.js index 663b332..35c5299 100644 --- a/src/smartxml/smartxml.js +++ b/src/smartxml/smartxml.js @@ -583,14 +583,18 @@ $.extend(Document.prototype, Backbone.Events, { this._currentTransaction = null; }, - transaction: function(callback, context, metadata) { + transaction: function(callback, params) { var toret; - this.startTransaction(metadata); + params = params || {}; + this.startTransaction(params.metadata); try { - toret = callback.call(context); + toret = callback.call(params.context || this); } catch(e) { + if(params.error) { + params.error(e); + } this.rollbackTransaction(); - throw e; + return; } this.endTransaction(); return toret; diff --git a/src/smartxml/smartxml.test.js b/src/smartxml/smartxml.test.js index d1eaf22..fb420db 100644 --- a/src/smartxml/smartxml.test.js +++ b/src/smartxml/smartxml.test.js @@ -1661,17 +1661,17 @@ describe('smartxml', function() { expect(doc.root.contents().length).to.equal(0); }); - it('rollbacks and rethrow if error gets thrown', function() { + it('rollbacks and calls error handleor if error gets thrown', function() { var doc = getDocumentFromXML(''), - err = new Error(); + err = new Error(), + spy = sinon.spy(); - expect(function() { - doc.transaction(function() { - doc.root.append({tagName: 'div'}); - throw err; - }); - }).to.throw(err); + doc.transaction(function() { + doc.root.append({tagName: 'div'}); + throw err; + }, {error: spy}); + expect(spy.args[0][0]).to.equal(err); expect(doc.root.contents().length).to.equal(0); expect(doc.undoStack.length).to.equal(0); }); -- 2.20.1