From a64f6102e2e2f69f4f2297900ccf49cb4750506e Mon Sep 17 00:00:00 2001 From: Ranita Dutta Date: Sat, 5 Sep 2026 19:49:57 +0530 Subject: [PATCH 1/2] test: add optional chaining parser fixture --- .../fixtures/javascript/optional-chaining.js | 7 +++++++ packages/quality-judge/tests/parser.test.ts | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 packages/quality-judge/tests/fixtures/javascript/optional-chaining.js diff --git a/packages/quality-judge/tests/fixtures/javascript/optional-chaining.js b/packages/quality-judge/tests/fixtures/javascript/optional-chaining.js new file mode 100644 index 0000000..4565b44 --- /dev/null +++ b/packages/quality-judge/tests/fixtures/javascript/optional-chaining.js @@ -0,0 +1,7 @@ +export function getOwnerName(record) { + return record?.owner?.profile?.name ?? "unknown"; +} + +export function getFirstItem(items) { + return items?.[0]?.value ?? null; +} diff --git a/packages/quality-judge/tests/parser.test.ts b/packages/quality-judge/tests/parser.test.ts index 1687b3d..a3fcabc 100644 --- a/packages/quality-judge/tests/parser.test.ts +++ b/packages/quality-judge/tests/parser.test.ts @@ -13,6 +13,7 @@ describe("parser-backed quality lane", () => { it.each([ ["typescript/healthy.ts", "typescript"], ["javascript/healthy.js", "javascript"], + ["javascript/optional-chaining.js", "javascript"], ] as const)("parses %s with the real TypeScript compiler AST", (path, language) => { const result = parseQualitySource(path, fixture(path)); expect(result.ok).toBe(true); @@ -22,6 +23,22 @@ describe("parser-backed quality lane", () => { expect(result.features.nodeCount).toBeGreaterThan(5); expect(result.features.functionCount).toBeGreaterThan(0); }); + it("keeps optional chaining bounded and source-free in derived output", () => { + const source = fixture("javascript/optional-chaining.js"); + const result = parseQualitySource("javascript/optional-chaining.js", source); + + expect(result.ok).toBe(true); + if (!result.ok) return; + + expect(result.features.language).toBe("javascript"); + expect(result.features.parserVersion).toContain("typescript-"); + expect(result.features.functionCount).toBe(2); + expect(result.features.nodeCount).toBeGreaterThan(5); + expect(result.features.nodeCount).toBeLessThan(100); + expect(JSON.stringify(result)).not.toContain(source); + expect(JSON.stringify(result)).not.toContain("getOwnerName"); + expect(JSON.stringify(result)).not.toContain("getFirstItem"); +}); it("leaves Python and Go unsupported instead of applying lexical quality claims", () => { expect(parseQualitySource("main.py", "def main():\n return 1")).toEqual({ From edb21d0f8891a1cdef0c52c693295a9ee39e818b Mon Sep 17 00:00:00 2001 From: Ranita Dutta Date: Thu, 10 Sep 2026 19:50:58 +0530 Subject: [PATCH 2/2] style: format parser fixture test --- packages/quality-judge/tests/parser.test.ts | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/quality-judge/tests/parser.test.ts b/packages/quality-judge/tests/parser.test.ts index a3fcabc..c94a6b0 100644 --- a/packages/quality-judge/tests/parser.test.ts +++ b/packages/quality-judge/tests/parser.test.ts @@ -24,21 +24,21 @@ describe("parser-backed quality lane", () => { expect(result.features.functionCount).toBeGreaterThan(0); }); it("keeps optional chaining bounded and source-free in derived output", () => { - const source = fixture("javascript/optional-chaining.js"); - const result = parseQualitySource("javascript/optional-chaining.js", source); + const source = fixture("javascript/optional-chaining.js"); + const result = parseQualitySource("javascript/optional-chaining.js", source); - expect(result.ok).toBe(true); - if (!result.ok) return; + expect(result.ok).toBe(true); + if (!result.ok) return; - expect(result.features.language).toBe("javascript"); - expect(result.features.parserVersion).toContain("typescript-"); - expect(result.features.functionCount).toBe(2); - expect(result.features.nodeCount).toBeGreaterThan(5); - expect(result.features.nodeCount).toBeLessThan(100); - expect(JSON.stringify(result)).not.toContain(source); - expect(JSON.stringify(result)).not.toContain("getOwnerName"); - expect(JSON.stringify(result)).not.toContain("getFirstItem"); -}); + expect(result.features.language).toBe("javascript"); + expect(result.features.parserVersion).toContain("typescript-"); + expect(result.features.functionCount).toBe(2); + expect(result.features.nodeCount).toBeGreaterThan(5); + expect(result.features.nodeCount).toBeLessThan(100); + expect(JSON.stringify(result)).not.toContain(source); + expect(JSON.stringify(result)).not.toContain("getOwnerName"); + expect(JSON.stringify(result)).not.toContain("getFirstItem"); + }); it("leaves Python and Go unsupported instead of applying lexical quality claims", () => { expect(parseQualitySource("main.py", "def main():\n return 1")).toEqual({