1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- "use strict";
- const fs = require("fs");
- const globby = require("globby");
- const format = require("../src/cli-util").format;
- function tryFormat(file) {
- const content = fs.readFileSync(file, "utf8");
- try {
- format({ "debug-check": true }, content, {
- // Allow specifying the parser via an environment variable:
- parser: process.env.PARSER,
- // Use file extension detection otherwise:
- filepath: file
- });
- } catch (error) {
- return error;
- }
- return null;
- }
- function runExternalTests(patterns) {
- const testFiles = globby.sync(patterns);
- if (testFiles.length === 0) {
- throw new Error(`No matching files. Patterns tried: ${patterns.join(" ")}`);
- }
- const results = {
- good: [],
- skipped: [],
- bad: []
- };
- testFiles.forEach(file => {
- const error = tryFormat(file);
- if (error instanceof SyntaxError) {
- results.skipped.push({ file, error });
- } else if (error) {
- results.bad.push({ file, error });
- } else {
- results.good.push({ file });
- }
- process.stderr.write(
- `\r${results.good.length} good, ${results.skipped.length} skipped, ${
- results.bad.length
- } bad`
- );
- });
- return results;
- }
- function run(argv) {
- if (argv.length === 0) {
- console.error(
- [
- "You must provide at least one file or glob for test files!",
- "Examples:",
- ' node scripts/run-external-tests.js "../TypeScript/tests/**/*.ts"',
- ' node scripts/run-external-tests.js "../flow/tests/**/*.js"',
- ' PARSER=flow node scripts/run-external-tests.js "../flow/tests/**/*.js"'
- ].join("\n")
- );
- return 1;
- }
- let results = null;
- try {
- results = runExternalTests(argv);
- } catch (error) {
- console.error(`Failed to run external tests.\n${error}`);
- return 1;
- }
- console.log("");
- console.log(
- results.bad.map(data => `${data.file}\n${data.error}`).join("\n\n\n")
- );
- return 0;
- }
- if (require.main === module) {
- const exitCode = run(process.argv.slice(2));
- process.exit(exitCode);
- }
|