Browse Source

[bugfix] Fix error handling in Router.Walk (#177)

pull/179/head
Matt Silverlock 10 years ago committed by GitHub
parent
commit
a49d62f618
  1. 3
      mux.go
  2. 37
      mux_test.go

3
mux.go

@ -285,6 +285,9 @@ func (r *Router) walk(walkFn WalkFunc, ancestors []*Route) error {
if err == SkipRouter { if err == SkipRouter {
continue continue
} }
if err != nil {
return err
}
for _, sr := range t.matchers { for _, sr := range t.matchers {
if h, ok := sr.(*Router); ok { if h, ok := sr.(*Router); ok {
err := h.walk(walkFn, ancestors) err := h.walk(walkFn, ancestors)

37
mux_test.go

@ -5,6 +5,7 @@
package mux package mux
import ( import (
"errors"
"fmt" "fmt"
"net/http" "net/http"
"strings" "strings"
@ -1195,6 +1196,42 @@ func TestWalkNested(t *testing.T) {
} }
} }
func TestWalkErrorRoute(t *testing.T) {
router := NewRouter()
router.Path("/g")
expectedError := errors.New("error")
err := router.Walk(func(route *Route, router *Router, ancestors []*Route) error {
return expectedError
})
if err != expectedError {
t.Errorf("Expected %v routes, found %v", expectedError, err)
}
}
func TestWalkErrorMatcher(t *testing.T) {
router := NewRouter()
expectedError := router.Path("/g").Subrouter().Path("").GetError()
err := router.Walk(func(route *Route, router *Router, ancestors []*Route) error {
return route.GetError()
})
if err != expectedError {
t.Errorf("Expected %v routes, found %v", expectedError, err)
}
}
func TestWalkErrorHandler(t *testing.T) {
handler := NewRouter()
expectedError := handler.Path("/path").Subrouter().Path("").GetError()
router := NewRouter()
router.Path("/g").Handler(handler)
err := router.Walk(func(route *Route, router *Router, ancestors []*Route) error {
return route.GetError()
})
if err != expectedError {
t.Errorf("Expected %v routes, found %v", expectedError, err)
}
}
func TestSubrouterErrorHandling(t *testing.T) { func TestSubrouterErrorHandling(t *testing.T) {
superRouterCalled := false superRouterCalled := false
subRouterCalled := false subRouterCalled := false

Loading…
Cancel
Save