fix(BaseViewer): always emit saveXML.done

This ensures we emit saveXML.done on error, too.
This commit is contained in:
Nico Rehwaldt 2021-03-01 23:29:51 +01:00 committed by fake-join[bot]
parent 39f1cbe92c
commit 3567565514
2 changed files with 81 additions and 25 deletions

View File

@ -358,12 +358,12 @@ BaseViewer.prototype.saveXML = wrapForCompatibility(function saveXML(options) {
var definitions = this._definitions; var definitions = this._definitions;
return new Promise(function(resolve, reject) { return new Promise(function(resolve) {
if (!definitions) { if (!definitions) {
var err = new Error('no definitions loaded'); return resolve({
error: new Error('no definitions loaded')
return reject(err); });
} }
// allow to fiddle around with definitions // allow to fiddle around with definitions
@ -375,25 +375,27 @@ BaseViewer.prototype.saveXML = wrapForCompatibility(function saveXML(options) {
var xml = result.xml; var xml = result.xml;
try { xml = self._emit('saveXML.serialized', {
xml = self._emit('saveXML.serialized', { xml: xml
error: null, }) || xml;
xml: xml
}) || xml;
self._emit('saveXML.done', { return resolve({
error: null, xml: xml
xml: xml });
});
} catch (e) {
console.error('error in saveXML life-cycle listener', e);
}
return resolve({ xml: xml });
}).catch(function(err) {
return reject(err);
}); });
}).catch(function(error) {
return { error: error };
}).then(function(result) {
self._emit('saveXML.done', result);
var error = result.error;
if (error) {
return Promise.reject(error);
}
return result;
}); });
}); });

View File

@ -1242,12 +1242,66 @@ describe('Viewer', function() {
// then // then
expect(events).to.eql([ expect(events).to.eql([
[ 'saveXML.start', [ 'definitions' ] ], [ 'saveXML.start', [ 'definitions' ] ],
[ 'saveXML.serialized', ['error', 'xml' ] ], [ 'saveXML.serialized', [ 'xml' ] ],
[ 'saveXML.done', ['error', 'xml' ] ] [ 'saveXML.done', [ 'xml' ] ]
]); ]);
}); });
}); });
it('should emit <saveXML.done> on error', function() {
var xml = require('../fixtures/bpmn/simple.bpmn');
var viewer;
var events = [];
return createViewer(container, Viewer, xml).then(function(result) {
var err = result.error;
viewer = result.viewer;
expect(err).not.to.exist;
// when
viewer.on('saveXML.start', 250, function() {
throw new Error('failing pre-save listener');
});
viewer.on([
'saveXML.start',
'saveXML.serialized',
'saveXML.done'
], function(e) {
// log event type + event arguments
events.push([
e.type,
Object.keys(e).filter(function(key) {
return key !== 'type';
})
]);
});
return viewer.importXML(xml);
}).then(function(result) {
// when
return viewer.saveXML();
}).catch(function(error) {
events.push([ 'error' ]);
}).finally(function() {
// then
expect(events).to.eql([
[ 'saveXML.start', [ 'definitions' ] ],
[ 'saveXML.done', [ 'error' ] ],
[ 'error' ]
]);
});
});
}); });
@ -2170,8 +2224,8 @@ describe('Viewer', function() {
// then // then
expect(events).to.eql([ expect(events).to.eql([
[ 'saveXML.start', [ 'definitions' ] ], [ 'saveXML.start', [ 'definitions' ] ],
[ 'saveXML.serialized', ['error', 'xml' ] ], [ 'saveXML.serialized', [ 'xml' ] ],
[ 'saveXML.done', ['error', 'xml' ] ] [ 'saveXML.done', [ 'xml' ] ]
]); ]);
done(); done();