blob: 04c3c34a5f918790871f82d0e457792e0a24b624 [file] [log] [blame]
// 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 (
"fmt"
"testing"
"golang.org/x/tools/internal/lsp/fake"
"golang.org/x/tools/internal/lsp/protocol"
)
func TestPackageCompletion(t *testing.T) {
const files = `
-- go.mod --
module mod.com
-- fruits/apple.go --
package apple
fun apple() int {
return 0
}
-- fruits/testfile.go --`
want := []string{"package apple", "package apple_test", "package fruits", "package fruits_test", "package main"}
run(t, files, func(t *testing.T, env *Env) {
env.OpenFile("fruits/testfile.go")
content := env.ReadWorkspaceFile("fruits/testfile.go")
if content != "" {
t.Fatal("testfile.go should be empty to test completion on end of file without newline")
}
completions, err := env.Editor.Completion(env.Ctx, "fruits/testfile.go", fake.Pos{
Line: 0,
Column: 0,
})
if err != nil {
t.Fatal(err)
}
diff := compareCompletionResults(want, completions.Items)
if diff != "" {
t.Fatal(diff)
}
})
}
func TestPackageNameCompletion(t *testing.T) {
const files = `
-- go.mod --
module mod.com
-- math/add.go --
package ma
`
want := []string{"ma", "ma_test", "main", "math", "math_test"}
run(t, files, func(t *testing.T, env *Env) {
env.OpenFile("math/add.go")
completions, err := env.Editor.Completion(env.Ctx, "math/add.go", fake.Pos{
Line: 0,
Column: 10,
})
if err != nil {
t.Fatal(err)
}
diff := compareCompletionResults(want, completions.Items)
if diff != "" {
t.Fatal(diff)
}
})
}
func compareCompletionResults(want []string, gotItems []protocol.CompletionItem) string {
if len(gotItems) != len(want) {
return fmt.Sprintf("got %v completion(s), want %v", len(gotItems), len(want))
}
var got []string
for _, item := range gotItems {
got = append(got, item.Label)
}
for i, v := range got {
if v != want[i] {
return fmt.Sprintf("completion results are not the same: got %v, want %v", got, want)
}
}
return ""
}