--- /dev/null
+// 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 (
+ "testing"
+
+ "golang.org/x/tools/internal/lsp/protocol"
+ "golang.org/x/tools/internal/lsp/tests"
+)
+
+// A basic test for fillstruct, now that it uses a command.
+func TestFillStruct(t *testing.T) {
+ const basic = `
+-- go.mod --
+module mod.com
+
+go 1.14
+-- main.go --
+package main
+
+import "go/types"
+
+func Foo() {
+ _ = types.Info{}
+}
+`
+ runner.Run(t, basic, func(t *testing.T, env *Env) {
+ env.OpenFile("main.go")
+ if err := env.Editor.RefactorRewrite(env.Ctx, "main.go", &protocol.Range{
+ Start: protocol.Position{
+ Line: 5,
+ Character: 16,
+ },
+ End: protocol.Position{
+ Line: 5,
+ Character: 16,
+ },
+ }); err != nil {
+ t.Fatal(err)
+ }
+ want := `package main
+
+import "go/types"
+
+func Foo() {
+ _ = types.Info{
+ Types: map[ast.Expr]types.TypeAndValue{},
+ Defs: map[*ast.Ident]types.Object{},
+ Uses: map[*ast.Ident]types.Object{},
+ Implicits: map[ast.Node]types.Object{},
+ Selections: map[*ast.SelectorExpr]*types.Selection{},
+ Scopes: map[ast.Node]*types.Scope{},
+ InitOrder: []*types.Initializer{},
+ }
+}
+`
+ if got := env.Editor.BufferText("main.go"); got != want {
+ t.Fatalf("TestFillStruct failed:\n%s", tests.Diff(want, got))
+ }
+ })
+}