2011-02-26 23:07:59 +00:00
|
|
|
var fs = require("fs");
|
|
|
|
var sys = require("sys");
|
|
|
|
var path = require("path");
|
2011-02-26 19:23:25 +00:00
|
|
|
var JSHINT = require("./jshint").JSHINT;
|
|
|
|
|
2011-02-26 23:07:59 +00:00
|
|
|
function isExcluded(fullPath) {
|
|
|
|
var fileName = path.basename(fullPath);
|
|
|
|
var excludeFiles = ["json2.js", "jshint.js", "publish.js", "node_suite.js", "jasmine.js", "jasmine-html.js"];
|
|
|
|
for (var i=0; i<excludeFiles.length; i++) if (fileName==excludeFiles[i]) return true;
|
|
|
|
return false;
|
2011-02-26 19:23:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function allJasmineJsFiles(rootDir) {
|
2011-02-26 23:07:59 +00:00
|
|
|
var files = [];
|
|
|
|
var things = fs.readdirSync(rootDir);
|
2011-02-26 19:23:25 +00:00
|
|
|
for (var i=0; i<things.length; i++) {
|
2011-02-26 23:07:59 +00:00
|
|
|
var thing = things[i];
|
|
|
|
var fullPath = rootDir + "/" + thing;
|
2011-02-26 19:23:25 +00:00
|
|
|
if (fs.statSync(fullPath).isDirectory()) {
|
2011-02-26 23:07:59 +00:00
|
|
|
files = files.concat(allJasmineJsFiles(fullPath));
|
2011-02-26 19:23:25 +00:00
|
|
|
} else {
|
2011-02-26 23:07:59 +00:00
|
|
|
if (fullPath.match(/\.js$/) && !isExcluded(fullPath)) files.push(fullPath);
|
2011-02-26 19:23:25 +00:00
|
|
|
}
|
|
|
|
}
|
2011-02-26 23:07:59 +00:00
|
|
|
return files;
|
2011-02-26 19:23:25 +00:00
|
|
|
}
|
|
|
|
|
2011-02-26 23:07:59 +00:00
|
|
|
var jasmineJsFiles = allJasmineJsFiles(".");
|
|
|
|
jasmineJsFiles.reverse(); //cheap way to do the stuff in src stuff first
|
2011-02-26 19:23:25 +00:00
|
|
|
|
2011-02-26 23:07:59 +00:00
|
|
|
var jasmineJsHintConfig = {
|
2011-02-26 19:23:25 +00:00
|
|
|
|
2011-02-26 23:07:59 +00:00
|
|
|
forin:true, //while it's possible that we could be
|
|
|
|
//considering unwanted prototype methods, mostly
|
|
|
|
//we're doing this because the jsobjects are being
|
|
|
|
//used as maps.
|
|
|
|
|
|
|
|
loopfunc:true //we're fine with functions defined inside loops (setTimeout functions, etc)
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
var jasmineGlobals = {};
|
|
|
|
|
|
|
|
|
|
|
|
//jasmine.undefined is a jasmine-ism, let's let it go...
|
|
|
|
function removeJasmineUndefinedErrors(errors) {
|
|
|
|
var keepErrors = [];
|
|
|
|
for(var i=0; i<errors.length; i++) {
|
|
|
|
if (!(errors[i] &&
|
|
|
|
errors[i].raw &&
|
|
|
|
errors[i].evidence &&
|
|
|
|
( errors[i].evidence.match(/jasmine\.undefined/) ||
|
|
|
|
errors[i].evidence.match(/diz be undefined yo/) )
|
|
|
|
)) keepErrors.push(errors[i]);
|
|
|
|
}
|
|
|
|
return keepErrors;
|
|
|
|
}
|
2011-02-26 19:23:25 +00:00
|
|
|
|
|
|
|
for(var i=0; i<jasmineJsFiles.length; i++) {
|
2011-02-26 23:07:59 +00:00
|
|
|
var file = jasmineJsFiles[i];
|
|
|
|
JSHINT(fs.readFileSync(file, "utf8"), jasmineJsHintConfig);
|
|
|
|
var errors = JSHINT.data().errors || [];
|
|
|
|
errors = removeJasmineUndefinedErrors(errors);
|
|
|
|
|
|
|
|
if (errors.length>=1) {
|
|
|
|
console.log("JSHINT failure: ", file);
|
|
|
|
console.log(errors);
|
|
|
|
process.exit(1);
|
2011-02-26 19:23:25 +00:00
|
|
|
}
|
|
|
|
}
|