diff options
Diffstat (limited to 'packages/lsp/src/diagnostics.test.ts')
| -rw-r--r-- | packages/lsp/src/diagnostics.test.ts | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/packages/lsp/src/diagnostics.test.ts b/packages/lsp/src/diagnostics.test.ts new file mode 100644 index 0000000..9f2b6b4 --- /dev/null +++ b/packages/lsp/src/diagnostics.test.ts @@ -0,0 +1,51 @@ +import { describe, expect, it } from "vitest"; +import { DiagnosticsStore } from "./diagnostics.js"; + +describe("diagnostics", () => { + it("formats diagnostics with severity, location, and message", () => { + const store = new DiagnosticsStore(); + store.setPushDiagnostics({ + uri: "file:///test.ts", + diagnostics: [ + { + range: { start: { line: 0, character: 5 }, end: { line: 0, character: 10 } }, + severity: 1, + source: "typescript", + message: "Cannot find name 'hello'.", + }, + ], + }); + + const formatted = store.format("file:///test.ts"); + expect(formatted).toContain("ERROR"); + expect(formatted).toContain("L1:6"); + expect(formatted).toContain("Cannot find name 'hello'."); + expect(formatted).toContain("[typescript]"); + }); + + it("merges push and pull diagnostics with deduplication", () => { + const store = new DiagnosticsStore(); + const diag = { + range: { start: { line: 0, character: 0 }, end: { line: 0, character: 5 } }, + severity: 1, + message: "Error", + }; + + store.setPushDiagnostics({ + uri: "file:///test.ts", + diagnostics: [diag], + }); + store.setPullDiagnostics("file:///test.ts", { + kind: "full", + items: [diag], + }); + + const merged = store.getMerged("file:///test.ts"); + expect(merged).toHaveLength(1); + }); + + it("returns empty string when no diagnostics exist", () => { + const store = new DiagnosticsStore(); + expect(store.format("file:///nonexistent.ts")).toBe(""); + }); +}); |
