revert: feat(mocks): make $timeout#flush throw an exception when empty

This reverts commit cbf06a5d64.

This turned out to be a bad idea because it allow us to fast-forward
the wall clock time (see previous commit).
This commit is contained in:
Igor Minar 2013-08-27 17:20:30 -07:00
parent 70b44ad32a
commit 4114f9c21b
3 changed files with 35 additions and 64 deletions

View file

@ -104,28 +104,19 @@ angular.mock.$Browser = function() {
* @param {number=} number of milliseconds to flush. See {@link #defer.now}
*/
self.defer.flush = function(delay) {
var flushedSomething = false;
if (angular.isDefined(delay)) {
self.defer.now += delay;
} else {
if (self.deferredFns.length) {
self.defer.now = self.deferredFns[self.deferredFns.length-1].time;
} else {
throw Error('No deferred tasks to be flushed');
}
}
while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) {
flushedSomething = true;
self.deferredFns.shift().fn();
}
if (!flushedSomething) {
if (angular.isUndefined(delay)) {
throw Error('No deferred tasks to be flushed!');
} else {
throw Error('No deferred tasks with delay up to ' + delay + 'ms to be flushed!')
}
}
};
/**

View file

@ -14,7 +14,7 @@ describe('$timeout', function() {
$browser.defer.flush();
expect(counter).toBe(1);
expect(function() {$browser.defer.flush();}).toThrow('No deferred tasks to be flushed!');
expect(function() {$browser.defer.flush();}).toThrow('No deferred tasks to be flushed');
expect(counter).toBe(1);
}));

View file

@ -319,7 +319,7 @@ describe('ngMock', function() {
browser.defer(logFn('B'), 2);
browser.defer(logFn('C'), 3);
expect(function() {browser.defer.flush(0);}).toThrow('No deferred tasks with delay up to 0ms to be flushed!');
browser.defer.flush(0);
expect(browser.defer.now).toEqual(0);
expect(log).toEqual('');
@ -333,15 +333,7 @@ describe('ngMock', function() {
});
it('should throw an exception if there is nothing to be flushed', function() {
expect(function() {browser.defer.flush();}).toThrow('No deferred tasks to be flushed!');
});
it('should throw an exception if there is nothing to be flushed within the delay provided', function() {
browser.defer(logFn('A'), 1);
expect(function() {browser.defer.flush(0);}).toThrow('No deferred tasks with delay up to 0ms to be flushed!');
browser.defer.flush(1);
expect(log).toEqual('A;');
expect(function() {browser.defer.flush();}).toThrow('No deferred tasks to be flushed');
});
});
@ -372,45 +364,52 @@ describe('ngMock', function() {
describe('$timeout', function() {
var log, $timeout;
it('should expose flush method that will flush the pending queue of tasks', inject(
function($timeout) {
var logger = [],
logFn = function(msg) { return function() { logger.push(msg) }};
beforeEach(module(provideLog));
$timeout(logFn('t1'));
$timeout(logFn('t2'), 200);
$timeout(logFn('t3'));
expect(logger).toEqual([]);
beforeEach(inject(function(_log_, _$timeout_) {
log = _log_;
$timeout = _$timeout_;
$timeout.flush();
expect(logger).toEqual(['t1', 't3', 't2']);
}));
it('should expose flush method that will flush the pending queue of tasks', function() {
it('should throw an exception when not flushed', inject(function($timeout){
$timeout(noop);
var expectedError = 'Deferred tasks to flush (1): {id: 0, time: 0}';
expect(function() {$timeout.verifyNoPendingTasks();}).toThrow(expectedError);
}));
$timeout(log.fn('t1'));
$timeout(log.fn('t2'), 200);
$timeout(log.fn('t3'));
expect(log).toEqual([]);
it('should do nothing when all tasks have been flushed', inject(function($timeout) {
$timeout(noop);
$timeout.flush();
expect(log).toEqual(['t1', 't3', 't2']);
});
expect(function() {$timeout.verifyNoPendingTasks();}).not.toThrow();
}));
it('should flush tasks only up to a delay if flush delay is provided', function() {
$timeout(log.fn('t1'), 100);
it('should check against the delay if provided within timeout', inject(function($timeout) {
$timeout(noop, 100);
$timeout.flush(100);
expect(log).toEqual(['t1']);
expect(function() {$timeout.verifyNoPendingTasks();}).not.toThrow();
$timeout(log.fn('t2'), 1000);
expect(function() {$timeout.flush(100);}).toThrow();
expect(log).toEqual(['t1']);
$timeout(noop, 1000);
$timeout.flush(100);
expect(function() {$timeout.verifyNoPendingTasks();}).toThrow();
$timeout.flush(900);
expect(log).toEqual(['t1', 't2']);
expect(function() {$timeout.flush();}).toThrow();
});
expect(function() {$timeout.verifyNoPendingTasks();}).not.toThrow();
}));
it('should assert against the delay value', function() {
it('should assert against the delay value', inject(function($timeout) {
var count = 0;
var iterate = function() {
count++;
@ -422,26 +421,7 @@ describe('ngMock', function() {
expect(count).toBe(1);
$timeout.flushNext(123);
expect(count).toBe(2);
});
describe('verifyNoPendingTasks', function() {
it('should throw an exception when not flushed', function() {
$timeout(noop);
var expectedError = 'Deferred tasks to flush (1): {id: 0, time: 0}';
expect(function() {$timeout.verifyNoPendingTasks();}).toThrow(expectedError);
});
it('should do nothing when all tasks have been flushed', function() {
$timeout(noop);
$timeout.flush();
expect(function() {$timeout.verifyNoPendingTasks();}).not.toThrow();
});
});
}));
});