Don't expose Suite objects as this of describe functions
This was a holdover from 1.x that should have been removed in 2.0, but was missed. Suite is meant to be private, and almost none of its methods can be safely called by user code.
This commit is contained in:
@@ -65,7 +65,6 @@ var getJasmineRequireObj = (function(jasmineGlobal) {
|
||||
j$.Clock = jRequire.Clock();
|
||||
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(j$);
|
||||
j$.Env = jRequire.Env(j$);
|
||||
j$.deprecatingThisProxy = jRequire.deprecatingThisProxy(j$);
|
||||
j$.StackTrace = jRequire.StackTrace(j$);
|
||||
j$.ExceptionFormatter = jRequire.ExceptionFormatter(j$);
|
||||
j$.ExpectationFilterChain = jRequire.ExpectationFilterChain();
|
||||
@@ -1957,7 +1956,7 @@ getJasmineRequireObj().Env = function(j$) {
|
||||
|
||||
var declarationError = null;
|
||||
try {
|
||||
specDefinitions.call(j$.deprecatingThisProxy(suite, self));
|
||||
specDefinitions();
|
||||
} catch (e) {
|
||||
declarationError = e;
|
||||
}
|
||||
@@ -3368,39 +3367,6 @@ getJasmineRequireObj().DelayedFunctionScheduler = function(j$) {
|
||||
return DelayedFunctionScheduler;
|
||||
};
|
||||
|
||||
/* eslint-disable compat/compat */
|
||||
// TODO: Remove this in the next major release.
|
||||
getJasmineRequireObj().deprecatingThisProxy = function(j$) {
|
||||
var msg = "Access to 'this' in describe functions is deprecated.";
|
||||
|
||||
try {
|
||||
new Proxy({}, {});
|
||||
} catch (e) {
|
||||
// Environment does not support Poxy.
|
||||
return function(suite) {
|
||||
return suite;
|
||||
};
|
||||
}
|
||||
|
||||
function DeprecatingThisProxyHandler(env) {
|
||||
this._env = env;
|
||||
}
|
||||
|
||||
DeprecatingThisProxyHandler.prototype.get = function(target, prop, receiver) {
|
||||
this._env.deprecated(msg);
|
||||
return target[prop];
|
||||
};
|
||||
|
||||
DeprecatingThisProxyHandler.prototype.set = function(target, prop, value) {
|
||||
this._env.deprecated(msg);
|
||||
return (target[prop] = value);
|
||||
};
|
||||
|
||||
return function(suite, env) {
|
||||
return new Proxy(suite, new DeprecatingThisProxyHandler(env));
|
||||
};
|
||||
};
|
||||
|
||||
getJasmineRequireObj().errors = function() {
|
||||
function ExpectationFailed() {}
|
||||
|
||||
|
||||
@@ -441,38 +441,7 @@ describe('Env', function() {
|
||||
});
|
||||
});
|
||||
|
||||
it("deprecates access to 'this' in describes", function() {
|
||||
jasmine.getEnv().requireProxy();
|
||||
var msg = "Access to 'this' in describe functions is deprecated.",
|
||||
ran = false;
|
||||
spyOn(env, 'deprecated');
|
||||
|
||||
env.describe('a suite', function() {
|
||||
expect(this.description).toEqual('a suite');
|
||||
expect(env.deprecated).toHaveBeenCalledWith(msg);
|
||||
env.deprecated.calls.reset();
|
||||
|
||||
this.foo = 1;
|
||||
expect(env.deprecated).toHaveBeenCalledWith(msg);
|
||||
expect(this.foo).toEqual(1);
|
||||
env.deprecated.calls.reset();
|
||||
|
||||
expect(this.getFullName()).toEqual('a suite');
|
||||
expect(env.deprecated).toHaveBeenCalledWith(msg);
|
||||
env.deprecated.calls.reset();
|
||||
|
||||
env.it('has a spec');
|
||||
ran = true;
|
||||
});
|
||||
|
||||
expect(ran).toBeTrue();
|
||||
});
|
||||
|
||||
// TODO: Remove this in the next major version. Suites were never meant to be
|
||||
// exposed via describe 'this' in >= 2.0, and user code should not rely on it.
|
||||
// This spec is just here to make sure we don't break user code that *does*
|
||||
// rely on it in older browsers (without Proxy) while deprecating it.
|
||||
it("sets 'this' to the Suite in describes", function() {
|
||||
it("does not expose the suite as 'this'", function() {
|
||||
var suiteThis;
|
||||
spyOn(env, 'deprecated');
|
||||
|
||||
@@ -481,6 +450,6 @@ describe('Env', function() {
|
||||
env.it('has a spec');
|
||||
});
|
||||
|
||||
expect(suiteThis).toBeInstanceOf(jasmineUnderTest.Suite);
|
||||
expect(suiteThis).not.toBeInstanceOf(jasmineUnderTest.Suite);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
/* eslint-disable compat/compat */
|
||||
(function(env) {
|
||||
function hasProxyConstructor() {
|
||||
try {
|
||||
new Proxy({}, {});
|
||||
return true;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
env.requireProxy = function() {
|
||||
if (!hasProxyConstructor()) {
|
||||
env.pending('Environment does not support Proxy');
|
||||
}
|
||||
};
|
||||
})(jasmine.getEnv());
|
||||
@@ -21,7 +21,6 @@ module.exports = {
|
||||
'helpers/generator.js',
|
||||
'helpers/BrowserFlags.js',
|
||||
'helpers/checkForMap.js',
|
||||
'helpers/checkForProxy.js',
|
||||
'helpers/checkForSet.js',
|
||||
'helpers/checkForSymbol.js',
|
||||
'helpers/checkForUrl.js',
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"helpers/asyncAwait.js",
|
||||
"helpers/generator.js",
|
||||
"helpers/checkForMap.js",
|
||||
"helpers/checkForProxy.js",
|
||||
"helpers/checkForSet.js",
|
||||
"helpers/checkForSymbol.js",
|
||||
"helpers/checkForUrl.js",
|
||||
|
||||
@@ -987,7 +987,7 @@ getJasmineRequireObj().Env = function(j$) {
|
||||
|
||||
var declarationError = null;
|
||||
try {
|
||||
specDefinitions.call(j$.deprecatingThisProxy(suite, self));
|
||||
specDefinitions();
|
||||
} catch (e) {
|
||||
declarationError = e;
|
||||
}
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
/* eslint-disable compat/compat */
|
||||
// TODO: Remove this in the next major release.
|
||||
getJasmineRequireObj().deprecatingThisProxy = function(j$) {
|
||||
var msg = "Access to 'this' in describe functions is deprecated.";
|
||||
|
||||
try {
|
||||
new Proxy({}, {});
|
||||
} catch (e) {
|
||||
// Environment does not support Poxy.
|
||||
return function(suite) {
|
||||
return suite;
|
||||
};
|
||||
}
|
||||
|
||||
function DeprecatingThisProxyHandler(env) {
|
||||
this._env = env;
|
||||
}
|
||||
|
||||
DeprecatingThisProxyHandler.prototype.get = function(target, prop, receiver) {
|
||||
this._env.deprecated(msg);
|
||||
return target[prop];
|
||||
};
|
||||
|
||||
DeprecatingThisProxyHandler.prototype.set = function(target, prop, value) {
|
||||
this._env.deprecated(msg);
|
||||
return (target[prop] = value);
|
||||
};
|
||||
|
||||
return function(suite, env) {
|
||||
return new Proxy(suite, new DeprecatingThisProxyHandler(env));
|
||||
};
|
||||
};
|
||||
@@ -43,7 +43,6 @@ var getJasmineRequireObj = (function(jasmineGlobal) {
|
||||
j$.Clock = jRequire.Clock();
|
||||
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(j$);
|
||||
j$.Env = jRequire.Env(j$);
|
||||
j$.deprecatingThisProxy = jRequire.deprecatingThisProxy(j$);
|
||||
j$.StackTrace = jRequire.StackTrace(j$);
|
||||
j$.ExceptionFormatter = jRequire.ExceptionFormatter(j$);
|
||||
j$.ExpectationFilterChain = jRequire.ExpectationFilterChain();
|
||||
|
||||
Reference in New Issue
Block a user