Skip to content

Commit b934296

Browse files
jfragosoperezsonalys
authored andcommitted
fix(generator): support nil returns when using interface typed params
As referenced on #513 Types using generic typed interface params, should allow nil values on return
1 parent dd52a5a commit b934296

11 files changed

+153
-10
lines changed

.mockery.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,11 @@ packages:
7070
filename: "mock_{{.InterfaceName}}_test.go"
7171
inpackage: True
7272
keeptree: False
73+
github.com/vektra/mockery/v2/pkg/fixtures/iface_typed_param:
74+
config:
75+
all: True
76+
dir: "{{.InterfaceDir}}"
77+
mockname: "{{.InterfaceName}}"
78+
outpkg: "{{.PackageName}}_test"
79+
filename: "{{.InterfaceNameSnake}}_mock_test.go"
80+
keeptree: True

mocks/github.com/vektra/mockery/v2/pkg/fixtures/EmbeddedGet.go

+3-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mocks/github.com/vektra/mockery/v2/pkg/fixtures/GetGeneric.go

+3-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mocks/github.com/vektra/mockery/v2/pkg/fixtures/ReplaceGeneric.go

+9-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mocks/github.com/vektra/mockery/v2/pkg/fixtures/ReplaceGenericSelf.go

+3-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mocks/github.com/vektra/mockery/v2/pkg/fixtures/RequesterGenerics.go

+6-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mocks/github.com/vektra/mockery/v2/pkg/fixtures/requesterUnexported.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package iface_typed_param
2+
3+
import "io"
4+
5+
type GetterIfaceTypedParam[T io.Reader] interface {
6+
Get() T
7+
}

pkg/fixtures/iface_typed_param/getter_iface_typed_param_mock_test.go

+83
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package iface_typed_param_test
2+
3+
import (
4+
"bufio"
5+
"net/http"
6+
"testing"
7+
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestIfaceWithIfaceTypedParamReturnValues(t *testing.T) {
12+
t.Parallel()
13+
14+
tests := []struct {
15+
name string
16+
returnVal *bufio.Reader
17+
}{
18+
{"nil return val", nil},
19+
{"returning val", bufio.NewReader(http.NoBody)},
20+
}
21+
for _, test := range tests {
22+
t.Run(test.name, func(st *testing.T) {
23+
m := NewGetterIfaceTypedParam[*bufio.Reader](st)
24+
m.EXPECT().Get().Return(test.returnVal)
25+
26+
assert.Equal(st, test.returnVal, m.Get())
27+
})
28+
}
29+
}

pkg/generator.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,7 @@ func isNillable(typ types.Type) bool {
665665
switch t := typ.(type) {
666666
case *types.Pointer, *types.Array, *types.Map, *types.Interface, *types.Signature, *types.Chan, *types.Slice:
667667
return true
668-
case *types.Named, *types.Alias:
668+
case *types.Named, *types.Alias, *types.TypeParam:
669669
return isNillable(t.Underlying())
670670
}
671671
return false

0 commit comments

Comments
 (0)