-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpathmatch_test.go
74 lines (64 loc) · 2.42 KB
/
pathmatch_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package webtool
import (
"github.com/stretchrcom/testify/assert"
"testing"
)
func TestPathParse(t *testing.T) {
m := NewPathMatch()
pattern := `/a/b/c<name:[^\>\[abc\](]+>d<test1:[a-z0-9]+>/<doctype>_<docname:[a-z]+>.html`
// -> ["/a/b/c" "<name:[^\\>\\[abc\\]]+>" "d" "<test1:[a-z0-9]+>" "/" "<doctype>" "_" "<docname:[a-z]+>" ".html"]
parsed, err := m.parse(pattern)
assert.Equal(t, nil, err)
assert.Equal(t, 9, len(parsed))
assert.Equal(t, "/a/b/c", parsed[0])
assert.Equal(t, "<name:[^\\>\\[abc\\](]+>", parsed[1])
tagContent, ok := TagContent(parsed[1])
assert.True(t, ok)
assert.Equal(t, "name:[^\\>\\[abc\\](]+", tagContent)
assert.Equal(t, "d", parsed[2])
assert.Equal(t, "<test1:[a-z0-9]+>", parsed[3])
assert.Equal(t, "/", parsed[4])
assert.Equal(t, "<doctype>", parsed[5])
assert.Equal(t, "_", parsed[6])
assert.Equal(t, "<docname:[a-z]+>", parsed[7])
assert.Equal(t, ".html", parsed[8])
}
func TestPathMatch(t *testing.T) {
m := NewPathMatch()
pattern1 := `/a/b/c<name:[^\>\[abc\](]+>d<test1:[a-z0-9]+>/<doctype>_<docname:[a-z]+>.html`
pattern2 := `/say/hello/<name>`
pattern3 := `/member/<id:[0-9]{8}>/<page>`
// -> ["/a/b/c" "<name:[^\\>\\[abc\\]]+>" "d" "<test1:[a-z0-9]+>" "/" "<doctype>" "_" "<docname:[a-z]+>" ".html"]
defaults := make(map[string]string)
err := m.Parse(pattern1, defaults)
assert.Equal(t, nil, err)
err = m.Parse(pattern2, defaults)
assert.Equal(t, nil, err)
err = m.Parse(pattern3, defaults)
assert.Equal(t, nil, err)
path := `/a/b/c0123fd1a2b/info_new.html`
pathPattern, matches, ok := m.Match(path)
assert.True(t, ok)
assert.Equal(t, pattern1, pathPattern)
assert.Equal(t, "0123f", matches["name"])
assert.Equal(t, "1a2b", matches["test1"])
assert.Equal(t, "info", matches["doctype"])
assert.Equal(t, "new", matches["docname"])
path = `/a/b/c0123fD1a2b/info_new.html`
pathPattern, matches, ok = m.Match(path)
assert.False(t, ok)
path = `/say/hello/mister`
pathPattern, matches, ok = m.Match(path)
assert.True(t, ok)
assert.Equal(t, pattern2, pathPattern)
assert.Equal(t, "mister", matches["name"])
path = `/say/hallo/mister`
pathPattern, matches, ok = m.Match(path)
assert.False(t, ok)
path = `/member/01234567/news`
pathPattern, matches, ok = m.Match(path)
assert.True(t, ok)
assert.Equal(t, pattern3, pathPattern)
assert.Equal(t, "01234567", matches["id"])
assert.Equal(t, "news", matches["page"])
}