Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
张磊
/
FileStorageBeego
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
6a78898b
authored
2014-08-12 15:09:12 +0800
by
astaxie
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
beego: fix the tree for addtree & add testcase
1 parent
f201859f
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
42 additions
and
12 deletions
tree.go
tree_test.go
tree.go
View file @
6a78898
...
...
@@ -70,10 +70,10 @@ func (t *Tree) addtree(segments []string, tree *Tree, wildcards []string, reg st
if
w
==
"."
||
w
==
":"
{
continue
}
regexpStr
=
"
/([^/]+)
"
+
regexpStr
regexpStr
=
"
([^/]+)/
"
+
regexpStr
}
}
reg
=
reg
+
regexpStr
reg
=
strings
.
Trim
(
reg
+
regexpStr
,
"/"
)
filterTreeWithPrefix
(
tree
,
append
(
wildcards
,
params
...
),
reg
)
t
.
wildcard
=
tree
}
else
{
...
...
@@ -99,9 +99,9 @@ func (t *Tree) addtree(segments []string, tree *Tree, wildcards []string, reg st
rr
=
rr
+
"([^/]+)/"
}
}
regexpStr
=
rr
+
regexpStr
regexpStr
=
rr
+
regexpStr
+
"/"
}
else
{
regexpStr
=
"/"
+
regexpStr
regexpStr
=
"/"
+
regexpStr
+
"/"
}
}
else
{
for
_
,
w
:=
range
wildcards
{
...
...
@@ -109,9 +109,9 @@ func (t *Tree) addtree(segments []string, tree *Tree, wildcards []string, reg st
continue
}
if
w
==
":splat"
{
regexpStr
=
"
/(.+)
"
+
regexpStr
regexpStr
=
"
(.+)/
"
+
regexpStr
}
else
{
regexpStr
=
"
/([^/]+)
"
+
regexpStr
regexpStr
=
"
([^/]+)/
"
+
regexpStr
}
}
}
...
...
@@ -132,8 +132,24 @@ func filterTreeWithPrefix(t *Tree, wildcards []string, reg string) {
filterTreeWithPrefix
(
t
.
wildcard
,
wildcards
,
reg
)
}
for
_
,
l
:=
range
t
.
leaves
{
l
.
wildcards
=
append
(
wildcards
,
l
.
wildcards
...
)
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
{}
for
_
,
v
:=
range
l
.
wildcards
{
if
v
==
":"
||
v
==
"."
{
...
...
@@ -142,12 +158,8 @@ func filterTreeWithPrefix(t *Tree, wildcards []string, reg string) {
filterCards
=
append
(
filterCards
,
v
)
}
l
.
wildcards
=
filterCards
if
l
.
regexps
!=
nil
{
l
.
regexps
=
regexp
.
MustCompile
(
"^"
+
reg
+
strings
.
Trim
(
l
.
regexps
.
String
(),
"^$"
)
+
"$"
)
}
else
{
l
.
regexps
=
regexp
.
MustCompile
(
"^"
+
reg
+
"$"
)
}
}
else
{
l
.
wildcards
=
append
(
wildcards
,
l
.
wildcards
...
)
if
l
.
regexps
!=
nil
{
for
_
,
w
:=
range
wildcards
{
if
w
==
"."
||
w
==
":"
{
...
...
tree_test.go
View file @
6a78898
...
...
@@ -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
)
{
a
:=
splitPath
(
"/"
)
if
len
(
a
)
!=
0
{
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment