1
0
mirror of https://github.com/golang/go synced 2024-09-30 23:08:32 -06:00
go/internal/lsp/regtest/symbol_test.go
Paul Jolly 0bd3dbed90 internal/lsp/fake: define Symbol method on Editor
In preparation for later changes to the implementation of the workspace
Symbol method, we add the Symbol method to fake.Editor. This requires
the definition of a number of associated fake types (editor-friendly,
byte-offset-based versions of protocol UTF16-based types) for example
fake.SymbolInformation and the types it references.

We also implement a basic regtest for the Symbol method, exposing Symbol
on regtest.Env like other LSP server methods. To aid with the writing of
Symbol result assertions, we provide some helper functions to simplify
the process of defining matches that are evaluated against the result
set.

Change-Id: If73b493e1e791c8201423a303af8041f5a15ccfc
Reviewed-on: https://go-review.googlesource.com/c/tools/+/228121
Run-TryBot: Paul Jolly <paul@myitcv.org.uk>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
2020-05-11 20:27:07 +00:00

59 lines
1.1 KiB
Go

// Copyright 2020 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 regtest
import (
"testing"
"golang.org/x/tools/internal/lsp/fake"
)
const symbolSetup = `
-- go.mod --
module mod.com
go 1.12
-- main.go --
package main
import "fmt"
func main() {
fmt.Println(Message)
}
-- const.go --
package main
const Message = "Hello World."
`
// TestSymbolPos tests that, at a basic level, we get the correct position
// information for symbols matches that are returned.
func TestSymbolPos(t *testing.T) {
matcher := "caseSensitive"
opts := []RunOption{
WithEditorConfig(fake.EditorConfig{SymbolMatcher: &matcher}),
}
runner.Run(t, symbolSetup, func(t *testing.T, env *Env) {
res := env.Symbol("main")
exp := &expSymbolInformation{
Name: pString("main"),
Location: &expLocation{
Path: pString("main.go"),
Range: &expRange{
Start: &expPos{
Line: pInt(4),
Column: pInt(5),
},
},
},
}
if !exp.matchAgainst(res) {
t.Fatalf("failed to find match for main function")
}
}, opts...)
}