From afe87ee5d1588913f0695560724ba8da761c04a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20Soul=C3=A9?= Date: Sat, 2 Apr 2022 11:23:49 +0200 Subject: [PATCH] refactor: since go1.18 use any instead of interface{} MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maxime Soulé --- .github/workflows/ci.yml | 2 +- any.go | 6 ++++++ doc.go | 6 +++--- go.mod | 4 +++- response.go | 34 +++++++++++++++++----------------- transport.go | 20 ++++++++++---------- 6 files changed, 40 insertions(+), 32 deletions(-) create mode 100644 any.go diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ffcc831..ae36467 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,7 +31,7 @@ jobs: if: matrix.full-tests run: | curl -sL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | - sh -s -- -b $HOME/go/bin v1.45.0 + sh -s -- -b $HOME/go/bin v1.45.2 $HOME/go/bin/golangci-lint run --max-issues-per-linter 0 \ --max-same-issues 0 \ -E bidichk \ diff --git a/any.go b/any.go new file mode 100644 index 0000000..3c8f7cc --- /dev/null +++ b/any.go @@ -0,0 +1,6 @@ +//go:build !go1.18 +// +build !go1.18 + +package httpmock + +type any = interface{} diff --git a/doc.go b/doc.go index b743af0..89d54bb 100644 --- a/doc.go +++ b/doc.go @@ -32,7 +32,7 @@ Advanced Example: defer httpmock.DeactivateAndReset() // our database of articles - articles := make([]map[string]interface{}, 0) + articles := make([]map[string]any, 0) // mock to list out the articles httpmock.RegisterResponder("GET", "https://api.mybiz.com/articles", @@ -50,7 +50,7 @@ Advanced Example: func(req *http.Request) (*http.Response, error) { // Get ID from request id := httpmock.MustGetSubmatchAsUint(req, 1) // 1=first regexp submatch - return httpmock.NewJsonResponse(200, map[string]interface{}{ + return httpmock.NewJsonResponse(200, map[string]any{ "id": id, "name": "My Great Article", }) @@ -60,7 +60,7 @@ Advanced Example: // mock to add a new article httpmock.RegisterResponder("POST", "https://api.mybiz.com/articles", func(req *http.Request) (*http.Response, error) { - article := make(map[string]interface{}) + article := make(map[string]any) if err := json.NewDecoder(req.Body).Decode(&article); err != nil { return httpmock.NewStringResponse(400, ""), nil } diff --git a/go.mod b/go.mod index 398dfaf..6d1f7b8 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,7 @@ module github.com/jarcoal/httpmock -go 1.9 +go 1.18 require github.com/maxatome/go-testdeep v1.11.0 + +require github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/response.go b/response.go index f3ad48b..38895c5 100644 --- a/response.go +++ b/response.go @@ -37,7 +37,7 @@ var suggestedKey = suggestedKeyType{} // a mocked response. type Responder func(*http.Request) (*http.Response, error) -func (r Responder) times(name string, n int, fn ...func(...interface{})) Responder { +func (r Responder) times(name string, n int, fn ...func(...any)) Responder { count := 0 return func(req *http.Request) (*http.Response, error) { count++ @@ -71,7 +71,7 @@ func (r Responder) times(name string, n int, fn ...func(...interface{})) Respond // httpmock.RegisterResponder("GET", "/foo/bar", // httpmock.NewStringResponder(200, "{}").Times(3, t.Log), // ) -func (r Responder) Times(n int, fn ...func(...interface{})) Responder { +func (r Responder) Times(n int, fn ...func(...any)) Responder { return r.times("Times", n, fn...) } @@ -92,7 +92,7 @@ func (r Responder) Times(n int, fn ...func(...interface{})) Responder { // httpmock.RegisterResponder("GET", "/foo/bar", // httpmock.NewStringResponder(200, "{}").Once(t.Log), // ) -func (r Responder) Once(fn ...func(...interface{})) Responder { +func (r Responder) Once(fn ...func(...any)) Responder { return r.times("Once", 1, fn...) } @@ -110,7 +110,7 @@ func (r Responder) Once(fn ...func(...interface{})) Responder { // httpmock.RegisterResponder("GET", "/foo/bar", // httpmock.NewStringResponder(200, "{}").Trace(t.Log), // ) -func (r Responder) Trace(fn func(...interface{})) Responder { +func (r Responder) Trace(fn func(...any)) Responder { return func(req *http.Request) (*http.Response, error) { resp, err := r(req) return resp, internal.StackTracer{ @@ -272,7 +272,7 @@ func ResponderFromResponse(resp *http.Response) Responder { // t.Log), // ) // } -func ResponderFromMultipleResponses(responses []*http.Response, fn ...func(...interface{})) Responder { +func ResponderFromMultipleResponses(responses []*http.Response, fn ...func(...any)) Responder { responseIndex := 0 mutex := sync.Mutex{} return func(req *http.Request) (*http.Response, error) { @@ -339,7 +339,7 @@ func NewErrorResponder(err error) Responder { // at /go/src/testing/testing.go:865 // testing.tRunner() // at /go/src/runtime/asm_amd64.s:1337 -func NewNotFoundResponder(fn func(...interface{})) Responder { +func NewNotFoundResponder(fn func(...any)) Responder { return func(req *http.Request) (*http.Response, error) { var extra string suggested, _ := req.Context().Value(suggestedKey).(*suggestedInfo) @@ -401,12 +401,12 @@ func NewBytesResponder(status int, body []byte) Responder { } // NewJsonResponse creates an *http.Response with a body that is a -// json encoded representation of the given interface{}. Also accepts +// json encoded representation of the given any. Also accepts // an http status code. // // To pass the content of an existing file as body use httpmock.File as in: // httpmock.NewJsonResponse(200, httpmock.File("body.json")) -func NewJsonResponse(status int, body interface{}) (*http.Response, error) { // nolint: revive +func NewJsonResponse(status int, body any) (*http.Response, error) { // nolint: revive encoded, err := json.Marshal(body) if err != nil { return nil, err @@ -417,11 +417,11 @@ func NewJsonResponse(status int, body interface{}) (*http.Response, error) { // } // NewJsonResponder creates a Responder from a given body (as an -// interface{} that is encoded to json) and status code. +// any that is encoded to json) and status code. // // To pass the content of an existing file as body use httpmock.File as in: // httpmock.NewJsonResponder(200, httpmock.File("body.json")) -func NewJsonResponder(status int, body interface{}) (Responder, error) { // nolint: revive +func NewJsonResponder(status int, body any) (Responder, error) { // nolint: revive resp, err := NewJsonResponse(status, body) if err != nil { return nil, err @@ -442,7 +442,7 @@ func NewJsonResponder(status int, body interface{}) (Responder, error) { // noli // // To pass the content of an existing file as body use httpmock.File as in: // httpmock.NewJsonResponderOrPanic(200, httpmock.File("body.json")) -func NewJsonResponderOrPanic(status int, body interface{}) Responder { // nolint: revive +func NewJsonResponderOrPanic(status int, body any) Responder { // nolint: revive responder, err := NewJsonResponder(status, body) if err != nil { panic(err) @@ -451,12 +451,12 @@ func NewJsonResponderOrPanic(status int, body interface{}) Responder { // nolint } // NewXmlResponse creates an *http.Response with a body that is an xml -// encoded representation of the given interface{}. Also accepts an +// encoded representation of the given any. Also accepts an // http status code. // // To pass the content of an existing file as body use httpmock.File as in: // httpmock.NewXmlResponse(200, httpmock.File("body.xml")) -func NewXmlResponse(status int, body interface{}) (*http.Response, error) { // nolint: revive +func NewXmlResponse(status int, body any) (*http.Response, error) { // nolint: revive var ( encoded []byte err error @@ -475,11 +475,11 @@ func NewXmlResponse(status int, body interface{}) (*http.Response, error) { // n } // NewXmlResponder creates a Responder from a given body (as an -// interface{} that is encoded to xml) and status code. +// any that is encoded to xml) and status code. // // To pass the content of an existing file as body use httpmock.File as in: // httpmock.NewXmlResponder(200, httpmock.File("body.xml")) -func NewXmlResponder(status int, body interface{}) (Responder, error) { // nolint: revive +func NewXmlResponder(status int, body any) (Responder, error) { // nolint: revive resp, err := NewXmlResponse(status, body) if err != nil { return nil, err @@ -500,7 +500,7 @@ func NewXmlResponder(status int, body interface{}) (Responder, error) { // nolin // // To pass the content of an existing file as body use httpmock.File as in: // httpmock.NewXmlResponderOrPanic(200, httpmock.File("body.xml")) -func NewXmlResponderOrPanic(status int, body interface{}) Responder { // nolint: revive +func NewXmlResponderOrPanic(status int, body any) Responder { // nolint: revive responder, err := NewXmlResponder(status, body) if err != nil { panic(err) @@ -527,7 +527,7 @@ func NewRespBodyFromBytes(body []byte) io.ReadCloser { } type dummyReadCloser struct { - orig interface{} // string or []byte + orig any // string or []byte body io.ReadSeeker // instanciated on demand from orig } diff --git a/transport.go b/transport.go index cefc826..3ebc360 100644 --- a/transport.go +++ b/transport.go @@ -605,7 +605,7 @@ func (m *MockTransport) RegisterRegexpResponder(method string, urlRegexp *regexp // OPTIONS, POST, PUT or TRACE, a panics occurs to notice the possible // mistake. This panic can be disabled by setting m.DontCheckMethod to // true prior to this call. -func (m *MockTransport) RegisterResponderWithQuery(method, path string, query interface{}, responder Responder) { +func (m *MockTransport) RegisterResponderWithQuery(method, path string, query any, responder Responder) { if isRegexpURL(path) { panic(`path begins with "=~", RegisterResponder should be used instead of RegisterResponderWithQuery`) } @@ -1074,7 +1074,7 @@ func RegisterRegexpResponder(method string, urlRegexp *regexp.Regexp, responder // OPTIONS, POST, PUT or TRACE, a panics occurs to notice the possible // mistake. This panic can be disabled by setting // DefaultTransport.DontCheckMethod to true prior to this call. -func RegisterResponderWithQuery(method, path string, query interface{}, responder Responder) { +func RegisterResponderWithQuery(method, path string, query any, responder Responder) { DefaultTransport.RegisterResponderWithQuery(method, path, query, responder) } @@ -1109,7 +1109,7 @@ var ErrSubmatchNotFound = errors.New("submatch not found") // if err != nil { // return nil, err // } -// return NewJsonResponse(200, map[string]interface{}{ +// return NewJsonResponse(200, map[string]any{ // "id": 123, // "name": name, // }) @@ -1140,7 +1140,7 @@ func GetSubmatch(req *http.Request, n int) (string, error) { // if err != nil { // return nil, err // } -// return NewJsonResponse(200, map[string]interface{}{ +// return NewJsonResponse(200, map[string]any{ // "id": id, // "name": "The beautiful name", // }) @@ -1166,7 +1166,7 @@ func GetSubmatchAsInt(req *http.Request, n int) (int64, error) { // if err != nil { // return nil, err // } -// return NewJsonResponse(200, map[string]interface{}{ +// return NewJsonResponse(200, map[string]any{ // "id": id, // "name": "The beautiful name", // }) @@ -1192,7 +1192,7 @@ func GetSubmatchAsUint(req *http.Request, n int) (uint64, error) { // if err != nil { // return nil, err // } -// return NewJsonResponse(200, map[string]interface{}{ +// return NewJsonResponse(200, map[string]any{ // "id": id, // "name": "The beautiful name", // "height": height, @@ -1217,7 +1217,7 @@ func GetSubmatchAsFloat(req *http.Request, n int) (float64, error) { // RegisterResponder("GET", `=~^/item/name/([^/]+)\z`, // func(req *http.Request) (*http.Response, error) { // name := MustGetSubmatch(req, 1) // 1=first regexp submatch -// return NewJsonResponse(200, map[string]interface{}{ +// return NewJsonResponse(200, map[string]any{ // "id": 123, // "name": name, // }) @@ -1241,7 +1241,7 @@ func MustGetSubmatch(req *http.Request, n int) string { // RegisterResponder("GET", `=~^/item/id/(\d+)\z`, // func(req *http.Request) (*http.Response, error) { // id := MustGetSubmatchAsInt(req, 1) // 1=first regexp submatch -// return NewJsonResponse(200, map[string]interface{}{ +// return NewJsonResponse(200, map[string]any{ // "id": id, // "name": "The beautiful name", // }) @@ -1265,7 +1265,7 @@ func MustGetSubmatchAsInt(req *http.Request, n int) int64 { // RegisterResponder("GET", `=~^/item/id/(\d+)\z`, // func(req *http.Request) (*http.Response, error) { // id, err := MustGetSubmatchAsUint(req, 1) // 1=first regexp submatch -// return NewJsonResponse(200, map[string]interface{}{ +// return NewJsonResponse(200, map[string]any{ // "id": id, // "name": "The beautiful name", // }) @@ -1289,7 +1289,7 @@ func MustGetSubmatchAsUint(req *http.Request, n int) uint64 { // RegisterResponder("PATCH", `=~^/item/id/\d+\?height=(\d+(?:\.\d*)?)\z`, // func(req *http.Request) (*http.Response, error) { // height := MustGetSubmatchAsFloat(req, 1) // 1=first regexp submatch -// return NewJsonResponse(200, map[string]interface{}{ +// return NewJsonResponse(200, map[string]any{ // "id": id, // "name": "The beautiful name", // "height": height,