Files
reverse-engineering-anything/tests/evaluation/recordPredicateGuard.test.ts
T
morluto 5bf66f7500 refactor(domain): one owner for the non-array record predicate (#10588)
* refactor(domain): one owner for the non-array record predicate

Thirty-four source files each declared isRecord as a non-null object that is
not an array, and six more spelled the same predicate as isObject,
isSchemaRecord or isStorageRecord. They now import isRecord from
src/domain/isRecord.ts, whose overloads keep JsonValue narrowing for the
desktop and environment readers. DshCordisPatch's predicate also excludes
Cordis expressions, so it is renamed isPatchRecord.

architecture-guards refuses a new local copy under any name. The seven files
that still hold one are listed and must leave the list when their copy goes.

* fix(guards): count record predicate copies precisely

* test(hopper): retry after confirmed application exit

* fix: reject stale record predicate exceptions
2026-11-15 17:05:54 +08:00

20 lines
672 B
TypeScript

import { expect, it } from "vitest";
import { recordPredicateCounts } from "../../scripts/verify/record-predicate-guard.mjs";
it("counts both function forms and does not depend on the parameter name", () => {
const predicate =
'typeof input === "object" && input !== null && !Array.isArray(input)';
expect(
recordPredicateCounts(`function isObject(input) { return ${predicate}; }`)
.bodies,
).toBe(1);
expect(
recordPredicateCounts(`const isObject = (input) => ${predicate};`).bodies,
).toBe(1);
expect(
recordPredicateCounts(
`const a = (input) => ${predicate}; const b = (input) => ${predicate};`,
).bodies,
).toBe(2);
});