import { test } from "node:test"; import assert from "node:assert/strict"; import { parseTree, section, shortName } from "./tree.ts"; const SEARCH_GRAPH = `total: 116 search_mode: bm25 results: 2 (cols: qn label file lines rank) erp.src.GeneratedInvoice.create Method src/main/GeneratedInvoice.java 41-50 -19.53 erp.src.S3BlobStoreTest.createBucket Method src/test/S3BlobStoreTest.java 34-44 -16.12 has_more: true `; const SEARCH_CODE = `results: 2 (cols: qn label file lines matches in out) erp.src.GeneratedInvoice.orderCode Field src/main/GeneratedInvoice.java 21-22 21;22 24 0 erp.src.GhnOrderResourceV1Test.ts Method src/test/GhnOrderResourceV1Test.java 350-352 "352" 19 1 raw: 1 (cols: file line content) src/main/GhnOrderSyncService.java 11 "import com.nevigroup.order.GHNOrder;" dirs: 1 (cols: dir hits) src/ 129 total_grep_matches: 500 total_results: 130 raw_match_count: 77 elapsed_ms: 39 `; test("parses search_graph tree text", () => { const doc = parseTree(SEARCH_GRAPH)!; assert.equal(doc.scalars.total, "116"); assert.equal(doc.scalars.search_mode, "bm25"); assert.equal(doc.scalars.has_more, "true"); const results = section(doc, "results")!; assert.equal(results.count, 2); assert.deepEqual(results.cols, ["qn", "label", "file", "lines", "rank"]); assert.equal(results.rows[0]!.qn, "erp.src.GeneratedInvoice.create"); assert.equal(results.rows[0]!.lines, "41-50"); }); test("parses search_code tree text with quoted cells", () => { const doc = parseTree(SEARCH_CODE)!; assert.equal(doc.scalars.total_results, "130"); assert.equal(doc.scalars.raw_match_count, "77"); const results = section(doc, "results")!; assert.equal(results.rows[0]!.matches, "21;22"); assert.equal(results.rows[1]!.matches, "352"); // quotes stripped const raw = section(doc, "raw")!; assert.equal(raw.rows[0]!.content, "import com.nevigroup.order.GHNOrder;"); assert.equal(section(doc, "dirs")!.rows[0]!.hits, "129"); }); test("returns null for non-tree text", () => { assert.equal(parseTree('{"projects":[]}'), null); assert.equal(parseTree(""), null); }); test("shortName drops the qualified prefix", () => { assert.equal(shortName("a.b.c.method"), "method"); assert.equal(shortName("plain"), "plain"); });