ff21ec921a
The test runner bundles TypeScript tests with esbuild and executes them using Node's built-in test runner. Tests cover document downloader behavior, path utilities, rmapi bridge configuration, style refinement, and ZIP file handling. Mock implementations for Obsidian plugin interfaces enable isolated unit testing.
61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
import esbuild from "esbuild";
|
|
import { mkdtemp, readdir, rm } from "fs/promises";
|
|
import { spawnSync } from "child_process";
|
|
import { dirname, join, relative } from "path";
|
|
import { tmpdir } from "os";
|
|
import { fileURLToPath } from "url";
|
|
|
|
const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
const testsDir = join(root, "tests");
|
|
const outdir = await mkdtemp(join(tmpdir(), "obsidian-remarkable-tests-"));
|
|
const obsidianMockPath = join(testsDir, "obsidian-mock.ts");
|
|
|
|
const entries = (await readdir(testsDir))
|
|
.filter((file) => file.endsWith(".test.ts"))
|
|
.map((file) => join(testsDir, file));
|
|
|
|
if (entries.length === 0) {
|
|
throw new Error("No test files found");
|
|
}
|
|
|
|
const obsidianAliasPlugin = {
|
|
name: "obsidian-alias",
|
|
setup(build) {
|
|
build.onResolve({ filter: /^obsidian$/ }, () => ({ path: obsidianMockPath }));
|
|
},
|
|
};
|
|
|
|
await esbuild.build({
|
|
entryPoints: entries,
|
|
bundle: true,
|
|
platform: "node",
|
|
format: "esm",
|
|
outdir,
|
|
outExtension: { ".js": ".mjs" },
|
|
plugins: [obsidianAliasPlugin],
|
|
external: ["child_process", "fs/promises", "os", "path", "node:*"],
|
|
sourcemap: "inline",
|
|
});
|
|
|
|
const testFiles = (await readdir(outdir))
|
|
.filter((file) => file.endsWith(".test.mjs"))
|
|
.map((file) => join(outdir, file));
|
|
|
|
try {
|
|
const result = spawnSync(process.execPath, ["--test", ...testFiles], {
|
|
cwd: root,
|
|
stdio: "inherit",
|
|
});
|
|
|
|
if (result.error) {
|
|
throw result.error;
|
|
}
|
|
|
|
if (result.status !== 0) {
|
|
const relativeFiles = testFiles.map((file) => relative(root, file)).join(", ");
|
|
throw new Error(`Tests failed: ${relativeFiles}`);
|
|
}
|
|
} finally {
|
|
await rm(outdir, { recursive: true, force: true });
|
|
}
|