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:
		
				
					committed by
					
						
						thinkerou
					
				
			
			
				
	
			
			
			
						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
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user