Skip to content

Commit

Permalink
Write unit tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
creationix committed Jul 26, 2010
1 parent 58eac25 commit e4addca
Show file tree
Hide file tree
Showing 8 changed files with 148 additions and 85 deletions.
9 changes: 4 additions & 5 deletions README.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,12 @@ The step library exports a single function I call `Step`. It accepts any number
fs.readFile(__filename, this);
},
function capitalize(err, text) {
if (err) {
throw err;
}
if (err) throw err;
return text.toUpperCase();
},
function showIt(err, newText) {
sys.puts(newText);
if (err) throw err;
console.log(newText);
}
);

Expand Down Expand Up @@ -59,7 +58,7 @@ Also you can use group with a dynamic number of common tasks.
var group = this.group();
results.forEach(function (filename) {
if (/\.js$/.test(filename)) {
fs.readFile(__dirname + "/" + filename, group());
fs.readFile(__dirname + "/" + filename, 'utf8', group());
}
});
},
Expand Down
80 changes: 0 additions & 80 deletions test.js

This file was deleted.

26 changes: 26 additions & 0 deletions test/callbackTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
require('./helper');

var selfText = fs.readFileSync(__filename, 'utf8');

// This example tests passing async results and sync results to the next layer

expect('one');
expect('two');
expect('three');
Step(
function readSelf() {
fulfill("one");
fs.readFile(__filename, 'utf8', this);
},
function capitalize(err, text) {
fulfill("two");
if (err) throw err;
assert.equal(selfText, text, "Text Loaded");
return text.toUpperCase();
},
function showIt(err, newText) {
fulfill("three");
if (err) throw err;
assert.equal(selfText.toUpperCase(), newText, "Text Uppercased");
}
);
25 changes: 25 additions & 0 deletions test/errorTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
require('./helper');

var exception = new Error('Catch me!');

expect('one');
expect('two');
expect('three');
Step(
function () {
fulfill('one');
var callback = this;
setTimeout(function () {
callback(exception);
});
},
function (err) {
fulfill('two');
assert.equal(exception, err, "error should passed through");
throw exception;
},
function (err) {
fulfill('three');
assert.equal(exception, err, "error should be caught");
}
);
21 changes: 21 additions & 0 deletions test/fnTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
require('./helper');


var myfn = Step.fn(
function (name) {
fs.readFile(name, 'utf8', this);
},
function capitalize(err, text) {
if (err) throw err;
return text.toUpperCase();
}
);

var selfText = fs.readFileSync(__filename, 'utf8');

expect('result');
myfn(__filename, function (err, result) {
fulfill('result');
if (err) throw err;
assert.equal(selfText.toUpperCase(), result, "It should work");
});
33 changes: 33 additions & 0 deletions test/groupTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
require('./helper');

var dirListing = fs.readdirSync(__dirname),
dirResults = dirListing.map(function (filename) {
return fs.readFileSync(__dirname + "/" + filename, 'utf8');
});

expect('one');
expect('two');
expect('three');
Step(
function readDir() {
fulfill('one');
fs.readdir(__dirname, this);
},
function readFiles(err, results) {
fulfill('two');
if (err) throw err;
// Create a new group
assert.deepEqual(dirListing, results);
var group = this.group();
results.forEach(function (filename) {
if (/\.js$/.test(filename)) {
fs.readFile(__dirname + "/" + filename, 'utf8', group());
}
});
},
function showAll(err , files) {
fulfill('three');
if (err) throw err;
assert.deepEqual(dirResults, files);
}
);
17 changes: 17 additions & 0 deletions test/helper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
global.assert = require('assert');
global.fs = require('fs');
global.Step = require('../lib/step');

// A mini expectations module to ensure expected callback fire at all.
var expectations = {};
global.expect = function expect(message) {
expectations[message] = new Error("Missing expectation: " + message);
}
global.fulfill = function fulfill(message) {
delete expectations[message];
}
process.addListener('exit', function () {
Object.keys(expectations).forEach(function (message) {
throw expectations[message];
});
});
22 changes: 22 additions & 0 deletions test/parallelTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
require('./helper');

var selfText = fs.readFileSync(__filename, 'utf8'),
etcText = fs.readFileSync('/etc/passwd', 'utf8');

expect('one');
expect('two');
Step(
// Loads two files in parallel
function loadStuff() {
fulfill('one');
fs.readFile(__filename, this.parallel());
fs.readFile("/etc/passwd", this.parallel());
},
// Show the result when done
function showStuff(err, code, users) {
fulfill('two');
if (err) throw err;
assert.equal(selfText, code, "Code should come first");
assert.equal(etcText, users, "Users should come second");
}
);

0 comments on commit e4addca

Please sign in to comment.