diff --git a/pkg/moq/moq.go b/pkg/moq/moq.go index fc417e3..f4b43c0 100644 --- a/pkg/moq/moq.go +++ b/pkg/moq/moq.go @@ -71,6 +71,7 @@ func (m *Mocker) Mock(w io.Writer, name ...string) error { PackageName: m.pkgName, Imports: moqImports, } + mocksMethods := false for _, pkg := range m.pkgs { i := 0 files := make([]*ast.File, len(pkg.Files)) @@ -96,6 +97,7 @@ func (m *Mocker) Mock(w io.Writer, name ...string) error { InterfaceName: n, } for i := 0; i < iiface.NumMethods(); i++ { + mocksMethods = true meth := iiface.Method(i) sig := meth.Type().(*types.Signature) method := &method{ @@ -108,6 +110,9 @@ func (m *Mocker) Mock(w io.Writer, name ...string) error { doc.Objects = append(doc.Objects, obj) } } + if mocksMethods { + doc.Imports = append(doc.Imports, "sync") + } for pkgToImport := range m.imports { doc.Imports = append(doc.Imports, pkgToImport) } diff --git a/pkg/moq/moq_test.go b/pkg/moq/moq_test.go index fae64be..4cd6fc9 100644 --- a/pkg/moq/moq_test.go +++ b/pkg/moq/moq_test.go @@ -224,3 +224,19 @@ func TestDotImports(t *testing.T) { t.Error("contains invalid dot import") } } + +func TestEmptyInterface(t *testing.T) { + m, err := New("testpackages/emptyinterface", "") + if err != nil { + t.Fatalf("moq.New: %s", err) + } + var buf bytes.Buffer + err = m.Mock(&buf, "Empty") + if err != nil { + t.Errorf("mock error: %s", err) + } + s := buf.String() + if strings.Contains(s, `"sync"`) { + t.Error("contains sync import, although this package isn't used") + } +} diff --git a/pkg/moq/template.go b/pkg/moq/template.go index a181507..4d70827 100644 --- a/pkg/moq/template.go +++ b/pkg/moq/template.go @@ -1,7 +1,7 @@ package moq // moqImports are the imports all moq files get. -var moqImports = []string{"sync"} +var moqImports = []string{} // moqTemplate is the template for mocked code. var moqTemplate = `// Code generated by moq; DO NOT EDIT @@ -35,7 +35,7 @@ var ( // // // TODO: use mocked{{.InterfaceName}} in code that requires {{.InterfaceName}} // // and then make assertions. -// +// // } type {{.InterfaceName}}Mock struct { {{- range .Methods }} @@ -43,7 +43,7 @@ type {{.InterfaceName}}Mock struct { {{.Name}}Func func({{ .Arglist }}) {{.ReturnArglist}} {{ end }} // calls tracks calls to the methods. - calls struct { + calls struct { {{- range .Methods }} // {{ .Name }} holds details about calls to the {{.Name}} method. {{ .Name }} []struct { diff --git a/pkg/moq/testpackages/emptyinterface/empty.go b/pkg/moq/testpackages/emptyinterface/empty.go new file mode 100644 index 0000000..0e05247 --- /dev/null +++ b/pkg/moq/testpackages/emptyinterface/empty.go @@ -0,0 +1,4 @@ +package emptyinterface + +// Empty is an empty interface +type Empty interface{}