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 -}}`