UNPKG

solid-code

Version:

JavaScript code quality front-end

91 lines (77 loc) 2.6 kB
var fs = require('fs'); var path = require('path'); var check = require('check-types'); var tester = require('gt').TestingWithCoverage; console.assert(tester, 'could not find test framework'); var _ = require('lodash'); check.verifyObject(tester, 'loaded tester module'); // returns test filename if finds one function findTest(folder, basename) { check.verifyString(folder, 'missing folder'); check.verifyString(basename, 'missing basename'); var extensions = ['.js', '.coffee']; var candidateNames = [ path.join(folder, 'test', basename), path.join(folder, 'test', basename + 'Test'), path.join(folder, 'tests', basename + 'Test'), path.join(folder, 'tests', basename), path.join(folder, basename + 'Test'), path.join(folder, basename + 'Tests') ]; var found = null; candidateNames.some(function (name) { return extensions.some(function (extension) { var testName = name + extension; if (fs.existsSync(testName)) { found = testName; return true; } }); }); return found; } function init(filenames) { check.verifyArray(filenames, 'expect list of filenames'); var testFiles = []; filenames.forEach(function (filename) { // console.log('is', filename, 'solid?'); var fullName = path.resolve(filename); console.assert(fs.existsSync(fullName), 'cannot find', fullName); var folder = path.dirname(fullName); var extension = path.extname(fullName); console.assert(extension === '.js', fullName, 'does not end with .js'); var basename = path.basename(fullName, extension); // console.log('base name', basename, 'in', folder); var testName = findTest(folder, basename); if (testName) { check.verifyString(testName, 'expected filename test name'); testFiles.push(testName); return; } throw new Error('cannot find test file for ' + fullName); }); return testFiles; } // returns list of source and test files function run(sourceFiles, callback) { check.verifyArray(sourceFiles, 'expected a list of names'); check.verifyFunction(callback, 'expected callback function'); var testFiles = init(sourceFiles); // console.log('source files', sourceFiles); console.log('test files', testFiles); var allFiles = _.uniq(sourceFiles.concat(testFiles)); if (allFiles.length < 1) { console.log('no unit tests found'); } else { tester.init({ log: 0, files: allFiles, colors: true, cover: 'solid-code-coverage' }); tester.run(function (failed) { callback(failed, allFiles); }); } } module.exports = run;