1 | {
|
2 | "3.2.1 Variable Expansion" :
|
3 | {
|
4 | "variables": {
|
5 | "count" : ["one", "two", "three"],
|
6 | "dom" : ["example", "com"],
|
7 | "dub" : "me/too",
|
8 | "hello" : "Hello World!",
|
9 | "half" : "50%",
|
10 | "var" : "value",
|
11 | "who" : "fred",
|
12 | "base" : "http://example.com/home/",
|
13 | "path" : "/foo/bar",
|
14 | "list" : ["red", "green", "blue"],
|
15 | "keys" : { "semi" : ";", "dot" : ".", "comma" : ","},
|
16 | "v" : "6",
|
17 | "x" : "1024",
|
18 | "y" : "768",
|
19 | "empty" : "",
|
20 | "empty_keys" : [],
|
21 | "undef" : null
|
22 | },
|
23 | "testcases" : [
|
24 | ["{count}", "one,two,three"],
|
25 | ["{count*}", "one,two,three"],
|
26 | ["{/count}", "/one,two,three"],
|
27 | ["{/count*}", "/one/two/three"],
|
28 | ["{;count}", ";count=one,two,three"],
|
29 | ["{;count*}", ";count=one;count=two;count=three"],
|
30 | ["{?count}", "?count=one,two,three"],
|
31 | ["{?count*}", "?count=one&count=two&count=three"],
|
32 | ["{&count*}", "&count=one&count=two&count=three"]
|
33 | ]
|
34 | },
|
35 | "3.2.2 Simple String Expansion" :
|
36 | {
|
37 | "variables": {
|
38 | "count" : ["one", "two", "three"],
|
39 | "dom" : ["example", "com"],
|
40 | "dub" : "me/too",
|
41 | "hello" : "Hello World!",
|
42 | "half" : "50%",
|
43 | "var" : "value",
|
44 | "who" : "fred",
|
45 | "base" : "http://example.com/home/",
|
46 | "path" : "/foo/bar",
|
47 | "list" : ["red", "green", "blue"],
|
48 | "keys" : { "semi" : ";", "dot" : ".", "comma" : ","},
|
49 | "v" : "6",
|
50 | "x" : "1024",
|
51 | "y" : "768",
|
52 | "empty" : "",
|
53 | "empty_keys" : [],
|
54 | "undef" : null
|
55 | },
|
56 | "testcases" : [
|
57 | ["{var}", "value"],
|
58 | ["{hello}", "Hello%20World%21"],
|
59 | ["{half}", "50%25"],
|
60 | ["O{empty}X", "OX"],
|
61 | ["O{undef}X", "OX"],
|
62 | ["{x,y}", "1024,768"],
|
63 | ["{x,hello,y}", "1024,Hello%20World%21,768"],
|
64 | ["?{x,empty}", "?1024,"],
|
65 | ["?{x,undef}", "?1024"],
|
66 | ["?{undef,y}", "?768"],
|
67 | ["{var:3}", "val"],
|
68 | ["{var:30}", "value"],
|
69 | ["{list}", "red,green,blue"],
|
70 | ["{list*}", "red,green,blue"],
|
71 | ["{keys}", [
|
72 | "comma,%2C,dot,.,semi,%3B",
|
73 | "comma,%2C,semi,%3B,dot,.",
|
74 | "dot,.,comma,%2C,semi,%3B",
|
75 | "dot,.,semi,%3B,comma,%2C",
|
76 | "semi,%3B,comma,%2C,dot,.",
|
77 | "semi,%3B,dot,.,comma,%2C"
|
78 | ]],
|
79 | ["{keys*}", [
|
80 | "comma=%2C,dot=.,semi=%3B",
|
81 | "comma=%2C,semi=%3B,dot=.",
|
82 | "dot=.,comma=%2C,semi=%3B",
|
83 | "dot=.,semi=%3B,comma=%2C",
|
84 | "semi=%3B,comma=%2C,dot=.",
|
85 | "semi=%3B,dot=.,comma=%2C"
|
86 | ]]
|
87 | ]
|
88 | },
|
89 | "3.2.3 Reserved Expansion" :
|
90 | {
|
91 | "variables": {
|
92 | "count" : ["one", "two", "three"],
|
93 | "dom" : ["example", "com"],
|
94 | "dub" : "me/too",
|
95 | "hello" : "Hello World!",
|
96 | "half" : "50%",
|
97 | "var" : "value",
|
98 | "who" : "fred",
|
99 | "base" : "http://example.com/home/",
|
100 | "path" : "/foo/bar",
|
101 | "list" : ["red", "green", "blue"],
|
102 | "keys" : { "semi" : ";", "dot" : ".", "comma" : ","},
|
103 | "v" : "6",
|
104 | "x" : "1024",
|
105 | "y" : "768",
|
106 | "empty" : "",
|
107 | "empty_keys" : [],
|
108 | "undef" : null
|
109 | },
|
110 | "testcases" : [
|
111 | ["{+var}", "value"],
|
112 | ["{/var,empty}", "/value/"],
|
113 | ["{/var,undef}", "/value"],
|
114 | ["{+hello}", "Hello%20World!"],
|
115 | ["{+half}", "50%25"],
|
116 | ["{base}index", "http%3A%2F%2Fexample.com%2Fhome%2Findex"],
|
117 | ["{+base}index", "http://example.com/home/index"],
|
118 | ["O{+empty}X", "OX"],
|
119 | ["O{+undef}X", "OX"],
|
120 | ["{+path}/here", "/foo/bar/here"],
|
121 | ["{+path:6}/here", "/foo/b/here"],
|
122 | ["here?ref={+path}", "here?ref=/foo/bar"],
|
123 | ["up{+path}{var}/here", "up/foo/barvalue/here"],
|
124 | ["{+x,hello,y}", "1024,Hello%20World!,768"],
|
125 | ["{+path,x}/here", "/foo/bar,1024/here"],
|
126 | ["{+list}", "red,green,blue"],
|
127 | ["{+list*}", "red,green,blue"],
|
128 | ["{+keys}", [
|
129 | "comma,,,dot,.,semi,;",
|
130 | "comma,,,semi,;,dot,.",
|
131 | "dot,.,comma,,,semi,;",
|
132 | "dot,.,semi,;,comma,,",
|
133 | "semi,;,comma,,,dot,.",
|
134 | "semi,;,dot,.,comma,,"
|
135 | ]],
|
136 | ["{+keys*}", [
|
137 | "comma=,,dot=.,semi=;",
|
138 | "comma=,,semi=;,dot=.",
|
139 | "dot=.,comma=,,semi=;",
|
140 | "dot=.,semi=;,comma=,",
|
141 | "semi=;,comma=,,dot=.",
|
142 | "semi=;,dot=.,comma=,"
|
143 | ]]
|
144 | ]
|
145 | },
|
146 | "3.2.4 Fragment Expansion" :
|
147 | {
|
148 | "variables": {
|
149 | "count" : ["one", "two", "three"],
|
150 | "dom" : ["example", "com"],
|
151 | "dub" : "me/too",
|
152 | "hello" : "Hello World!",
|
153 | "half" : "50%",
|
154 | "var" : "value",
|
155 | "who" : "fred",
|
156 | "base" : "http://example.com/home/",
|
157 | "path" : "/foo/bar",
|
158 | "list" : ["red", "green", "blue"],
|
159 | "keys" : { "semi" : ";", "dot" : ".", "comma" : ","},
|
160 | "v" : "6",
|
161 | "x" : "1024",
|
162 | "y" : "768",
|
163 | "empty" : "",
|
164 | "empty_keys" : [],
|
165 | "undef" : null
|
166 | },
|
167 | "testcases" : [
|
168 | ["{#var}", "#value"],
|
169 | ["{#hello}", "#Hello%20World!"],
|
170 | ["{#half}", "#50%25"],
|
171 | ["foo{#empty}", "foo#"],
|
172 | ["foo{#undef}", "foo"],
|
173 | ["{#x,hello,y}", "#1024,Hello%20World!,768"],
|
174 | ["{#path,x}/here", "#/foo/bar,1024/here"],
|
175 | ["{#path:6}/here", "#/foo/b/here"],
|
176 | ["{#list}", "#red,green,blue"],
|
177 | ["{#list*}", "#red,green,blue"],
|
178 | ["{#keys}", [
|
179 | "#comma,,,dot,.,semi,;",
|
180 | "#comma,,,semi,;,dot,.",
|
181 | "#dot,.,comma,,,semi,;",
|
182 | "#dot,.,semi,;,comma,,",
|
183 | "#semi,;,comma,,,dot,.",
|
184 | "#semi,;,dot,.,comma,,"
|
185 | ]]
|
186 | ]
|
187 | },
|
188 | "3.2.5 Label Expansion with Dot-Prefix" :
|
189 | {
|
190 | "variables": {
|
191 | "count" : ["one", "two", "three"],
|
192 | "dom" : ["example", "com"],
|
193 | "dub" : "me/too",
|
194 | "hello" : "Hello World!",
|
195 | "half" : "50%",
|
196 | "var" : "value",
|
197 | "who" : "fred",
|
198 | "base" : "http://example.com/home/",
|
199 | "path" : "/foo/bar",
|
200 | "list" : ["red", "green", "blue"],
|
201 | "keys" : { "semi" : ";", "dot" : ".", "comma" : ","},
|
202 | "v" : "6",
|
203 | "x" : "1024",
|
204 | "y" : "768",
|
205 | "empty" : "",
|
206 | "empty_keys" : [],
|
207 | "undef" : null
|
208 | },
|
209 | "testcases" : [
|
210 | ["{.who}", ".fred"],
|
211 | ["{.who,who}", ".fred.fred"],
|
212 | ["{.half,who}", ".50%25.fred"],
|
213 | ["www{.dom*}", "www.example.com"],
|
214 | ["X{.var}", "X.value"],
|
215 | ["X{.var:3}", "X.val"],
|
216 | ["X{.empty}", "X."],
|
217 | ["X{.undef}", "X"],
|
218 | ["X{.list}", "X.red,green,blue"],
|
219 | ["X{.list*}", "X.red.green.blue"],
|
220 | ["{#keys}", [
|
221 | "#comma,,,dot,.,semi,;",
|
222 | "#comma,,,semi,;,dot,.",
|
223 | "#dot,.,comma,,,semi,;",
|
224 | "#dot,.,semi,;,comma,,",
|
225 | "#semi,;,comma,,,dot,.",
|
226 | "#semi,;,dot,.,comma,,"
|
227 | ]],
|
228 | ["{#keys*}", [
|
229 | "#comma=,,dot=.,semi=;",
|
230 | "#comma=,,semi=;,dot=.",
|
231 | "#dot=.,comma=,,semi=;",
|
232 | "#dot=.,semi=;,comma=,",
|
233 | "#semi=;,comma=,,dot=.",
|
234 | "#semi=;,dot=.,comma=,"
|
235 | ]],
|
236 | ["X{.empty_keys}", "X"],
|
237 | ["X{.empty_keys*}", "X"]
|
238 | ]
|
239 | },
|
240 | "3.2.6 Path Segment Expansion" :
|
241 | {
|
242 | "variables": {
|
243 | "count" : ["one", "two", "three"],
|
244 | "dom" : ["example", "com"],
|
245 | "dub" : "me/too",
|
246 | "hello" : "Hello World!",
|
247 | "half" : "50%",
|
248 | "var" : "value",
|
249 | "who" : "fred",
|
250 | "base" : "http://example.com/home/",
|
251 | "path" : "/foo/bar",
|
252 | "list" : ["red", "green", "blue"],
|
253 | "keys" : { "semi" : ";", "dot" : ".", "comma" : ","},
|
254 | "v" : "6",
|
255 | "x" : "1024",
|
256 | "y" : "768",
|
257 | "empty" : "",
|
258 | "empty_keys" : [],
|
259 | "undef" : null
|
260 | },
|
261 | "testcases" : [
|
262 | ["{/who}", "/fred"],
|
263 | ["{/who,who}", "/fred/fred"],
|
264 | ["{/half,who}", "/50%25/fred"],
|
265 | ["{/who,dub}", "/fred/me%2Ftoo"],
|
266 | ["{/var}", "/value"],
|
267 | ["{/var,empty}", "/value/"],
|
268 | ["{/var,undef}", "/value"],
|
269 | ["{/var,x}/here", "/value/1024/here"],
|
270 | ["{/var:1,var}", "/v/value"],
|
271 | ["{/list}", "/red,green,blue"],
|
272 | ["{/list*}", "/red/green/blue"],
|
273 | ["{/list*,path:4}", "/red/green/blue/%2Ffoo"],
|
274 | ["{/keys}", [
|
275 | "/comma,%2C,dot,.,semi,%3B",
|
276 | "/comma,%2C,semi,%3B,dot,.",
|
277 | "/dot,.,comma,%2C,semi,%3B",
|
278 | "/dot,.,semi,%3B,comma,%2C",
|
279 | "/semi,%3B,comma,%2C,dot,.",
|
280 | "/semi,%3B,dot,.,comma,%2C"
|
281 | ]],
|
282 | ["{/keys*}", [
|
283 | "/comma=%2C/dot=./semi=%3B",
|
284 | "/comma=%2C/semi=%3B/dot=.",
|
285 | "/dot=./comma=%2C/semi=%3B",
|
286 | "/dot=./semi=%3B/comma=%2C",
|
287 | "/semi=%3B/comma=%2C/dot=.",
|
288 | "/semi=%3B/dot=./comma=%2C"
|
289 | ]]
|
290 | ]
|
291 | },
|
292 | "3.2.7 Path-Style Parameter Expansion" :
|
293 | {
|
294 | "variables": {
|
295 | "count" : ["one", "two", "three"],
|
296 | "dom" : ["example", "com"],
|
297 | "dub" : "me/too",
|
298 | "hello" : "Hello World!",
|
299 | "half" : "50%",
|
300 | "var" : "value",
|
301 | "who" : "fred",
|
302 | "base" : "http://example.com/home/",
|
303 | "path" : "/foo/bar",
|
304 | "list" : ["red", "green", "blue"],
|
305 | "keys" : { "semi" : ";", "dot" : ".", "comma" : ","},
|
306 | "v" : "6",
|
307 | "x" : "1024",
|
308 | "y" : "768",
|
309 | "empty" : "",
|
310 | "empty_keys" : [],
|
311 | "undef" : null
|
312 | },
|
313 | "testcases" : [
|
314 | ["{;who}", ";who=fred"],
|
315 | ["{;half}", ";half=50%25"],
|
316 | ["{;empty}", ";empty"],
|
317 | ["{;hello:5}", ";hello=Hello"],
|
318 | ["{;v,empty,who}", ";v=6;empty;who=fred"],
|
319 | ["{;v,bar,who}", ";v=6;who=fred"],
|
320 | ["{;x,y}", ";x=1024;y=768"],
|
321 | ["{;x,y,empty}", ";x=1024;y=768;empty"],
|
322 | ["{;x,y,undef}", ";x=1024;y=768"],
|
323 | ["{;list}", ";list=red,green,blue"],
|
324 | ["{;list*}", ";list=red;list=green;list=blue"],
|
325 | ["{;keys}", [
|
326 | ";keys=comma,%2C,dot,.,semi,%3B",
|
327 | ";keys=comma,%2C,semi,%3B,dot,.",
|
328 | ";keys=dot,.,comma,%2C,semi,%3B",
|
329 | ";keys=dot,.,semi,%3B,comma,%2C",
|
330 | ";keys=semi,%3B,comma,%2C,dot,.",
|
331 | ";keys=semi,%3B,dot,.,comma,%2C"
|
332 | ]],
|
333 | ["{;keys*}", [
|
334 | ";comma=%2C;dot=.;semi=%3B",
|
335 | ";comma=%2C;semi=%3B;dot=.",
|
336 | ";dot=.;comma=%2C;semi=%3B",
|
337 | ";dot=.;semi=%3B;comma=%2C",
|
338 | ";semi=%3B;comma=%2C;dot=.",
|
339 | ";semi=%3B;dot=.;comma=%2C"
|
340 | ]]
|
341 | ]
|
342 | },
|
343 | "3.2.8 Form-Style Query Expansion" :
|
344 | {
|
345 | "variables": {
|
346 | "count" : ["one", "two", "three"],
|
347 | "dom" : ["example", "com"],
|
348 | "dub" : "me/too",
|
349 | "hello" : "Hello World!",
|
350 | "half" : "50%",
|
351 | "var" : "value",
|
352 | "who" : "fred",
|
353 | "base" : "http://example.com/home/",
|
354 | "path" : "/foo/bar",
|
355 | "list" : ["red", "green", "blue"],
|
356 | "keys" : { "semi" : ";", "dot" : ".", "comma" : ","},
|
357 | "v" : "6",
|
358 | "x" : "1024",
|
359 | "y" : "768",
|
360 | "empty" : "",
|
361 | "empty_keys" : [],
|
362 | "undef" : null
|
363 | },
|
364 | "testcases" : [
|
365 | ["{?who}", "?who=fred"],
|
366 | ["{?half}", "?half=50%25"],
|
367 | ["{?x,y}", "?x=1024&y=768"],
|
368 | ["{?x,y,empty}", "?x=1024&y=768&empty="],
|
369 | ["{?x,y,undef}", "?x=1024&y=768"],
|
370 | ["{?var:3}", "?var=val"],
|
371 | ["{?list}", "?list=red,green,blue"],
|
372 | ["{?list*}", "?list=red&list=green&list=blue"],
|
373 | ["{?keys}", [
|
374 | "?keys=comma,%2C,dot,.,semi,%3B",
|
375 | "?keys=comma,%2C,semi,%3B,dot,.",
|
376 | "?keys=dot,.,comma,%2C,semi,%3B",
|
377 | "?keys=dot,.,semi,%3B,comma,%2C",
|
378 | "?keys=semi,%3B,comma,%2C,dot,.",
|
379 | "?keys=semi,%3B,dot,.,comma,%2C"
|
380 | ]],
|
381 | ["{?keys*}", [
|
382 | "?comma=%2C&dot=.&semi=%3B",
|
383 | "?comma=%2C&semi=%3B&dot=.",
|
384 | "?dot=.&comma=%2C&semi=%3B",
|
385 | "?dot=.&semi=%3B&comma=%2C",
|
386 | "?semi=%3B&comma=%2C&dot=.",
|
387 | "?semi=%3B&dot=.&comma=%2C"
|
388 | ]]
|
389 | ]
|
390 | },
|
391 | "3.2.9 Form-Style Query Continuation" :
|
392 | {
|
393 | "variables": {
|
394 | "count" : ["one", "two", "three"],
|
395 | "dom" : ["example", "com"],
|
396 | "dub" : "me/too",
|
397 | "hello" : "Hello World!",
|
398 | "half" : "50%",
|
399 | "var" : "value",
|
400 | "who" : "fred",
|
401 | "base" : "http://example.com/home/",
|
402 | "path" : "/foo/bar",
|
403 | "list" : ["red", "green", "blue"],
|
404 | "keys" : { "semi" : ";", "dot" : ".", "comma" : ","},
|
405 | "v" : "6",
|
406 | "x" : "1024",
|
407 | "y" : "768",
|
408 | "empty" : "",
|
409 | "empty_keys" : [],
|
410 | "undef" : null
|
411 | },
|
412 | "testcases" : [
|
413 | ["{&who}", "&who=fred"],
|
414 | ["{&half}", "&half=50%25"],
|
415 | ["?fixed=yes{&x}", "?fixed=yes&x=1024"],
|
416 | ["{&var:3}", "&var=val"],
|
417 | ["{&x,y,empty}", "&x=1024&y=768&empty="],
|
418 | ["{&x,y,undef}", "&x=1024&y=768"],
|
419 | ["{&list}", "&list=red,green,blue"],
|
420 | ["{&list*}", "&list=red&list=green&list=blue"],
|
421 | ["{&keys}", [
|
422 | "&keys=comma,%2C,dot,.,semi,%3B",
|
423 | "&keys=comma,%2C,semi,%3B,dot,.",
|
424 | "&keys=dot,.,comma,%2C,semi,%3B",
|
425 | "&keys=dot,.,semi,%3B,comma,%2C",
|
426 | "&keys=semi,%3B,comma,%2C,dot,.",
|
427 | "&keys=semi,%3B,dot,.,comma,%2C"
|
428 | ]],
|
429 | ["{&keys*}", [
|
430 | "&comma=%2C&dot=.&semi=%3B",
|
431 | "&comma=%2C&semi=%3B&dot=.",
|
432 | "&dot=.&comma=%2C&semi=%3B",
|
433 | "&dot=.&semi=%3B&comma=%2C",
|
434 | "&semi=%3B&comma=%2C&dot=.",
|
435 | "&semi=%3B&dot=.&comma=%2C"
|
436 | ]]
|
437 | ]
|
438 | }
|
439 | }
|