92 lines
2.0 KiB
JavaScript
92 lines
2.0 KiB
JavaScript
"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);
|
|
}
|