1[
2    {
3        "name": "Foo-Example",
4        "raw": ["2; foourl=\"https://foo.example.com/\""],
5        "header_type": "item",
6        "expected": [2, [["foourl", "https://foo.example.com/"]]],
7        "canonical": ["2;foourl=\"https://foo.example.com/\""]
8    },
9    {
10        "name": "Example-StrListHeader",
11        "raw": ["\"foo\", \"bar\", \"It was the best of times.\""],
12        "header_type": "list",
13        "expected": [
14            ["foo", []],
15            ["bar", []],
16            ["It was the best of times.", []]
17        ]
18    },
19    {
20        "name": "Example-Hdr (list on one line)",
21        "raw": ["foo, bar"],
22        "header_type": "list",
23        "expected": [
24            [{"__type":"token", "value":"foo"}, []],
25            [{"__type":"token", "value":"bar"}, []]
26        ]
27    },
28    {
29        "name": "Example-Hdr (list on two lines)",
30        "raw": ["foo", "bar"],
31        "header_type": "list",
32        "expected": [
33            [{"__type":"token", "value":"foo"}, []],
34            [{"__type":"token", "value":"bar"}, []]
35        ],
36        "canonical": ["foo, bar"]
37    },
38    {
39        "name": "Example-StrListListHeader",
40        "raw": ["(\"foo\" \"bar\"), (\"baz\"), (\"bat\" \"one\"), ()"],
41        "header_type": "list",
42        "expected": [
43            [[
44                ["foo", []],
45                ["bar", []]
46            ], []],
47            [[
48                ["baz", []]
49            ], []],
50            [[
51                ["bat", []],
52                ["one", []]
53            ], []],
54            [[], []]
55        ]
56    },
57    {
58        "name": "Example-ListListParam",
59        "raw": ["(\"foo\"; a=1;b=2);lvl=5, (\"bar\" \"baz\");lvl=1"],
60        "header_type": "list",
61        "expected": [
62            [[
63                ["foo", [["a", 1], ["b", 2]]]
64            ], [["lvl", 5]]],
65            [[
66                ["bar", []], ["baz", []]
67            ], [["lvl", 1]]]
68        ],
69        "canonical": ["(\"foo\";a=1;b=2);lvl=5, (\"bar\" \"baz\");lvl=1"]
70    },
71
72    {
73        "name": "Example-ParamListHeader",
74        "raw": ["abc;a=1;b=2; cde_456, (ghi;jk=4 l);q=\"9\";r=w"],
75        "header_type": "list",
76        "expected": [
77            [{"__type": "token", "value": "abc"}, [["a", 1], ["b", 2], ["cde_456", true]]],
78            [
79            [
80                [{"__type": "token", "value": "ghi"}, [["jk", 4]]],
81                [{"__type": "token", "value": "l"}, []]
82            ],
83            [["q", "9"], ["r", {"__type": "token", "value": "w"}]]
84            ]
85        ],
86        "canonical": ["abc;a=1;b=2;cde_456, (ghi;jk=4 l);q=\"9\";r=w"]
87    },
88    {
89        "name": "Example-IntHeader",
90        "raw": ["1; a; b=?0"],
91        "header_type": "item",
92        "expected": [1, [["a", true], ["b", false]]],
93        "canonical": ["1;a;b=?0"]
94    },
95    {
96        "name": "Example-DictHeader",
97        "raw": ["en=\"Applepie\", da=:w4ZibGV0w6ZydGU=:"],
98        "header_type": "dictionary",
99        "expected": [
100            ["en", ["Applepie", []]],
101            ["da", [{"__type": "binary", "value": "YODGE3DFOTB2M4TUMU======"}, []]]
102        ]
103    },
104    {
105        "name": "Example-DictHeader",
106        "raw": ["a=?0, b, c; foo=bar"],
107        "header_type": "dictionary",
108        "expected": [
109            ["a", [false, []]],
110            ["b", [true, []]],
111            ["c", [true, [["foo", {"__type": "token", "value": "bar"}]]]]
112        ],
113        "canonical": ["a=?0, b, c;foo=bar"]
114    },
115    {
116        "name": "Example-DictListHeader",
117        "raw": ["rating=1.5, feelings=(joy sadness)"],
118        "header_type": "dictionary",
119        "expected": [
120            ["rating", [1.5, []]],
121            ["feelings", [[
122                [{"__type": "token", "value": "joy"}, []],
123                [{"__type": "token", "value": "sadness"}, []]
124            ], []]]
125        ]
126    },
127    {
128        "name": "Example-MixDict",
129        "raw": ["a=(1 2), b=3, c=4;aa=bb, d=(5 6);valid"],
130        "header_type": "dictionary",
131        "expected": [
132            ["a", [[
133                [1, []],
134                [2, []]
135            ], []]],
136            ["b", [3, []]],
137            ["c", [4, [["aa", {"__type": "token", "value": "bb"}]]]],
138            ["d", [[
139                [5, []],
140                [6, []]
141            ], [["valid", true]]]]
142        ],
143        "canonical": ["a=(1 2), b=3, c=4;aa=bb, d=(5 6);valid"]
144    },
145    {
146        "name": "Example-Hdr (dictionary on one line)",
147        "raw": ["foo=1, bar=2"],
148        "header_type": "dictionary",
149        "expected": [
150            ["foo", [1, []]],
151            ["bar", [2, []]]
152        ]
153    },
154    {
155        "name": "Example-Hdr (dictionary on two lines)",
156        "raw": ["foo=1", "bar=2"],
157        "header_type": "dictionary",
158        "expected": [
159            ["foo", [1, []]],
160            ["bar", [2, []]]
161        ],
162        "canonical": ["foo=1, bar=2"]
163    },
164
165    {
166        "name": "Example-IntItemHeader",
167        "raw": ["5"],
168        "header_type": "item",
169        "expected": [5, []]
170    },
171    {
172        "name": "Example-IntItemHeader (params)",
173        "raw": ["5; foo=bar"],
174        "header_type": "item",
175        "expected": [5, [["foo", {"__type": "token", "value": "bar"}]]],
176        "canonical": ["5;foo=bar"]
177    },
178    {
179        "name": "Example-IntegerHeader",
180        "raw": ["42"],
181        "header_type": "item",
182        "expected": [42, []]
183    },
184    {
185        "name": "Example-FloatHeader",
186        "raw": ["4.5"],
187        "header_type": "item",
188        "expected": [4.5, []]
189    },
190    {
191        "name": "Example-StringHeader",
192        "raw": ["\"hello world\""],
193        "header_type": "item",
194        "expected": ["hello world", []]
195    },
196    {
197        "name": "Example-BinaryHdr",
198        "raw": [":cHJldGVuZCB0aGlzIGlzIGJpbmFyeSBjb250ZW50Lg==:"],
199        "header_type": "item",
200        "expected": [{"__type": "binary", "value": "OBZGK5DFNZSCA5DINFZSA2LTEBRGS3TBOJ4SAY3PNZ2GK3TUFY======"}, []]
201    },
202    {
203        "name": "Example-BoolHdr",
204        "raw": ["?1"],
205        "header_type": "item",
206        "expected": [true, []]
207    }
208]
209