diff --git a/src/application/javascript/JavaScriptSemanticGraphBuilder.test.ts b/src/application/javascript/JavaScriptSemanticGraphBuilder.test.ts index 54ecec21ed..43d63a7d05 100644 --- a/src/application/javascript/JavaScriptSemanticGraphBuilder.test.ts +++ b/src/application/javascript/JavaScriptSemanticGraphBuilder.test.ts @@ -1,3 +1,4 @@ +import { primitiveByteExpansionSource } from "../../../tests/fixtures/javascriptPrimitiveExpansion.js"; import * as t from "@babel/types"; import { expect, it } from "vitest"; @@ -111,15 +112,7 @@ it("preserves primitive candidate budget unknowns in semantic graph coverage", ( }); it("preserves derived string-byte limit reasons in semantic graph unknowns", () => { - const declarations = ['const value0 = "x";']; - for (let index = 1; index <= 30; index += 1) { - const previous = `value${String(index - 1)}`; - declarations.push( - `const value${String(index)} = ${previous} + ${previous};`, - ); - } - declarations.push("const answer = value30;"); - const source = declarations.join("\n"); + const source = primitiveByteExpansionSource(); const ir = analyzeJavaScriptSemantics(source); const graph = graphFor(source, ir); diff --git a/tests/boundary/filesystem/javascriptIntegrityPolicy.test.ts b/tests/boundary/filesystem/javascriptIntegrityPolicy.test.ts index 7291d888e2..9fd482ec27 100644 --- a/tests/boundary/filesystem/javascriptIntegrityPolicy.test.ts +++ b/tests/boundary/filesystem/javascriptIntegrityPolicy.test.ts @@ -1,3 +1,7 @@ +import { + primitiveCandidateExpansionSource, + primitiveByteExpansionSource, +} from "../../fixtures/javascriptPrimitiveExpansion.js"; import { createHash } from "node:crypto"; import { mkdir, readFile, writeFile } from "node:fs/promises"; import { join } from "node:path"; @@ -102,21 +106,9 @@ it("keeps a contradicted nested ASAR opaque during JavaScript reconstruction", a }); it("retains semantic resource limits alongside recorded integrity contradictions", async () => { - const expression = Array.from( - { length: 20 }, - () => '(true ? "a" : "b")', - ).join(" + "); - const declarations = ['const value0 = "x";']; - for (let index = 1; index <= 30; index += 1) { - const previous = `value${String(index - 1)}`; - declarations.push( - `const value${String(index)} = ${previous} + ${previous};`, - ); - } - declarations.push("const answer = value30;"); const { archive } = await createStrippedAsarAddon([ - { path: "app.js", contents: `const answer = { nested: ${expression} };` }, - { path: "growth.js", contents: declarations.join("\n") }, + { path: "app.js", contents: primitiveCandidateExpansionSource() }, + { path: "growth.js", contents: primitiveByteExpansionSource() }, ]); const analyzed = await analyzeJavaScriptApplication({ input_path: archive, diff --git a/tests/composition/javascript-applications/javascriptArtifactReconstruction.test.ts b/tests/composition/javascript-applications/javascriptArtifactReconstruction.test.ts index 2775b0cb84..4bbc2eb367 100644 --- a/tests/composition/javascript-applications/javascriptArtifactReconstruction.test.ts +++ b/tests/composition/javascript-applications/javascriptArtifactReconstruction.test.ts @@ -1,3 +1,7 @@ +import { + primitiveCandidateExpansionSource, + primitiveByteExpansionSource, +} from "../../fixtures/javascriptPrimitiveExpansion.js"; import { createHash } from "node:crypto"; import { mkdir, rm, writeFile } from "node:fs/promises"; import { join } from "node:path"; @@ -102,23 +106,8 @@ it("preserves graph commitments and export shapes when consuming file-local IR", it("reports semantic value resource limits in application graph coverage", async () => { const root = await createTestTempDirectory("rea-javascript-semantic-limit-"); - const expression = Array.from( - { length: 20 }, - () => '(true ? "a" : "b")', - ).join(" + "); - await writeFile( - join(root, "app.js"), - `const answer = { nested: ${expression} };`, - ); - const declarations = ['const value0 = "x";']; - for (let index = 1; index <= 30; index += 1) { - const previous = `value${String(index - 1)}`; - declarations.push( - `const value${String(index)} = ${previous} + ${previous};`, - ); - } - declarations.push("const answer = value30;"); - await writeFile(join(root, "growth.js"), declarations.join("\n")); + await writeFile(join(root, "app.js"), primitiveCandidateExpansionSource()); + await writeFile(join(root, "growth.js"), primitiveByteExpansionSource()); const snapshot = await scanCanonicalArtifactInventory(root, {}); const reader = createJavaScriptArtifactReader(root, "directory"); try { diff --git a/tests/fixtures/javascriptPrimitiveExpansion.ts b/tests/fixtures/javascriptPrimitiveExpansion.ts new file mode 100644 index 0000000000..1189dc9025 --- /dev/null +++ b/tests/fixtures/javascriptPrimitiveExpansion.ts @@ -0,0 +1,21 @@ +/** Source whose concatenated alternatives exceed primitive candidate storage. */ +export const primitiveCandidateExpansionSource = (): string => { + const expression = Array.from( + { length: 20 }, + () => '(true ? "a" : "b")', + ).join(" + "); + return `const answer = { nested: ${expression} };`; +}; + +/** Source whose repeated doubling exceeds derived primitive string storage. */ +export const primitiveByteExpansionSource = (): string => { + const declarations = ['const value0 = "x";']; + for (let index = 1; index <= 30; index += 1) { + const previous = `value${String(index - 1)}`; + declarations.push( + `const value${String(index)} = ${previous} + ${previous};`, + ); + } + declarations.push("const answer = value30;"); + return declarations.join("\n"); +};