Permalink
Browse files

tests

  • Loading branch information...
1 parent 9b2a458 commit 77756635547a26c5e0fc09905a28cf68d0868c85 @jmar777 committed May 1, 2012
Showing with 125 additions and 0 deletions.
  1. +125 −0 test/tests.js
View
@@ -0,0 +1,125 @@
+var assert = require('assert'),
+ cb = require('../');
+
+function invokeAsync(callback) {
+ setTimeout(function() {
+ callback(null, 'foo');
+ }, 100);
+}
+
+function invokeAsyncError(callback) {
+ setTimeout(function() {
+ callback(new Error());
+ }, 100);
+}
+
+function invokeAsyncTwice(callback) {
+ setTimeout(function() {
+ callback(null, 'foo');
+ callback(null, 'foo');
+ }, 100);
+}
+
+describe('cb(callback)', function() {
+
+ it('should invoke the provided callback', function(done) {
+ invokeAsync(cb(function(err, res) {
+ assert.strictEqual(res, 'foo');
+ done();
+ }));
+ });
+
+ it('shouldn\'t mess with errors', function(done) {
+ invokeAsyncError(cb(function(err, res) {
+ assert(err);
+ done();
+ }));
+ });
+
+ it('should allow multiple executions', function(done) {
+ var count = 0;
+ invokeAsyncTwice(cb(function(err, res) {
+ count++;
+ if (count === 2) done();
+ }));
+ });
+
+});
+
+describe('cb(callback).timeout(ms)', function() {
+
+ it('should complete successfully within timeout period', function(done) {
+ invokeAsync(cb(function(err, res) {
+ assert.strictEqual(res, 'foo');
+ done();
+ }).timeout(200));
+ });
+
+ it('should complete with an error after timeout period', function(done) {
+ invokeAsync(cb(function(err, res) {
+ assert(err);
+ done();
+ }).timeout(50));
+ });
+
+ it('error resulting from a timeout should be instanceof cb.TimeoutError', function(done) {
+ invokeAsync(cb(function(err, res) {
+ assert(err instanceof cb.TimeoutError);
+ done();
+ }).timeout(50));
+ });
+
+});
+
+describe('cb(callback).error(errback)', function() {
+
+ it('should skip the err argument when invoking callback', function(done) {
+ invokeAsync(cb(function(res) {
+ assert.strictEqual(res, 'foo');
+ done();
+ }).error(assert.ifError));
+ });
+
+ it('should pass errors to provided errback', function(done) {
+ invokeAsyncError(cb(function(res) {
+ throw new Error('should not be invoked');
+ }).error(function(err) {
+ assert(err);
+ done();
+ }));
+ });
+
+});
+
+describe('cb(callback).error(errback).timeout(ms)', function() {
+
+ it('should skip the err argument when invoking callback', function(done) {
+ invokeAsync(cb(function(res) {
+ assert.strictEqual(res, 'foo');
+ done();
+ }).error(assert.ifError).timeout(200));
+ });
+
+ it('should pass timeout error to provided errback', function(done) {
+ invokeAsyncError(cb(function(res) {
+ throw new Error('should not be invoked');
+ }).error(function(err) {
+ assert(err);
+ done();
+ }).timeout(50));
+ });
+
+});
+
+describe('cb(callback).once()', function() {
+
+ it('should allow multiple executions', function(done) {
+ var count = 0;
+ invokeAsyncTwice(cb(function(err, res) {
+ count++;
+ assert.notEqual(count, 2);
+ setTimeout(done, 100);
+ }).once());
+ });
+
+});

0 comments on commit 7775663

Please sign in to comment.