[PATCH] Omit sync package while mocking empty interface
when just an empty interface is has beeing mocked, the import of the sync package caused an error. In production it isn't important, because mocking empty interfaces might be stupid, but while writing tests it might happen, that you create an interface, which is beeing filled later on.
This commit is contained in:
parent
df933a7865
commit
ede55fbbe7
@ -69,6 +69,7 @@ func (m *Mocker) Mock(w io.Writer, name ...string) error {
|
|||||||
PackageName: m.pkgName,
|
PackageName: m.pkgName,
|
||||||
Imports: moqImports,
|
Imports: moqImports,
|
||||||
}
|
}
|
||||||
|
mocksMethods := false
|
||||||
for _, pkg := range m.pkgs {
|
for _, pkg := range m.pkgs {
|
||||||
i := 0
|
i := 0
|
||||||
files := make([]*ast.File, len(pkg.Files))
|
files := make([]*ast.File, len(pkg.Files))
|
||||||
@ -94,6 +95,7 @@ func (m *Mocker) Mock(w io.Writer, name ...string) error {
|
|||||||
InterfaceName: n,
|
InterfaceName: n,
|
||||||
}
|
}
|
||||||
for i := 0; i < iiface.NumMethods(); i++ {
|
for i := 0; i < iiface.NumMethods(); i++ {
|
||||||
|
mocksMethods = true
|
||||||
meth := iiface.Method(i)
|
meth := iiface.Method(i)
|
||||||
sig := meth.Type().(*types.Signature)
|
sig := meth.Type().(*types.Signature)
|
||||||
method := &method{
|
method := &method{
|
||||||
@ -106,6 +108,9 @@ func (m *Mocker) Mock(w io.Writer, name ...string) error {
|
|||||||
doc.Objects = append(doc.Objects, obj)
|
doc.Objects = append(doc.Objects, obj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if mocksMethods {
|
||||||
|
doc.Imports = append(doc.Imports, "sync")
|
||||||
|
}
|
||||||
for pkgToImport := range m.imports {
|
for pkgToImport := range m.imports {
|
||||||
doc.Imports = append(doc.Imports, pkgToImport)
|
doc.Imports = append(doc.Imports, pkgToImport)
|
||||||
}
|
}
|
||||||
|
@ -214,3 +214,19 @@ func TestDotImports(t *testing.T) {
|
|||||||
t.Error("contains invalid dot import")
|
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")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package moq
|
package moq
|
||||||
|
|
||||||
// moqImports are the imports all moq files get.
|
// moqImports are the imports all moq files get.
|
||||||
var moqImports = []string{"sync"}
|
var moqImports = []string{}
|
||||||
|
|
||||||
// moqTemplate is the template for mocked code.
|
// moqTemplate is the template for mocked code.
|
||||||
var moqTemplate = `// Code generated by moq; DO NOT EDIT
|
var moqTemplate = `// Code generated by moq; DO NOT EDIT
|
||||||
|
Loading…
Reference in New Issue
Block a user