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