fix(context): check handler is nil (#3413)
* fixed #3404 2022-11-23 * up 2022-11-23 * refactor: refactor context handling and nil checks - Refactor nil checks to improve readability in `context.go` - Modify the control flow in `HandlerNames` and `Next` methods to continue on nil values before appending or invoking handlers in `context.go` Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com> * test: refactor context_test.go for clarity and efficiency - Insert a `nil` value into the `HandlersChain` array in `context_test.go` - Remove empty test functions in `context_test.go` Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com> --------- Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com> Co-authored-by: Bo-Yi Wu <appleboy.tw@gmail.com>
This commit is contained in:
parent
3f5b0afa2a
commit
36b0dede4b
@ -152,6 +152,9 @@ func (c *Context) HandlerName() string {
|
|||||||
func (c *Context) HandlerNames() []string {
|
func (c *Context) HandlerNames() []string {
|
||||||
hn := make([]string, 0, len(c.handlers))
|
hn := make([]string, 0, len(c.handlers))
|
||||||
for _, val := range c.handlers {
|
for _, val := range c.handlers {
|
||||||
|
if val == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
hn = append(hn, nameOfFunction(val))
|
hn = append(hn, nameOfFunction(val))
|
||||||
}
|
}
|
||||||
return hn
|
return hn
|
||||||
@ -182,6 +185,9 @@ func (c *Context) FullPath() string {
|
|||||||
func (c *Context) Next() {
|
func (c *Context) Next() {
|
||||||
c.index++
|
c.index++
|
||||||
for c.index < int8(len(c.handlers)) {
|
for c.index < int8(len(c.handlers)) {
|
||||||
|
if c.handlers[c.index] == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
c.handlers[c.index](c)
|
c.handlers[c.index](c)
|
||||||
c.index++
|
c.index++
|
||||||
}
|
}
|
||||||
|
@ -362,7 +362,7 @@ func TestContextHandlerName(t *testing.T) {
|
|||||||
|
|
||||||
func TestContextHandlerNames(t *testing.T) {
|
func TestContextHandlerNames(t *testing.T) {
|
||||||
c, _ := CreateTestContext(httptest.NewRecorder())
|
c, _ := CreateTestContext(httptest.NewRecorder())
|
||||||
c.handlers = HandlersChain{func(c *Context) {}, handlerNameTest, func(c *Context) {}, handlerNameTest2}
|
c.handlers = HandlersChain{func(c *Context) {}, nil, handlerNameTest, func(c *Context) {}, handlerNameTest2}
|
||||||
|
|
||||||
names := c.HandlerNames()
|
names := c.HandlerNames()
|
||||||
|
|
||||||
@ -1671,7 +1671,6 @@ func TestContextBindWithXML(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestContextBindPlain(t *testing.T) {
|
func TestContextBindPlain(t *testing.T) {
|
||||||
|
|
||||||
// string
|
// string
|
||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
c, _ := CreateTestContext(w)
|
c, _ := CreateTestContext(w)
|
||||||
@ -1863,7 +1862,6 @@ func TestContextShouldBindPlain(t *testing.T) {
|
|||||||
assert.NoError(t, c.ShouldBindPlain(&bs))
|
assert.NoError(t, c.ShouldBindPlain(&bs))
|
||||||
assert.Equal(t, []byte("test []byte"), bs)
|
assert.Equal(t, []byte("test []byte"), bs)
|
||||||
assert.Equal(t, 0, w.Body.Len())
|
assert.Equal(t, 0, w.Body.Len())
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestContextShouldBindHeader(t *testing.T) {
|
func TestContextShouldBindHeader(t *testing.T) {
|
||||||
@ -2371,6 +2369,7 @@ func TestContextShouldBindBodyWithPlain(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestContextGolangContext(t *testing.T) {
|
func TestContextGolangContext(t *testing.T) {
|
||||||
c, _ := CreateTestContext(httptest.NewRecorder())
|
c, _ := CreateTestContext(httptest.NewRecorder())
|
||||||
c.Request, _ = http.NewRequest("POST", "/", bytes.NewBufferString("{\"foo\":\"bar\", \"bar\":\"foo\"}"))
|
c.Request, _ = http.NewRequest("POST", "/", bytes.NewBufferString("{\"foo\":\"bar\", \"bar\":\"foo\"}"))
|
||||||
|
Loading…
Reference in New Issue
Block a user