blob: 2bb61fbcc0ed543204dddd7ecd1638cf7c48cbfd [file] [log] [blame]
// Copyright 2021 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 misc
import (
"strings"
"testing"
"golang.org/x/tools/internal/lsp/protocol"
. "golang.org/x/tools/internal/lsp/regtest"
)
const filesA = `
-- go.mod --
module mod.com
go 1.12
-- b.gotmpl --
{{define "A"}}goo{{end}}
-- a.tmpl --
{{template "A"}}
`
func TestSuffixes(t *testing.T) {
WithOptions(
EditorConfig{
AllExperiments: true,
},
).Run(t, filesA, func(t *testing.T, env *Env) {
env.OpenFile("a.tmpl")
x := env.RegexpSearch("a.tmpl", `A`)
file, pos := env.GoToDefinition("a.tmpl", x)
refs := env.References(file, pos)
if len(refs) != 2 {
t.Fatalf("got %v reference(s), want 2", len(refs))
}
// make sure we got one from b.gotmpl
want := env.Sandbox.Workdir.URI("b.gotmpl")
if refs[0].URI != want && refs[1].URI != want {
t.Errorf("failed to find reference to %s", shorten(want))
for i, r := range refs {
t.Logf("%d: URI:%s %v", i, shorten(r.URI), r.Range)
}
}
content, npos := env.Hover(file, pos)
if pos != npos {
t.Errorf("pos? got %v, wanted %v", npos, pos)
}
if content.Value != "template A defined" {
t.Errorf("got %s, wanted 'template A defined", content.Value)
}
})
}
// shorten long URIs
func shorten(fn protocol.DocumentURI) string {
if len(fn) <= 20 {
return string(fn)
}
pieces := strings.Split(string(fn), "/")
if len(pieces) < 2 {
return string(fn)
}
j := len(pieces)
return pieces[j-2] + "/" + pieces[j-1]
}
// Hover, SemTok, Diagnose with errors
// and better coverage