From 9311dade2d5367d40af057dd419cc056870a9a15 Mon Sep 17 00:00:00 2001 From: Suhas Karanth Date: Sat, 21 Aug 2021 13:10:27 +0530 Subject: [PATCH] Add test for package import of type alias --- main.go | 2 +- pkg/moq/moq_test.go | 8 ++ .../typealiaspkgimport/alias/message.go | 5 ++ .../internal/message/message.go | 3 + .../typealiaspkgimport/processor.go | 7 ++ .../processor_moq.golden.go | 74 +++++++++++++++++++ 6 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 pkg/moq/testpackages/typealiaspkgimport/alias/message.go create mode 100644 pkg/moq/testpackages/typealiaspkgimport/internal/message/message.go create mode 100644 pkg/moq/testpackages/typealiaspkgimport/processor.go create mode 100644 pkg/moq/testpackages/typealiaspkgimport/processor_moq.golden.go diff --git a/main.go b/main.go index 37c3937..09fabc6 100644 --- a/main.go +++ b/main.go @@ -14,7 +14,7 @@ import ( ) // Version is the command version, injected at build time. -var Version string = "dev" +var Version = "dev" type userFlags struct { outFile string diff --git a/pkg/moq/moq_test.go b/pkg/moq/moq_test.go index e3b1a1b..322845a 100644 --- a/pkg/moq/moq_test.go +++ b/pkg/moq/moq_test.go @@ -377,6 +377,14 @@ func TestMockGolden(t *testing.T) { interfaces: []string{"Example"}, goldenFile: filepath.Join("testpackages/anonimport", "iface_moq.golden.go"), }, + { + // Tests import of package for aliased type. + // See https://github.com/matryer/moq/issues/153. + name: "TypeAliasPkgImport", + cfg: Config{SrcDir: "testpackages/typealiaspkgimport"}, + interfaces: []string{"Processor"}, + goldenFile: filepath.Join("testpackages/typealiaspkgimport", "processor_moq.golden.go"), + }, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { diff --git a/pkg/moq/testpackages/typealiaspkgimport/alias/message.go b/pkg/moq/testpackages/typealiaspkgimport/alias/message.go new file mode 100644 index 0000000..9c4ecaf --- /dev/null +++ b/pkg/moq/testpackages/typealiaspkgimport/alias/message.go @@ -0,0 +1,5 @@ +package alias + +import "github.com/matryer/moq/pkg/moq/testpackages/typealiaspkgimport/internal/message" + +type Message = message.Message diff --git a/pkg/moq/testpackages/typealiaspkgimport/internal/message/message.go b/pkg/moq/testpackages/typealiaspkgimport/internal/message/message.go new file mode 100644 index 0000000..a1c0479 --- /dev/null +++ b/pkg/moq/testpackages/typealiaspkgimport/internal/message/message.go @@ -0,0 +1,3 @@ +package message + +type Message struct{} diff --git a/pkg/moq/testpackages/typealiaspkgimport/processor.go b/pkg/moq/testpackages/typealiaspkgimport/processor.go new file mode 100644 index 0000000..005e7b0 --- /dev/null +++ b/pkg/moq/testpackages/typealiaspkgimport/processor.go @@ -0,0 +1,7 @@ +package typealiaspkgimport + +import "github.com/matryer/moq/pkg/moq/testpackages/typealiaspkgimport/alias" + +type Processor interface { + Process(msg alias.Message) error +} diff --git a/pkg/moq/testpackages/typealiaspkgimport/processor_moq.golden.go b/pkg/moq/testpackages/typealiaspkgimport/processor_moq.golden.go new file mode 100644 index 0000000..46bff92 --- /dev/null +++ b/pkg/moq/testpackages/typealiaspkgimport/processor_moq.golden.go @@ -0,0 +1,74 @@ +// Code generated by moq; DO NOT EDIT. +// github.com/matryer/moq + +package typealiaspkgimport + +import ( + "github.com/matryer/moq/pkg/moq/testpackages/typealiaspkgimport/alias" + "sync" +) + +// Ensure, that ProcessorMock does implement Processor. +// If this is not the case, regenerate this file with moq. +var _ Processor = &ProcessorMock{} + +// ProcessorMock is a mock implementation of Processor. +// +// func TestSomethingThatUsesProcessor(t *testing.T) { +// +// // make and configure a mocked Processor +// mockedProcessor := &ProcessorMock{ +// ProcessFunc: func(msg alias.Message) error { +// panic("mock out the Process method") +// }, +// } +// +// // use mockedProcessor in code that requires Processor +// // and then make assertions. +// +// } +type ProcessorMock struct { + // ProcessFunc mocks the Process method. + ProcessFunc func(msg alias.Message) error + + // calls tracks calls to the methods. + calls struct { + // Process holds details about calls to the Process method. + Process []struct { + // Msg is the msg argument value. + Msg alias.Message + } + } + lockProcess sync.RWMutex +} + +// Process calls ProcessFunc. +func (mock *ProcessorMock) Process(msg alias.Message) error { + if mock.ProcessFunc == nil { + panic("ProcessorMock.ProcessFunc: method is nil but Processor.Process was just called") + } + callInfo := struct { + Msg alias.Message + }{ + Msg: msg, + } + mock.lockProcess.Lock() + mock.calls.Process = append(mock.calls.Process, callInfo) + mock.lockProcess.Unlock() + return mock.ProcessFunc(msg) +} + +// ProcessCalls gets all the calls that were made to Process. +// Check the length with: +// len(mockedProcessor.ProcessCalls()) +func (mock *ProcessorMock) ProcessCalls() []struct { + Msg alias.Message +} { + var calls []struct { + Msg alias.Message + } + mock.lockProcess.RLock() + calls = mock.calls.Process + mock.lockProcess.RUnlock() + return calls +}