github.com/GetStream/moq@v0.0.0-20181113105103-b721cd3f6524/pkg/moq/template.go (about) 1 package moq 2 3 // moqImports are the imports all moq files get. 4 var moqImports = []string{} 5 6 // moqTemplate is the template for mocked code. 7 var moqTemplate = `// Code generated by moq; DO NOT EDIT. 8 // github.com/matryer/moq 9 10 package {{.PackageName}} 11 12 import ( 13 {{- range .Imports }} 14 "{{.}}" 15 {{- end }} 16 ) 17 18 {{ range $i, $obj := .Objects -}} 19 var ( 20 {{- range .Methods }} 21 lock{{$obj.InterfaceName}}Mock{{.Name}} sync.RWMutex 22 {{- end }} 23 ) 24 25 // {{.InterfaceName}}Mock is a mock implementation of {{.MockedInterface}}. 26 // 27 // func TestSomethingThatUses{{.InterfaceName}}(t *testing.T) { 28 // 29 // // make and configure a mocked {{.InterfaceName}} 30 // mocked{{.InterfaceName}} := &{{.InterfaceName}}Mock{ {{ range .Methods }} 31 // {{.Name}}Func: func({{ .Arglist }}) {{.ReturnArglist}} { 32 // panic("mock out the {{.Name}} method") 33 // },{{- end }} 34 // } 35 // 36 // // use mocked{{.InterfaceName}} in code that requires {{.InterfaceName}} 37 // // and then make assertions. 38 // 39 // } 40 type {{.InterfaceName}}Mock struct { 41 {{- range .Methods }} 42 // {{.Name}}Func mocks the {{.Name}} method. 43 {{.Name}}Func func({{ .Arglist }}) {{.ReturnArglist}} 44 {{ end }} 45 // calls tracks calls to the methods. 46 calls struct { 47 {{- range .Methods }} 48 // {{ .Name }} holds details about calls to the {{.Name}} method. 49 {{ .Name }} []struct { 50 {{- range .Params }} 51 // {{ .Name | Exported }} is the {{ .Name }} argument value. 52 {{ .Name | Exported }} {{ .Type }} 53 {{- end }} 54 } 55 {{- end }} 56 } 57 } 58 {{ range .Methods }} 59 // {{.Name}} calls {{.Name}}Func. 60 func (mock *{{$obj.InterfaceName}}Mock) {{.Name}}({{.Arglist}}) {{.ReturnArglist}} { 61 if mock.{{.Name}}Func == nil { 62 panic("{{$obj.InterfaceName}}Mock.{{.Name}}Func: method is nil but {{$obj.InterfaceName}}.{{.Name}} was just called") 63 } 64 callInfo := struct { 65 {{- range .Params }} 66 {{ .Name | Exported }} {{ .Type }} 67 {{- end }} 68 }{ 69 {{- range .Params }} 70 {{ .Name | Exported }}: {{ .Name }}, 71 {{- end }} 72 } 73 lock{{$obj.InterfaceName}}Mock{{.Name}}.Lock() 74 mock.calls.{{.Name}} = append(mock.calls.{{.Name}}, callInfo) 75 lock{{$obj.InterfaceName}}Mock{{.Name}}.Unlock() 76 {{- if .ReturnArglist }} 77 return mock.{{.Name}}Func({{.ArgCallList}}) 78 {{- else }} 79 mock.{{.Name}}Func({{.ArgCallList}}) 80 {{- end }} 81 } 82 83 // {{.Name}}Calls gets all the calls that were made to {{.Name}}. 84 // Check the length with: 85 // len(mocked{{$obj.InterfaceName}}.{{.Name}}Calls()) 86 func (mock *{{$obj.InterfaceName}}Mock) {{.Name}}Calls() []struct { 87 {{- range .Params }} 88 {{ .Name | Exported }} {{ .Type }} 89 {{- end }} 90 } { 91 var calls []struct { 92 {{- range .Params }} 93 {{ .Name | Exported }} {{ .Type }} 94 {{- end }} 95 } 96 lock{{$obj.InterfaceName}}Mock{{.Name}}.RLock() 97 calls = mock.calls.{{.Name}} 98 lock{{$obj.InterfaceName}}Mock{{.Name}}.RUnlock() 99 return calls 100 } 101 {{ end -}} 102 {{ end -}}`