t3-code-android-nightly/oxlint-plugin-t3code/rules/no-global-process-runtime.test.ts
Julius Marminge e30852213e
refactor(shared): host process references live in a HostProcess module (#17641)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 16:38:41 -07:00

94 lines
2.1 KiB
TypeScript

import { assert, describe } from "@effect/vitest";
import { createOxlintRuleHarness } from "../test/utils.ts";
const rule = createOxlintRuleHarness("t3code/no-global-process-runtime");
describe("t3code/no-global-process-runtime", () => {
rule.valid(
"allows injected host process references",
`
import * as HostProcess from "@t3tools/shared/HostProcess";
import * as Effect from "effect/Effect";
export const isWindows = Effect.map(HostProcess.Platform, (platform) => platform === "win32");
`,
);
rule.valid(
"allows unrelated process members",
`
process.exitCode = 1;
const nodeEnv = process.env.NODE_ENV;
`,
);
rule.valid(
"allows unrelated node os imports",
`
import { tmpdir } from "node:os";
export const tempDirectory = tmpdir();
`,
);
rule.invalid(
"reports direct platform reads",
`
export const isWindows = process.platform === "win32";
`,
(output) => {
assert.match(output, /Use HostProcess\.Platform/);
},
);
rule.invalid(
"reports direct architecture reads",
`
export const isArm = process.arch === "arm64";
`,
(output) => {
assert.match(output, /Use HostProcess\.Architecture/);
},
);
rule.invalid(
"reports globalThis process platform reads",
`
export const terminalName = globalThis.process.platform === "win32" ? "xterm-color" : "xterm-256color";
`,
);
rule.invalid(
"reports node os namespace platform reads",
`
import * as NodeOS from "node:os";
export const isWindows = NodeOS.platform() === "win32";
`,
(output) => {
assert.match(output, /Use HostProcess\.Platform/);
},
);
rule.invalid(
"reports renamed node os architecture imports",
`
import { arch as hostArch } from "node:os";
export const isArm = hostArch() === "arm64";
`,
(output) => {
assert.match(output, /Use HostProcess\.Architecture/);
},
);
rule.invalid(
"reports default node os platform reads",
`
import os from "node:os";
export const isWindows = os.platform() === "win32";
`,
);
});