slowSuites

tcmts.cli.test.e2e.suites.slowSuites · #v5lgxok2 · term · runs on the server

uses node:fs

A codebase whose package has n suites, each noting in SLOT_LOG when it starts and ends (<ms> + <name>, <ms> - <name>) and taking ms between.

import { okIn, tempDir } from "#codebase/tcmts/cli/test/e2e/harness";
import fs from "node:fs";
import path from "node:path";

export const slowSuites = (name: string, n: number, ms: number) => {
  const dir = tempDir(`suite slots ${name}`);
  okIn(dir, "init");
  fs.writeFileSync(
    path.join(dir, "scratch.ts"),
    `// tcm: namespace greeter
export const main = () => console.log("hello");
export const manifest = { name: "greeter", bin: { greet: "main" }, suites: { greet: ["e2e"] } };
`,
  );
  okIn(dir, "add");
  const suite = (i: number) => `export const test${i} = () => {
  fs.appendFileSync(process.env.SLOT_LOG!, \`\${Date.now()} + ${name}\\n\`);
  Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ${ms});
  fs.appendFileSync(process.env.SLOT_LOG!, \`\${Date.now()} - ${name}\\n\`);
};`;
  fs.writeFileSync(
    path.join(dir, "scratch.ts"),
    `// tcm: namespace greeter.e2e\nimport fs from "node:fs";\n${Array.from({ length: n }, (_, i) => suite(i + 1)).join("\n")}\n`,
  );
  okIn(dir, "add");
  return dir;
}

uses

used by