Files
millionco__react-doctor/packages/react-doctor/tests/copy-unchanged-baseline-sources.test.ts
Aiden Bai 8c2f03aea9 feat: make React cleanup first-class (#1624)
* feat: make React cleanup first-class

* refactor: remove editor integrations

* fix: harden React cleanup analysis

* fix: detect default export duplication roots

* fix: unwrap typed duplication roots

* feat: add opt-in project analysis rules

* fix: canonicalize project analysis paths

* fix: harden project analysis precision

* fix: recognize cross-platform project entries

* fix: eliminate project analysis false positives

* fix: harden project analysis reachability

* fix: canonicalize project analysis inputs

* fix: resolve project analysis review findings

* fix: eliminate residual project analysis false positives

* fix: ignore commented registry previews

* fix: eliminate project analysis false positives

* fix: normalize project analysis paths across platforms

* fix: normalize Nextra theme path identity

* test: canonicalize convention fixture paths

* fix: preserve project analysis provenance

* fix: harden project analysis precision

* fix: honor project analysis boundaries

* fix: recognize conditional config plugins

* fix: recognize executable project references

* fix: recognize Stencil tool contracts

* fix: recognize nested tool references

* fix: recognize project setup contracts

* fix: recognize generated and local package consumers

* fix: recognize static template package references

* fix: recognize nested package runtime contracts

* fix: close project analysis parser gaps

* fix: parse project conventions structurally

* refactor: replace structural scanners with parsers

* fix: recognize functional Next CSS config

* fix: close remaining project analysis gaps

* fix: apply tag filters to project analysis

* fix: preserve embedded source positions

* fix: validate static config helper bindings

* fix: bound runtime directory discovery

* fix: close final dependency analysis gaps

* fix: preserve declaration dependency references

* chore: refresh generated rule metadata

* fix: make project analysis portable and bounded

* test: stabilize cleanup scaling guard

* refactor: parse project syntax with oxc

* fix: normalize native filesystem paths

* fix: separate path identity from report paths

* fix: match project files by filesystem identity

* fix: match build glob files by package identity

* fix: use native path keys for file identity

* fix: canonicalize Windows file identities

* fix: canonicalize package ownership paths

* test: inspect Windows path identities

* test: trace Windows package ownership

* fix: keep Windows path identities consistent

* fix: classify test contracts by normalized path

* fix: scope test contracts by canonical package path

* fix: keep test package graphs conservative

* test: keep React complexity advisory
2026-08-13 16:26:08 -07:00

67 lines
2.6 KiB
TypeScript

import * as fs from "node:fs";
import * as os from "node:os";
import * as path from "node:path";
import { afterEach, describe, expect, it } from "vite-plus/test";
import { copyUnchangedBaselineSources } from "../src/cli/utils/copy-unchanged-baseline-sources.js";
const temporaryDirectories: string[] = [];
const createTemporaryDirectory = (prefix: string): string => {
const directory = fs.mkdtempSync(path.join(os.tmpdir(), prefix));
temporaryDirectories.push(directory);
return directory;
};
afterEach(() => {
for (const directory of temporaryDirectories.splice(0)) {
fs.rmSync(directory, { recursive: true, force: true });
}
});
describe("copyUnchangedBaselineSources", () => {
it("copies only unchanged tracked source files", async () => {
const directory = createTemporaryDirectory("react-doctor-baseline-source-");
const tempDirectory = createTemporaryDirectory("react-doctor-baseline-target-");
fs.mkdirSync(path.join(directory, "src"), { recursive: true });
fs.writeFileSync(path.join(directory, "src", "unchanged.tsx"), "unchanged");
fs.writeFileSync(path.join(directory, "src", "changed.tsx"), "head");
fs.writeFileSync(path.join(directory, "src", "untracked.tsx"), "untracked");
const didCopyComplete = await copyUnchangedBaselineSources({
directory,
sourceFiles: ["src/unchanged.tsx", "src/changed.tsx", "src/untracked.tsx"],
baseMaterializedFiles: [],
headChangedFiles: ["src/changed.tsx"],
untrackedFiles: ["src/untracked.tsx"],
tempDirectory,
deadlineEpochMs: null,
});
expect(didCopyComplete).toBe(true);
expect(fs.readFileSync(path.join(tempDirectory, "src", "unchanged.tsx"), "utf-8")).toBe(
"unchanged",
);
expect(fs.existsSync(path.join(tempDirectory, "src", "changed.tsx"))).toBe(false);
expect(fs.existsSync(path.join(tempDirectory, "src", "untracked.tsx"))).toBe(false);
});
it("stops copying after the scan deadline", async () => {
const directory = createTemporaryDirectory("react-doctor-baseline-deadline-source-");
const tempDirectory = createTemporaryDirectory("react-doctor-baseline-deadline-target-");
fs.writeFileSync(path.join(directory, "component.tsx"), "component");
const didCopyComplete = await copyUnchangedBaselineSources({
directory,
sourceFiles: ["component.tsx"],
baseMaterializedFiles: [],
headChangedFiles: [],
untrackedFiles: [],
tempDirectory,
deadlineEpochMs: 0,
});
expect(didCopyComplete).toBe(false);
expect(fs.existsSync(path.join(tempDirectory, "component.tsx"))).toBe(false);
});
});