Don't overwrite MatchersUtil methods with ones that were added to Array.prototype, esp. contains
Fixes #1849.
This commit is contained in:
@@ -2810,7 +2810,9 @@ getJasmineRequireObj().asymmetricEqualityTesterArgCompatShim = function(j$) {
|
|||||||
|
|
||||||
for (i = 0; i < props.length; i++) {
|
for (i = 0; i < props.length; i++) {
|
||||||
k = props[i];
|
k = props[i];
|
||||||
if (k !== 'length') {
|
// Skip length (dealt with above), and anything that collides with
|
||||||
|
// MatchesUtil e.g. an Array.prototype.contains method added by user code
|
||||||
|
if (k !== 'length' && !self[k]) {
|
||||||
copy(self, Array.prototype, k);
|
copy(self, Array.prototype, k);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ describe('asymmetricEqualityTesterArgCompatShim', function() {
|
|||||||
it('provides properties of Array.prototype', function() {
|
it('provides properties of Array.prototype', function() {
|
||||||
var keys = [
|
var keys = [
|
||||||
'concat',
|
'concat',
|
||||||
'constructor',
|
|
||||||
'every',
|
'every',
|
||||||
'filter',
|
'filter',
|
||||||
'forEach',
|
'forEach',
|
||||||
@@ -55,8 +54,6 @@ describe('asymmetricEqualityTesterArgCompatShim', function() {
|
|||||||
'some',
|
'some',
|
||||||
'sort',
|
'sort',
|
||||||
'splice',
|
'splice',
|
||||||
'toLocaleString',
|
|
||||||
'toString',
|
|
||||||
'unshift'
|
'unshift'
|
||||||
],
|
],
|
||||||
optionalKeys = [
|
optionalKeys = [
|
||||||
@@ -98,4 +95,49 @@ describe('asymmetricEqualityTesterArgCompatShim', function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('When Array.prototype additions collide with MatchersUtil methods', function() {
|
||||||
|
function keys() {
|
||||||
|
return [
|
||||||
|
'contains',
|
||||||
|
'buildFailureMessage',
|
||||||
|
'asymmetricDiff_',
|
||||||
|
'asymmetricMatch_',
|
||||||
|
'equals',
|
||||||
|
'eq_'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
keys().forEach(function(k) {
|
||||||
|
if (Array.prototype[k]) {
|
||||||
|
console.log(Array.prototype[k].toString());
|
||||||
|
}
|
||||||
|
expect(Array.prototype[k])
|
||||||
|
.withContext('Array.prototype already had ' + k)
|
||||||
|
.toBeUndefined();
|
||||||
|
Array.prototype[k] = function() {};
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(function() {
|
||||||
|
keys().forEach(function(k) {
|
||||||
|
delete Array.prototype[k];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('uses the MatchersUtil methods', function() {
|
||||||
|
var matchersUtil = new jasmineUnderTest.MatchersUtil({}),
|
||||||
|
shim = jasmineUnderTest.asymmetricEqualityTesterArgCompatShim(
|
||||||
|
matchersUtil,
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
|
||||||
|
keys().forEach(function(k) {
|
||||||
|
expect(shim[k])
|
||||||
|
.withContext(k + ' was overwritten')
|
||||||
|
.toBe(jasmineUnderTest.MatchersUtil.prototype[k]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -66,7 +66,9 @@ getJasmineRequireObj().asymmetricEqualityTesterArgCompatShim = function(j$) {
|
|||||||
|
|
||||||
for (i = 0; i < props.length; i++) {
|
for (i = 0; i < props.length; i++) {
|
||||||
k = props[i];
|
k = props[i];
|
||||||
if (k !== 'length') {
|
// Skip length (dealt with above), and anything that collides with
|
||||||
|
// MatchesUtil e.g. an Array.prototype.contains method added by user code
|
||||||
|
if (k !== 'length' && !self[k]) {
|
||||||
copy(self, Array.prototype, k);
|
copy(self, Array.prototype, k);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user