mapContaining and setContaining asymmetric matchers

This commit is contained in:
Olga Kozlova
2019-08-03 22:14:17 +03:00
parent 385ad33f60
commit b01d86840a
9 changed files with 479 additions and 1 deletions

View File

@@ -0,0 +1,39 @@
getJasmineRequireObj().SetContaining = function(j$) {
function SetContaining(sample) {
if (!j$.isSet(sample)) {
throw new Error('You must provide a set to `setContaining`, not ' + j$.pp(sample));
}
this.sample = sample;
}
SetContaining.prototype.asymmetricMatch = function(other, customTesters) {
if (!j$.isSet(other)) return false;
var hasAllMatches = true;
j$.util.forEachBreakable(this.sample, function(breakLoop, item) {
// for each item in `sample` there should be at least one matching item in `other`
// (not using `j$.matchersUtil.contains` because it compares set members by reference,
// not by deep value equality)
var hasMatch = false;
j$.util.forEachBreakable(other, function(oBreakLoop, oItem) {
if (j$.matchersUtil.equals(oItem, item, customTesters)) {
hasMatch = true;
oBreakLoop();
}
});
if (!hasMatch) {
hasAllMatches = false;
breakLoop();
}
});
return hasAllMatches;
};
SetContaining.prototype.jasmineToString = function() {
return '<jasmine.setContaining(' + j$.pp(this.sample) + ')>';
};
return SetContaining;
};