summaryrefslogtreecommitdiff
path: root/mocha_test/forever.js
blob: ec21ed77af5ceb852f63322401ce7b8119f0ca22 (plain)
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');
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();
            });
        });
    });
});