Deprecate the eval forms of setTimeout and setInterval

This commit is contained in:
Steve Gravrock
2025-09-14 09:17:17 -07:00
parent 124effe04b
commit 6d77f3e7f0
3 changed files with 12 additions and 0 deletions

View File

@@ -3521,6 +3521,9 @@ getJasmineRequireObj().DelayedFunctionScheduler = function(j$) {
// setTimeout("some code") and setInterval("some code") are legal, if
// not recommended. We don't do that ourselves, but user code might.
// This allows such code to work when the mock clock is installed.
j$.getEnv().deprecated(
"The eval form of setTimeout and setInterval is deprecated and will stop working in a future version of Jasmine's mock clock. Pass a function instead of a string."
);
f = function() {
// eslint-disable-next-line no-eval
return eval(funcToCall);

View File

@@ -15,8 +15,14 @@ describe('DelayedFunctionScheduler', function() {
it('schedules a string for later execution', function() {
const scheduler = new jasmineUnderTest.DelayedFunctionScheduler(),
strfn = 'horrible = true;';
spyOn(jasmineUnderTest.getEnv(), 'deprecated');
scheduler.scheduleFunction(strfn, 0);
expect(jasmineUnderTest.getEnv().deprecated).toHaveBeenCalledWith(
'The eval form of setTimeout and setInterval is deprecated and will ' +
"stop working in a future version of Jasmine's mock clock. Pass a " +
'function instead of a string.'
);
scheduler.tick(0);

View File

@@ -29,6 +29,9 @@ getJasmineRequireObj().DelayedFunctionScheduler = function(j$) {
// setTimeout("some code") and setInterval("some code") are legal, if
// not recommended. We don't do that ourselves, but user code might.
// This allows such code to work when the mock clock is installed.
j$.getEnv().deprecated(
"The eval form of setTimeout and setInterval is deprecated and will stop working in a future version of Jasmine's mock clock. Pass a function instead of a string."
);
f = function() {
// eslint-disable-next-line no-eval
return eval(funcToCall);