--- /dev/null
+#!/usr/bin/env node
+require('../global');
+
+var path = require('path');
+
+var failed = false;
+
+//
+// Lint
+//
+JSHINT_BIN = './node_modules/jshint/bin/jshint';
+cd(__dirname + '/..');
+
+if (!test('-f', JSHINT_BIN)) {
+ echo('JSHint not found. Run `npm install` in the root dir first.');
+ exit(1);
+}
+
+if (exec(JSHINT_BIN + ' *.js test/*.js').code !== 0) {
+ failed = true;
+ echo('*** JSHINT FAILED! (return code != 0)');
+ echo();
+} else {
+ echo('All JSHint tests passed');
+ echo();
+}
+
+//
+// Unit tests
+//
+cd(__dirname + '/../test');
+ls('*.js').forEach(function(file) {
+ echo('Running test:', file);
+ if (exec('node ' + file).code !== 123) { // 123 avoids false positives (e.g. premature exit)
+ failed = true;
+ echo('*** TEST FAILED! (missing exit code "123")');
+ echo();
+ }
+});
+
+if (failed) {
+ echo();
+ echo('*******************************************************');
+ echo('WARNING: Some tests did not pass!');
+ echo('*******************************************************');
+ exit(1);
+} else {
+ echo();
+ echo('All tests passed.');
+}