blob: 0cc775980d2348250d6638379c780f9fef1ee3a0 [file] [log] [blame]
/*jshint node: true*/
(function () {
"use strict";
var coveraje = require("coveraje").coveraje,
fs = require("fs"),
path = require("path");
var filePath = path.resolve(path.join(__dirname, "../../jshint.js"));
function runTests(file, helper) {
return function (context) {
// hack: set cache value
require.cache[filePath] = {
id: filePath,
exports: context.exports,
loaded: true
};
return coveraje.runHelper(helper).run(file);
};
}
var tests = {};
var rd = path.join(__dirname, "..");
function collect(dirs) {
var l = dirs.length;
var r = 0;
function onDir(dirPath) {
return function (err, files) {
r += 1;
if (!err) {
files.forEach(function (f) {
var p = path.join(dirPath, f);
var stat;
try {
stat = fs.statSync(p);
} catch (ex) {
return;
}
if (stat.isFile()) {
tests[path.relative(rd, p)] = runTests(path.join(dirPath, f), "expresso");
}
});
}
if (r === l) { // all dirs loaded
coveraje.cover(
function () {
// always read the content from disk, so changes can be refreshed in the browser
try {
return fs.readFileSync(filePath, 'utf-8');
} catch (ex) {
return "{ /*" + ex.message + "*/ }";
}
},
tests,
{
useServer: true,
globals: "node"
}
);
}
};
}
for (var i = 0; i < l; i += 1) {
var subPath = path.join(rd, dirs[i]);
fs.readdir(subPath, onDir(subPath));
}
}
collect(["unit", "regression"]);
}());