111 lines
3.4 KiB
JavaScript
111 lines
3.4 KiB
JavaScript
|
/*!
|
||
|
* Nodeunit
|
||
|
* Copyright (c) 2010 Caolan McMahon
|
||
|
* MIT Licensed
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Module dependencies
|
||
|
*/
|
||
|
|
||
|
var nodeunit = require('../nodeunit'),
|
||
|
utils = require('../utils'),
|
||
|
fs = require('fs'),
|
||
|
path = require('path'),
|
||
|
AssertionError = require('assert').AssertionError;
|
||
|
|
||
|
/**
|
||
|
* Reporter info string
|
||
|
*/
|
||
|
|
||
|
exports.info = "Report tests result as HTML";
|
||
|
|
||
|
/**
|
||
|
* Run all tests within each module, reporting the results to the command-line.
|
||
|
*
|
||
|
* @param {Array} files
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
exports.run = function (files, options, callback) {
|
||
|
|
||
|
var start = new Date().getTime();
|
||
|
var paths = files.map(function (p) {
|
||
|
return path.resolve(p);
|
||
|
});
|
||
|
|
||
|
console.log('<html>');
|
||
|
console.log('<head>');
|
||
|
console.log('<title></title>');
|
||
|
console.log('<style type="text/css">');
|
||
|
console.log('body { font: 12px Helvetica Neue }');
|
||
|
console.log('h2 { margin:0 ; padding:0 }');
|
||
|
console.log('pre { font: 11px Andale Mono; margin-left: 1em; padding-left: 1em; margin-top:0; font-size:smaller;}');
|
||
|
console.log('.assertion_message { margin-left: 1em; }');
|
||
|
console.log(' ol {' +
|
||
|
' list-style: none;' +
|
||
|
' margin-left: 1em;' +
|
||
|
' padding-left: 1em;' +
|
||
|
' text-indent: -1em;' +
|
||
|
'}');
|
||
|
console.log(' ol li.pass:before { content: "\\2714 \\0020"; }');
|
||
|
console.log(' ol li.fail:before { content: "\\2716 \\0020"; }');
|
||
|
console.log('</style>');
|
||
|
console.log('</head>');
|
||
|
console.log('<body>');
|
||
|
nodeunit.runFiles(paths, {
|
||
|
testspec: options.testspec,
|
||
|
testFullSpec: options.testFullSpec,
|
||
|
moduleStart: function (name) {
|
||
|
console.log('<h2>' + name + '</h2>');
|
||
|
console.log('<ol>');
|
||
|
},
|
||
|
testDone: function (name, assertions) {
|
||
|
if (!assertions.failures()) {
|
||
|
console.log('<li class="pass">' + name + '</li>');
|
||
|
}
|
||
|
else {
|
||
|
console.log('<li class="fail">' + name);
|
||
|
assertions.forEach(function (a) {
|
||
|
if (a.failed()) {
|
||
|
a = utils.betterErrors(a);
|
||
|
if (a.error instanceof AssertionError && a.message) {
|
||
|
console.log('<div class="assertion_message">' +
|
||
|
'Assertion Message: ' + a.message +
|
||
|
'</div>');
|
||
|
}
|
||
|
console.log('<pre>');
|
||
|
console.log(a.error.stack);
|
||
|
console.log('</pre>');
|
||
|
}
|
||
|
});
|
||
|
console.log('</li>');
|
||
|
}
|
||
|
},
|
||
|
moduleDone: function () {
|
||
|
console.log('</ol>');
|
||
|
},
|
||
|
done: function (assertions) {
|
||
|
var end = new Date().getTime();
|
||
|
var duration = end - start;
|
||
|
if (assertions.failures()) {
|
||
|
console.log(
|
||
|
'<h3>FAILURES: ' + assertions.failures() +
|
||
|
'/' + assertions.length + ' assertions failed (' +
|
||
|
assertions.duration + 'ms)</h3>'
|
||
|
);
|
||
|
}
|
||
|
else {
|
||
|
console.log(
|
||
|
'<h3>OK: ' + assertions.length +
|
||
|
' assertions (' + assertions.duration + 'ms)</h3>'
|
||
|
);
|
||
|
}
|
||
|
console.log('</body>');
|
||
|
console.log('</html>');
|
||
|
|
||
|
if (callback) callback(assertions.failures() ? new Error('We have got test failures.') : undefined);
|
||
|
}
|
||
|
});
|
||
|
};
|