fix Context.Next() - recheck len of handlers every iteration (#1745)
* fix Context.Next() - recheck len of handlers every iteration * add tests when Context.reset() can be called inside of handler TestEngineHandleContext TestContextResetInHandler TestRouterStaticFSFileNotFound * Context.Next() - format to while style
This commit is contained in:
parent
b056a34bdc
commit
4867ff9634
@ -105,8 +105,9 @@ func (c *Context) Handler() HandlerFunc {
|
|||||||
// See example in GitHub.
|
// See example in GitHub.
|
||||||
func (c *Context) Next() {
|
func (c *Context) Next() {
|
||||||
c.index++
|
c.index++
|
||||||
for s := int8(len(c.handlers)); c.index < s; c.index++ {
|
for c.index < int8(len(c.handlers)) {
|
||||||
c.handlers[c.index](c)
|
c.handlers[c.index](c)
|
||||||
|
c.index++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1743,3 +1743,15 @@ func TestContextStreamWithClientGone(t *testing.T) {
|
|||||||
|
|
||||||
assert.Equal(t, "test", w.Body.String())
|
assert.Equal(t, "test", w.Body.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestContextResetInHandler(t *testing.T) {
|
||||||
|
w := CreateTestResponseRecorder()
|
||||||
|
c, _ := CreateTestContext(w)
|
||||||
|
|
||||||
|
c.handlers = []HandlerFunc{
|
||||||
|
func(c *Context) { c.reset() },
|
||||||
|
}
|
||||||
|
assert.NotPanics(t, func() {
|
||||||
|
c.Next()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
17
gin_test.go
17
gin_test.go
@ -471,6 +471,23 @@ func TestListOfRoutes(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEngineHandleContext(t *testing.T) {
|
||||||
|
r := New()
|
||||||
|
r.GET("/", func(c *Context) {
|
||||||
|
c.Request.URL.Path = "/v2"
|
||||||
|
r.HandleContext(c)
|
||||||
|
})
|
||||||
|
v2 := r.Group("/v2")
|
||||||
|
{
|
||||||
|
v2.GET("/", func(c *Context) {})
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.NotPanics(t, func() {
|
||||||
|
w := performRequest(r, "GET", "/")
|
||||||
|
assert.Equal(t, 301, w.Code)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func assertRoutePresent(t *testing.T, gotRoutes RoutesInfo, wantRoute RouteInfo) {
|
func assertRoutePresent(t *testing.T, gotRoutes RoutesInfo, wantRoute RouteInfo) {
|
||||||
for _, gotRoute := range gotRoutes {
|
for _, gotRoute := range gotRoutes {
|
||||||
if gotRoute.Path == wantRoute.Path && gotRoute.Method == wantRoute.Method {
|
if gotRoute.Path == wantRoute.Path && gotRoute.Method == wantRoute.Method {
|
||||||
|
@ -427,6 +427,16 @@ func TestRouterStaticFSNotFound(t *testing.T) {
|
|||||||
assert.Equal(t, "non existent", w.Body.String())
|
assert.Equal(t, "non existent", w.Body.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRouterStaticFSFileNotFound(t *testing.T) {
|
||||||
|
router := New()
|
||||||
|
|
||||||
|
router.StaticFS("/", http.FileSystem(http.Dir(".")))
|
||||||
|
|
||||||
|
assert.NotPanics(t, func() {
|
||||||
|
performRequest(router, "GET", "/nonexistent")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestRouteRawPath(t *testing.T) {
|
func TestRouteRawPath(t *testing.T) {
|
||||||
route := New()
|
route := New()
|
||||||
route.UseRawPath = true
|
route.UseRawPath = true
|
||||||
|
Loading…
Reference in New Issue
Block a user