@typed/test
Version:
Simple test framework
110 lines • 4.83 kB
JavaScript
;
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var expand = require("glob-expand");
var fs = require("fs");
var path = require("path");
var rimraf = require("rimraf");
var tmp = require("tmp");
var ts = require("typescript");
var yargs = require("yargs");
var displayTestResults_1 = require("./displayTestResults");
var _167_1 = require("167");
var tests_1 = require("./tests");
var typed_colors_1 = require("typed-colors");
tmp.setGracefulCleanup();
var cwd = process.cwd();
var temporaryDirectory = tmp.dirSync({ template: '.typed-test-XXXXXX' });
var configPath = ts.findConfigFile(cwd, function (fileName) { return fs.existsSync(fileName); });
var compilerOptions = ts.parseConfigFileTextToJson(configPath, fs.readFileSync(configPath).toString()).config.compilerOptions;
var options = ts.convertCompilerOptionsFromJson(__assign({}, compilerOptions, { module: 'commonjs', target: 'es5', noEmit: false, noEmitOnError: true, outDir: temporaryDirectory.name }), cwd).options;
var parsedArgs = yargs
.usage("\n$0 [fileGlobs]\n\n" +
" --require -r :: Require packages before running tests\n" +
" --timeout -t :: Set default timeout for tests")
.option('require', { alias: 'requires', requiresArg: false })
.option('timeout', { alias: 't' })
.showHelpOnFail(true).argv;
var globalTimeout = isNaN(parseFloat(parsedArgs.timeout)) ? 2000 : parseFloat(parsedArgs.timeout);
if (parsedArgs.help) {
yargs.showHelp();
}
else {
run(parsedArgs);
}
var failed = false;
function compile(fileNames) {
var program = ts.createProgram(fileNames, options);
var emitResult = program.emit();
var allDiagnostics = ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics);
allDiagnostics.forEach(function (diagnostic) {
var _a = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start), line = _a.line, character = _a.character;
var message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
console.log(diagnostic.file.fileName + "\n (" + (line + 1) + "," + (character + 1) + "): " + message);
});
if (emitResult.emitSkipped) {
rimraf.sync(temporaryDirectory.name);
process.exit(1);
}
console.log(emitResult.emittedFiles);
}
function run(args) {
var fileGlobs = args._, requires = args.requires;
if (requires)
_167_1.flatten([requires]).forEach(require);
var testFiles = _167_1.map(function (file) { return path.join(cwd, file); }, expand({ cwd: cwd, filter: 'isFile' }, fileGlobs));
compile(testFiles);
var compiledTestFiles = _167_1.map(function (file) { return path.join(cwd, file); }, expand({ cwd: cwd, filter: 'isFile' }, path.join(temporaryDirectory.name, '**/*.js')));
console.time("Tests Run In");
return Promise.all(compiledTestFiles.map(runTest(globalTimeout)))
.then(function (results) {
return _167_1.flatten(results).forEach(function (result) { return console.log(result); });
})
.then(function () {
console.log();
console.timeEnd("Tests Run In");
if (failed) {
console.log("\n-------------------------------------" + typed_colors_1.red('Errors') + "-------------------------------------\n");
rimraf.sync(temporaryDirectory.name);
process.exit(1);
}
else {
rimraf.sync(temporaryDirectory.name);
process.exit(0);
}
});
}
function runTest(timeout) {
return function (filename) {
var pkg = require(filename);
var tests = [];
if (tests_1.isTest(pkg) || tests_1.isTestCollection(pkg))
tests.push(pkg);
for (var key in pkg)
if (tests_1.isTest(pkg[key]) || tests_1.isTestCollection(pkg[key]))
tests.push(pkg[key]);
var testResults = Promise.all(tests.map(function (test) { return test.run(timeout); }));
return testResults.then(function (results) {
return results
.map(function (result, i) {
if (result.passed === false) {
failed = true;
}
if (tests_1.isTestResults(result))
return displayTestResults_1.displayTestResults(tests[i].name, result);
if (tests_1.isTestResult(result))
return displayTestResults_1.displayTestResult(tests[i].name, result);
})
.filter(Boolean);
});
};
}
//# sourceMappingURL=cli.js.map