toContain works with array-like objects (Arguments, HTMLCollections, etc)
Fixes #699 Don't rely on Array.prototype.indexOf for testing containment (not in IE8)
This commit is contained in:
committed by
slackersoft
parent
a4d134521a
commit
da6813ef0d
@@ -2187,7 +2187,9 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|||||||
contains: function(haystack, needle, customTesters) {
|
contains: function(haystack, needle, customTesters) {
|
||||||
customTesters = customTesters || [];
|
customTesters = customTesters || [];
|
||||||
|
|
||||||
if (Object.prototype.toString.apply(haystack) === '[object Array]') {
|
if ((Object.prototype.toString.apply(haystack) === '[object Array]') ||
|
||||||
|
(!!haystack && !haystack.indexOf))
|
||||||
|
{
|
||||||
for (var i = 0; i < haystack.length; i++) {
|
for (var i = 0; i < haystack.length; i++) {
|
||||||
if (eq(haystack[i], needle, [], [], customTesters)) {
|
if (eq(haystack[i], needle, [], [], customTesters)) {
|
||||||
return true;
|
return true;
|
||||||
@@ -2195,6 +2197,7 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return !!haystack && haystack.indexOf(needle) >= 0;
|
return !!haystack && haystack.indexOf(needle) >= 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ describe("matchersUtil", function() {
|
|||||||
|
|
||||||
describe("contains", function() {
|
describe("contains", function() {
|
||||||
it("passes when expected is a substring of actual", function() {
|
it("passes when expected is a substring of actual", function() {
|
||||||
expect(j$.matchersUtil.contains("ABC", "B")).toBe(true);
|
expect(j$.matchersUtil.contains("ABC", "BC")).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("fails when expected is a not substring of actual", function() {
|
it("fails when expected is a not substring of actual", function() {
|
||||||
@@ -207,6 +207,15 @@ describe("matchersUtil", function() {
|
|||||||
it("fails when actual is null", function() {
|
it("fails when actual is null", function() {
|
||||||
expect(j$.matchersUtil.contains(null, 'A')).toBe(false);
|
expect(j$.matchersUtil.contains(null, 'A')).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("passes with array-like objects", function() {
|
||||||
|
var capturedArgs = null;
|
||||||
|
function testFunction(){
|
||||||
|
capturedArgs = arguments;
|
||||||
|
}
|
||||||
|
testFunction('foo', 'bar');
|
||||||
|
expect(j$.matchersUtil.contains(capturedArgs, 'bar')).toBe(true);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("buildMessage", function() {
|
describe("buildMessage", function() {
|
||||||
|
|||||||
@@ -11,7 +11,9 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|||||||
contains: function(haystack, needle, customTesters) {
|
contains: function(haystack, needle, customTesters) {
|
||||||
customTesters = customTesters || [];
|
customTesters = customTesters || [];
|
||||||
|
|
||||||
if (Object.prototype.toString.apply(haystack) === '[object Array]') {
|
if ((Object.prototype.toString.apply(haystack) === '[object Array]') ||
|
||||||
|
(!!haystack && !haystack.indexOf))
|
||||||
|
{
|
||||||
for (var i = 0; i < haystack.length; i++) {
|
for (var i = 0; i < haystack.length; i++) {
|
||||||
if (eq(haystack[i], needle, [], [], customTesters)) {
|
if (eq(haystack[i], needle, [], [], customTesters)) {
|
||||||
return true;
|
return true;
|
||||||
@@ -19,6 +21,7 @@ getJasmineRequireObj().matchersUtil = function(j$) {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return !!haystack && haystack.indexOf(needle) >= 0;
|
return !!haystack && haystack.indexOf(needle) >= 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user