39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import * as cp from "child_process";
|
|
import * as fs from "fs";
|
|
import path from "path";
|
|
import which from "which";
|
|
import { main as convertFourslash } from "./convertFourslash.mts";
|
|
|
|
const failingTestsPath = path.join(import.meta.dirname, "failingTests.txt");
|
|
|
|
function main() {
|
|
const oldFailingTests = fs.readFileSync(failingTestsPath, "utf-8");
|
|
fs.writeFileSync(failingTestsPath, "", "utf-8");
|
|
convertFourslash();
|
|
const go = which.sync("go");
|
|
let testOutput: string;
|
|
try {
|
|
testOutput = cp.execFileSync(go, ["test", "./internal/fourslash/tests/gen"], { encoding: "utf-8" });
|
|
}
|
|
catch (error) {
|
|
testOutput = (error as { stdout: string; }).stdout as string;
|
|
}
|
|
const panicRegex = /^panic/m;
|
|
if (panicRegex.test(testOutput)) {
|
|
fs.writeFileSync(failingTestsPath, oldFailingTests, "utf-8");
|
|
throw new Error("Unrecovered panic detected in tests");
|
|
}
|
|
const failRegex = /--- FAIL: ([\S]+)/gm;
|
|
const failingTests: string[] = [];
|
|
let match;
|
|
|
|
while ((match = failRegex.exec(testOutput)) !== null) {
|
|
failingTests.push(match[1]);
|
|
}
|
|
|
|
fs.writeFileSync(failingTestsPath, failingTests.sort().join("\n") + "\n", "utf-8");
|
|
convertFourslash();
|
|
}
|
|
|
|
main();
|