Browse Source

Update Walk to match all subrouters

Matches all routes instead of just routes with paths.

Fixes #261
pull/268/head
Nick Miyake 9 years ago committed by Kamil Kisiel
parent
commit
a322b2c2ec
  1. 4
      mux.go
  2. 28
      mux_test.go

4
mux.go

@ -299,10 +299,6 @@ type WalkFunc func(route *Route, router *Router, ancestors []*Route) error
func (r *Router) walk(walkFn WalkFunc, ancestors []*Route) error { func (r *Router) walk(walkFn WalkFunc, ancestors []*Route) error {
for _, t := range r.routes { for _, t := range r.routes {
if t.regexp == nil || t.regexp.path == nil || t.regexp.path.template == "" {
continue
}
err := walkFn(t, r, ancestors) err := walkFn(t, r, ancestors)
if err == SkipRouter { if err == SkipRouter {
continue continue

28
mux_test.go

@ -1401,6 +1401,34 @@ func TestWalkNested(t *testing.T) {
} }
} }
func TestWalkSubrouters(t *testing.T) {
router := NewRouter()
g := router.Path("/g").Subrouter()
o := g.PathPrefix("/o").Subrouter()
o.Methods("GET")
o.Methods("PUT")
// all 4 routes should be matched, but final 2 routes do not have path templates
paths := []string{"/g", "/g/o", "", ""}
idx := 0
err := router.Walk(func(route *Route, router *Router, ancestors []*Route) error {
path := paths[idx]
tpl, _ := route.GetPathTemplate()
if tpl != path {
t.Errorf(`Expected %s got %s`, path, tpl)
}
idx++
return nil
})
if err != nil {
panic(err)
}
if idx != len(paths) {
t.Errorf("Expected %d routes, found %d", len(paths), idx)
}
}
func TestWalkErrorRoute(t *testing.T) { func TestWalkErrorRoute(t *testing.T) {
router := NewRouter() router := NewRouter()
router.Path("/g") router.Path("/g")

Loading…
Cancel
Save