diff --git a/test/Makefile b/test/Makefile index 584a4b9..d086c4e 100644 --- a/test/Makefile +++ b/test/Makefile @@ -2,16 +2,22 @@ tests := $(shell find . \ -name 'test-*' \ -a ! -name 'test-combine*.js'\ - -o -name '*Test.*' \ +) +cases := $(shell find . \ + -name '*Test.*' \ ) tests_combine := test-combine*.js -.PHONY: FORCE test test-combine +.PHONY: FORCE test test-combine suite -default: $(tests) combine +default: $(tests) suite combine combine: $(tests_combine) +suite: + @echo "ease.js Test Suite" + @echo + @NODE_PATH=".:$(NODE_PATH)" node --stack_trace_limit=20 runner.js ${cases} %.js: FORCE NODE_PATH=".:$(NODE_PATH)" node --stack_trace_limit=20 "$@" test-%: FORCE diff --git a/test/inc-testcase.js b/test/inc-testcase.js index 6d60d3b..9361560 100644 --- a/test/inc-testcase.js +++ b/test/inc-testcase.js @@ -1,9 +1,35 @@ - +/** + * Simple X-Unit-style test cases + * + * Copyright (C) 2010 Mike Gerwitz + * + * This file is part of ease.js. + * + * ease.js is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * @author Mike Gerwitz + * @package test + */ var assert = require( 'assert' ), assert_wrapped = {}, acount = 0, + // when set to true, final statistics will be buffered until suite ends + suite = false, + failures = [], + common_require = require( __dirname + '/common' ).require ; @@ -57,13 +83,14 @@ function incAssertCount() */ module.exports = function( test_case ) { - var failures = [], - scount = 0, - context = prepareCaseContext(), + var context = prepareCaseContext(), setUp = test_case.setUp; - // reset assertion count for this case - acount = 0; + // if we're not running a suite, clear out the failures + if ( !( suite ) ) + { + init(); + } // perform case-wide setup test_case.caseSetUp && test_case.caseSetUp.call( context ); @@ -95,6 +122,31 @@ module.exports = function( test_case ) } } + // only output statistics if we're not running a suite (otherwise they'll be + // output at the end of the suite) + if ( !( suite ) ) + { + endStats(); + } +}; + + +/** + * Reset counters + */ +function init() +{ + failures = []; + scount = 0; + acount = 0; +} + + +/** + * Display end stats (failures, counts) + */ +function endStats() +{ testPrint( "\n\n" ); if ( failures.length ) @@ -114,6 +166,26 @@ module.exports = function( test_case ) failures.length && typeof process !== 'undefined' && process.exit( 1 ); +} + + +/** + * Start test suite, deferring summary stats until call to endSuite() + */ +module.exports.startSuite = function() +{ + init(); + suite = true; +}; + + +/** + * Ens test suite, display stats buffered since startSuite() + */ +module.exports.endSuite = function() +{ + suite = false; + endStats(); }; diff --git a/test/runner.js b/test/runner.js new file mode 100644 index 0000000..5b21629 --- /dev/null +++ b/test/runner.js @@ -0,0 +1,49 @@ +/** + * Runs test suite + * + * This script must be fed the tests to be run as arguments, one test case per + * argument. All test cases should use common.testCase(). + * + * Copyright (C) 2010 Mike Gerwitz + * + * This file is part of ease.js. + * + * ease.js is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * @author Mike Gerwitz + * @package test + */ + +var common = require( 'common' ); + +// start the test suite to defer statistics and failure output until the end of +// all test cases +common.testCase.startSuite(); + +// run each file provided to us +process.argv.forEach( function( val, i ) +{ + // first arg is 'node', second is 'runner.js' + if ( i < 2 ) + { + return; + } + + // the tests will run themselves; we need only require 'em + require( __dirname + '/' + val ); +} ); + +// output statistics +common.testCase.endSuite(); +