UNPKG

@typed/test

Version:
110 lines 4.83 kB
#!/usr/bin/env node "use strict"; 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