Skip to content
1 change: 1 addition & 0 deletions http/deno.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"./unstable-server-sent-event-stream": "./unstable_server_sent_event_stream.ts",
"./status": "./status.ts",
"./unstable-signed-cookie": "./unstable_signed_cookie.ts",
"./unstable-structured-fields": "./unstable_structured_fields.ts",
"./user-agent": "./user_agent.ts",
"./unstable-route": "./unstable_route.ts"
}
Expand Down
100 changes: 100 additions & 0 deletions http/testdata/structured_fields/binary.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
[
{
"name": "basic binary",
"raw": [":aGVsbG8=:"],
"header_type": "item",
"expected": [
{"__type": "binary", "value": "NBSWY3DP"},
[]]
},
{
"name": "empty binary",
"raw": ["::"],
"header_type": "item",
"expected": [
{"__type": "binary", "value": ""},
[]]
},
{
"name": "padding at beginning",
"raw": [":=aGVsbG8=:"],
"header_type": "item",
"must_fail": true
},
{
"name": "padding in middle",
"raw": [":a=GVsbG8=:"],
"header_type": "item",
"must_fail": true
},
{
"name": "bad padding",
"raw": [":aGVsbG8:"],
"header_type": "item",
"expected": [
{"__type": "binary", "value": "NBSWY3DP"},
[]],
"can_fail": true,
"canonical": [":aGVsbG8=:"]
},
{
"name": "bad padding dot",
"raw": [":aGVsbG8.:"],
"header_type": "item",
"must_fail": true
},
{
"name": "bad end delimiter",
"raw": [":aGVsbG8="],
"header_type": "item",
"must_fail": true
},
{
"name": "extra whitespace",
"raw": [":aGVsb G8=:"],
"header_type": "item",
"must_fail": true
},
{
"name": "all whitespace",
"raw": [": :"],
"header_type": "item",
"must_fail": true
},
{
"name": "extra chars",
"raw": [":aGVsbG!8=:"],
"header_type": "item",
"must_fail": true
},
{
"name": "suffix chars",
"raw": [":aGVsbG8=!:"],
"header_type": "item",
"must_fail": true
},
{
"name": "non-zero pad bits",
"raw": [":iZ==:"],
"header_type": "item",
"expected": [
{"__type": "binary", "value": "RE======"},
[]],
"can_fail": true,
"canonical": [":iQ==:"]
},
{
"name": "non-ASCII binary",
"raw": [":/+Ah:"],
"header_type": "item",
"expected": [
{"__type": "binary", "value": "77QCC==="},
[]]
},
{
"name": "base64url binary",
"raw": [":_-Ah:"],
"header_type": "item",
"must_fail": true
}
]
69 changes: 69 additions & 0 deletions http/testdata/structured_fields/boolean.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
[
{
"name": "basic true boolean",
"raw": ["?1"],
"header_type": "item",
"expected": [true, []]
},
{
"name": "basic false boolean",
"raw": ["?0"],
"header_type": "item",
"expected": [false, []]
},
{
"name": "unknown boolean",
"raw": ["?Q"],
"header_type": "item",
"must_fail": true
},
{
"name": "whitespace boolean",
"raw": ["? 1"],
"header_type": "item",
"must_fail": true
},
{
"name": "negative zero boolean",
"raw": ["?-0"],
"header_type": "item",
"must_fail": true
},
{
"name": "T boolean",
"raw": ["?T"],
"header_type": "item",
"must_fail": true
},
{
"name": "F boolean",
"raw": ["?F"],
"header_type": "item",
"must_fail": true
},
{
"name": "t boolean",
"raw": ["?t"],
"header_type": "item",
"must_fail": true
},
{
"name": "f boolean",
"raw": ["?f"],
"header_type": "item",
"must_fail": true
},
{
"name": "spelled-out True boolean",
"raw": ["?True"],
"header_type": "item",
"must_fail": true
},
{
"name": "spelled-out False boolean",
"raw": ["?False"],
"header_type": "item",
"must_fail": true
}
]

