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) {