Skip to content
This repository was archived by the owner on Jun 27, 2023. It is now read-only.

Commit f5b03a2

Browse files
committed
Don't error out for variadic functions in Do/DoReturn
1 parent 4657bf9 commit f5b03a2

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

gomock/call.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,13 @@ func (c *Call) DoAndReturn(f interface{}) *Call {
115115

116116
c.addAction(func(args []interface{}) []interface{} {
117117
c.t.Helper()
118-
vArgs := make([]reflect.Value, len(args))
119118
ft := v.Type()
120-
if c.methodType.NumIn() != ft.NumIn() {
119+
if c.methodType.NumIn() != ft.NumIn() && !ft.IsVariadic() {
121120
c.t.Fatalf("wrong number of arguments in DoAndReturn func for %T.%v: got %d, want %d [%s]",
122121
c.receiver, c.method, ft.NumIn(), c.methodType.NumIn(), c.origin)
123122
return nil
124123
}
124+
vArgs := make([]reflect.Value, len(args))
125125
for i := 0; i < len(args); i++ {
126126
if args[i] != nil {
127127
vArgs[i] = reflect.ValueOf(args[i])
@@ -151,13 +151,13 @@ func (c *Call) Do(f interface{}) *Call {
151151

152152
c.addAction(func(args []interface{}) []interface{} {
153153
c.t.Helper()
154-
if c.methodType.NumIn() != v.Type().NumIn() {
154+
ft := v.Type()
155+
if c.methodType.NumIn() != ft.NumIn() && !ft.IsVariadic() {
155156
c.t.Fatalf("wrong number of arguments in Do func for %T.%v: got %d, want %d [%s]",
156-
c.receiver, c.method, v.Type().NumIn(), c.methodType.NumIn(), c.origin)
157+
c.receiver, c.method, ft.NumIn(), c.methodType.NumIn(), c.origin)
157158
return nil
158159
}
159160
vArgs := make([]reflect.Value, len(args))
160-
ft := v.Type()
161161
for i := 0; i < len(args); i++ {
162162
if args[i] != nil {
163163
vArgs[i] = reflect.ValueOf(args[i])

gomock/call_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,13 @@ func TestCall_Do_NumArgValidation(t *testing.T) {
510510
args: []interface{}{"just", "right"},
511511
wantErr: false,
512512
},
513+
{
514+
name: "variadic",
515+
methodType: reflect.TypeOf(func(one, two string) {}),
516+
doFn: func(args ...interface{}) {},
517+
args: []interface{}{"just", "right"},
518+
wantErr: false,
519+
},
513520
}
514521
for _, tt := range tests {
515522
t.Run(tt.name, func(t *testing.T) {
@@ -559,6 +566,13 @@ func TestCall_DoAndReturn_NumArgValidation(t *testing.T) {
559566
args: []interface{}{"just", "right"},
560567
wantErr: false,
561568
},
569+
{
570+
name: "variadic",
571+
methodType: reflect.TypeOf(func(one, two string) {}),
572+
doFn: func(args ...interface{}) string { return "" },
573+
args: []interface{}{"just", "right"},
574+
wantErr: false,
575+
},
562576
}
563577
for _, tt := range tests {
564578
t.Run(tt.name, func(t *testing.T) {

0 commit comments

Comments
 (0)