| //go:generate mockgen -destination mock_user/mock_user.go github.com/golang/mock/sample Index,Embed,Embedded |
| |
| // An example package with an interface. |
| package user |
| |
| // Random bunch of imports to test mockgen. |
| import "io" |
| import ( |
| btz "bytes" |
| "hash" |
| "log" |
| "net" |
| "net/http" |
| |
| // Two imports with the same base name. |
| t1 "html/template" |
| t2 "text/template" |
| ) |
| |
| // Dependencies outside the standard library. |
| import ( |
| "github.com/golang/mock/sample/imp1" |
| renamed2 "github.com/golang/mock/sample/imp2" |
| . "github.com/golang/mock/sample/imp3" |
| "github.com/golang/mock/sample/imp4" // calls itself "imp_four" |
| ) |
| |
| // A bizarre interface to test corner cases in mockgen. |
| // This would normally be in its own file or package, |
| // separate from the user of it (e.g. io.Reader). |
| type Index interface { |
| Get(key string) interface{} |
| GetTwo(key1, key2 string) (v1, v2 interface{}) |
| Put(key string, value interface{}) |
| |
| // Check that imports are handled correctly. |
| Summary(buf *btz.Buffer, w io.Writer) |
| Other() hash.Hash |
| Templates(a t1.CSS, b t2.FuncMap) |
| |
| // A method with an anonymous argument. |
| Anon(string) |
| |
| // Methods using foreign types outside the standard library. |
| ForeignOne(imp1.Imp1) |
| ForeignTwo(renamed2.Imp2) |
| ForeignThree(Imp3) |
| ForeignFour(imp_four.Imp4) |
| |
| // A method that returns a nillable type. |
| NillableRet() error |
| // A method that returns a non-interface type. |
| ConcreteRet() chan<- bool |
| |
| // Methods with an ellipsis argument. |
| Ellip(fmt string, args ...interface{}) |
| EllipOnly(...string) |
| |
| // A method with a pointer argument that we will set. |
| Ptr(arg *int) |
| |
| // A method with a slice argument and an array return. |
| Slice(a []int, b []byte) [3]int |
| |
| // A method with channel arguments. |
| Chan(a chan int, b chan<- hash.Hash) |
| |
| // A method with a function argument. |
| Func(f func(http.Request) (int, bool)) |
| |
| // A method with a map argument. |
| Map(a map[int]hash.Hash) |
| |
| // Methods with an unnamed empty struct argument. |
| Struct(a struct{}) // not so likely |
| StructChan(a chan struct{}) // a bit more common |
| } |
| |
| // An interface with an embedded interface. |
| type Embed interface { |
| RegularMethod() |
| Embedded |
| imp1.ForeignEmbedded |
| } |
| |
| type Embedded interface { |
| EmbeddedMethod() |
| } |
| |
| // some random use of another package that isn't needed by the interface. |
| var _ net.Addr |
| |
| // A function that we will test that uses the above interface. |
| // It takes a list of keys and values, and puts them in the index. |
| func Remember(index Index, keys []string, values []interface{}) { |
| for i, k := range keys { |
| index.Put(k, values[i]) |
| } |
| err := index.NillableRet() |
| if err != nil { |
| log.Fatalf("Woah! %v", err) |
| } |
| if len(keys) > 0 && keys[0] == "a" { |
| index.Ellip("%d", 0, 1, 1, 2, 3) |
| index.Ellip("%d", 1, 3, 6, 10, 15) |
| index.EllipOnly("arg") |
| } |
| } |
| |
| func GrabPointer(index Index) int { |
| var a int |
| index.Ptr(&a) |
| return a |
| } |