aboutsummaryrefslogtreecommitdiff
path: root/gopls/internal/lsp/cache/errors_test.go
blob: 43cc03f78f7d23d879f618f4bed13f0702122606 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cache

import (
	"strings"
	"testing"
)

func TestParseErrorMessage(t *testing.T) {
	tests := []struct {
		name             string
		in               string
		expectedFileName string
		expectedLine     int
		expectedColumn   int
	}{
		{
			name:             "from go list output",
			in:               "\nattributes.go:13:1: expected 'package', found 'type'",
			expectedFileName: "attributes.go",
			expectedLine:     13,
			expectedColumn:   1,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			spn := parseGoListError(tt.in, ".")
			fn := spn.URI().Filename()

			if !strings.HasSuffix(fn, tt.expectedFileName) {
				t.Errorf("expected filename with suffix %v but got %v", tt.expectedFileName, fn)
			}

			if !spn.HasPosition() {
				t.Fatalf("expected span to have position")
			}

			pos := spn.Start()
			if pos.Line() != tt.expectedLine {
				t.Errorf("expected line %v but got %v", tt.expectedLine, pos.Line())
			}

			if pos.Column() != tt.expectedColumn {
				t.Errorf("expected line %v but got %v", tt.expectedLine, pos.Line())
			}
		})
	}
}