mirror of https://github.com/golang/go.git
70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
// Copyright 2022 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 (
|
|
"testing"
|
|
|
|
. "golang.org/x/tools/gopls/internal/lsp/regtest"
|
|
"golang.org/x/tools/gopls/internal/lsp/tests/compare"
|
|
|
|
"golang.org/x/tools/gopls/internal/lsp/protocol"
|
|
)
|
|
|
|
func TestExtractFunction(t *testing.T) {
|
|
const files = `
|
|
-- go.mod --
|
|
module mod.com
|
|
|
|
go 1.12
|
|
-- main.go --
|
|
package main
|
|
|
|
func Foo() int {
|
|
a := 5
|
|
return a
|
|
}
|
|
`
|
|
Run(t, files, func(t *testing.T, env *Env) {
|
|
env.OpenFile("main.go")
|
|
|
|
start := env.RegexpSearch("main.go", "a := 5").ToProtocolPosition()
|
|
end := env.RegexpSearch("main.go", "return a").ToProtocolPosition()
|
|
|
|
actions, err := env.Editor.CodeAction(env.Ctx, "main.go", &protocol.Range{Start: start, End: end}, nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Find the extract function code action.
|
|
var extractFunc *protocol.CodeAction
|
|
for _, action := range actions {
|
|
if action.Kind == protocol.RefactorExtract && action.Title == "Extract function" {
|
|
extractFunc = &action
|
|
break
|
|
}
|
|
}
|
|
if extractFunc == nil {
|
|
t.Fatal("could not find extract function action")
|
|
}
|
|
|
|
env.ApplyCodeAction(*extractFunc)
|
|
want := `package main
|
|
|
|
func Foo() int {
|
|
a := newFunction()
|
|
return a
|
|
}
|
|
|
|
func newFunction() int {
|
|
a := 5
|
|
return a
|
|
}
|
|
`
|
|
if got := env.Editor.BufferText("main.go"); got != want {
|
|
t.Fatalf("TestFillStruct failed:\n%s", compare.Text(want, got))
|
|
}
|
|
})
|
|
}
|