summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mocha_test/compose.js86
-rwxr-xr-xtest/test-async.js87
2 files changed, 86 insertions, 87 deletions
diff --git a/mocha_test/compose.js b/mocha_test/compose.js
new file mode 100644
index 0000000..27b1869
--- /dev/null
+++ b/mocha_test/compose.js
@@ -0,0 +1,86 @@
+var async = require('../lib/async');
+var expect = require('chai').expect;
+
+describe('compose', function(){
+ context('all functions succeed', function(){
+ it('yields the result of the composition of the functions', function(done){
+ var add2 = function (n, cb) {
+ setTimeout(function () {
+ cb(null, n + 2);
+ });
+ };
+ var mul3 = function (n, cb) {
+ setTimeout(function () {
+ cb(null, n * 3);
+ });
+ };
+ var add1 = function (n, cb) {
+ setTimeout(function () {
+ cb(null, n + 1);
+ });
+ };
+ var add2mul3add1 = async.compose(add1, mul3, add2);
+ add2mul3add1(3, function (err, result) {
+ expect(err).to.not.exist;
+ expect(result).to.eql(16);
+ done();
+ });
+ });
+ });
+
+ context('a function errors', function(){
+ it('yields the error and does not call later functions', function(done){
+ var add1called = false;
+ var mul3error = new Error('mul3 error')
+ var add2 = function (n, cb) {
+ setTimeout(function () {
+ cb(null, n + 2);
+ });
+ };
+ var mul3 = function (n, cb) {
+ setTimeout(function () {
+ cb(mul3error);
+ });
+ };
+ var add1 = function (n, cb) {
+ add1called = true;
+ setTimeout(function () {
+ cb(null, n + 1);
+ });
+ };
+ var add2mul3add1 = async.compose(add1, mul3, add2);
+ add2mul3add1(3, function (err, result) {
+ expect(err).to.eql(mul3error);
+ expect(result).to.not.exist;
+ expect(add1called).to.be.false;
+ done();
+ });
+ });
+ });
+
+ it('calls each function with the binding of the composed function', function(done){
+ var context = {};
+ var add2Context = null;
+ var mul3Context = null;
+ var add2 = function (n, cb) {
+ add2Context = this;
+ setTimeout(function () {
+ cb(null, n + 2);
+ });
+ };
+ var mul3 = function (n, cb) {
+ mul3Context = this;
+ setTimeout(function () {
+ cb(null, n * 3);
+ });
+ };
+ var add2mul3 = async.compose(mul3, add2);
+ add2mul3.call(context, 3, function (err, result) {
+ expect(err).to.not.exist;
+ expect(result).to.eql(15);
+ expect(add2Context).to.equal(context);
+ expect(mul3Context).to.equal(context);
+ done();
+ });
+ });
+});
diff --git a/test/test-async.js b/test/test-async.js
index e9e5663..dc7d949 100755
--- a/test/test-async.js
+++ b/test/test-async.js
@@ -183,93 +183,6 @@ exports['applyEach partial application'] = function (test) {
});
};
-exports['compose'] = function (test) {
- test.expect(5);
- var add2 = function (n, cb) {
- test.equal(n, 3);
- setTimeout(function () {
- cb(null, n + 2);
- }, 50);
- };
- var mul3 = function (n, cb) {
- test.equal(n, 5);
- setTimeout(function () {
- cb(null, n * 3);
- }, 15);
- };
- var add1 = function (n, cb) {
- test.equal(n, 15);
- setTimeout(function () {
- cb(null, n + 1);
- }, 100);
- };
- var add2mul3add1 = async.compose(add1, mul3, add2);
- add2mul3add1(3, function (err, result) {
- if (err) {
- return test.done(err);
- }
- test.ok(err === null, err + " passed instead of 'null'");
- test.equal(result, 16);
- test.done();
- });
-};
-
-exports['compose error'] = function (test) {
- test.expect(3);
- var testerr = new Error('test');
-
- var add2 = function (n, cb) {
- test.equal(n, 3);
- setTimeout(function () {
- cb(null, n + 2);
- }, 50);
- };
- var mul3 = function (n, cb) {
- test.equal(n, 5);
- setTimeout(function () {
- cb(testerr);
- }, 15);
- };
- var add1 = function (n, cb) {
- test.ok(false, 'add1 should not get called');
- setTimeout(function () {
- cb(null, n + 1);
- }, 100);
- };
- var add2mul3add1 = async.compose(add1, mul3, add2);
- add2mul3add1(3, function (err) {
- test.equal(err, testerr);
- test.done();
- });
-};
-
-exports['compose binding'] = function (test) {
- test.expect(4);
- var testcontext = {name: 'foo'};
-
- var add2 = function (n, cb) {
- test.equal(this, testcontext);
- setTimeout(function () {
- cb(null, n + 2);
- }, 50);
- };
- var mul3 = function (n, cb) {
- test.equal(this, testcontext);
- setTimeout(function () {
- cb(null, n * 3);
- }, 15);
- };
- var add2mul3 = async.compose(mul3, add2);
- add2mul3.call(testcontext, 3, function (err, result) {
- if (err) {
- return test.done(err);
- }
- test.equal(this, testcontext);
- test.equal(result, 15);
- test.done();
- });
-};
-
exports['seq'] = function (test) {
test.expect(5);
var add2 = function (n, cb) {