| { |
| "3.2.1 Variable Expansion" : |
| { |
| "variables": { |
| "count" : ["one", "two", "three"], |
| "dom" : ["example", "com"], |
| "dub" : "me/too", |
| "hello" : "Hello World!", |
| "half" : "50%", |
| "var" : "value", |
| "who" : "fred", |
| "base" : "http://example.com/home/", |
| "path" : "/foo/bar", |
| "list" : ["red", "green", "blue"], |
| "keys" : { "semi" : ";", "dot" : ".", "comma" : ","}, |
| "v" : "6", |
| "x" : "1024", |
| "y" : "768", |
| "empty" : "", |
| "empty_keys" : [], |
| "undef" : null |
| }, |
| "testcases" : [ |
| ["{count}", "one,two,three"], |
| ["{count*}", "one,two,three"], |
| ["{/count}", "/one,two,three"], |
| ["{/count*}", "/one/two/three"], |
| ["{;count}", ";count=one,two,three"], |
| ["{;count*}", ";count=one;count=two;count=three"], |
| ["{?count}", "?count=one,two,three"], |
| ["{?count*}", "?count=one&count=two&count=three"], |
| ["{&count*}", "&count=one&count=two&count=three"] |
| ] |
| }, |
| "3.2.2 Simple String Expansion" : |
| { |
| "variables": { |
| "count" : ["one", "two", "three"], |
| "dom" : ["example", "com"], |
| "dub" : "me/too", |
| "hello" : "Hello World!", |
| "half" : "50%", |
| "var" : "value", |
| "who" : "fred", |
| "base" : "http://example.com/home/", |
| "path" : "/foo/bar", |
| "list" : ["red", "green", "blue"], |
| "keys" : { "semi" : ";", "dot" : ".", "comma" : ","}, |
| "v" : "6", |
| "x" : "1024", |
| "y" : "768", |
| "empty" : "", |
| "empty_keys" : [], |
| "undef" : null |
| }, |
| "testcases" : [ |
| ["{var}", "value"], |
| ["{hello}", "Hello%20World%21"], |
| ["{half}", "50%25"], |
| ["O{empty}X", "OX"], |
| ["O{undef}X", "OX"], |
| ["{x,y}", "1024,768"], |
| ["{x,hello,y}", "1024,Hello%20World%21,768"], |
| ["?{x,empty}", "?1024,"], |
| ["?{x,undef}", "?1024"], |
| ["?{undef,y}", "?768"], |
| ["{var:3}", "val"], |
| ["{var:30}", "value"], |
| ["{list}", "red,green,blue"], |
| ["{list*}", "red,green,blue"], |
| ["{keys}", [ |
| "comma,%2C,dot,.,semi,%3B", |
| "comma,%2C,semi,%3B,dot,.", |
| "dot,.,comma,%2C,semi,%3B", |
| "dot,.,semi,%3B,comma,%2C", |
| "semi,%3B,comma,%2C,dot,.", |
| "semi,%3B,dot,.,comma,%2C" |
| ]], |
| ["{keys*}", [ |
| "comma=%2C,dot=.,semi=%3B", |
| "comma=%2C,semi=%3B,dot=.", |
| "dot=.,comma=%2C,semi=%3B", |
| "dot=.,semi=%3B,comma=%2C", |
| "semi=%3B,comma=%2C,dot=.", |
| "semi=%3B,dot=.,comma=%2C" |
| ]] |
| ] |
| }, |
| "3.2.3 Reserved Expansion" : |
| { |
| "variables": { |
| "count" : ["one", "two", "three"], |
| "dom" : ["example", "com"], |
| "dub" : "me/too", |
| "hello" : "Hello World!", |
| "half" : "50%", |
| "var" : "value", |
| "who" : "fred", |
| "base" : "http://example.com/home/", |
| "path" : "/foo/bar", |
| "list" : ["red", "green", "blue"], |
| "keys" : { "semi" : ";", "dot" : ".", "comma" : ","}, |
| "v" : "6", |
| "x" : "1024", |
| "y" : "768", |
| "empty" : "", |
| "empty_keys" : [], |
| "undef" : null |
| }, |
| "testcases" : [ |
| ["{+var}", "value"], |
| ["{/var,empty}", "/value/"], |
| ["{/var,undef}", "/value"], |
| ["{+hello}", "Hello%20World!"], |
| ["{+half}", "50%25"], |
| ["{base}index", "http%3A%2F%2Fexample.com%2Fhome%2Findex"], |
| ["{+base}index", "http://example.com/home/index"], |
| ["O{+empty}X", "OX"], |
| ["O{+undef}X", "OX"], |
| ["{+path}/here", "/foo/bar/here"], |
| ["{+path:6}/here", "/foo/b/here"], |
| ["here?ref={+path}", "here?ref=/foo/bar"], |
| ["up{+path}{var}/here", "up/foo/barvalue/here"], |
| ["{+x,hello,y}", "1024,Hello%20World!,768"], |
| ["{+path,x}/here", "/foo/bar,1024/here"], |
| ["{+list}", "red,green,blue"], |
| ["{+list*}", "red,green,blue"], |
| ["{+keys}", [ |
| "comma,,,dot,.,semi,;", |
| "comma,,,semi,;,dot,.", |
| "dot,.,comma,,,semi,;", |
| "dot,.,semi,;,comma,,", |
| "semi,;,comma,,,dot,.", |
| "semi,;,dot,.,comma,," |
| ]], |
| ["{+keys*}", [ |
| "comma=,,dot=.,semi=;", |
| "comma=,,semi=;,dot=.", |
| "dot=.,comma=,,semi=;", |
| "dot=.,semi=;,comma=,", |
| "semi=;,comma=,,dot=.", |
| "semi=;,dot=.,comma=," |
| ]] |
| ] |
| }, |
| "3.2.4 Fragment Expansion" : |
| { |
| "variables": { |
| "count" : ["one", "two", "three"], |
| "dom" : ["example", "com"], |
| "dub" : "me/too", |
| "hello" : "Hello World!", |
| "half" : "50%", |
| "var" : "value", |
| "who" : "fred", |
| "base" : "http://example.com/home/", |
| "path" : "/foo/bar", |
| "list" : ["red", "green", "blue"], |
| "keys" : { "semi" : ";", "dot" : ".", "comma" : ","}, |
| "v" : "6", |
| "x" : "1024", |
| "y" : "768", |
| "empty" : "", |
| "empty_keys" : [], |
| "undef" : null |
| }, |
| "testcases" : [ |
| ["{#var}", "#value"], |
| ["{#hello}", "#Hello%20World!"], |
| ["{#half}", "#50%25"], |
| ["foo{#empty}", "foo#"], |
| ["foo{#undef}", "foo"], |
| ["{#x,hello,y}", "#1024,Hello%20World!,768"], |
| ["{#path,x}/here", "#/foo/bar,1024/here"], |
| ["{#path:6}/here", "#/foo/b/here"], |
| ["{#list}", "#red,green,blue"], |
| ["{#list*}", "#red,green,blue"], |
| ["{#keys}", [ |
| "#comma,,,dot,.,semi,;", |
| "#comma,,,semi,;,dot,.", |
| "#dot,.,comma,,,semi,;", |
| "#dot,.,semi,;,comma,,", |
| "#semi,;,comma,,,dot,.", |
| "#semi,;,dot,.,comma,," |
| ]] |
| ] |
| }, |
| "3.2.5 Label Expansion with Dot-Prefix" : |
| { |
| "variables": { |
| "count" : ["one", "two", "three"], |
| "dom" : ["example", "com"], |
| "dub" : "me/too", |
| "hello" : "Hello World!", |
| "half" : "50%", |
| "var" : "value", |
| "who" : "fred", |
| "base" : "http://example.com/home/", |
| "path" : "/foo/bar", |
| "list" : ["red", "green", "blue"], |
| "keys" : { "semi" : ";", "dot" : ".", "comma" : ","}, |
| "v" : "6", |
| "x" : "1024", |
| "y" : "768", |
| "empty" : "", |
| "empty_keys" : [], |
| "undef" : null |
| }, |
| "testcases" : [ |
| ["{.who}", ".fred"], |
| ["{.who,who}", ".fred.fred"], |
| ["{.half,who}", ".50%25.fred"], |
| ["www{.dom*}", "www.example.com"], |
| ["X{.var}", "X.value"], |
| ["X{.var:3}", "X.val"], |
| ["X{.empty}", "X."], |
| ["X{.undef}", "X"], |
| ["X{.list}", "X.red,green,blue"], |
| ["X{.list*}", "X.red.green.blue"], |
| ["{#keys}", [ |
| "#comma,,,dot,.,semi,;", |
| "#comma,,,semi,;,dot,.", |
| "#dot,.,comma,,,semi,;", |
| "#dot,.,semi,;,comma,,", |
| "#semi,;,comma,,,dot,.", |
| "#semi,;,dot,.,comma,," |
| ]], |
| ["{#keys*}", [ |
| "#comma=,,dot=.,semi=;", |
| "#comma=,,semi=;,dot=.", |
| "#dot=.,comma=,,semi=;", |
| "#dot=.,semi=;,comma=,", |
| "#semi=;,comma=,,dot=.", |
| "#semi=;,dot=.,comma=," |
| ]], |
| ["X{.empty_keys}", "X"], |
| ["X{.empty_keys*}", "X"] |
| ] |
| }, |
| "3.2.6 Path Segment Expansion" : |
| { |
| "variables": { |
| "count" : ["one", "two", "three"], |
| "dom" : ["example", "com"], |
| "dub" : "me/too", |
| "hello" : "Hello World!", |
| "half" : "50%", |
| "var" : "value", |
| "who" : "fred", |
| "base" : "http://example.com/home/", |
| "path" : "/foo/bar", |
| "list" : ["red", "green", "blue"], |
| "keys" : { "semi" : ";", "dot" : ".", "comma" : ","}, |
| "v" : "6", |
| "x" : "1024", |
| "y" : "768", |
| "empty" : "", |
| "empty_keys" : [], |
| "undef" : null |
| }, |
| "testcases" : [ |
| ["{/who}", "/fred"], |
| ["{/who,who}", "/fred/fred"], |
| ["{/half,who}", "/50%25/fred"], |
| ["{/who,dub}", "/fred/me%2Ftoo"], |
| ["{/var}", "/value"], |
| ["{/var,empty}", "/value/"], |
| ["{/var,undef}", "/value"], |
| ["{/var,x}/here", "/value/1024/here"], |
| ["{/var:1,var}", "/v/value"], |
| ["{/list}", "/red,green,blue"], |
| ["{/list*}", "/red/green/blue"], |
| ["{/list*,path:4}", "/red/green/blue/%2Ffoo"], |
| ["{/keys}", [ |
| "/comma,%2C,dot,.,semi,%3B", |
| "/comma,%2C,semi,%3B,dot,.", |
| "/dot,.,comma,%2C,semi,%3B", |
| "/dot,.,semi,%3B,comma,%2C", |
| "/semi,%3B,comma,%2C,dot,.", |
| "/semi,%3B,dot,.,comma,%2C" |
| ]], |
| ["{/keys*}", [ |
| "/comma=%2C/dot=./semi=%3B", |
| "/comma=%2C/semi=%3B/dot=.", |
| "/dot=./comma=%2C/semi=%3B", |
| "/dot=./semi=%3B/comma=%2C", |
| "/semi=%3B/comma=%2C/dot=.", |
| "/semi=%3B/dot=./comma=%2C" |
| ]] |
| ] |
| }, |
| "3.2.7 Path-Style Parameter Expansion" : |
| { |
| "variables": { |
| "count" : ["one", "two", "three"], |
| "dom" : ["example", "com"], |
| "dub" : "me/too", |
| "hello" : "Hello World!", |
| "half" : "50%", |
| "var" : "value", |
| "who" : "fred", |
| "base" : "http://example.com/home/", |
| "path" : "/foo/bar", |
| "list" : ["red", "green", "blue"], |
| "keys" : { "semi" : ";", "dot" : ".", "comma" : ","}, |
| "v" : "6", |
| "x" : "1024", |
| "y" : "768", |
| "empty" : "", |
| "empty_keys" : [], |
| "undef" : null |
| }, |
| "testcases" : [ |
| ["{;who}", ";who=fred"], |
| ["{;half}", ";half=50%25"], |
| ["{;empty}", ";empty"], |
| ["{;hello:5}", ";hello=Hello"], |
| ["{;v,empty,who}", ";v=6;empty;who=fred"], |
| ["{;v,bar,who}", ";v=6;who=fred"], |
| ["{;x,y}", ";x=1024;y=768"], |
| ["{;x,y,empty}", ";x=1024;y=768;empty"], |
| ["{;x,y,undef}", ";x=1024;y=768"], |
| ["{;list}", ";list=red,green,blue"], |
| ["{;list*}", ";list=red;list=green;list=blue"], |
| ["{;keys}", [ |
| ";keys=comma,%2C,dot,.,semi,%3B", |
| ";keys=comma,%2C,semi,%3B,dot,.", |
| ";keys=dot,.,comma,%2C,semi,%3B", |
| ";keys=dot,.,semi,%3B,comma,%2C", |
| ";keys=semi,%3B,comma,%2C,dot,.", |
| ";keys=semi,%3B,dot,.,comma,%2C" |
| ]], |
| ["{;keys*}", [ |
| ";comma=%2C;dot=.;semi=%3B", |
| ";comma=%2C;semi=%3B;dot=.", |
| ";dot=.;comma=%2C;semi=%3B", |
| ";dot=.;semi=%3B;comma=%2C", |
| ";semi=%3B;comma=%2C;dot=.", |
| ";semi=%3B;dot=.;comma=%2C" |
| ]] |
| ] |
| }, |
| "3.2.8 Form-Style Query Expansion" : |
| { |
| "variables": { |
| "count" : ["one", "two", "three"], |
| "dom" : ["example", "com"], |
| "dub" : "me/too", |
| "hello" : "Hello World!", |
| "half" : "50%", |
| "var" : "value", |
| "who" : "fred", |
| "base" : "http://example.com/home/", |
| "path" : "/foo/bar", |
| "list" : ["red", "green", "blue"], |
| "keys" : { "semi" : ";", "dot" : ".", "comma" : ","}, |
| "v" : "6", |
| "x" : "1024", |
| "y" : "768", |
| "empty" : "", |
| "empty_keys" : [], |
| "undef" : null |
| }, |
| "testcases" : [ |
| ["{?who}", "?who=fred"], |
| ["{?half}", "?half=50%25"], |
| ["{?x,y}", "?x=1024&y=768"], |
| ["{?x,y,empty}", "?x=1024&y=768&empty="], |
| ["{?x,y,undef}", "?x=1024&y=768"], |
| ["{?var:3}", "?var=val"], |
| ["{?list}", "?list=red,green,blue"], |
| ["{?list*}", "?list=red&list=green&list=blue"], |
| ["{?keys}", [ |
| "?keys=comma,%2C,dot,.,semi,%3B", |
| "?keys=comma,%2C,semi,%3B,dot,.", |
| "?keys=dot,.,comma,%2C,semi,%3B", |
| "?keys=dot,.,semi,%3B,comma,%2C", |
| "?keys=semi,%3B,comma,%2C,dot,.", |
| "?keys=semi,%3B,dot,.,comma,%2C" |
| ]], |
| ["{?keys*}", [ |
| "?comma=%2C&dot=.&semi=%3B", |
| "?comma=%2C&semi=%3B&dot=.", |
| "?dot=.&comma=%2C&semi=%3B", |
| "?dot=.&semi=%3B&comma=%2C", |
| "?semi=%3B&comma=%2C&dot=.", |
| "?semi=%3B&dot=.&comma=%2C" |
| ]] |
| ] |
| }, |
| "3.2.9 Form-Style Query Continuation" : |
| { |
| "variables": { |
| "count" : ["one", "two", "three"], |
| "dom" : ["example", "com"], |
| "dub" : "me/too", |
| "hello" : "Hello World!", |
| "half" : "50%", |
| "var" : "value", |
| "who" : "fred", |
| "base" : "http://example.com/home/", |
| "path" : "/foo/bar", |
| "list" : ["red", "green", "blue"], |
| "keys" : { "semi" : ";", "dot" : ".", "comma" : ","}, |
| "v" : "6", |
| "x" : "1024", |
| "y" : "768", |
| "empty" : "", |
| "empty_keys" : [], |
| "undef" : null |
| }, |
| "testcases" : [ |
| ["{&who}", "&who=fred"], |
| ["{&half}", "&half=50%25"], |
| ["?fixed=yes{&x}", "?fixed=yes&x=1024"], |
| ["{&var:3}", "&var=val"], |
| ["{&x,y,empty}", "&x=1024&y=768&empty="], |
| ["{&x,y,undef}", "&x=1024&y=768"], |
| ["{&list}", "&list=red,green,blue"], |
| ["{&list*}", "&list=red&list=green&list=blue"], |
| ["{&keys}", [ |
| "&keys=comma,%2C,dot,.,semi,%3B", |
| "&keys=comma,%2C,semi,%3B,dot,.", |
| "&keys=dot,.,comma,%2C,semi,%3B", |
| "&keys=dot,.,semi,%3B,comma,%2C", |
| "&keys=semi,%3B,comma,%2C,dot,.", |
| "&keys=semi,%3B,dot,.,comma,%2C" |
| ]], |
| ["{&keys*}", [ |
| "&comma=%2C&dot=.&semi=%3B", |
| "&comma=%2C&semi=%3B&dot=.", |
| "&dot=.&comma=%2C&semi=%3B", |
| "&dot=.&semi=%3B&comma=%2C", |
| "&semi=%3B&comma=%2C&dot=.", |
| "&semi=%3B&dot=.&comma=%2C" |
| ]] |
| ] |
| } |
| } |