Imported Upstream version 0.16
[liburi-template-perl.git] / t / cases / spec-examples-by-section.json
diff --git a/t/cases/spec-examples-by-section.json b/t/cases/spec-examples-by-section.json
new file mode 100644 (file)
index 0000000..dbb00ff
--- /dev/null
@@ -0,0 +1,437 @@
+{
+  "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"],
+        ["{+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"
+          ]]
+     ]
+  }
+}