diff options
Diffstat (limited to 'internal/lsp/rewrite_diagnostics_realism_test.go')
| -rw-r--r-- | internal/lsp/rewrite_diagnostics_realism_test.go | 113 |
1 files changed, 64 insertions, 49 deletions
diff --git a/internal/lsp/rewrite_diagnostics_realism_test.go b/internal/lsp/rewrite_diagnostics_realism_test.go index 87ff571..eb7ff5a 100644 --- a/internal/lsp/rewrite_diagnostics_realism_test.go +++ b/internal/lsp/rewrite_diagnostics_realism_test.go @@ -1,62 +1,77 @@ package lsp import ( - "encoding/json" - "testing" + "encoding/json" + "testing" ) func TestResolveRewrite_MultiLine_PreservesRange(t *testing.T) { - s := newTestServer() - s.llmClient = fakeLLM{resp: "line1\nline2"} - uri := "file:///x.go" - s.setDocument(uri, "package p\nvar a=1\n") - r := Range{Start: Position{Line:1, Character:0}, End: Position{Line:1, Character:5}} - payload := struct { - Type string `json:"type"` - URI string `json:"uri"` - Range Range `json:"range"` - Instruction string `json:"instruction"` - Selection string `json:"selection"` - }{Type: "rewrite", URI: uri, Range: r, Instruction: "expand", Selection: "var a"} - raw, _ := json.Marshal(payload) - ca := CodeAction{Title: "Hexai: rewrite selection", Data: raw} - resolved, ok := s.resolveCodeAction(ca) - if !ok || resolved.Edit == nil { t.Fatalf("expected resolved rewrite edit") } - edits := resolved.Edit.Changes[uri] - if len(edits) != 1 { t.Fatalf("expected 1 edit") } - if edits[0].Range != r { t.Fatalf("range mismatch: got %+v want %+v", edits[0].Range, r) } - if edits[0].NewText == "" || !containsNewline(edits[0].NewText) { - t.Fatalf("expected multi-line replacement text, got %q", edits[0].NewText) - } + s := newTestServer() + s.llmClient = fakeLLM{resp: "line1\nline2"} + uri := "file:///x.go" + s.setDocument(uri, "package p\nvar a=1\n") + r := Range{Start: Position{Line: 1, Character: 0}, End: Position{Line: 1, Character: 5}} + payload := struct { + Type string `json:"type"` + URI string `json:"uri"` + Range Range `json:"range"` + Instruction string `json:"instruction"` + Selection string `json:"selection"` + }{Type: "rewrite", URI: uri, Range: r, Instruction: "expand", Selection: "var a"} + raw, _ := json.Marshal(payload) + ca := CodeAction{Title: "Hexai: rewrite selection", Data: raw} + resolved, ok := s.resolveCodeAction(ca) + if !ok || resolved.Edit == nil { + t.Fatalf("expected resolved rewrite edit") + } + edits := resolved.Edit.Changes[uri] + if len(edits) != 1 { + t.Fatalf("expected 1 edit") + } + if edits[0].Range != r { + t.Fatalf("range mismatch: got %+v want %+v", edits[0].Range, r) + } + if edits[0].NewText == "" || !containsNewline(edits[0].NewText) { + t.Fatalf("expected multi-line replacement text, got %q", edits[0].NewText) + } } func TestResolveDiagnostics_MultiLine_PreservesRange(t *testing.T) { - s := newTestServer() - s.llmClient = fakeLLM{resp: "fixed\nvalue"} - uri := "file:///x.go" - s.setDocument(uri, "package p\nvar x = 1\n") - r := Range{Start: Position{Line:1, Character:0}, End: Position{Line:1, Character:10}} - payload := struct { - Type string `json:"type"` - URI string `json:"uri"` - Range Range `json:"range"` - Selection string `json:"selection"` - Diagnostics []Diagnostic `json:"diagnostics"` - }{Type: "diagnostics", URI: uri, Range: r, Selection: "var x = 1", Diagnostics: []Diagnostic{{Range: Range{Start: Position{Line:1}, End: Position{Line:1, Character:5}}, Message: "msg"}}} - raw, _ := json.Marshal(payload) - ca := CodeAction{Title: "Hexai: resolve diagnostics", Data: raw} - resolved, ok := s.resolveCodeAction(ca) - if !ok || resolved.Edit == nil { t.Fatalf("expected resolved diagnostics edit") } - edits := resolved.Edit.Changes[uri] - if len(edits) != 1 { t.Fatalf("expected 1 edit") } - if edits[0].Range != r { t.Fatalf("range mismatch: got %+v want %+v", edits[0].Range, r) } - if edits[0].NewText == "" || !containsNewline(edits[0].NewText) { - t.Fatalf("expected multi-line replacement text, got %q", edits[0].NewText) - } + s := newTestServer() + s.llmClient = fakeLLM{resp: "fixed\nvalue"} + uri := "file:///x.go" + s.setDocument(uri, "package p\nvar x = 1\n") + r := Range{Start: Position{Line: 1, Character: 0}, End: Position{Line: 1, Character: 10}} + payload := struct { + Type string `json:"type"` + URI string `json:"uri"` + Range Range `json:"range"` + Selection string `json:"selection"` + Diagnostics []Diagnostic `json:"diagnostics"` + }{Type: "diagnostics", URI: uri, Range: r, Selection: "var x = 1", Diagnostics: []Diagnostic{{Range: Range{Start: Position{Line: 1}, End: Position{Line: 1, Character: 5}}, Message: "msg"}}} + raw, _ := json.Marshal(payload) + ca := CodeAction{Title: "Hexai: resolve diagnostics", Data: raw} + resolved, ok := s.resolveCodeAction(ca) + if !ok || resolved.Edit == nil { + t.Fatalf("expected resolved diagnostics edit") + } + edits := resolved.Edit.Changes[uri] + if len(edits) != 1 { + t.Fatalf("expected 1 edit") + } + if edits[0].Range != r { + t.Fatalf("range mismatch: got %+v want %+v", edits[0].Range, r) + } + if edits[0].NewText == "" || !containsNewline(edits[0].NewText) { + t.Fatalf("expected multi-line replacement text, got %q", edits[0].NewText) + } } func containsNewline(s string) bool { - for i := 0; i < len(s); i++ { if s[i] == '\n' { return true } } - return false + for i := 0; i < len(s); i++ { + if s[i] == '\n' { + return true + } + } + return false } - |
