1package generator 2 3import ( 4 "strings" 5 "text/template" 6) 7 8var interfaceFuncs template.FuncMap = template.FuncMap{ 9 "ToLower": strings.ToLower, 10 "UnExport": unexport, 11 "Replace": strings.Replace, 12} 13 14const interfaceTemplate string = `// Code generated by counterfeiter. DO NOT EDIT. 15package {{.DestinationPackage}} 16 17import ( 18 {{- range .Imports}} 19 {{.Alias}} "{{.Path}}" 20 {{- end}} 21) 22 23type {{.Name}} struct { 24 {{- range .Methods}} 25 {{.Name}}Stub func({{.Params.AsArgs}}) {{.Returns.AsReturnSignature}} 26 {{UnExport .Name}}Mutex sync.RWMutex 27 {{UnExport .Name}}ArgsForCall []struct{ 28 {{- range .Params}} 29 {{.Name}} {{if .IsVariadic}}{{Replace .Type "..." "[]" -1}}{{else}}{{.Type}}{{end}} 30 {{- end}} 31 } 32 {{- if .Returns.HasLength}} 33 {{UnExport .Name}}Returns struct{ 34 {{- range .Returns}} 35 {{UnExport .Name}} {{.Type}} 36 {{- end}} 37 } 38 {{UnExport .Name}}ReturnsOnCall map[int]struct{ 39 {{- range .Returns}} 40 {{UnExport .Name}} {{.Type}} 41 {{- end}} 42 } 43 {{- end}} 44 {{- end}} 45 invocations map[string][][]interface{} 46 invocationsMutex sync.RWMutex 47} 48 49{{range .Methods -}} 50func (fake *{{.FakeName}}) {{.Name}}({{.Params.AsNamedArgsWithTypes}}) {{.Returns.AsReturnSignature}} { 51 {{- range .Params.Slices}} 52 var {{UnExport .Name}}Copy {{.Type}} 53 if {{UnExport .Name}} != nil { 54 {{UnExport .Name}}Copy = make({{.Type}}, len({{UnExport .Name}})) 55 copy({{UnExport .Name}}Copy, {{UnExport .Name}}) 56 } 57 {{- end}} 58 fake.{{UnExport .Name}}Mutex.Lock() 59 {{- if .Returns.HasLength}} 60 ret, specificReturn := fake.{{UnExport .Name}}ReturnsOnCall[len(fake.{{UnExport .Name}}ArgsForCall)] 61 {{- end}} 62 fake.{{UnExport .Name}}ArgsForCall = append(fake.{{UnExport .Name}}ArgsForCall, struct{ 63 {{- range .Params}} 64 {{.Name}} {{if .IsVariadic}}{{Replace .Type "..." "[]" -1}}{{else}}{{.Type}}{{end}} 65 {{- end}} 66 }{ {{- .Params.AsNamedArgs -}} }) 67 fake.recordInvocation("{{.Name}}", []interface{}{ {{- if .Params.HasLength}}{{.Params.AsNamedArgs}}{{end -}} }) 68 fake.{{UnExport .Name}}Mutex.Unlock() 69 if fake.{{.Name}}Stub != nil { 70 {{- if .Returns.HasLength}} 71 return fake.{{.Name}}Stub({{.Params.AsNamedArgsForInvocation}}){{else}}fake.{{.Name}}Stub({{.Params.AsNamedArgsForInvocation}}) 72 {{- end}} 73 } 74 {{- if .Returns.HasLength}} 75 if specificReturn { 76 return {{.Returns.WithPrefix "ret."}} 77 } 78 fakeReturns := fake.{{UnExport .Name}}Returns 79 return {{.Returns.WithPrefix "fakeReturns."}} 80 {{- end}} 81} 82 83func (fake *{{.FakeName}}) {{.Name}}CallCount() int { 84 fake.{{UnExport .Name}}Mutex.RLock() 85 defer fake.{{UnExport .Name}}Mutex.RUnlock() 86 return len(fake.{{UnExport .Name}}ArgsForCall) 87} 88 89{{if .Params.HasLength -}} 90func (fake *{{.FakeName}}) {{.Name}}ArgsForCall(i int) {{.Params.AsReturnSignature}} { 91 fake.{{UnExport .Name}}Mutex.RLock() 92 defer fake.{{UnExport .Name}}Mutex.RUnlock() 93 argsForCall := fake.{{UnExport .Name}}ArgsForCall[i] 94 return {{.Params.WithPrefix "argsForCall."}} 95} 96{{- end}} 97 98{{if .Returns.HasLength -}} 99func (fake *{{.FakeName}}) {{.Name}}Returns({{.Returns.AsNamedArgsWithTypes}}) { 100 fake.{{.Name}}Stub = nil 101 fake.{{UnExport .Name}}Returns = struct { 102 {{- range .Returns}} 103 {{UnExport .Name}} {{.Type}} 104 {{- end}} 105 }{ {{- .Returns.AsNamedArgs -}} } 106} 107 108func (fake *{{.FakeName}}) {{.Name}}ReturnsOnCall(i int, {{.Returns.AsNamedArgsWithTypes}}) { 109 fake.{{.Name}}Stub = nil 110 if fake.{{UnExport .Name}}ReturnsOnCall == nil { 111 fake.{{UnExport .Name}}ReturnsOnCall = make(map[int]struct { 112 {{- range .Returns}} 113 {{UnExport .Name}} {{.Type}} 114 {{- end}} 115 }) 116 } 117 fake.{{UnExport .Name}}ReturnsOnCall[i] = struct { 118 {{- range .Returns}} 119 {{UnExport .Name}} {{.Type}} 120 {{- end}} 121 }{ {{- .Returns.AsNamedArgs -}} } 122} 123 124{{end -}} 125{{end}} 126 127func (fake *{{.Name}}) Invocations() map[string][][]interface{} { 128 fake.invocationsMutex.RLock() 129 defer fake.invocationsMutex.RUnlock() 130 {{- range .Methods}} 131 fake.{{UnExport .Name}}Mutex.RLock() 132 defer fake.{{UnExport .Name}}Mutex.RUnlock() 133 {{- end}} 134 copiedInvocations := map[string][][]interface{}{} 135 for key, value := range fake.invocations { 136 copiedInvocations[key] = value 137 } 138 return copiedInvocations 139} 140 141func (fake *{{.Name}}) recordInvocation(key string, args []interface{}) { 142 fake.invocationsMutex.Lock() 143 defer fake.invocationsMutex.Unlock() 144 if fake.invocations == nil { 145 fake.invocations = map[string][][]interface{}{} 146 } 147 if fake.invocations[key] == nil { 148 fake.invocations[key] = [][]interface{}{} 149 } 150 fake.invocations[key] = append(fake.invocations[key], args) 151} 152 153var _ {{.TargetAlias}}.{{.TargetName}} = new({{.Name}}) 154` 155