Skip to content

Commit

Permalink
make assert.request function properly and add support for testsuites.
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewjstone authored and tj committed Mar 3, 2011
1 parent 6c2191a commit 162519d
Showing 1 changed file with 72 additions and 16 deletions.
88 changes: 72 additions & 16 deletions bin/expresso
Expand Up @@ -23,7 +23,7 @@ var assert = require('assert'),
* Expresso version.
*/

var version = '0.7.2-bozuko';
var version = '0.7.2';

/**
* Failure count.
Expand Down Expand Up @@ -63,8 +63,13 @@ var growl = false;
var port = 5555;

/**
* Execute serially.
* testsuite module for the given set of tests
*/
var testsuite = require('test/testsuite.js');

/**
* Execute serially.
*/

var serial = false;

Expand Down Expand Up @@ -339,19 +344,50 @@ assert.length = function(val, n, msg) {
*/

assert.response = function(server, req, res, msg){
// Check that the server is ready or defer
if (!server.fd) {
server.__deferred = server.__deferred || [];
server.__deferred.push(arguments);
server.listen(server.__port = port++, '127.0.0.1', function(){
server.__listening = true;
if (server.__deferred) {
server.__deferred.forEach(function(args){
assert.response.apply(assert, args);
});
server.__deferred = null;
}
});
return;
}

// The socket is bound, but not yet listening, so keep deferring
if (!server.__listening) {
server.__deferred.push(arguments);
return;
}

// Callback as third or fourth arg
var callback = typeof res === 'function'
? res
: typeof msg === 'function'
? msg
: function(){};

// Default message to test title
// Default messate to test title
if (typeof msg === 'function') msg = null;
msg = msg || assert.testTitle;
msg += '. ';

issue();

// Pending responses
server.__pending = server.__pending || 0;
server.__pending++;

// Create client
if (!server.fd) {
server.listen(server.__port = port++, '127.0.0.1', issue);
} else {
issue();
}

function issue(){
if (!server.client)
Expand All @@ -367,21 +403,32 @@ assert.response = function(server, req, res, msg){

var request = client.request(method, req.url, req.headers);

var check = function(){
if (--server.__pending === 0) {
if (testsuite) {
testsuite.teardown();
}
server.close();
server.__listening = false;
}
};

// Timeout
if (requestTimeout) {
timer = setTimeout(function(){
delete req.timeout;
check();
delete req.timeout;
assert.fail(msg + 'Request timed out after ' + requestTimeout + 'ms.');
}, requestTimeout);
}

if (data) request.write(data);
request.on('response', function(response){
request.addListener('response', function(response){
response.body = '';
response.setEncoding('utf8');
response.on('data', function(chunk){ response.body += chunk; });
response.on('end', function(){
if (timer) clearTimeout(timer);
response.addListener('data', function(chunk){ response.body += chunk; });
response.addListener('end', function(){
if (timer) clearTimeout(timer);

// Assert response body
if (res.body !== undefined) {
Expand Down Expand Up @@ -428,6 +475,7 @@ assert.response = function(server, req, res, msg){

// Callback
callback(response);
check();
});
});
request.end();
Expand Down Expand Up @@ -599,18 +647,25 @@ function hasFullCoverage(cov) {

function run(files) {
cursor(false);
var suite = 'test/testsuite.js';
var testfiles = [];
if (!files.length) {
try {
files = fs.readdirSync('test').map(function(file){
return 'test/' + file;
});
testfiles = files.filter(function(val, index, array) {
return (val != suite);
});
} catch (err) {
print('\n failed to load tests in [bold]{./test}\n');
++failures;
process.exit(1);
}
}
runFiles(files);
if (testsuite) {
testsuite.setup(function(){ runFiles(testfiles); });
}
}

/**
Expand Down Expand Up @@ -701,8 +756,9 @@ function runSuite(title, tests, fn) {
? only.slice(0)
: Object.keys(tests);

// Setup
var setup = tests.setup || function(fn){ fn(); };

// Iterate tests
(function next(){
if (keys.length) {
Expand Down Expand Up @@ -735,7 +791,7 @@ function runSuite(title, tests, fn) {
});
} else {
test(function(fn){
process.on('beforeExit', function(){
process.addListener('beforeExit', function(){
try {
fn();
} catch (err) {
Expand All @@ -756,7 +812,7 @@ function runSuite(title, tests, fn) {
}

/**
* Report exceptions.
* Report exceptions.
*/

function report() {
Expand Down Expand Up @@ -792,14 +848,14 @@ function notify(msg) {

// Report uncaught exceptions

process.on('uncaughtException', function(err){
process.addListener('uncaughtException', function(err){
error('uncaught', 'uncaught', err);
});

// Show cursor

['INT', 'TERM', 'QUIT'].forEach(function(sig){
process.on('SIG' + sig, function(){
process.addListener('SIG' + sig, function(){
cursor(true);
process.exit(1);
});
Expand Down

0 comments on commit 162519d

Please sign in to comment.