fix(tests): restore matchers

We previously inherited the test matchers from diagram-js.
With the diagram-js migration to Mocha, the matchers changed.

As a result Jasmine silently discarted a number of test cases on our
suite.

This restores the old matchers from diagram-js in our project.
This commit is contained in:
Nico Rehwaldt 2015-04-13 10:52:01 +02:00
parent 788bcf3c48
commit 701bae6c1f
1 changed files with 85 additions and 1 deletions

View File

@ -1 +1,85 @@
module.exports = require('diagram-js/test/Matchers');
'use strict';
/* global jasmine */
var cloneDeep = require('lodash/lang/cloneDeep'),
isEqual = require('lodash/lang/isEqual'),
pick = require('lodash/object/pick');
module.exports.addDeepEquals = function() {
var jsondiffpatch = require('jsondiffpatch');
var compare = jsondiffpatch.create({
objectHash: function (obj) {
return JSON.stringify(obj);
}
});
function deepEquals(actual, expected) {
var actualClone = cloneDeep(actual);
var expectedClone = cloneDeep(expected);
var result = {
pass: isEqual(actualClone, expectedClone)
};
var message;
if (!result.pass) {
message =
'Expected elements to equal but got diff\n' +
JSON.stringify(compare.diff(actualClone, expectedClone), null, ' ');
} else {
message = 'Expected elements not to equal';
}
result.message = message;
return result;
}
jasmine.addMatchers({
toDeepEqual: function(util) {
return {
compare: deepEquals
};
}
});
};
module.exports.addBBoxMatchers = function() {
jasmine.addMatchers({
toFitBBox: function(util) {
return {
compare: function(actual, expected) {
var actualBBox = actual.getBBox();
var pass = actualBBox.x >= expected.x &&
actualBBox.y >= expected.y &&
actualBBox.width <= expected.width &&
actualBBox.x + actualBBox.width <= expected.x + expected.width &&
(expected.height ? actualBBox.height <= expected.height : true) &&
(expected.height ? actualBBox.y + actualBBox.height <= expected.y + expected.height : true);
var message = '';
if (!pass) {
message = 'Expected element#' + actual.id + ' with bbox ' +
jasmine.pp(pick(actualBBox, ['x', 'y', 'width', 'height'])) + ' to fit ' +
jasmine.pp(expected);
}
return {
pass: pass,
message: message
};
}
};
}
});
};