Custom matchers fail to behave as expected

If they return false, that should be respected.

Submitted via @tjgrathwell

[Finish #58184156]
close #434
This commit is contained in:
Gregg Van Hove and Tim Jarratt
2013-10-03 15:13:27 -07:00
parent 6354ee17e5
commit 7e071547f5
3 changed files with 20 additions and 8 deletions

View File

@@ -1781,9 +1781,9 @@ getJasmineRequireObj().matchersUtil = function(j$) {
var result = true; var result = true;
for (var i = 0; i < customTesters.length; i++) { for (var i = 0; i < customTesters.length; i++) {
result = customTesters[i](a, b); var customTesterResult = customTesters[i](a, b);
if (result) { if (!j$.util.isUndefined(customTesterResult)) {
return true; return customTesterResult;
} }
} }

View File

@@ -153,10 +153,22 @@ describe("matchersUtil", function() {
expect(j$.matchersUtil.equals(1, 2, [tester])).toBe(true); expect(j$.matchersUtil.equals(1, 2, [tester])).toBe(true);
}); });
it("passes for two empty Objects", function () {
expect(j$.matchersUtil.equals({}, {})).toBe(true);
});
describe("when a custom equality matcher is installed that returns 'undefined'", function () {
var tester = function(a, b) { return jasmine.undefined; };
it("passes for two empty Objects", function () {
expect(j$.matchersUtil.equals({}, {}, [tester])).toBe(true);
});
});
it("fails for equivalents when a custom equality matcher returns false", function() { it("fails for equivalents when a custom equality matcher returns false", function() {
var tester = function(a, b) { return false; }; var tester = function(a, b) { return false; };
expect(j$.matchersUtil.equals(1, 2, [tester])).toBe(false); expect(j$.matchersUtil.equals(1, 1, [tester])).toBe(false);
}); });
}); });

View File

@@ -52,9 +52,9 @@ getJasmineRequireObj().matchersUtil = function(j$) {
var result = true; var result = true;
for (var i = 0; i < customTesters.length; i++) { for (var i = 0; i < customTesters.length; i++) {
result = customTesters[i](a, b); var customTesterResult = customTesters[i](a, b);
if (result) { if (!j$.util.isUndefined(customTesterResult)) {
return true; return customTesterResult;
} }
} }