Files
rea/tests/evaluation/fixtureRootCleanupRule.test.ts
T

59 lines
5.0 KiB
TypeScript

import { describe, it } from "vitest";
import { fileURLToPath } from "node:url";
import { RuleTester } from "oxlint/plugins-dev";
import rule from "../../scripts/lint/rules/no-fixture-root-cleanup.mjs";
RuleTester.describe = describe;
RuleTester.it = it;
const tester = new RuleTester({
languageOptions: { parserOptions: { lang: "ts" } },
});
const filename = fileURLToPath(
new URL("../boundary/ruleControl.test.ts", import.meta.url),
);
const imports = `
import { createTestTempDirectory as temp } from "../fixtures/temporaryDirectory.js";
import { afterEach as cleanup, afterAll, onTestFinished } from "vitest";
import { rm as remove } from "node:fs/promises";
`;
const fixtureSource = new URL(
"../fixtures/temporaryDirectory.js",
import.meta.url,
);
const localCleanupImports = `import {afterEach} from "vitest"; import {rm} from "node:fs/promises";`;
tester.run("no-fixture-root-cleanup", rule, {
valid: [
`import {createTestTempDirectory as temp} from ${JSON.stringify(fixtureSource.href)}; ${localCleanupImports} function work(temp: Function) { const root = temp(); afterEach(() => rm(root)); }`,
`import {createTestTempDirectory as temp} from "https://example.test/tests/fixtures/temporaryDirectory.js"; ${localCleanupImports} const root = await temp("owned-"); afterEach(() => rm(root));`,
`import {createTestTempDirectory as temp} from ${JSON.stringify(`${fixtureSource.href}?other`)}; ${localCleanupImports} const root = await temp("owned-"); afterEach(() => rm(root));`,
`${imports} const root = await temp("owned-"); await remove(root, { recursive: true });`,
`${imports} const root = await temp("owned-"); cleanup(() => remove(join(root, "child"), {recursive: true}));`,
`${imports} const root = await otherOwner(); cleanup(() => remove(root, { recursive: true }));`,
`${imports} const root = await temp("owned-"); cleanup(async () => { const root = await otherOwner(); await remove(root, {recursive: true}); });`,
`${imports} function work(temp: Function) { const root = temp(); cleanup(() => remove(root)); }`,
`${imports} const root = await temp("owned-"); function unrelated(cleanup: Function) { cleanup(() => remove(root)); }`,
`${imports} const root = await temp("owned-"); cleanup(() => { function remove(root: string) {} remove(root); });`,
`${imports} const roots = []; const root = await temp("owned-"); roots.push(root); roots.push(await createIdaTarget()); cleanup(async () => { for (const owned of roots) await remove(owned); });`,
`${imports} let root = await temp("owned-"); root = await otherOwner(); cleanup(() => remove(root));`,
`${imports} const root = await temp("owned-"); cleanup(() => connection.close());`,
`${imports} import * as fs from "node:fs/promises"; const root = await temp("owned-"); cleanup((fs: {rm: Function}) => fs.rm(root));`,
`${imports} const root = await temp("owned-"); { const remove = otherOwner; cleanup(() => remove(root)); }`,
'import { createTestTempDirectory as temp } from "./unrelated.js"; import { afterEach } from "vitest"; import { rm } from "node:fs/promises"; const root = await temp(); afterEach(() => rm(root));',
`${imports} const root = await temp("owned-"); function callback(root: string) { return remove(root); } cleanup(callback);`,
].map((code) => ({ code, filename })),
invalid: [
`import {createTestTempDirectory as temp} from ${JSON.stringify(fixtureSource.href)}; ${localCleanupImports} const root = await temp("owned-"); afterEach(() => rm(root));`,
`import {createTestTempDirectory as temp} from ${JSON.stringify(fileURLToPath(fixtureSource))}; ${localCleanupImports} const root = await temp("owned-"); afterEach(() => rm(root));`,
`${imports} const root = await temp("owned-"); cleanup(() => remove(root, {recursive: true}));`,
`${imports} const root = await temp("owned-"); afterAll(async () => { await remove(root, {recursive: true}); });`,
`${imports} const root = await temp("owned-"); onTestFinished(() => remove(root, {recursive: true}));`,
`${imports} const root = await temp("owned-"); const alias = root; cleanup(() => remove(alias));`,
`${imports} const root = await temp("owned-"); async function release() { await remove(root); } cleanup(release);`,
`${imports} const root = await temp("owned-"); const release = () => remove(root); cleanup(release);`,
`${imports} import { rmSync } from "node:fs"; const root = await temp("owned-"); cleanup(() => rmSync(root, {recursive: true}));`,
`${imports} import { removeTestWorkspace as release } from "../support/workspace/workspaceFixture.js"; const root = await temp("owned-"); cleanup(() => release(root));`,
`${imports} const root = await temp("owned-"); cleanup(async () => { await connection.close(); await remove(root, {recursive: true}); });`,
'import * as fixture from "../fixtures/temporaryDirectory.ts"; import * as vitest from "vitest"; import * as fs from "node:fs/promises"; const root = await fixture.createTestTempDirectory("owned-"); vitest.afterEach(() => fs.rm(root, {recursive: true}));',
].map((code) => ({ code, filename, errors: [{ messageId: "duplicate" }] })),
});