forked from caolan/async
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathforever.js
44 lines (42 loc) · 1.49 KB
/
forever.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
var async = require('../lib/async');
var expect = require('chai').expect;
var isBrowser = require('./support/is_browser');
describe('forever', function(){
context('function is asynchronous', function(){
it('executes the function over and over until it yields an error', function(done){
var counter = 0;
function addOne(callback) {
counter++;
if (counter === 50) {
return callback('too big!');
}
async.setImmediate(function () {
callback();
});
}
async.forever(addOne, function (err) {
expect(err).to.eql('too big!');
expect(counter).to.eql(50);
done();
});
});
});
context('function is synchronous', function(){
it('does not cause a stack overflow', function(done){
if (isBrowser()) return done(); // this will take forever in a browser
var counter = 0;
function addOne(callback) {
counter++;
if (counter === 50000) { // needs to be huge to potentially overflow stack in node
return callback('too big!');
}
callback();
}
async.forever(addOne, function (err) {
expect(err).to.eql('too big!');
expect(counter).to.eql(50000);
done();
});
});
});
});