Fixed deprecations triggered from within asymmetricEqualityTesterArgCompatShim

This commit is contained in:
Steve Gravrock
2020-09-17 13:26:35 -07:00
parent a1f1b4ae0f
commit 7a38db2e32
3 changed files with 50 additions and 18 deletions

View File

@@ -2902,10 +2902,7 @@ getJasmineRequireObj().asymmetricEqualityTesterArgCompatShim = function(j$) {
matchersUtil,
customEqualityTesters
) {
var self = Object.create(matchersUtil),
props,
i,
k;
var self = Object.create(matchersUtil);
copyAndDeprecate(self, customEqualityTesters, 'length');
@@ -2913,18 +2910,30 @@ getJasmineRequireObj().asymmetricEqualityTesterArgCompatShim = function(j$) {
copyAndDeprecate(self, customEqualityTesters, i);
}
var props = arrayProps();
// Avoid copying array props if we've previously done so,
// to avoid triggering our own deprecation warnings.
if (!self.isAsymmetricEqualityTesterArgCompatShim_) {
copyAndDeprecateArrayMethods(self);
}
self.isAsymmetricEqualityTesterArgCompatShim_ = true;
return self;
}
function copyAndDeprecateArrayMethods(dest) {
var props = arrayProps(),
i,
k;
for (i = 0; i < props.length; i++) {
k = props[i];
// 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]) {
copyAndDeprecate(self, Array.prototype, k);
if (k !== 'length' && !dest[k]) {
copyAndDeprecate(dest, Array.prototype, k);
}
}
return self;
}
function copyAndDeprecate(dest, src, propName) {

View File

@@ -181,4 +181,18 @@ describe('asymmetricEqualityTesterArgCompatShim', function() {
});
});
});
describe('When the matchersUtil is already an asymmetricEqualityTesterArgCompatShim', function() {
it('does not trigger any deprecations', function() {
var shim1 = jasmineUnderTest.asymmetricEqualityTesterArgCompatShim(
{},
[]
);
spyOn(jasmineUnderTest.getEnv(), 'deprecated');
jasmineUnderTest.asymmetricEqualityTesterArgCompatShim(shim1, []);
expect(jasmineUnderTest.getEnv().deprecated).not.toHaveBeenCalled();
});
});
});

View File

@@ -51,10 +51,7 @@ getJasmineRequireObj().asymmetricEqualityTesterArgCompatShim = function(j$) {
matchersUtil,
customEqualityTesters
) {
var self = Object.create(matchersUtil),
props,
i,
k;
var self = Object.create(matchersUtil);
copyAndDeprecate(self, customEqualityTesters, 'length');
@@ -62,18 +59,30 @@ getJasmineRequireObj().asymmetricEqualityTesterArgCompatShim = function(j$) {
copyAndDeprecate(self, customEqualityTesters, i);
}
var props = arrayProps();
// Avoid copying array props if we've previously done so,
// to avoid triggering our own deprecation warnings.
if (!self.isAsymmetricEqualityTesterArgCompatShim_) {
copyAndDeprecateArrayMethods(self);
}
self.isAsymmetricEqualityTesterArgCompatShim_ = true;
return self;
}
function copyAndDeprecateArrayMethods(dest) {
var props = arrayProps(),
i,
k;
for (i = 0; i < props.length; i++) {
k = props[i];
// 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]) {
copyAndDeprecate(self, Array.prototype, k);
if (k !== 'length' && !dest[k]) {
copyAndDeprecate(dest, Array.prototype, k);
}
}
return self;
}
function copyAndDeprecate(dest, src, propName) {