From a442acb8aa146deaacc40293f26c0ceafe325ee0 Mon Sep 17 00:00:00 2001 From: Sheel Choksi Date: Mon, 2 Sep 2013 18:50:17 -0700 Subject: [PATCH] Mock Clock now correctly schedules delayed functions during a 'tick' --- lib/jasmine-core/jasmine.js | 2 +- spec/core/ClockSpec.js | 18 ++++++++++++++++++ src/core/DelayedFunctionScheduler.js | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index 4b8225fa..1bcd067d 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -988,8 +988,8 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() { self.tick = function(millis) { millis = millis || 0; - runFunctionsWithinRange(currentTime, currentTime + millis); currentTime = currentTime + millis; + runFunctionsWithinRange(currentTime - millis, currentTime); }; self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { diff --git a/spec/core/ClockSpec.js b/spec/core/ClockSpec.js index 4b59ac5e..c17c5a7b 100644 --- a/spec/core/ClockSpec.js +++ b/spec/core/ClockSpec.js @@ -324,6 +324,24 @@ describe("Clock (acceptance)", function() { expect(delayedFn1).toHaveBeenCalled(); }); + it("correctly schedules functions while the Clock is advancing", function() { + var delayedFn1 = jasmine.createSpy('delayedFn1'), + delayedFn2 = jasmine.createSpy('delayedFn2'), + delayedFunctionScheduler = new j$.DelayedFunctionScheduler(), + clock = new j$.Clock({setTimeout: function() {}}, delayedFunctionScheduler); + + delayedFn1.and.callFake(function() { clock.setTimeout(delayedFn2, 0); }); + clock.install(); + clock.setTimeout(delayedFn1, 5); + + clock.tick(5); + expect(delayedFn1).toHaveBeenCalled(); + expect(delayedFn2).not.toHaveBeenCalled(); + + clock.tick(); + expect(delayedFn2).toHaveBeenCalled(); + }); + it("calls the global clearTimeout correctly when not installed", function() { var delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['clearTimeout']), global = jasmine.getGlobal(), diff --git a/src/core/DelayedFunctionScheduler.js b/src/core/DelayedFunctionScheduler.js index 3d75dae2..ef004510 100644 --- a/src/core/DelayedFunctionScheduler.js +++ b/src/core/DelayedFunctionScheduler.js @@ -7,8 +7,8 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() { self.tick = function(millis) { millis = millis || 0; - runFunctionsWithinRange(currentTime, currentTime + millis); currentTime = currentTime + millis; + runFunctionsWithinRange(currentTime - millis, currentTime); }; self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) {