blob: 45ddb5408a59fd59793bd2a05e7a101083d10979 [file] [log] [blame]
// 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))
}
})
}