1
0
mirror of https://github.com/golang/go synced 2024-11-06 13:36:12 -07:00
go/internal/lsp/fake/editor_test.go
Rebecca Stambler 0cdb17d11b internal/lsp: treat the module root as the workspace root, if available
This change expands the scope of a workspace to the whole module, if the
user is in module mode. This means that diagnostics will appear and will
be updated for the whole module, even if the user only opens a
subdirectory. Similarly, references and other such queries will always
return consistent results, no matter which directory the user opens.

A new "root" field is added to the view. This is either the view's
folder or its module root. Almost all uses of view.folder have been
changed to view.root.

Updates golang/go#32394

Change-Id: I46f401f7c44b1b8429505aa032e0c15e88c4e2ef
Reviewed-on: https://go-review.googlesource.com/c/tools/+/244117
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
2020-07-23 21:33:49 +00:00

83 lines
1.6 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 fake
import (
"context"
"testing"
)
func TestContentPosition(t *testing.T) {
content := "foo\n😀\nbar"
tests := []struct {
offset, wantLine, wantColumn int
}{
{0, 0, 0},
{3, 0, 3},
{4, 1, 0},
{5, 1, 1},
{6, 2, 0},
}
for _, test := range tests {
pos, err := contentPosition(content, test.offset)
if err != nil {
t.Fatal(err)
}
if pos.Line != test.wantLine {
t.Errorf("contentPosition(%q, %d): Line = %d, want %d", content, test.offset, pos.Line, test.wantLine)
}
if pos.Column != test.wantColumn {
t.Errorf("contentPosition(%q, %d): Column = %d, want %d", content, test.offset, pos.Column, test.wantColumn)
}
}
}
const exampleProgram = `
-- go.mod --
go 1.12
-- main.go --
package main
import "fmt"
func main() {
fmt.Println("Hello World.")
}
`
func TestClientEditing(t *testing.T) {
ws, err := NewSandbox("", exampleProgram, "", false, false, "")
if err != nil {
t.Fatal(err)
}
defer ws.Close()
ctx := context.Background()
editor := NewEditor(ws, EditorConfig{})
if err := editor.OpenFile(ctx, "main.go"); err != nil {
t.Fatal(err)
}
if err := editor.EditBuffer(ctx, "main.go", []Edit{
{
Start: Pos{5, 14},
End: Pos{5, 26},
Text: "Hola, mundo.",
},
}); err != nil {
t.Fatal(err)
}
got := editor.buffers["main.go"].text()
want := `package main
import "fmt"
func main() {
fmt.Println("Hola, mundo.")
}
`
if got != want {
t.Errorf("got text %q, want %q", got, want)
}
}