You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.0 KiB
JavaScript

#!/usr/bin/env node
var util = require("util"),
fs = require("fs"),
PEG = require("../lib/peg"),
QUnit = require("./vendor/qunit/qunit");
var failedAssertions = [];
function bold(s) { return "\u001B[1m" + s + "\u001B[22m"; };
function message(s) { return "\u001B[35m" + s + "\u001B[39m"; };
function ok(s) { return "\u001B[32m" + s + "\u001B[39m"; };
function error(s) { return "\u001B[31m" + s + "\u001B[39m"; };
function indent(s) { return s.replace(/^/gm, " "); }
QUnit.init();
QUnit.config.blocking = true;
QUnit.config.updateRate = 0;
QUnit.moduleStart(function(details) {
util.puts("");
util.puts(bold(details.name));
});
QUnit.testStart(function(details) {
failedAssertions = [];
});
QUnit.testDone(function(details) {
if (details.failed == 0) {
util.puts('✔ ' + details.name);
} else {
util.puts(error('✖ ' + details.name));
util.puts("");
failedAssertions.forEach(function(assertion) {
util.puts(assertion);
});
}
});
QUnit.log(function(details) {
var output = "";
if (details.result) { return; }
if (details.message) {
output += indent("Message: " + message(details.message)) + "\n";
}
if (details.actual && details.expected) {
output += indent("Expected: " + QUnit.jsDump.parse(details.expected)) + "\n";
if (details.actual != details.expected) {
output += indent("Actual: " + QUnit.jsDump.parse(details.actual));
}
}
failedAssertions.push(output);
});
QUnit.done(function(details) {
util.puts("");
if (details.failed > 0) {
util.puts(bold(error("FAILURES: "))
+ details.failed + "/"
+ details.total + " assertions failed ("
+ details.runtime + " ms)"
);
} else {
util.puts(bold(ok('OK: '))
+ details.total + " assertions ("
+ details.runtime + " ms)"
)
}
});
[
"helpers.js"
].forEach(function(file) {
eval("with (QUnit) {" + fs.readFileSync(__dirname + "/" + file, "utf8") + "}");
});
QUnit.start();