mirror of
https://github.com/gin-gonic/gin.git
synced 2026-06-06 12:08:20 +08:00
Merge 141ddaad192d76a0421d9d14961450db69956350 into d75fcd4c9ab260e5225de590f1f0f8c0e0e12d11
This commit is contained in:
commit
0e3ebfbfd8
10
context.go
10
context.go
@ -141,6 +141,16 @@ func (c *Context) Copy() *Context {
|
|||||||
cp.Params = make([]Param, len(cParams))
|
cp.Params = make([]Param, len(cParams))
|
||||||
copy(cp.Params, cParams)
|
copy(cp.Params, cParams)
|
||||||
|
|
||||||
|
if c.Errors != nil {
|
||||||
|
cp.Errors = make(errorMsgs, len(c.Errors))
|
||||||
|
copy(cp.Errors, c.Errors)
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.Accepted != nil {
|
||||||
|
cp.Accepted = make([]string, len(c.Accepted))
|
||||||
|
copy(cp.Accepted, c.Accepted)
|
||||||
|
}
|
||||||
|
|
||||||
return &cp
|
return &cp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -689,6 +689,50 @@ func TestContextCopy(t *testing.T) {
|
|||||||
assert.Equal(t, cp.fullPath, c.fullPath)
|
assert.Equal(t, cp.fullPath, c.fullPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestContextCopyCopiesErrors(t *testing.T) {
|
||||||
|
c, _ := CreateTestContext(httptest.NewRecorder())
|
||||||
|
c.Request, _ = http.NewRequest(http.MethodGet, "/", nil)
|
||||||
|
_ = c.Error(errors.New("first error"))
|
||||||
|
_ = c.Error(errors.New("second error"))
|
||||||
|
|
||||||
|
cp := c.Copy()
|
||||||
|
|
||||||
|
// copied context has the same errors
|
||||||
|
assert.Len(t, cp.Errors, 2)
|
||||||
|
assert.Equal(t, c.Errors[0].Error(), cp.Errors[0].Error())
|
||||||
|
assert.Equal(t, c.Errors[1].Error(), cp.Errors[1].Error())
|
||||||
|
|
||||||
|
// mutations on the copy do not affect the original
|
||||||
|
_ = cp.Error(errors.New("third error"))
|
||||||
|
assert.Len(t, c.Errors, 2)
|
||||||
|
assert.Len(t, cp.Errors, 3)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestContextCopyCopiesAccepted(t *testing.T) {
|
||||||
|
c, _ := CreateTestContext(httptest.NewRecorder())
|
||||||
|
c.Request, _ = http.NewRequest(http.MethodGet, "/", nil)
|
||||||
|
c.SetAccepted("application/json", "text/html")
|
||||||
|
|
||||||
|
cp := c.Copy()
|
||||||
|
|
||||||
|
assert.Equal(t, c.Accepted, cp.Accepted)
|
||||||
|
|
||||||
|
// mutations on the copy do not affect the original
|
||||||
|
cp.SetAccepted("text/plain")
|
||||||
|
assert.Equal(t, []string{"application/json", "text/html"}, c.Accepted)
|
||||||
|
assert.Equal(t, []string{"text/plain"}, cp.Accepted)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestContextCopyNilErrorsAndAccepted(t *testing.T) {
|
||||||
|
c, _ := CreateTestContext(httptest.NewRecorder())
|
||||||
|
c.Request, _ = http.NewRequest(http.MethodGet, "/", nil)
|
||||||
|
|
||||||
|
cp := c.Copy()
|
||||||
|
|
||||||
|
assert.Nil(t, cp.Errors)
|
||||||
|
assert.Nil(t, cp.Accepted)
|
||||||
|
}
|
||||||
|
|
||||||
func TestContextHandlerName(t *testing.T) {
|
func TestContextHandlerName(t *testing.T) {
|
||||||
c, _ := CreateTestContext(httptest.NewRecorder())
|
c, _ := CreateTestContext(httptest.NewRecorder())
|
||||||
c.handlers = HandlersChain{func(c *Context) {}, handlerNameTest}
|
c.handlers = HandlersChain{func(c *Context) {}, handlerNameTest}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user