diff options
Diffstat (limited to 'mocha_test/forever.js')
-rw-r--r-- | mocha_test/forever.js | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/mocha_test/forever.js b/mocha_test/forever.js new file mode 100644 index 0000000..3f03b57 --- /dev/null +++ b/mocha_test/forever.js @@ -0,0 +1,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; + addOne = function (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(); + }); + }); + }); +}); |