From 072c0cd09bf3887973e1a9e1c29693aea3a06283 Mon Sep 17 00:00:00 2001 From: Suhas Karanth Date: Mon, 20 Jan 2020 07:16:57 +0530 Subject: [PATCH] Handle target interface inside vendor with other pkg name (#122) When the interface that we are trying to moq is present inside the vendor directory and the output package name is different, the import needs to be stripped of the vendor path. --- pkg/moq/moq.go | 2 +- pkg/moq/moq_test.go | 26 +++++++++++++++++++ .../github.com/matryer/somerepo/code.go | 4 +++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/pkg/moq/moq.go b/pkg/moq/moq.go index c293e4d..adb378b 100644 --- a/pkg/moq/moq.go +++ b/pkg/moq/moq.go @@ -177,7 +177,7 @@ func (m *Mocker) Mock(w io.Writer, names ...string) error { if tpkg.Name() != m.pkgName { doc.SourcePackagePrefix = tpkg.Name() + "." - doc.Imports = append(doc.Imports, tpkg.Path()) + doc.Imports = append(doc.Imports, stripVendorPath(tpkg.Path())) } var buf bytes.Buffer diff --git a/pkg/moq/moq_test.go b/pkg/moq/moq_test.go index aa416ab..1bf02cc 100644 --- a/pkg/moq/moq_test.go +++ b/pkg/moq/moq_test.go @@ -311,6 +311,32 @@ func TestVendoredPackages(t *testing.T) { } } +func TestVendoredInterface(t *testing.T) { + m, err := New("testpackages/vendoring/vendor/github.com/matryer/somerepo", "someother") + if err != nil { + t.Fatalf("moq.New: %s", err) + } + var buf bytes.Buffer + err = m.Mock(&buf, "SomeService") + if err != nil { + t.Errorf("mock error: %s", err) + } + s := buf.String() + // assertions of things that should be mentioned + var strs = []string{ + `"github.com/matryer/somerepo"`, + } + for _, str := range strs { + if !strings.Contains(s, str) { + t.Errorf("expected but missing: \"%s\"", str) + } + } + incorrectImport := `"github.com/matryer/moq/pkg/moq/testpackages/vendoring/vendor/github.com/matryer/somerepo"` + if strings.Contains(s, incorrectImport) { + t.Errorf("unexpected import: %s", incorrectImport) + } +} + func TestVendoredBuildConstraints(t *testing.T) { m, err := New("testpackages/buildconstraints/user", "") if err != nil { diff --git a/pkg/moq/testpackages/vendoring/vendor/github.com/matryer/somerepo/code.go b/pkg/moq/testpackages/vendoring/vendor/github.com/matryer/somerepo/code.go index 706bf42..d5fbd14 100644 --- a/pkg/moq/testpackages/vendoring/vendor/github.com/matryer/somerepo/code.go +++ b/pkg/moq/testpackages/vendoring/vendor/github.com/matryer/somerepo/code.go @@ -7,3 +7,7 @@ type SomeType struct { // Truth indicates whether true is true or not. Computers. Truth bool } + +type SomeService interface { + Get() SomeType +}