diff --git a/tree.go b/tree.go index 1902d331..bbda2840 100644 --- a/tree.go +++ b/tree.go @@ -213,6 +213,11 @@ func (t *Tree) addseg(segments []string, route interface{}, wildcards []string, } else { t.leaves = append(t.leaves, &leafInfo{runObject: route, wildcards: wildcards}) } + for i, v := range wildcards { + if v == ":" { + t.leaves = append(t.leaves, &leafInfo{runObject: route, wildcards: wildcards[:i+1]}) + } + } } else { seg := segments[0] iswild, params, regexpStr := splitSegment(seg) diff --git a/tree_test.go b/tree_test.go index 1d2890e1..7fe70f51 100644 --- a/tree_test.go +++ b/tree_test.go @@ -26,6 +26,12 @@ var routers []testinfo func init() { routers = make([]testinfo, 0) + routers = append(routers, testinfo{"/topic/?:auth:int", "/topic", nil}) + routers = append(routers, testinfo{"/topic/?:auth:int", "/topic/123", map[string]string{":auth":"123"}}) + routers = append(routers, testinfo{"/topic/:id/?:auth", "/topic/1", map[string]string{":id": "1"}}) + routers = append(routers, testinfo{"/topic/:id/?:auth", "/topic/1/2", map[string]string{":id": "1",":auth":"2"}}) + routers = append(routers, testinfo{"/topic/:id/?:auth:int", "/topic/1", map[string]string{":id": "1"}}) + routers = append(routers, testinfo{"/topic/:id/?:auth:int", "/topic/1/123", map[string]string{":id": "1",":auth":"123"}}) routers = append(routers, testinfo{"/:id", "/123", map[string]string{":id": "123"}}) routers = append(routers, testinfo{"/hello/?:id", "/hello", map[string]string{":id": ""}}) routers = append(routers, testinfo{"/", "/", nil})