iflrandevu/rsc/scripts/jsdoc/test/specs/jshint/jshint-clean.js
2013-07-02 17:20:39 +00:00

72 lines
No EOL
2.4 KiB
JavaScript

/*global app: true, beforeEach: true, describe: true, env: true, expect: true, it: true */
var async = require('async'),
fs = require('jsdoc/fs'),
path = require('path');
var config = JSON.parse( fs.readFileSync( path.join(__dirname, '.jshintrc'), 'utf8' ) );
function jsHintCheck(filename, callback) {
var JSHINT = require('jshint').JSHINT;
var jsHintErrors;
fs.readFile(filename, 'utf8', function(err, data) {
if (err) {
callback(err);
} else {
JSHINT(data, config);
if (JSHINT.errors.length) {
jsHintErrors = filename + ' is not JSHint clean: ' + JSON.stringify(JSHINT.errors);
}
callback(null, jsHintErrors);
}
});
}
describe('jshint-clean', function() {
it('should generate JSHint errors for bad code', function(done) {
var file = path.join(__dirname, 'test', 'fixtures', 'jshint', 'badfile.js');
jsHintCheck(file, function(err, jsHintErrors) {
expect(err).toBeFalsy();
expect(jsHintErrors).toBeDefined();
done();
});
});
it('should not generate JSHint errors for good code', function(done) {
var file = path.join(__dirname, 'test', 'fixtures', 'jshint', 'goodfile.js');
jsHintCheck(file, function(err, jsHintErrors) {
expect(err).toBeFalsy();
expect(jsHintErrors).toBeUndefined();
done();
});
});
it('should not find JSHint errors in JSDoc', function(done) {
var files,
filter,
source;
// check all .js files unless they're tests; rhino shim files that probably can't be
// delinted; or third-party modules
source = {
includePattern: '.+[\\|/]lib[\\|/].+\\.js$|.+[\\|/]plugins[\\|/]\\w+\\.js$',
excludePattern: '.+[\\|/]test[\\|/].+|.+[\\|/]node_modules[\\|/].+|.+[\\|/]Jake[\\|/].+'
};
filter = new (require('jsdoc/src/filter').Filter)(source);
files = app.jsdoc.scanner.scan([__dirname], 10, filter);
async.forEach(files, function(file, cb) {
jsHintCheck(file, function(err, jsHintErrors) {
expect(jsHintErrors).toBeUndefined();
cb(err);
});
}, function(err) {
expect(err).toBeFalsy();
done();
});
});
});