From 3e2d9baec2bb462b042970722ebe8afe2cb43eae Mon Sep 17 00:00:00 2001 From: Greg Cobb and JR Boyens Date: Thu, 18 Jul 2013 13:57:51 -0700 Subject: [PATCH] [Finishes #40853563] Allowed the DelayedFunctionScheduler to support strings that are eval'd --- lib/jasmine-core/jasmine.js | 11 ++++++++++- spec/core/DelayedFunctionSchedulerSpec.js | 11 +++++++++++ src/core/DelayedFunctionScheduler.js | 11 ++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index b7f22d54..510c9223 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -866,12 +866,21 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() { }; self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { + var f; + if (typeof(funcToCall) === 'string') { + /* jshint evil: true */ + f = function() { return eval(funcToCall); }; + /* jshint evil: false */ + } else { + f = funcToCall; + } + millis = millis || 0; timeoutKey = timeoutKey || ++delayedFnCount; runAtMillis = runAtMillis || (currentTime + millis); scheduledFunctions[timeoutKey] = { runAtMillis: runAtMillis, - funcToCall: funcToCall, + funcToCall: f, recurring: recurring, params: params, timeoutKey: timeoutKey, diff --git a/spec/core/DelayedFunctionSchedulerSpec.js b/spec/core/DelayedFunctionSchedulerSpec.js index 912a4b43..45173806 100644 --- a/spec/core/DelayedFunctionSchedulerSpec.js +++ b/spec/core/DelayedFunctionSchedulerSpec.js @@ -12,6 +12,17 @@ describe("DelayedFunctionScheduler", function() { expect(fn).toHaveBeenCalled(); }); + it("schedules a string for later execution", function() { + var scheduler = new j$.DelayedFunctionScheduler(), + strfn = "window.horrible = true;"; + + scheduler.scheduleFunction(strfn, 0); + + scheduler.tick(0); + + expect(window.horrible).toEqual(true); + }); + it("#tick defaults to 0", function() { var scheduler = new j$.DelayedFunctionScheduler(), fn = jasmine.createSpy('fn'); diff --git a/src/core/DelayedFunctionScheduler.js b/src/core/DelayedFunctionScheduler.js index 74fa9f3d..445c4639 100644 --- a/src/core/DelayedFunctionScheduler.js +++ b/src/core/DelayedFunctionScheduler.js @@ -12,12 +12,21 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() { }; self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { + var f; + if (typeof(funcToCall) === 'string') { + /* jshint evil: true */ + f = function() { return eval(funcToCall); }; + /* jshint evil: false */ + } else { + f = funcToCall; + } + millis = millis || 0; timeoutKey = timeoutKey || ++delayedFnCount; runAtMillis = runAtMillis || (currentTime + millis); scheduledFunctions[timeoutKey] = { runAtMillis: runAtMillis, - funcToCall: funcToCall, + funcToCall: f, recurring: recurring, params: params, timeoutKey: timeoutKey,