52 lines
1.6 KiB
JavaScript
Executable File
52 lines
1.6 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
import { spawnSync } from "node:child_process";
|
|
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
const repoRoot = path.resolve(packageRoot, "..", "..");
|
|
const testRoots = [
|
|
path.join(packageRoot, "src"),
|
|
path.join(packageRoot, "scripts"),
|
|
];
|
|
|
|
function collectTests(dir, tests = []) {
|
|
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
const entryPath = path.join(dir, entry.name);
|
|
if (entry.isDirectory()) {
|
|
collectTests(entryPath, tests);
|
|
} else if (/\.test\.[cm]?js$/u.test(entry.name)) {
|
|
tests.push(entryPath);
|
|
}
|
|
}
|
|
return tests;
|
|
}
|
|
|
|
const requestedTests = process.argv.slice(2).map((testPath) => path.resolve(packageRoot, testPath));
|
|
const tests = (requestedTests.length ? requestedTests : testRoots.flatMap((root) => collectTests(root))).sort();
|
|
if (!tests.length) {
|
|
console.error("No implicitjs tests found.");
|
|
process.exit(1);
|
|
}
|
|
|
|
const result = spawnSync(process.execPath, [
|
|
"--test",
|
|
"--experimental-default-type=module",
|
|
...tests,
|
|
], {
|
|
cwd: packageRoot,
|
|
env: {
|
|
...process.env,
|
|
...(fs.existsSync(path.join(repoRoot, ".venv", "bin", "python"))
|
|
? { CAD_PYTHON: path.join(repoRoot, ".venv", "bin", "python") }
|
|
: {}),
|
|
...(fs.existsSync(path.join(repoRoot, "packages", "cadpy", "src"))
|
|
? { CAD_PYTHONPATH: path.join(repoRoot, "packages", "cadpy", "src") }
|
|
: {}),
|
|
},
|
|
stdio: "inherit",
|
|
});
|
|
|
|
process.exit(result.status ?? 1);
|