50 changes: 50 additions & 0 deletions http/testdata/structured_fields/date.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
[
{
"name": "date - 1970-01-01 00:00:00",
"raw": ["@0"],
"header_type": "item",
"expected": [{"__type": "date", "value": 0}, []]
},
{
"name": "date - 2022-08-04 01:57:13",
"raw": ["@1659578233"],
"header_type": "item",
"expected": [{"__type": "date", "value": 1659578233}, []]
},
{
"name": "date - 1917-05-30 22:02:47",
"raw": ["@-1659578233"],
"header_type": "item",
"expected": [{"__type": "date", "value": -1659578233}, []]
},
{
"name": "date - 2^31",
"raw": ["@2147483648"],
"header_type": "item",
"expected": [{"__type": "date", "value": 2147483648}, []]
},
{
"name": "date - 2^32",
"raw": ["@4294967296"],
"header_type": "item",
"expected": [{"__type": "date", "value": 4294967296}, []]
},
{
"name": "large date - 9999-12-31 00:00:00",
"raw": ["@253402214400"],
"header_type": "item",
"expected": [{"__type": "date", "value": 253402214400}, []]
},
{
"name": "small date - 0001-01-01 00:00:00",
"raw": ["@-62135596800"],
"header_type": "item",
"expected": [{"__type": "date", "value": -62135596800}, []]
},
{
"name": "date - decimal",
"raw": ["@1659578233.12"],
"header_type": "item",
"must_fail": true
}
]
163 changes: 163 additions & 0 deletions http/testdata/structured_fields/dictionary.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
[
{
"name": "basic dictionary",
"raw": ["en=\"Applepie\", da=:w4ZibGV0w6ZydGUK:"],
"header_type": "dictionary",
"expected": [["en", ["Applepie", []]], ["da", [
{"__type": "binary", "value": "YODGE3DFOTB2M4TUMUFA===="},
[]]
]]
},
{
"name": "empty dictionary",
"raw": [""],
"header_type": "dictionary",
"expected": [],
"canonical": []
},
{
"name": "single item dictionary",
"raw": ["a=1"],
"header_type": "dictionary",
"expected": [["a", [1, []]]]
},
{
"name": "list item dictionary",
"raw": ["a=(1 2)"],
"header_type": "dictionary",
"expected": [["a", [[[1, []], [2, []]], []]]]
},
{
"name": "single list item dictionary",
"raw": ["a=(1)"],
"header_type": "dictionary",
"expected": [["a", [[[1, []]], []]]]
},
{
"name": "empty list item dictionary",
"raw": ["a=()"],
"header_type": "dictionary",
"expected": [["a", [[], []]]]
},
{
"name": "no whitespace dictionary",
"raw": ["a=1,b=2"],
"header_type": "dictionary",
"expected": [["a", [1, []]], ["b", [2, []]]],
"canonical": ["a=1, b=2"]
},
{
"name": "extra whitespace dictionary",
"raw": ["a=1 , b=2"],
"header_type": "dictionary",
"expected": [["a", [1, []]], ["b", [2, []]]],
"canonical": ["a=1, b=2"]
},
{
"name": "tab separated dictionary",
"raw": ["a=1\t,\tb=2"],
"header_type": "dictionary",
"expected": [["a", [1, []]], ["b", [2, []]]],
"canonical": ["a=1, b=2"]
},
{
"name": "leading whitespace dictionary",
"raw": [" a=1 , b=2"],
"header_type": "dictionary",
"expected": [["a", [1, []]], ["b", [2, []]]],
"canonical": ["a=1, b=2"]
},
{
"name": "whitespace before = dictionary",
"raw": ["a =1, b=2"],
"header_type": "dictionary",
"must_fail": true
},
{
"name": "whitespace after = dictionary",
"raw": ["a=1, b= 2"],
"header_type": "dictionary",
"must_fail": true
},
{
"name": "two lines dictionary",
"raw": ["a=1", "b=2"],
"header_type": "dictionary",
"expected": [["a", [1, []]], ["b", [2, []]]],
"canonical": ["a=1, b=2"]
},
{
"name": "missing value dictionary",
"raw": ["a=1, b, c=3"],
"header_type": "dictionary",
"expected": [["a", [1, []]], ["b", [true, []]], ["c", [3, []]]]
},
{
"name": "all missing value dictionary",
"raw": ["a, b, c"],
"header_type": "dictionary",
"expected": [["a", [true, []]], ["b", [true, []]], ["c", [true, []]]]
},
{
"name": "start missing value dictionary",
"raw": ["a, b=2"],
"header_type": "dictionary",
"expected": [["a", [true, []]], ["b", [2, []]]]
},
{
"name": "end missing value dictionary",
"raw": ["a=1, b"],
"header_type": "dictionary",
"expected": [["a", [1, []]], ["b", [true, []]]]
},
{
"name": "missing value with params dictionary",
"raw": ["a=1, b;foo=9, c=3"],
"header_type": "dictionary",
"expected": [["a", [1, []]], ["b", [true, [["foo", 9]]]], ["c", [3, []]]]
},
{
"name": "explicit true value with params dictionary",
"raw": ["a=1, b=?1;foo=9, c=3"],
"header_type": "dictionary",
"expected": [["a", [1, []]], ["b", [true, [["foo", 9]]]], ["c", [3, []]]],
"canonical": ["a=1, b;foo=9, c=3"]
},
{
"name": "trailing comma dictionary",
"raw": ["a=1, b=2,"],
"header_type": "dictionary",
"must_fail": true
},
{
"name": "empty item dictionary",
"raw": ["a=1,,b=2,"],
"header_type": "dictionary",
"must_fail": true
},
{
"name": "duplicate key dictionary",
"raw": ["a=1,b=2,a=3"],
"header_type": "dictionary",
"expected": [["a", [3, []]], ["b", [2, []]]],
"canonical": ["a=3, b=2"]
},
{
"name": "numeric key dictionary",
"raw": ["a=1,1b=2,a=1"],
"header_type": "dictionary",
"must_fail": true
},
{
"name": "uppercase key dictionary",
"raw": ["a=1,B=2,a=1"],
"header_type": "dictionary",
"must_fail": true
},
{
"name": "bad key dictionary",
"raw": ["a=1,b!=2,a=1"],
"header_type": "dictionary",
"must_fail": true
}
]
Loading
Loading