-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_routrie.py
More file actions
108 lines (85 loc) · 2.24 KB
/
test_routrie.py
File metadata and controls
108 lines (85 loc) · 2.24 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import pickle
import pytest
from routrie import Router
def test_routing() -> None:
router = Router(
routes={
"/": 0,
"/users": 1,
"/users/:id": 2,
"/users/:id/:org": 3,
"/users/:user_id/repos": 4,
"/users/:user_id/repos/:id": 5,
"/users/:user_id/repos/:id/*any": 6,
"/:username": 7,
"/:any*": 8,
"/about": 9,
"/about/": 10,
"/about/us": 11,
"/users/repos/*any": 12,
}
)
# Matched "/"
node = router.find("/")
assert node is not None
match, params = node
assert match == 0
assert params == []
# Matched "/:username"
node = router.find("/username")
assert node is not None
match, params = node
assert match == 7
assert params == [("username", "username")]
# Matched "/*any"
node = router.find("/user/s")
assert node is not None
match, params = node
assert match == 8
assert params == [("any", "user/s")]
def test_no_match() -> None:
router = Router(routes={"/": 0})
# No match
node = router.find("/noway-jose")
assert node is None
def test_empty_path() -> None:
router = Router(routes={"/": 0, "": 1,})
node = router.find("/")
assert node is not None
match, params = node
assert match == 0
assert params == []
node = router.find("")
assert node is not None
match, params = node
assert match == 1
assert params == []
def test_serialization() -> None:
router = Router({"/": 0})
router: Router[int] = pickle.loads(pickle.dumps(router))
# No match
node = router.find("/noway-jose")
assert node is None
# Match
node = router.find("/")
assert node is not None
match, params = node
assert match == 0
assert params == []
def test_duplicate_route() -> None:
# only the last one is preserved
router = Router(
routes=dict(
[
("/:foo", 0),
("/:bar", 1),
]
)
)
node = router.find("/baz")
assert node is not None
match, params = node
assert match == 0
assert params == [("foo", "baz")]
if __name__ == "__main__":
pytest.main()