diff --git a/fixtures/fixturesfakes/fake_inline_struct_params.go b/fixtures/fixturesfakes/fake_inline_struct_params.go new file mode 100644 index 0000000..dd383df --- /dev/null +++ b/fixtures/fixturesfakes/fake_inline_struct_params.go @@ -0,0 +1,151 @@ +// Code generated by counterfeiter. DO NOT EDIT. +package fixturesfakes + +import ( + "context" + "net/http" + "sync" + "time" + + "github.com/maxbrunsfeld/counterfeiter/v6/fixtures" +) + +type FakeInlineStructParams struct { + DoSomethingStub func(context.Context, struct { + SomeString string + SomeStringPointer *string + SomeTime time.Time + SomeTimePointer *time.Time + HTTPRequest http.Request + }) error + doSomethingMutex sync.RWMutex + doSomethingArgsForCall []struct { + arg1 context.Context + arg2 struct { + SomeString string + SomeStringPointer *string + SomeTime time.Time + SomeTimePointer *time.Time + HTTPRequest http.Request + } + } + doSomethingReturns struct { + result1 error + } + doSomethingReturnsOnCall map[int]struct { + result1 error + } + invocations map[string][][]interface{} + invocationsMutex sync.RWMutex +} + +func (fake *FakeInlineStructParams) DoSomething(arg1 context.Context, arg2 struct { + SomeString string + SomeStringPointer *string + SomeTime time.Time + SomeTimePointer *time.Time + HTTPRequest http.Request +}) error { + fake.doSomethingMutex.Lock() + ret, specificReturn := fake.doSomethingReturnsOnCall[len(fake.doSomethingArgsForCall)] + fake.doSomethingArgsForCall = append(fake.doSomethingArgsForCall, struct { + arg1 context.Context + arg2 struct { + SomeString string + SomeStringPointer *string + SomeTime time.Time + SomeTimePointer *time.Time + HTTPRequest http.Request + } + }{arg1, arg2}) + fake.recordInvocation("DoSomething", []interface{}{arg1, arg2}) + fake.doSomethingMutex.Unlock() + if fake.DoSomethingStub != nil { + return fake.DoSomethingStub(arg1, arg2) + } + if specificReturn { + return ret.result1 + } + fakeReturns := fake.doSomethingReturns + return fakeReturns.result1 +} + +func (fake *FakeInlineStructParams) DoSomethingCallCount() int { + fake.doSomethingMutex.RLock() + defer fake.doSomethingMutex.RUnlock() + return len(fake.doSomethingArgsForCall) +} + +func (fake *FakeInlineStructParams) DoSomethingCalls(stub func(context.Context, struct { + SomeString string + SomeStringPointer *string + SomeTime time.Time + SomeTimePointer *time.Time + HTTPRequest http.Request +}) error) { + fake.doSomethingMutex.Lock() + defer fake.doSomethingMutex.Unlock() + fake.DoSomethingStub = stub +} + +func (fake *FakeInlineStructParams) DoSomethingArgsForCall(i int) (context.Context, struct { + SomeString string + SomeStringPointer *string + SomeTime time.Time + SomeTimePointer *time.Time + HTTPRequest http.Request +}) { + fake.doSomethingMutex.RLock() + defer fake.doSomethingMutex.RUnlock() + argsForCall := fake.doSomethingArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *FakeInlineStructParams) DoSomethingReturns(result1 error) { + fake.doSomethingMutex.Lock() + defer fake.doSomethingMutex.Unlock() + fake.DoSomethingStub = nil + fake.doSomethingReturns = struct { + result1 error + }{result1} +} + +func (fake *FakeInlineStructParams) DoSomethingReturnsOnCall(i int, result1 error) { + fake.doSomethingMutex.Lock() + defer fake.doSomethingMutex.Unlock() + fake.DoSomethingStub = nil + if fake.doSomethingReturnsOnCall == nil { + fake.doSomethingReturnsOnCall = make(map[int]struct { + result1 error + }) + } + fake.doSomethingReturnsOnCall[i] = struct { + result1 error + }{result1} +} + +func (fake *FakeInlineStructParams) Invocations() map[string][][]interface{} { + fake.invocationsMutex.RLock() + defer fake.invocationsMutex.RUnlock() + fake.doSomethingMutex.RLock() + defer fake.doSomethingMutex.RUnlock() + copiedInvocations := map[string][][]interface{}{} + for key, value := range fake.invocations { + copiedInvocations[key] = value + } + return copiedInvocations +} + +func (fake *FakeInlineStructParams) recordInvocation(key string, args []interface{}) { + fake.invocationsMutex.Lock() + defer fake.invocationsMutex.Unlock() + if fake.invocations == nil { + fake.invocations = map[string][][]interface{}{} + } + if fake.invocations[key] == nil { + fake.invocations[key] = [][]interface{}{} + } + fake.invocations[key] = append(fake.invocations[key], args) +} + +var _ fixtures.InlineStructParams = new(FakeInlineStructParams) diff --git a/fixtures/inline_struct_params.go b/fixtures/inline_struct_params.go new file mode 100644 index 0000000..395a8b7 --- /dev/null +++ b/fixtures/inline_struct_params.go @@ -0,0 +1,18 @@ +package fixtures + +import ( + "context" + "net/http" + "time" +) + +//counterfeiter:generate . InlineStructParams +type InlineStructParams interface { + DoSomething(ctx context.Context, body struct { + SomeString string + SomeStringPointer *string + SomeTime time.Time + SomeTimePointer *time.Time + HTTPRequest http.Request + }) error +} diff --git a/generator/loader.go b/generator/loader.go index 6d17dd3..325463f 100644 --- a/generator/loader.go +++ b/generator/loader.go @@ -131,6 +131,10 @@ func (f *Fake) addImportsFor(typ types.Type) { return case *types.Signature: f.addTypesForMethod(t) + case *types.Struct: + for i := 0; i < t.NumFields(); i++ { + f.addImportsFor(t.Field(i).Type()) + } default: log.Printf("!!! WARNING: Missing case for type %s\n", reflect.TypeOf(typ).String()) } diff --git a/integration/roundtrip_test.go b/integration/roundtrip_test.go index 1135f36..847dbfe 100644 --- a/integration/roundtrip_test.go +++ b/integration/roundtrip_test.go @@ -192,6 +192,7 @@ func runTests(useGopath bool, t *testing.T, when spec.G, it spec.S) { t("ImportsGoHyphenPackage", "imports_go_hyphen_package.go", "", filepath.Join("go-hyphenpackage", "fixture.go")) t("FirstInterface", "multiple_interfaces.go", "") t("SecondInterface", "multiple_interfaces.go", "") + t("InlineStructParams", "inline_struct_params.go", "") t("RequestFactory", "request_factory.go", "") t("ReusesArgTypes", "reuses_arg_types.go", "") t("SomethingWithForeignInterface", "something_remote.go", "", filepath.Join("aliased_package", "in_aliased_package.go"))