summaryrefslogtreecommitdiffhomepage
path: root/packages/lsp/src/diagnostics.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/lsp/src/diagnostics.test.ts')
-rw-r--r--packages/lsp/src/diagnostics.test.ts51
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("");
+ });
+});