all repos

clerk @ 20a67e0

missing tooling for ledger/hledger

clerk/internal/lsp/textdocument_definition_test.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
lsp: rename, 1 month ago
1
package lsp
2
3
import (
4
	"fmt"
5
	"path/filepath"
6
	"strings"
7
	"testing"
8
9
	"go.lsp.dev/protocol"
10
	"go.lsp.dev/uri"
11
12
	"olexsmir.xyz/clerk/internal/testutil/golden"
13
)
14
15
func TestDefinition_DocumentNotFound(t *testing.T) {
16
	srv := NewServer("test")
17
	res, err := srv.server.Definition(t.Context(), &protocol.DefinitionParams{
18
		TextDocumentPositionParams: protocol.TextDocumentPositionParams{
19
			TextDocument: protocol.TextDocumentIdentifier{URI: uri.URI("file:///nonexistent.journal")},
20
			Position:     protocol.Position{Line: 0, Character: 0},
21
		},
22
	})
23
	if err != nil {
24
		t.Fatal(err)
25
	}
26
	if res != nil {
27
		t.Errorf("got %v, want nil", res)
28
	}
29
}
30
31
// Golden
32
33
func TestDefinitionTxtar(t *testing.T) {
34
	for _, tt := range []string{"definition-journal", "definition-include"} {
35
		ar := golden.Read(t, tt)
36
		t.Run(tt, func(t *testing.T) {
37
			h := newTxtarHarness(t, ar)
38
39
			var b strings.Builder
40
			for i := range h.cursors {
41
				pos := h.textDocumentPosition(i).Position
42
				res, err := h.srv.Definition(t.Context(), &protocol.DefinitionParams{
43
					TextDocumentPositionParams: h.textDocumentPosition(i),
44
				})
45
				if err != nil {
46
					t.Fatal(err)
47
				}
48
				locs, _ := res.(protocol.LocationSlice)
49
				if len(locs) == 0 {
50
					fmt.Fprintf(&b, "%d:%d <none>\n", pos.Line, pos.Character)
51
					continue
52
				}
53
				r := locs[0].Range
54
				fmt.Fprintf(&b, "%d:%d %s %d:%d-%d:%d\n", pos.Line, pos.Character,
55
					filepath.Base(locs[0].URI.Path()),
56
					r.Start.Line, r.Start.Character, r.End.Line, r.End.Character)
57
			}
58
			golden.Assert(t, ar, b.String())
59
		})
60
	}
61
}