diff --git a/spec/core/ClockSpec.js b/spec/core/ClockSpec.js index 111ed0e5..6b3ed1d0 100644 --- a/spec/core/ClockSpec.js +++ b/spec/core/ClockSpec.js @@ -666,9 +666,17 @@ describe("Clock (acceptance)", function() { var pushCurrentTime = function() { actualTimes.push(global.Date().getTime()); }; delayedFunctionScheduler.scheduleFunction(pushCurrentTime); delayedFunctionScheduler.scheduleFunction(pushCurrentTime, 1); + delayedFunctionScheduler.scheduleFunction(pushCurrentTime, 3); clock.tick(1); + expect(global.Date().getTime()).toEqual(baseTime.getTime() + 1); - expect(actualTimes).toEqual([baseTime.getTime(), baseTime.getTime() + 1]); + clock.tick(3); + expect(global.Date().getTime()).toEqual(baseTime.getTime() + 4); + + clock.tick(1); + expect(global.Date().getTime()).toEqual(baseTime.getTime() + 5); + + expect(actualTimes).toEqual([baseTime.getTime(), baseTime.getTime() + 1, baseTime.getTime() + 3]); }) }); diff --git a/src/core/DelayedFunctionScheduler.js b/src/core/DelayedFunctionScheduler.js index dfd3f45e..4756b323 100644 --- a/src/core/DelayedFunctionScheduler.js +++ b/src/core/DelayedFunctionScheduler.js @@ -116,7 +116,7 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() { function runScheduledFunctions(endTime, tickDate) { tickDate = tickDate || function() {}; if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) { - tickDate(endTime); + tickDate(endTime - currentTime); return; } @@ -143,6 +143,11 @@ getJasmineRequireObj().DelayedFunctionScheduler = function() { // scheduled in a funcToRun from forcing an extra iteration currentTime !== endTime && scheduledLookup[0] <= endTime); + + // ran out of functions to call, but still time left on the clock + if (currentTime !== endTime) { + tickDate(endTime - currentTime); + } } }