mirror of
https://github.com/astaxie/beego.git
synced 2024-11-26 03:01:28 +00:00
beego: fix the tree for addtree & add testcase
This commit is contained in:
parent
f201859fa7
commit
6a78898bb1
36
tree.go
36
tree.go
@ -70,10 +70,10 @@ func (t *Tree) addtree(segments []string, tree *Tree, wildcards []string, reg st
|
|||||||
if w == "." || w == ":" {
|
if w == "." || w == ":" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
regexpStr = "/([^/]+)" + regexpStr
|
regexpStr = "([^/]+)/" + regexpStr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
reg = reg + regexpStr
|
reg = strings.Trim(reg+regexpStr, "/")
|
||||||
filterTreeWithPrefix(tree, append(wildcards, params...), reg)
|
filterTreeWithPrefix(tree, append(wildcards, params...), reg)
|
||||||
t.wildcard = tree
|
t.wildcard = tree
|
||||||
} else {
|
} else {
|
||||||
@ -99,9 +99,9 @@ func (t *Tree) addtree(segments []string, tree *Tree, wildcards []string, reg st
|
|||||||
rr = rr + "([^/]+)/"
|
rr = rr + "([^/]+)/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
regexpStr = rr + regexpStr
|
regexpStr = rr + regexpStr + "/"
|
||||||
} else {
|
} else {
|
||||||
regexpStr = "/" + regexpStr
|
regexpStr = "/" + regexpStr + "/"
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for _, w := range wildcards {
|
for _, w := range wildcards {
|
||||||
@ -109,9 +109,9 @@ func (t *Tree) addtree(segments []string, tree *Tree, wildcards []string, reg st
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if w == ":splat" {
|
if w == ":splat" {
|
||||||
regexpStr = "/(.+)" + regexpStr
|
regexpStr = "(.+)/" + regexpStr
|
||||||
} else {
|
} else {
|
||||||
regexpStr = "/([^/]+)" + regexpStr
|
regexpStr = "([^/]+)/" + regexpStr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -132,8 +132,24 @@ func filterTreeWithPrefix(t *Tree, wildcards []string, reg string) {
|
|||||||
filterTreeWithPrefix(t.wildcard, wildcards, reg)
|
filterTreeWithPrefix(t.wildcard, wildcards, reg)
|
||||||
}
|
}
|
||||||
for _, l := range t.leaves {
|
for _, l := range t.leaves {
|
||||||
l.wildcards = append(wildcards, l.wildcards...)
|
|
||||||
if reg != "" {
|
if reg != "" {
|
||||||
|
if l.regexps != nil {
|
||||||
|
l.wildcards = append(wildcards, l.wildcards...)
|
||||||
|
l.regexps = regexp.MustCompile("^" + reg + strings.Trim(l.regexps.String(), "^$") + "$")
|
||||||
|
} else {
|
||||||
|
for _, v := range l.wildcards {
|
||||||
|
if v == ":" || v == "." {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if v == ":splat" {
|
||||||
|
reg = reg + "/(.+)"
|
||||||
|
} else {
|
||||||
|
reg = reg + "/([^/]+)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
l.regexps = regexp.MustCompile("^" + reg + "$")
|
||||||
|
l.wildcards = append(wildcards, l.wildcards...)
|
||||||
|
}
|
||||||
filterCards := []string{}
|
filterCards := []string{}
|
||||||
for _, v := range l.wildcards {
|
for _, v := range l.wildcards {
|
||||||
if v == ":" || v == "." {
|
if v == ":" || v == "." {
|
||||||
@ -142,12 +158,8 @@ func filterTreeWithPrefix(t *Tree, wildcards []string, reg string) {
|
|||||||
filterCards = append(filterCards, v)
|
filterCards = append(filterCards, v)
|
||||||
}
|
}
|
||||||
l.wildcards = filterCards
|
l.wildcards = filterCards
|
||||||
if l.regexps != nil {
|
|
||||||
l.regexps = regexp.MustCompile("^" + reg + strings.Trim(l.regexps.String(), "^$") + "$")
|
|
||||||
} else {
|
|
||||||
l.regexps = regexp.MustCompile("^" + reg + "$")
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
|
l.wildcards = append(wildcards, l.wildcards...)
|
||||||
if l.regexps != nil {
|
if l.regexps != nil {
|
||||||
for _, w := range wildcards {
|
for _, w := range wildcards {
|
||||||
if w == "." || w == ":" {
|
if w == "." || w == ":" {
|
||||||
|
18
tree_test.go
18
tree_test.go
@ -122,6 +122,24 @@ func TestAddTree(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAddTree2(t *testing.T) {
|
||||||
|
tr := NewTree()
|
||||||
|
tr.AddRouter("/shop/:id/account", "astaxie")
|
||||||
|
tr.AddRouter("/shop/:sd/ttt_:id(.+)_:page(.+).html", "astaxie")
|
||||||
|
t3 := NewTree()
|
||||||
|
t3.AddTree("/:version(v1|v2)/:prefix", tr)
|
||||||
|
obj, param := t3.Match("/v1/zl/shop/123/account")
|
||||||
|
if obj == nil || obj.(string) != "astaxie" {
|
||||||
|
t.Fatal("/:version(v1|v2)/:prefix/shop/:id/account can't get obj ")
|
||||||
|
}
|
||||||
|
if param == nil {
|
||||||
|
t.Fatal("get param error")
|
||||||
|
}
|
||||||
|
if param[":id"] != "123" || param[":prefix"] != "zl" || param[":version"] != "v1" {
|
||||||
|
t.Fatal("get :id :prefix :version param error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestSplitPath(t *testing.T) {
|
func TestSplitPath(t *testing.T) {
|
||||||
a := splitPath("/")
|
a := splitPath("/")
|
||||||
if len(a) != 0 {
|
if len(a) != 0 {
|
||||||
|
Loading…
Reference in New Issue
Block a user