diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index a1679b3f..3d151bb4 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -1114,11 +1114,12 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() { for (var i = 0; i < funcsToRun.length; ++i) { var funcToRun = funcsToRun[i]; - funcToRun.funcToCall.apply(null, funcToRun.params || []); if (funcToRun.recurring) { reschedule(funcToRun); } + + funcToRun.funcToCall.apply(null, funcToRun.params || []); } } while (scheduledLookup.length > 0 && // checking first if we're out of time prevents setTimeout(0) diff --git a/spec/core/ClockSpec.js b/spec/core/ClockSpec.js index e7f92811..18d281bf 100644 --- a/spec/core/ClockSpec.js +++ b/spec/core/ClockSpec.js @@ -323,6 +323,24 @@ describe("Clock (acceptance)", function() { expect(clearedFn).not.toHaveBeenCalled(); }); + it("can clear a previously set interval using that interval's handler", function() { + var spy = jasmine.createSpy('spy'), + delayedFunctionScheduler = new j$.DelayedFunctionScheduler(), + mockDate = { install: function() {}, tick: function() {}, uninstall: function() {} }, + clock = new j$.Clock({setInterval: function() {}}, delayedFunctionScheduler, mockDate), + intervalId; + + clock.install(); + + intervalId = clock.setInterval(function() { + spy(); + clock.clearInterval(intervalId); + }, 100); + clock.tick(200); + + expect(spy.calls.count()).toEqual(1); + }); + it("correctly schedules functions after the Clock has advanced", function() { var delayedFn1 = jasmine.createSpy('delayedFn1'), delayedFunctionScheduler = new j$.DelayedFunctionScheduler(), diff --git a/spec/core/DelayedFunctionSchedulerSpec.js b/spec/core/DelayedFunctionSchedulerSpec.js index 7048b9e8..37dfa766 100644 --- a/spec/core/DelayedFunctionSchedulerSpec.js +++ b/spec/core/DelayedFunctionSchedulerSpec.js @@ -242,5 +242,18 @@ describe("DelayedFunctionScheduler", function() { expect(innerFn).toHaveBeenCalled(); }); + it("executes recurring functions after rescheduling them", function () { + var scheduler = new j$.DelayedFunctionScheduler(), + recurring = function() { + expect(scheduler.scheduleFunction).toHaveBeenCalled(); + }; + + scheduler.scheduleFunction(recurring, 10, [], true); + + spyOn(scheduler, "scheduleFunction"); + + scheduler.tick(10); + }); + }); diff --git a/src/core/DelayedFunctionScheduler.js b/src/core/DelayedFunctionScheduler.js index 8079c70e..adb93d1e 100644 --- a/src/core/DelayedFunctionScheduler.js +++ b/src/core/DelayedFunctionScheduler.js @@ -127,11 +127,12 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() { for (var i = 0; i < funcsToRun.length; ++i) { var funcToRun = funcsToRun[i]; - funcToRun.funcToCall.apply(null, funcToRun.params || []); if (funcToRun.recurring) { reschedule(funcToRun); } + + funcToRun.funcToCall.apply(null, funcToRun.params || []); } } while (scheduledLookup.length > 0 && // checking first if we're out of time prevents setTimeout(0)