1
+ test = require ' tape'
1
2
UrlPattern = require ' ../lib/url-pattern'
2
3
3
4
{
@@ -8,194 +9,191 @@ UrlPattern = require '../lib/url-pattern'
8
9
9
10
parse = UrlPattern .newParser (UrlPattern .defaultOptions ).pattern
10
11
11
- module .exports =
12
- ' astNodeToRegexString and astNodeToNames' :
13
-
14
- ' just static alphanumeric ' : (test ) ->
15
- parsed = parse ' user42'
16
- test .equal astNodeToRegexString (parsed .value ), ' ^user42$'
17
- test .deepEqual astNodeToNames (parsed .value ), []
18
- test .done ()
19
-
20
- ' just static escaped ' : (test ) ->
21
- parsed = parse ' /api/v1/users'
22
- test .equal astNodeToRegexString (parsed .value ), ' ^\\ /api\\ /v1\\ /users$'
23
- test .deepEqual astNodeToNames (parsed .value ), []
24
- test .done ()
25
-
26
- ' just single char variable ' : (test ) ->
27
- parsed = parse ' :a'
28
- test .equal astNodeToRegexString (parsed .value ), ' ^([a-zA-Z0-9-_~ %]+)$'
29
- test .deepEqual astNodeToNames (parsed .value ), [' a' ]
30
- test .done ()
31
-
32
- ' just variable ' : (test ) ->
33
- parsed = parse ' :variable'
34
- test .equal astNodeToRegexString (parsed .value ), ' ^([a-zA-Z0-9-_~ %]+)$'
35
- test .deepEqual astNodeToNames (parsed .value ), [' variable' ]
36
- test .done ()
37
-
38
- ' just wildcard ' : (test ) ->
39
- parsed = parse ' *'
40
- test .equal astNodeToRegexString (parsed .value ), ' ^(.*?)$'
41
- test .deepEqual astNodeToNames (parsed .value ), [' _' ]
42
- test .done ()
43
-
44
- ' just optional static ' : (test ) ->
45
- parsed = parse ' (foo)'
46
- test .equal astNodeToRegexString (parsed .value ), ' ^(?:foo)?$'
47
- test .deepEqual astNodeToNames (parsed .value ), []
48
- test .done ()
49
-
50
- ' just optional variable ' : (test ) ->
51
- parsed = parse ' (:foo)'
52
- test .equal astNodeToRegexString (parsed .value ), ' ^(?:([a-zA-Z0-9-_~ %]+))?$'
53
- test .deepEqual astNodeToNames (parsed .value ), [' foo' ]
54
- test .done ()
55
-
56
- ' just optional wildcard ' : (test ) ->
57
- parsed = parse ' (*)'
58
- test .equal astNodeToRegexString (parsed .value ), ' ^(?:(.*?))?$'
59
- test .deepEqual astNodeToNames (parsed .value ), [' _' ]
60
- test .done ()
61
-
62
- ' getParam' :
63
-
64
- ' no side effects ' : (test ) ->
65
- next = {}
66
- test .equal null , getParam {}, ' one' , next
67
- test .deepEqual next, {}
68
-
69
- # value
70
-
71
- next = {}
72
- test .equal 1 , getParam {one : 1 }, ' one' , next
73
- test .deepEqual next, {}
74
-
75
- next = {one : 0 }
76
- test .equal 1 , getParam {one : 1 }, ' one' , next
77
- test .deepEqual next, {one : 0 }
78
-
79
- next = {one : 1 }
80
- test .equal null , getParam {one : 1 }, ' one' , next
81
- test .deepEqual next, {one : 1 }
82
-
83
- next = {one : 2 }
84
- test .equal null , getParam {one : 1 }, ' one' , next
85
- test .deepEqual next, {one : 2 }
86
-
87
- # array
88
-
89
- next = {}
90
- test .equal 1 , getParam {one : [1 ]}, ' one' , next
91
- test .deepEqual next, {}
92
-
93
- next = {one : 0 }
94
- test .equal 1 , getParam {one : [1 ]}, ' one' , next
95
- test .deepEqual next, {one : 0 }
96
-
97
- next = {one : 1 }
98
- test .equal null , getParam {one : [1 ]}, ' one' , next
99
- test .deepEqual next, {one : 1 }
100
-
101
- next = {one : 2 }
102
- test .equal null , getParam {one : [1 ]}, ' one' , next
103
- test .deepEqual next, {one : 2 }
104
-
105
- next = {one : 0 }
106
- test .equal 1 , getParam {one : [1 , 2 , 3 ]}, ' one' , next
107
- test .deepEqual next, {one : 0 }
108
-
109
- next = {one : 1 }
110
- test .equal 2 , getParam {one : [1 , 2 , 3 ]}, ' one' , next
111
- test .deepEqual next, {one : 1 }
112
-
113
- next = {one : 2 }
114
- test .equal 3 , getParam {one : [1 , 2 , 3 ]}, ' one' , next
115
- test .deepEqual next, {one : 2 }
116
-
117
- next = {one : 3 }
118
- test .equal null , getParam {one : [1 , 2 , 3 ]}, ' one' , next
119
- test .deepEqual next, {one : 3 }
120
-
121
- test .done ()
122
-
123
- ' side effects ' : (test ) ->
124
- next = {}
125
- test .equal 1 , getParam {one : 1 }, ' one' , next, true
126
- test .deepEqual next, {one : 1 }
127
-
128
- next = {one : 0 }
129
- test .equal 1 , getParam {one : 1 }, ' one' , next, true
130
- test .deepEqual next, {one : 1 }
131
-
132
- # array
133
-
134
- next = {}
135
- test .equal 1 , getParam {one : [1 ]}, ' one' , next, true
136
- test .deepEqual next, {one : 1 }
137
-
138
- next = {one : 0 }
139
- test .equal 1 , getParam {one : [1 ]}, ' one' , next, true
140
- test .deepEqual next, {one : 1 }
141
-
142
- next = {one : 0 }
143
- test .equal 1 , getParam {one : [1 , 2 , 3 ]}, ' one' , next, true
144
- test .deepEqual next, {one : 1 }
145
-
146
- next = {one : 1 }
147
- test .equal 2 , getParam {one : [1 , 2 , 3 ]}, ' one' , next, true
148
- test .deepEqual next, {one : 2 }
149
-
150
- next = {one : 2 }
151
- test .equal 3 , getParam {one : [1 , 2 , 3 ]}, ' one' , next, true
152
- test .deepEqual next, {one : 3 }
153
-
154
- test .done ()
155
-
156
- ' side effects errors ' : (test ) ->
157
- test .expect 2 * 6
158
-
159
- next = {}
160
- try
161
- getParam {}, ' one' , next, true
162
- catch e
163
- test .equal e .message , " no values provided for key `one`"
164
- test .deepEqual next, {}
165
-
166
- next = {one : 1 }
167
- try
168
- getParam {one : 1 }, ' one' , next, true
169
- catch e
170
- test .equal e .message , " too few values provided for key `one`"
171
- test .deepEqual next, {one : 1 }
172
-
173
- next = {one : 2 }
174
- try
175
- getParam {one : 2 }, ' one' , next, true
176
- catch e
177
- test .equal e .message , " too few values provided for key `one`"
178
- test .deepEqual next, {one : 2 }
179
-
180
- next = {one : 1 }
181
- try
182
- getParam {one : [1 ]}, ' one' , next, true
183
- catch e
184
- test .equal e .message , " too few values provided for key `one`"
185
- test .deepEqual next, {one : 1 }
186
-
187
- next = {one : 2 }
188
- try
189
- getParam {one : [1 ]}, ' one' , next, true
190
- catch e
191
- test .equal e .message , " too few values provided for key `one`"
192
- test .deepEqual next, {one : 2 }
193
-
194
- next = {one : 3 }
195
- try
196
- getParam {one : [1 , 2 , 3 ]}, ' one' , next, true
197
- catch e
198
- test .equal e .message , " too few values provided for key `one`"
199
- test .deepEqual next, {one : 3 }
200
-
201
- test .done ()
12
+ test ' astNodeToRegexString and astNodeToNames' , (t ) ->
13
+ t .test ' just static alphanumeric' , (t ) ->
14
+ parsed = parse ' user42'
15
+ t .equal astNodeToRegexString (parsed .value ), ' ^user42$'
16
+ t .deepEqual astNodeToNames (parsed .value ), []
17
+ t .end ()
18
+
19
+ t .test ' just static escaped' , (t ) ->
20
+ parsed = parse ' /api/v1/users'
21
+ t .equal astNodeToRegexString (parsed .value ), ' ^\\ /api\\ /v1\\ /users$'
22
+ t .deepEqual astNodeToNames (parsed .value ), []
23
+ t .end ()
24
+
25
+ t .test ' just single char variable' , (t ) ->
26
+ parsed = parse ' :a'
27
+ t .equal astNodeToRegexString (parsed .value ), ' ^([a-zA-Z0-9-_~ %]+)$'
28
+ t .deepEqual astNodeToNames (parsed .value ), [' a' ]
29
+ t .end ()
30
+
31
+ t .test ' just variable' , (t ) ->
32
+ parsed = parse ' :variable'
33
+ t .equal astNodeToRegexString (parsed .value ), ' ^([a-zA-Z0-9-_~ %]+)$'
34
+ t .deepEqual astNodeToNames (parsed .value ), [' variable' ]
35
+ t .end ()
36
+
37
+ t .test ' just wildcard' , (t ) ->
38
+ parsed = parse ' *'
39
+ t .equal astNodeToRegexString (parsed .value ), ' ^(.*?)$'
40
+ t .deepEqual astNodeToNames (parsed .value ), [' _' ]
41
+ t .end ()
42
+
43
+ t .test ' just optional static' , (t ) ->
44
+ parsed = parse ' (foo)'
45
+ t .equal astNodeToRegexString (parsed .value ), ' ^(?:foo)?$'
46
+ t .deepEqual astNodeToNames (parsed .value ), []
47
+ t .end ()
48
+
49
+ t .test ' just optional variable' , (t ) ->
50
+ parsed = parse ' (:foo)'
51
+ t .equal astNodeToRegexString (parsed .value ), ' ^(?:([a-zA-Z0-9-_~ %]+))?$'
52
+ t .deepEqual astNodeToNames (parsed .value ), [' foo' ]
53
+ t .end ()
54
+
55
+ t .test ' just optional wildcard' , (t ) ->
56
+ parsed = parse ' (*)'
57
+ t .equal astNodeToRegexString (parsed .value ), ' ^(?:(.*?))?$'
58
+ t .deepEqual astNodeToNames (parsed .value ), [' _' ]
59
+ t .end ()
60
+
61
+ test ' getParam' , (t ) ->
62
+ t .test ' no side effects' , (t ) ->
63
+ next = {}
64
+ t .equal undefined , getParam {}, ' one' , next
65
+ t .deepEqual next, {}
66
+
67
+ # value
68
+
69
+ next = {}
70
+ t .equal 1 , getParam {one : 1 }, ' one' , next
71
+ t .deepEqual next, {}
72
+
73
+ next = {one : 0 }
74
+ t .equal 1 , getParam {one : 1 }, ' one' , next
75
+ t .deepEqual next, {one : 0 }
76
+
77
+ next = {one : 1 }
78
+ t .equal undefined , getParam {one : 1 }, ' one' , next
79
+ t .deepEqual next, {one : 1 }
80
+
81
+ next = {one : 2 }
82
+ t .equal undefined , getParam {one : 1 }, ' one' , next
83
+ t .deepEqual next, {one : 2 }
84
+
85
+ # array
86
+
87
+ next = {}
88
+ t .equal 1 , getParam {one : [1 ]}, ' one' , next
89
+ t .deepEqual next, {}
90
+
91
+ next = {one : 0 }
92
+ t .equal 1 , getParam {one : [1 ]}, ' one' , next
93
+ t .deepEqual next, {one : 0 }
94
+
95
+ next = {one : 1 }
96
+ t .equal undefined , getParam {one : [1 ]}, ' one' , next
97
+ t .deepEqual next, {one : 1 }
98
+
99
+ next = {one : 2 }
100
+ t .equal undefined , getParam {one : [1 ]}, ' one' , next
101
+ t .deepEqual next, {one : 2 }
102
+
103
+ next = {one : 0 }
104
+ t .equal 1 , getParam {one : [1 , 2 , 3 ]}, ' one' , next
105
+ t .deepEqual next, {one : 0 }
106
+
107
+ next = {one : 1 }
108
+ t .equal 2 , getParam {one : [1 , 2 , 3 ]}, ' one' , next
109
+ t .deepEqual next, {one : 1 }
110
+
111
+ next = {one : 2 }
112
+ t .equal 3 , getParam {one : [1 , 2 , 3 ]}, ' one' , next
113
+ t .deepEqual next, {one : 2 }
114
+
115
+ next = {one : 3 }
116
+ t .equal undefined , getParam {one : [1 , 2 , 3 ]}, ' one' , next
117
+ t .deepEqual next, {one : 3 }
118
+
119
+ t .end ()
120
+
121
+ t .test ' side effects' , (t ) ->
122
+ next = {}
123
+ t .equal 1 , getParam {one : 1 }, ' one' , next, true
124
+ t .deepEqual next, {one : 1 }
125
+
126
+ next = {one : 0 }
127
+ t .equal 1 , getParam {one : 1 }, ' one' , next, true
128
+ t .deepEqual next, {one : 1 }
129
+
130
+ # array
131
+
132
+ next = {}
133
+ t .equal 1 , getParam {one : [1 ]}, ' one' , next, true
134
+ t .deepEqual next, {one : 1 }
135
+
136
+ next = {one : 0 }
137
+ t .equal 1 , getParam {one : [1 ]}, ' one' , next, true
138
+ t .deepEqual next, {one : 1 }
139
+
140
+ next = {one : 0 }
141
+ t .equal 1 , getParam {one : [1 , 2 , 3 ]}, ' one' , next, true
142
+ t .deepEqual next, {one : 1 }
143
+
144
+ next = {one : 1 }
145
+ t .equal 2 , getParam {one : [1 , 2 , 3 ]}, ' one' , next, true
146
+ t .deepEqual next, {one : 2 }
147
+
148
+ next = {one : 2 }
149
+ t .equal 3 , getParam {one : [1 , 2 , 3 ]}, ' one' , next, true
150
+ t .deepEqual next, {one : 3 }
151
+
152
+ t .end ()
153
+
154
+ t .test ' side effects errors' , (t ) ->
155
+ t .plan 2 * 6
156
+
157
+ next = {}
158
+ try
159
+ getParam {}, ' one' , next, true
160
+ catch e
161
+ t .equal e .message , " no values provided for key `one`"
162
+ t .deepEqual next, {}
163
+
164
+ next = {one : 1 }
165
+ try
166
+ getParam {one : 1 }, ' one' , next, true
167
+ catch e
168
+ t .equal e .message , " too few values provided for key `one`"
169
+ t .deepEqual next, {one : 1 }
170
+
171
+ next = {one : 2 }
172
+ try
173
+ getParam {one : 2 }, ' one' , next, true
174
+ catch e
175
+ t .equal e .message , " too few values provided for key `one`"
176
+ t .deepEqual next, {one : 2 }
177
+
178
+ next = {one : 1 }
179
+ try
180
+ getParam {one : [1 ]}, ' one' , next, true
181
+ catch e
182
+ t .equal e .message , " too few values provided for key `one`"
183
+ t .deepEqual next, {one : 1 }
184
+
185
+ next = {one : 2 }
186
+ try
187
+ getParam {one : [1 ]}, ' one' , next, true
188
+ catch e
189
+ t .equal e .message , " too few values provided for key `one`"
190
+ t .deepEqual next, {one : 2 }
191
+
192
+ next = {one : 3 }
193
+ try
194
+ getParam {one : [1 , 2 , 3 ]}, ' one' , next, true
195
+ catch e
196
+ t .equal e .message , " too few values provided for key `one`"
197
+ t .deepEqual next, {one : 3 }
198
+
199
+ t .end ()
0 commit comments