mirror of
https://github.com/golang/go
synced 2024-11-18 15:04:44 -07:00
f01a4bec33
This change permits starting gopls without a root URI or any workspace folders. If no view is found for an opened file, we try to create a new view based on the module root of that file. In GOPATH mode, we just use the directory containing the file. I wrote a regtest for this by adding a new configuration that gets propagated to the sandbox. I'm not sure if this is the best way to do that, so I'll let Rob advise. Fixes golang/go#34160 Change-Id: I3deca3ac1b86b69eba416891a1c28fd35658a2ed Reviewed-on: https://go-review.googlesource.com/c/tools/+/240099 Run-TryBot: Rebecca Stambler <rstambler@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Heschi Kreinick <heschi@google.com>
83 lines
1.6 KiB
Go
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("TestClientEditing", 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)
|
|
}
|
|
}
|