diff --git a/mockgen/internal/tests/typed/source/mock_external_test.go b/mockgen/internal/tests/typed/source/mock_external_test.go index 0f92d35..305e5ff 100644 --- a/mockgen/internal/tests/typed/source/mock_external_test.go +++ b/mockgen/internal/tests/typed/source/mock_external_test.go @@ -1,6 +1,10 @@ // Code generated by MockGen. DO NOT EDIT. // Source: external.go - +// +// Generated by this command: +// +// mockgen --source=external.go --destination=source/mock_external_test.go --package source -typed +// // Package source is a generated GoMock package. package source @@ -74,6 +78,12 @@ func (c *ExternalConstraintEightCall[I, F]) DoAndReturn(f func(F) other.Two[I, F return c } +// Times rewrite *gomock.Call.Times +func (c *ExternalConstraintEightCall[I, F]) Times(n int) *ExternalConstraintEightCall[I, F] { + c.Call = c.Call.Times(n) + return c +} + // Five mocks base method. func (m *MockExternalConstraint[I, F]) Five(arg0 I) typed.Baz[F] { m.ctrl.T.Helper() @@ -112,6 +122,12 @@ func (c *ExternalConstraintFiveCall[I, F]) DoAndReturn(f func(I) typed.Baz[F]) * return c } +// Times rewrite *gomock.Call.Times +func (c *ExternalConstraintFiveCall[I, F]) Times(n int) *ExternalConstraintFiveCall[I, F] { + c.Call = c.Call.Times(n) + return c +} + // Four mocks base method. func (m *MockExternalConstraint[I, F]) Four(arg0 I) typed.Foo[I, F] { m.ctrl.T.Helper() @@ -150,6 +166,12 @@ func (c *ExternalConstraintFourCall[I, F]) DoAndReturn(f func(I) typed.Foo[I, F] return c } +// Times rewrite *gomock.Call.Times +func (c *ExternalConstraintFourCall[I, F]) Times(n int) *ExternalConstraintFourCall[I, F] { + c.Call = c.Call.Times(n) + return c +} + // Nine mocks base method. func (m *MockExternalConstraint[I, F]) Nine(arg0 typed.Iface[I]) { m.ctrl.T.Helper() @@ -186,6 +208,12 @@ func (c *ExternalConstraintNineCall[I, F]) DoAndReturn(f func(typed.Iface[I])) * return c } +// Times rewrite *gomock.Call.Times +func (c *ExternalConstraintNineCall[I, F]) Times(n int) *ExternalConstraintNineCall[I, F] { + c.Call = c.Call.Times(n) + return c +} + // One mocks base method. func (m *MockExternalConstraint[I, F]) One(arg0 string) string { m.ctrl.T.Helper() @@ -224,6 +252,12 @@ func (c *ExternalConstraintOneCall[I, F]) DoAndReturn(f func(string) string) *Ex return c } +// Times rewrite *gomock.Call.Times +func (c *ExternalConstraintOneCall[I, F]) Times(n int) *ExternalConstraintOneCall[I, F] { + c.Call = c.Call.Times(n) + return c +} + // Seven mocks base method. func (m *MockExternalConstraint[I, F]) Seven(arg0 I) other.One[I] { m.ctrl.T.Helper() @@ -262,6 +296,12 @@ func (c *ExternalConstraintSevenCall[I, F]) DoAndReturn(f func(I) other.One[I]) return c } +// Times rewrite *gomock.Call.Times +func (c *ExternalConstraintSevenCall[I, F]) Times(n int) *ExternalConstraintSevenCall[I, F] { + c.Call = c.Call.Times(n) + return c +} + // Six mocks base method. func (m *MockExternalConstraint[I, F]) Six(arg0 I) *typed.Baz[F] { m.ctrl.T.Helper() @@ -300,6 +340,12 @@ func (c *ExternalConstraintSixCall[I, F]) DoAndReturn(f func(I) *typed.Baz[F]) * return c } +// Times rewrite *gomock.Call.Times +func (c *ExternalConstraintSixCall[I, F]) Times(n int) *ExternalConstraintSixCall[I, F] { + c.Call = c.Call.Times(n) + return c +} + // Ten mocks base method. func (m *MockExternalConstraint[I, F]) Ten(arg0 *I) { m.ctrl.T.Helper() @@ -336,6 +382,12 @@ func (c *ExternalConstraintTenCall[I, F]) DoAndReturn(f func(*I)) *ExternalConst return c } +// Times rewrite *gomock.Call.Times +func (c *ExternalConstraintTenCall[I, F]) Times(n int) *ExternalConstraintTenCall[I, F] { + c.Call = c.Call.Times(n) + return c +} + // Three mocks base method. func (m *MockExternalConstraint[I, F]) Three(arg0 I) F { m.ctrl.T.Helper() @@ -374,6 +426,12 @@ func (c *ExternalConstraintThreeCall[I, F]) DoAndReturn(f func(I) F) *ExternalCo return c } +// Times rewrite *gomock.Call.Times +func (c *ExternalConstraintThreeCall[I, F]) Times(n int) *ExternalConstraintThreeCall[I, F] { + c.Call = c.Call.Times(n) + return c +} + // Two mocks base method. func (m *MockExternalConstraint[I, F]) Two(arg0 I) string { m.ctrl.T.Helper() @@ -411,3 +469,9 @@ func (c *ExternalConstraintTwoCall[I, F]) DoAndReturn(f func(I) string) *Externa c.Call = c.Call.DoAndReturn(f) return c } + +// Times rewrite *gomock.Call.Times +func (c *ExternalConstraintTwoCall[I, F]) Times(n int) *ExternalConstraintTwoCall[I, F] { + c.Call = c.Call.Times(n) + return c +} diff --git a/mockgen/internal/tests/typed/source/mock_generics_test.go b/mockgen/internal/tests/typed/source/mock_generics_test.go index 5bfbccc..5b68629 100644 --- a/mockgen/internal/tests/typed/source/mock_generics_test.go +++ b/mockgen/internal/tests/typed/source/mock_generics_test.go @@ -1,6 +1,10 @@ // Code generated by MockGen. DO NOT EDIT. // Source: generics.go - +// +// Generated by this command: +// +// mockgen --source=generics.go --destination=source/mock_generics_test.go --package source -typed +// // Package source is a generated GoMock package. package source @@ -73,6 +77,12 @@ func (c *BarEightCall[T, R]) DoAndReturn(f func(T) other.Two[T, R]) *BarEightCal return c } +// Times rewrite *gomock.Call.Times +func (c *BarEightCall[T, R]) Times(n int) *BarEightCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Eighteen mocks base method. func (m *MockBar[T, R]) Eighteen() (typed.Iface[*other.Five], error) { m.ctrl.T.Helper() @@ -112,6 +122,12 @@ func (c *BarEighteenCall[T, R]) DoAndReturn(f func() (typed.Iface[*other.Five], return c } +// Times rewrite *gomock.Call.Times +func (c *BarEighteenCall[T, R]) Times(n int) *BarEighteenCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Eleven mocks base method. func (m *MockBar[T, R]) Eleven() (*other.One[T], error) { m.ctrl.T.Helper() @@ -151,6 +167,12 @@ func (c *BarElevenCall[T, R]) DoAndReturn(f func() (*other.One[T], error)) *BarE return c } +// Times rewrite *gomock.Call.Times +func (c *BarElevenCall[T, R]) Times(n int) *BarElevenCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Fifteen mocks base method. func (m *MockBar[T, R]) Fifteen() (typed.Iface[typed.StructType], error) { m.ctrl.T.Helper() @@ -190,6 +212,12 @@ func (c *BarFifteenCall[T, R]) DoAndReturn(f func() (typed.Iface[typed.StructTyp return c } +// Times rewrite *gomock.Call.Times +func (c *BarFifteenCall[T, R]) Times(n int) *BarFifteenCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Five mocks base method. func (m *MockBar[T, R]) Five(arg0 T) typed.Baz[T] { m.ctrl.T.Helper() @@ -228,6 +256,12 @@ func (c *BarFiveCall[T, R]) DoAndReturn(f func(T) typed.Baz[T]) *BarFiveCall[T, return c } +// Times rewrite *gomock.Call.Times +func (c *BarFiveCall[T, R]) Times(n int) *BarFiveCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Four mocks base method. func (m *MockBar[T, R]) Four(arg0 T) typed.Foo[T, R] { m.ctrl.T.Helper() @@ -266,6 +300,12 @@ func (c *BarFourCall[T, R]) DoAndReturn(f func(T) typed.Foo[T, R]) *BarFourCall[ return c } +// Times rewrite *gomock.Call.Times +func (c *BarFourCall[T, R]) Times(n int) *BarFourCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Fourteen mocks base method. func (m *MockBar[T, R]) Fourteen() (*typed.Foo[typed.StructType, typed.StructType2], error) { m.ctrl.T.Helper() @@ -305,6 +345,12 @@ func (c *BarFourteenCall[T, R]) DoAndReturn(f func() (*typed.Foo[typed.StructTyp return c } +// Times rewrite *gomock.Call.Times +func (c *BarFourteenCall[T, R]) Times(n int) *BarFourteenCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Nine mocks base method. func (m *MockBar[T, R]) Nine(arg0 typed.Iface[T]) { m.ctrl.T.Helper() @@ -341,6 +387,12 @@ func (c *BarNineCall[T, R]) DoAndReturn(f func(typed.Iface[T])) *BarNineCall[T, return c } +// Times rewrite *gomock.Call.Times +func (c *BarNineCall[T, R]) Times(n int) *BarNineCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Nineteen mocks base method. func (m *MockBar[T, R]) Nineteen() typed.AliasType { m.ctrl.T.Helper() @@ -379,6 +431,12 @@ func (c *BarNineteenCall[T, R]) DoAndReturn(f func() typed.AliasType) *BarNinete return c } +// Times rewrite *gomock.Call.Times +func (c *BarNineteenCall[T, R]) Times(n int) *BarNineteenCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // One mocks base method. func (m *MockBar[T, R]) One(arg0 string) string { m.ctrl.T.Helper() @@ -417,6 +475,12 @@ func (c *BarOneCall[T, R]) DoAndReturn(f func(string) string) *BarOneCall[T, R] return c } +// Times rewrite *gomock.Call.Times +func (c *BarOneCall[T, R]) Times(n int) *BarOneCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Seven mocks base method. func (m *MockBar[T, R]) Seven(arg0 T) other.One[T] { m.ctrl.T.Helper() @@ -455,6 +519,12 @@ func (c *BarSevenCall[T, R]) DoAndReturn(f func(T) other.One[T]) *BarSevenCall[T return c } +// Times rewrite *gomock.Call.Times +func (c *BarSevenCall[T, R]) Times(n int) *BarSevenCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Seventeen mocks base method. func (m *MockBar[T, R]) Seventeen() (*typed.Foo[other.Three, other.Four], error) { m.ctrl.T.Helper() @@ -494,6 +564,12 @@ func (c *BarSeventeenCall[T, R]) DoAndReturn(f func() (*typed.Foo[other.Three, o return c } +// Times rewrite *gomock.Call.Times +func (c *BarSeventeenCall[T, R]) Times(n int) *BarSeventeenCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Six mocks base method. func (m *MockBar[T, R]) Six(arg0 T) *typed.Baz[T] { m.ctrl.T.Helper() @@ -532,6 +608,12 @@ func (c *BarSixCall[T, R]) DoAndReturn(f func(T) *typed.Baz[T]) *BarSixCall[T, R return c } +// Times rewrite *gomock.Call.Times +func (c *BarSixCall[T, R]) Times(n int) *BarSixCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Sixteen mocks base method. func (m *MockBar[T, R]) Sixteen() (typed.Baz[other.Three], error) { m.ctrl.T.Helper() @@ -571,6 +653,12 @@ func (c *BarSixteenCall[T, R]) DoAndReturn(f func() (typed.Baz[other.Three], err return c } +// Times rewrite *gomock.Call.Times +func (c *BarSixteenCall[T, R]) Times(n int) *BarSixteenCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Ten mocks base method. func (m *MockBar[T, R]) Ten(arg0 *T) { m.ctrl.T.Helper() @@ -607,6 +695,12 @@ func (c *BarTenCall[T, R]) DoAndReturn(f func(*T)) *BarTenCall[T, R] { return c } +// Times rewrite *gomock.Call.Times +func (c *BarTenCall[T, R]) Times(n int) *BarTenCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Thirteen mocks base method. func (m *MockBar[T, R]) Thirteen() (typed.Baz[typed.StructType], error) { m.ctrl.T.Helper() @@ -646,6 +740,12 @@ func (c *BarThirteenCall[T, R]) DoAndReturn(f func() (typed.Baz[typed.StructType return c } +// Times rewrite *gomock.Call.Times +func (c *BarThirteenCall[T, R]) Times(n int) *BarThirteenCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Three mocks base method. func (m *MockBar[T, R]) Three(arg0 T) R { m.ctrl.T.Helper() @@ -684,6 +784,12 @@ func (c *BarThreeCall[T, R]) DoAndReturn(f func(T) R) *BarThreeCall[T, R] { return c } +// Times rewrite *gomock.Call.Times +func (c *BarThreeCall[T, R]) Times(n int) *BarThreeCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Twelve mocks base method. func (m *MockBar[T, R]) Twelve() (*other.Two[T, R], error) { m.ctrl.T.Helper() @@ -723,6 +829,12 @@ func (c *BarTwelveCall[T, R]) DoAndReturn(f func() (*other.Two[T, R], error)) *B return c } +// Times rewrite *gomock.Call.Times +func (c *BarTwelveCall[T, R]) Times(n int) *BarTwelveCall[T, R] { + c.Call = c.Call.Times(n) + return c +} + // Two mocks base method. func (m *MockBar[T, R]) Two(arg0 T) string { m.ctrl.T.Helper() @@ -761,25 +873,8 @@ func (c *BarTwoCall[T, R]) DoAndReturn(f func(T) string) *BarTwoCall[T, R] { return c } -// MockIface is a mock of Iface interface. -type MockIface[T any] struct { - ctrl *gomock.Controller - recorder *MockIfaceMockRecorder[T] -} - -// MockIfaceMockRecorder is the mock recorder for MockIface. -type MockIfaceMockRecorder[T any] struct { - mock *MockIface[T] -} - -// NewMockIface creates a new mock instance. -func NewMockIface[T any](ctrl *gomock.Controller) *MockIface[T] { - mock := &MockIface[T]{ctrl: ctrl} - mock.recorder = &MockIfaceMockRecorder[T]{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockIface[T]) EXPECT() *MockIfaceMockRecorder[T] { - return m.recorder +// Times rewrite *gomock.Call.Times +func (c *BarTwoCall[T, R]) Times(n int) *BarTwoCall[T, R] { + c.Call = c.Call.Times(n) + return c } diff --git a/mockgen/mockgen.go b/mockgen/mockgen.go index 97c84be..8d2621c 100644 --- a/mockgen/mockgen.go +++ b/mockgen/mockgen.go @@ -486,7 +486,7 @@ func (g *generator) GenerateMockMethods(mockType string, intf *model.Interface, _ = g.GenerateMockRecorderMethod(intf, mockType, m, shortTp, typed) if typed { g.p("") - _ = g.GenerateMockReturnCallMethod(intf, m, pkgOverride, longTp, shortTp) + _ = g.GenerateTypedCallMethods(intf, m, pkgOverride, longTp, shortTp) } } } @@ -635,7 +635,8 @@ func (g *generator) GenerateMockRecorderMethod(intf *model.Interface, mockType s return nil } -func (g *generator) GenerateMockReturnCallMethod(intf *model.Interface, m *model.Method, pkgOverride, longTp, shortTp string) error { +// GenerateTypedCallMethods generates typed methods by wrapping gomock.Call +func (g *generator) GenerateTypedCallMethods(intf *model.Interface, m *model.Method, pkgOverride, longTp, shortTp string) error { argNames := g.getArgNames(m, true /* in */) retNames := g.getArgNames(m, false /* out */) argTypes := g.getArgTypes(m, pkgOverride, true /* in */) @@ -694,6 +695,14 @@ func (g *generator) GenerateMockReturnCallMethod(intf *model.Interface, m *model g.p("return %s", idRecv) g.out() g.p("}") + + g.p("// Times rewrite *gomock.Call.Times") + g.p("func (%s *%sCall%s) Times(n int) *%sCall%s {", idRecv, recvStructName, shortTp, recvStructName, shortTp) + g.in() + g.p(`%s.Call = %v.Call.Times(n)`, idRecv, idRecv) + g.p("return %s", idRecv) + g.out() + g.p("}") return nil }