Merge branch '3.99' into 4.0
This commit is contained in:
@@ -65,6 +65,7 @@ var getJasmineRequireObj = (function(jasmineGlobal) {
|
|||||||
j$.Clock = jRequire.Clock();
|
j$.Clock = jRequire.Clock();
|
||||||
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(j$);
|
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(j$);
|
||||||
j$.Env = jRequire.Env(j$);
|
j$.Env = jRequire.Env(j$);
|
||||||
|
j$.deprecatingThisProxy = jRequire.deprecatingThisProxy(j$);
|
||||||
j$.StackTrace = jRequire.StackTrace(j$);
|
j$.StackTrace = jRequire.StackTrace(j$);
|
||||||
j$.ExceptionFormatter = jRequire.ExceptionFormatter(j$);
|
j$.ExceptionFormatter = jRequire.ExceptionFormatter(j$);
|
||||||
j$.ExpectationFilterChain = jRequire.ExpectationFilterChain();
|
j$.ExpectationFilterChain = jRequire.ExpectationFilterChain();
|
||||||
@@ -1956,7 +1957,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|||||||
|
|
||||||
var declarationError = null;
|
var declarationError = null;
|
||||||
try {
|
try {
|
||||||
specDefinitions.call(suite);
|
specDefinitions.call(j$.deprecatingThisProxy(suite, self));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
declarationError = e;
|
declarationError = e;
|
||||||
}
|
}
|
||||||
@@ -3367,6 +3368,39 @@ getJasmineRequireObj().DelayedFunctionScheduler = function(j$) {
|
|||||||
return DelayedFunctionScheduler;
|
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() {
|
getJasmineRequireObj().errors = function() {
|
||||||
function ExpectationFailed() {}
|
function ExpectationFailed() {}
|
||||||
|
|
||||||
|
|||||||
@@ -440,4 +440,47 @@ describe('Env', function() {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
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() {
|
||||||
|
var suiteThis;
|
||||||
|
spyOn(env, 'deprecated');
|
||||||
|
|
||||||
|
env.describe('a suite', function() {
|
||||||
|
suiteThis = this;
|
||||||
|
env.it('has a spec');
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(suiteThis).toBeInstanceOf(jasmineUnderTest.Suite);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
17
spec/helpers/checkForProxy.js
Normal file
17
spec/helpers/checkForProxy.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/* 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,6 +21,7 @@ module.exports = {
|
|||||||
'helpers/generator.js',
|
'helpers/generator.js',
|
||||||
'helpers/BrowserFlags.js',
|
'helpers/BrowserFlags.js',
|
||||||
'helpers/checkForMap.js',
|
'helpers/checkForMap.js',
|
||||||
|
'helpers/checkForProxy.js',
|
||||||
'helpers/checkForSet.js',
|
'helpers/checkForSet.js',
|
||||||
'helpers/checkForSymbol.js',
|
'helpers/checkForSymbol.js',
|
||||||
'helpers/checkForUrl.js',
|
'helpers/checkForUrl.js',
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
"helpers/asyncAwait.js",
|
"helpers/asyncAwait.js",
|
||||||
"helpers/generator.js",
|
"helpers/generator.js",
|
||||||
"helpers/checkForMap.js",
|
"helpers/checkForMap.js",
|
||||||
|
"helpers/checkForProxy.js",
|
||||||
"helpers/checkForSet.js",
|
"helpers/checkForSet.js",
|
||||||
"helpers/checkForSymbol.js",
|
"helpers/checkForSymbol.js",
|
||||||
"helpers/checkForUrl.js",
|
"helpers/checkForUrl.js",
|
||||||
|
|||||||
@@ -987,7 +987,7 @@ getJasmineRequireObj().Env = function(j$) {
|
|||||||
|
|
||||||
var declarationError = null;
|
var declarationError = null;
|
||||||
try {
|
try {
|
||||||
specDefinitions.call(suite);
|
specDefinitions.call(j$.deprecatingThisProxy(suite, self));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
declarationError = e;
|
declarationError = e;
|
||||||
}
|
}
|
||||||
|
|||||||
32
src/core/deprecatingThisProxy.js
Normal file
32
src/core/deprecatingThisProxy.js
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/* 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,6 +43,7 @@ var getJasmineRequireObj = (function(jasmineGlobal) {
|
|||||||
j$.Clock = jRequire.Clock();
|
j$.Clock = jRequire.Clock();
|
||||||
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(j$);
|
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(j$);
|
||||||
j$.Env = jRequire.Env(j$);
|
j$.Env = jRequire.Env(j$);
|
||||||
|
j$.deprecatingThisProxy = jRequire.deprecatingThisProxy(j$);
|
||||||
j$.StackTrace = jRequire.StackTrace(j$);
|
j$.StackTrace = jRequire.StackTrace(j$);
|
||||||
j$.ExceptionFormatter = jRequire.ExceptionFormatter(j$);
|
j$.ExceptionFormatter = jRequire.ExceptionFormatter(j$);
|
||||||
j$.ExpectationFilterChain = jRequire.ExpectationFilterChain();
|
j$.ExpectationFilterChain = jRequire.ExpectationFilterChain();
|
||||||
|
|||||||
Reference in New Issue
Block a user