// Generated by scripts/import_httpwg_tests.py (version 1.0.0).
// Do not edit by hand.
// Source: httpwg/structured-field-tests @ 1e280c3ed9ffe0ca5fdb1d97219dddc389007677
///| Marks the start of a fresh text segment.
///|
/// Begins a new text segment.
pub let httpwg_cases_part_0 : Array[HttpwgCase] = [
{
name: "basic binary",
header_type: "item",
raw: [":aGVsbG8=:"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpBinary("68656c6c6f"), params: [] })),
},
{
name: "empty binary",
header_type: "item",
raw: ["::"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpBinary(""), params: [] })),
},
{
name: "padding at beginning",
header_type: "item",
raw: [":=aGVsbG8=:"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "padding in middle",
header_type: "item",
raw: [":a=GVsbG8=:"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "bad padding",
header_type: "item",
raw: [":aGVsbG8:"],
must_fail: false,
can_fail: true,
canonical: Some([":aGVsbG8=:"]),
expected: Some(ExpItemField({ bare: ExpBinary("68656c6c6f"), params: [] })),
},
{
name: "bad padding dot",
header_type: "item",
raw: [":aGVsbG8.:"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "bad end delimiter",
header_type: "item",
raw: [":aGVsbG8="],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "extra whitespace",
header_type: "item",
raw: [":aGVsb G8=:"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "all whitespace",
header_type: "item",
raw: [": :"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "extra chars",
header_type: "item",
raw: [":aGVsbG!8=:"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "suffix chars",
header_type: "item",
raw: [":aGVsbG8=!:"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "non-zero pad bits",
header_type: "item",
raw: [":iZ==:"],
must_fail: false,
can_fail: true,
canonical: Some([":iQ==:"]),
expected: Some(ExpItemField({ bare: ExpBinary("89"), params: [] })),
},
{
name: "non-ASCII binary",
header_type: "item",
raw: [":/+Ah:"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpBinary("ffe021"), params: [] })),
},
{
name: "base64url binary",
header_type: "item",
raw: [":_-Ah:"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "binary prefix only",
header_type: "item",
raw: [":"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "basic true boolean",
header_type: "item",
raw: ["?1"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpBoolean(true), params: [] })),
},
{
name: "basic false boolean",
header_type: "item",
raw: ["?0"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpBoolean(false), params: [] })),
},
{
name: "unknown boolean",
header_type: "item",
raw: ["?Q"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "whitespace boolean",
header_type: "item",
raw: ["? 1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "negative zero boolean",
header_type: "item",
raw: ["?-0"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
]
///|
/// Begins a new text segment.
pub let httpwg_cases_part_1 : Array[HttpwgCase] = [
{
name: "T boolean",
header_type: "item",
raw: ["?T"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "F boolean",
header_type: "item",
raw: ["?F"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "t boolean",
header_type: "item",
raw: ["?t"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "f boolean",
header_type: "item",
raw: ["?f"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "spelled-out True boolean",
header_type: "item",
raw: ["?True"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "spelled-out False boolean",
header_type: "item",
raw: ["?False"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "boolean prefix only",
header_type: "item",
raw: ["?"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "date - 1970-01-01 00:00:00",
header_type: "item",
raw: ["@0"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpDate(0L), params: [] })),
},
{
name: "date - 2022-08-04 01:57:13",
header_type: "item",
raw: ["@1659578233"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpDate(1659578233L), params: [] })),
},
{
name: "date - 1917-05-30 22:02:47",
header_type: "item",
raw: ["@-1659578233"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpDate(-1659578233L), params: [] })),
},
{
name: "date - 2^31",
header_type: "item",
raw: ["@2147483648"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpDate(2147483648L), params: [] })),
},
{
name: "date - 2^32",
header_type: "item",
raw: ["@4294967296"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpDate(4294967296L), params: [] })),
},
{
name: "interoperability max date - 9999" + "-12-31 00:00:00",
header_type: "item",
raw: ["@253402214400"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpDate(253402214400L), params: [] })),
},
{
name: "interoperability min date - 0001" + "-01-01 00:00:00",
header_type: "item",
raw: ["@-62135596800"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpDate(-62135596800L), params: [] })),
},
{
name: "date - decimal",
header_type: "item",
raw: ["@1659578233.12"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "syntactic max date - 999,999,999" + ",999,999",
header_type: "item",
raw: ["@999999999999999"],
must_fail: false,
can_fail: true,
canonical: None,
expected: Some(
ExpItemField({ bare: ExpDate(999999999999999L), params: [] }),
),
},
{
name: "syntactic min date - -999,999,99" + "9,999,999",
header_type: "item",
raw: ["@-999999999999999"],
must_fail: false,
can_fail: true,
canonical: None,
expected: Some(
ExpItemField({ bare: ExpDate(-999999999999999L), params: [] }),
),
},
{
name: "too large syntactic date - 1,000" + ",000,000,000,000",
header_type: "item",
raw: ["@1000000000000000"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "too small syntactic date - -1,00" + "0,000,000,000,000",
header_type: "item",
raw: ["@-1000000000000000"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "date with negative zero",
header_type: "item",
raw: ["@-0"],
must_fail: false,
can_fail: false,
canonical: Some(["@0"]),
expected: Some(ExpItemField({ bare: ExpDate(0L), params: [] })),
},
]
///|
/// Begins a new text segment.
pub let httpwg_cases_part_2 : Array[HttpwgCase] = [
{
name: "date - empty",
header_type: "item",
raw: ["@"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "date - sign only",
header_type: "item",
raw: ["@-"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "date - space",
header_type: "item",
raw: ["@ 12345678"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "date - non-digit",
header_type: "item",
raw: ["@abc"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "basic dictionary",
header_type: "dictionary",
raw: ["en=\"Applepie\", da=:w4ZibGV0w6Zyd" + "GUK:"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpDictField([
("en", ExpItemMember({ bare: ExpString("Applepie"), params: [] })),
(
"da",
ExpItemMember({
bare: ExpBinary("c386626c6574c3a67274650a"),
params: [],
}),
),
]),
),
},
{
name: "empty dictionary",
header_type: "dictionary",
raw: [""],
must_fail: false,
can_fail: false,
canonical: Some([]),
expected: Some(ExpDictField([])),
},
{
name: "single item dictionary",
header_type: "dictionary",
raw: ["a=1"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpDictField([("a", ExpItemMember({ bare: ExpInteger(1L), params: [] }))]),
),
},
{
name: "list item dictionary",
header_type: "dictionary",
raw: ["a=(1 2)"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpDictField([
(
"a",
ExpInnerList(
[
{ bare: ExpInteger(1L), params: [] },
{ bare: ExpInteger(2L), params: [] },
],
[],
),
),
]),
),
},
{
name: "single list item dictionary",
header_type: "dictionary",
raw: ["a=(1)"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpDictField([
("a", ExpInnerList([{ bare: ExpInteger(1L), params: [] }], [])),
]),
),
},
{
name: "empty list item dictionary",
header_type: "dictionary",
raw: ["a=()"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpDictField([("a", ExpInnerList([], []))])),
},
{
name: "no whitespace dictionary",
header_type: "dictionary",
raw: ["a=1,b=2"],
must_fail: false,
can_fail: false,
canonical: Some(["a=1, b=2"]),
expected: Some(
ExpDictField([
("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
]),
),
},
{
name: "extra whitespace dictionary",
header_type: "dictionary",
raw: ["a=1 , b=2"],
must_fail: false,
can_fail: false,
canonical: Some(["a=1, b=2"]),
expected: Some(
ExpDictField([
("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
]),
),
},
{
name: "tab separated dictionary",
header_type: "dictionary",
raw: ["a=1\t,\tb=2"],
must_fail: false,
can_fail: false,
canonical: Some(["a=1, b=2"]),
expected: Some(
ExpDictField([
("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
]),
),
},
{
name: "leading whitespace dictionary",
header_type: "dictionary",
raw: [" a=1 , b=2"],
must_fail: false,
can_fail: false,
canonical: Some(["a=1, b=2"]),
expected: Some(
ExpDictField([
("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
]),
),
},
{
name: "whitespace before = dictionary",
header_type: "dictionary",
raw: ["a =1, b=2"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "whitespace after = dictionary",
header_type: "dictionary",
raw: ["a=1, b= 2"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "two lines dictionary",
header_type: "dictionary",
raw: ["a=1", "b=2"],
must_fail: false,
can_fail: false,
canonical: Some(["a=1, b=2"]),
expected: Some(
ExpDictField([
("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
]),
),
},
{
name: "missing value dictionary",
header_type: "dictionary",
raw: ["a=1, b, c=3"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpDictField([
("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
("b", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
("c", ExpItemMember({ bare: ExpInteger(3L), params: [] })),
]),
),
},
{
name: "all missing value dictionary",
header_type: "dictionary",
raw: ["a, b, c"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpDictField([
("a", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
("b", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
("c", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
]),
),
},
{
name: "start missing value dictionary",
header_type: "dictionary",
raw: ["a, b=2"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpDictField([
("a", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
]),
),
},
]
///|
/// Begins a new text segment.
pub let httpwg_cases_part_3 : Array[HttpwgCase] = [
{
name: "end missing value dictionary",
header_type: "dictionary",
raw: ["a=1, b"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpDictField([
("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
("b", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
]),
),
},
{
name: "missing value with params dictio" + "nary",
header_type: "dictionary",
raw: ["a=1, b;foo=9, c=3"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpDictField([
("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
(
"b",
ExpItemMember({
bare: ExpBoolean(true),
params: [{ key: "foo", value: ExpInteger(9L) }],
}),
),
("c", ExpItemMember({ bare: ExpInteger(3L), params: [] })),
]),
),
},
{
name: "explicit true value with params " + "dictionary",
header_type: "dictionary",
raw: ["a=1, b=?1;foo=9, c=3"],
must_fail: false,
can_fail: false,
canonical: Some(["a=1, b;foo=9, c=3"]),
expected: Some(
ExpDictField([
("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
(
"b",
ExpItemMember({
bare: ExpBoolean(true),
params: [{ key: "foo", value: ExpInteger(9L) }],
}),
),
("c", ExpItemMember({ bare: ExpInteger(3L), params: [] })),
]),
),
},
{
name: "trailing comma dictionary",
header_type: "dictionary",
raw: ["a=1, b=2,"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "empty item dictionary",
header_type: "dictionary",
raw: ["a=1,,b=2,"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "duplicate key dictionary",
header_type: "dictionary",
raw: ["a=1,b=2,a=3"],
must_fail: false,
can_fail: false,
canonical: Some(["a=3, b=2"]),
expected: Some(
ExpDictField([
("a", ExpItemMember({ bare: ExpInteger(3L), params: [] })),
("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
]),
),
},
{
name: "dictionary key ordering",
header_type: "dictionary",
raw: ["m, z, t"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpDictField([
("m", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
("z", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
("t", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
]),
),
},
{
name: "numeric key dictionary",
header_type: "dictionary",
raw: ["a=1,1b=2,a=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "uppercase key dictionary",
header_type: "dictionary",
raw: ["a=1,B=2,a=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "bad key dictionary",
header_type: "dictionary",
raw: ["a=1,b!=2,a=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "basic display string (ascii cont" + "ent)",
header_type: "item",
raw: ["%\"foo bar\""],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpItemField({ bare: ExpDisplayString("foo bar"), params: [] }),
),
},
{
name: "all printable ascii",
header_type: "item",
raw: [
"%\" !%22#$%25&'()*+,-./0123456789" +
":;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY" +
"Z[\\]^_`abcdefghijklmnopqrstuvwxy" +
"z{|}~\"",
],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpItemField({
bare: ExpDisplayString(
" !\"#$%&'()*+,-./0123456789:;<=>?" +
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" +
"`abcdefghijklmnopqrstuvwxyz{|}~",
),
params: [],
}),
),
},
{
name: "non-ascii display string (upperc" + "ase escaping)",
header_type: "item",
raw: ["%\"f%C3%BC%C3%BC\""],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "non-ascii display string (lowerc" + "ase escaping)",
header_type: "item",
raw: ["%\"f%c3%bc%c3%bc\""],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpItemField({ bare: ExpDisplayString("f\u00fc\u00fc"), params: [] }),
),
},
{
name: "non-ascii display string (unesca" + "ped)",
header_type: "item",
raw: ["%\"f\u00fc\u00fc\""],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "tab in display string",
header_type: "item",
raw: ["%\"\t\""],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "newline in display string",
header_type: "item",
raw: ["%\"\n\""],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "single quoted display string",
header_type: "item",
raw: ["%'foo'"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "unquoted display string",
header_type: "item",
raw: ["%foo"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "display string missing initial q" + "uote",
header_type: "item",
raw: ["%foo\""],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
]
///|
/// Begins a new text segment.
pub let httpwg_cases_part_4 : Array[HttpwgCase] = [
{
name: "unbalanced display string",
header_type: "item",
raw: ["%\"foo"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "display string quoting",
header_type: "item",
raw: ["%\"foo %22bar%22 \\ baz\""],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpItemField({ bare: ExpDisplayString("foo \"bar\" \\ baz"), params: [] }),
),
},
{
name: "bad display string escaping",
header_type: "item",
raw: ["%\"foo %a"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "bad display string utf-8 (invali" + "d 2-byte seq)",
header_type: "item",
raw: ["%\"%c3%28\""],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "bad display string utf-8 (invali" + "d sequence id)",
header_type: "item",
raw: ["%\"%a0%a1\""],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "bad display string utf-8 (invali" + "d hex)",
header_type: "item",
raw: ["%\"%g0%1w\""],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "bad display string utf-8 (invali" + "d 3-byte seq)",
header_type: "item",
raw: ["%\"%e2%28%a1\""],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "bad display string utf-8 (invali" + "d 4-byte seq)",
header_type: "item",
raw: ["%\"%f0%28%8c%28\""],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "BOM in display string",
header_type: "item",
raw: ["%\"BOM: %ef%bb%bf\""],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpItemField({ bare: ExpDisplayString("BOM: \u{feff}"), params: [] }),
),
},
{
name: "two lines display string",
header_type: "item",
raw: ["%\"foo", "bar\""],
must_fail: false,
can_fail: true,
canonical: Some(["%\"foo, bar\""]),
expected: Some(
ExpItemField({ bare: ExpDisplayString("foo, bar"), params: [] }),
),
},
{
name: "truncated display string escape " + "(zero digits)",
header_type: "item",
raw: ["%\"%\""],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "over-encoded display string",
header_type: "item",
raw: ["%\"%61\""],
must_fail: false,
can_fail: false,
canonical: Some(["%\"a\""]),
expected: Some(ExpItemField({ bare: ExpDisplayString("a"), params: [] })),
},
{
name: "Foo-Example",
header_type: "item",
raw: ["2; foourl=\"https://foo.example.c" + "om/\""],
must_fail: false,
can_fail: false,
canonical: Some(["2;foourl=\"https://foo.example.co" + "m/\""]),
expected: Some(
ExpItemField({
bare: ExpInteger(2L),
params: [
{ key: "foourl", value: ExpString("https://foo.example.com/") },
],
}),
),
},
{
name: "Example-StrListHeader",
header_type: "list",
raw: ["\"foo\", \"bar\", \"It was the best o" + "f times.\""],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpListField([
ExpItemMember({ bare: ExpString("foo"), params: [] }),
ExpItemMember({ bare: ExpString("bar"), params: [] }),
ExpItemMember({
bare: ExpString("It was the best of times."),
params: [],
}),
]),
),
},
{
name: "Example-Hdr (list on one line)",
header_type: "list",
raw: ["foo, bar"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpListField([
ExpItemMember({ bare: ExpToken("foo"), params: [] }),
ExpItemMember({ bare: ExpToken("bar"), params: [] }),
]),
),
},
{
name: "Example-Hdr (list on two lines)",
header_type: "list",
raw: ["foo", "bar"],
must_fail: false,
can_fail: false,
canonical: Some(["foo, bar"]),
expected: Some(
ExpListField([
ExpItemMember({ bare: ExpToken("foo"), params: [] }),
ExpItemMember({ bare: ExpToken("bar"), params: [] }),
]),
),
},
{
name: "Example-StrListListHeader",
header_type: "list",
raw: ["(\"foo\" \"bar\"), (\"baz\"), (\"bat\" \"" + "one\"), ()"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpListField([
ExpInnerList(
[
{ bare: ExpString("foo"), params: [] },
{ bare: ExpString("bar"), params: [] },
],
[],
),
ExpInnerList([{ bare: ExpString("baz"), params: [] }], []),
ExpInnerList(
[
{ bare: ExpString("bat"), params: [] },
{ bare: ExpString("one"), params: [] },
],
[],
),
ExpInnerList([], []),
]),
),
},
{
name: "Example-ListListParam",
header_type: "list",
raw: ["(\"foo\"; a=1;b=2);lvl=5, (\"bar\" \"" + "baz\");lvl=1"],
must_fail: false,
can_fail: false,
canonical: Some(["(\"foo\";a=1;b=2);lvl=5, (\"bar\" \"b" + "az\");lvl=1"]),
expected: Some(
ExpListField([
ExpInnerList(
[
{
bare: ExpString("foo"),
params: [
{ key: "a", value: ExpInteger(1L) },
{ key: "b", value: ExpInteger(2L) },
],
},
],
[{ key: "lvl", value: ExpInteger(5L) }],
),
ExpInnerList(
[
{ bare: ExpString("bar"), params: [] },
{ bare: ExpString("baz"), params: [] },
],
[{ key: "lvl", value: ExpInteger(1L) }],
),
]),
),
},
{
name: "Example-ParamListHeader",
header_type: "list",
raw: ["abc;a=1;b=2; cde_456, (ghi;jk=4 " + "l);q=\"9\";r=w"],
must_fail: false,
can_fail: false,
canonical: Some(["abc;a=1;b=2;cde_456, (ghi;jk=4 l" + ");q=\"9\";r=w"]),
expected: Some(
ExpListField([
ExpItemMember({
bare: ExpToken("abc"),
params: [
{ key: "a", value: ExpInteger(1L) },
{ key: "b", value: ExpInteger(2L) },
{ key: "cde_456", value: ExpBoolean(true) },
],
}),
ExpInnerList(
[
{
bare: ExpToken("ghi"),
params: [{ key: "jk", value: ExpInteger(4L) }],
},
{ bare: ExpToken("l"), params: [] },
],
[
{ key: "q", value: ExpString("9") },
{ key: "r", value: ExpToken("w") },
],
),
]),
),
},
{
name: "Example-IntHeader",
header_type: "item",
raw: ["1; a; b=?0"],
must_fail: false,
can_fail: false,
canonical: Some(["1;a;b=?0"]),
expected: Some(
ExpItemField({
bare: ExpInteger(1L),
params: [
{ key: "a", value: ExpBoolean(true) },
{ key: "b", value: ExpBoolean(false) },
],
}),
),
},
]
///|
/// Begins a new text segment.
pub let httpwg_cases_part_5 : Array[HttpwgCase] = [
{
name: "Example-DictHeader",
header_type: "dictionary",
raw: ["en=\"Applepie\", da=:w4ZibGV0w6Zyd" + "GU=:"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpDictField([
("en", ExpItemMember({ bare: ExpString("Applepie"), params: [] })),
(
"da",
ExpItemMember({
bare: ExpBinary("c386626c6574c3a6727465"),
params: [],
}),
),
]),
),
},
{
name: "Example-DictHeader (boolean valu" + "es)",
header_type: "dictionary",
raw: ["a=?0, b, c; foo=bar"],
must_fail: false,
can_fail: false,
canonical: Some(["a=?0, b, c;foo=bar"]),
expected: Some(
ExpDictField([
("a", ExpItemMember({ bare: ExpBoolean(false), params: [] })),
("b", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
(
"c",
ExpItemMember({
bare: ExpBoolean(true),
params: [{ key: "foo", value: ExpToken("bar") }],
}),
),
]),
),
},
{
name: "Example-DictListHeader",
header_type: "dictionary",
raw: ["rating=1.5, feelings=(joy sadnes" + "s)"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpDictField([
("rating", ExpItemMember({ bare: ExpDecimal(15L, 1), params: [] })),
(
"feelings",
ExpInnerList(
[
{ bare: ExpToken("joy"), params: [] },
{ bare: ExpToken("sadness"), params: [] },
],
[],
),
),
]),
),
},
{
name: "Example-MixDict",
header_type: "dictionary",
raw: ["a=(1 2), b=3, c=4;aa=bb, d=(5 6)" + ";valid"],
must_fail: false,
can_fail: false,
canonical: Some(["a=(1 2), b=3, c=4;aa=bb, d=(5 6)" + ";valid"]),
expected: Some(
ExpDictField([
(
"a",
ExpInnerList(
[
{ bare: ExpInteger(1L), params: [] },
{ bare: ExpInteger(2L), params: [] },
],
[],
),
),
("b", ExpItemMember({ bare: ExpInteger(3L), params: [] })),
(
"c",
ExpItemMember({
bare: ExpInteger(4L),
params: [{ key: "aa", value: ExpToken("bb") }],
}),
),
(
"d",
ExpInnerList(
[
{ bare: ExpInteger(5L), params: [] },
{ bare: ExpInteger(6L), params: [] },
],
[{ key: "valid", value: ExpBoolean(true) }],
),
),
]),
),
},
{
name: "Example-Hdr (dictionary on one l" + "ine)",
header_type: "dictionary",
raw: ["foo=1, bar=2"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpDictField([
("foo", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
("bar", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
]),
),
},
{
name: "Example-Hdr (dictionary on two l" + "ines)",
header_type: "dictionary",
raw: ["foo=1", "bar=2"],
must_fail: false,
can_fail: false,
canonical: Some(["foo=1, bar=2"]),
expected: Some(
ExpDictField([
("foo", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
("bar", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
]),
),
},
{
name: "Example-IntItemHeader",
header_type: "item",
raw: ["5"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpInteger(5L), params: [] })),
},
{
name: "Example-IntItemHeader (params)",
header_type: "item",
raw: ["5; foo=bar"],
must_fail: false,
can_fail: false,
canonical: Some(["5;foo=bar"]),
expected: Some(
ExpItemField({
bare: ExpInteger(5L),
params: [{ key: "foo", value: ExpToken("bar") }],
}),
),
},
{
name: "Example-IntegerHeader",
header_type: "item",
raw: ["42"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpInteger(42L), params: [] })),
},
{
name: "Example-FloatHeader",
header_type: "item",
raw: ["4.5"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpDecimal(45L, 1), params: [] })),
},
{
name: "Example-StringHeader",
header_type: "item",
raw: ["\"hello world\""],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpString("hello world"), params: [] })),
},
{
name: "Example-BinaryHdr",
header_type: "item",
raw: [":cHJldGVuZCB0aGlzIGlzIGJpbmFyeSB" + "jb250ZW50Lg==:"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(
ExpItemField({
bare: ExpBinary(
"70726574656e64207468697320697320" + "62696e61727920636f6e74656e742e",
),
params: [],
}),
),
},
{
name: "Example-BoolHdr",
header_type: "item",
raw: ["?1"],
must_fail: false,
can_fail: false,
canonical: None,
expected: Some(ExpItemField({ bare: ExpBoolean(true), params: [] })),
},
{
name: "empty item",
header_type: "item",
raw: [""],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "leading space",
header_type: "item",
raw: [" \t 1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "trailing space",
header_type: "item",
raw: ["1 \t "],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "leading and trailing space",
header_type: "item",
raw: [" 1 "],
must_fail: false,
can_fail: false,
canonical: Some(["1"]),
expected: Some(ExpItemField({ bare: ExpInteger(1L), params: [] })),
},
{
name: "leading and trailing whitespace",
header_type: "item",
raw: [" 1 "],
must_fail: false,
can_fail: false,
canonical: Some(["1"]),
expected: Some(ExpItemField({ bare: ExpInteger(1L), params: [] })),
},
{
name: "0x00 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0000=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x01 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0001=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
]
///|
/// Begins a new text segment.
pub let httpwg_cases_part_6 : Array[HttpwgCase] = [
{
name: "0x02 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0002=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x03 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0003=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x04 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0004=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x05 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0005=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x06 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0006=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x07 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0007=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x08 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0008=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x09 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\t=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x0a as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\n=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x0b as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u000b=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x0c as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u000c=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x0d as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\r=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x0e as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u000e=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x0f as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u000f=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x10 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0010=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x11 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0011=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x12 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0012=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x13 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0013=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x14 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0014=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x15 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0015=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
]
///|
/// Begins a new text segment.
pub let httpwg_cases_part_7 : Array[HttpwgCase] = [
{
name: "0x16 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0016=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x17 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0017=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x18 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0018=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x19 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u0019=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x1a as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u001a=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x1b as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u001b=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x1c as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u001c=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x1d as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u001d=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x1e as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u001e=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x1f as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\u001f=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x20 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x21 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["!=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x22 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["\"=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x23 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["#=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x24 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["$=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x25 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["%=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x26 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["&=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x27 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["'=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x28 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: ["(=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
{
name: "0x29 as a single-character dicti" + "onary key",
header_type: "dictionary",
raw: [")=1"],
must_fail: true,
can_fail: false,
canonical: None,
expected: None,
},
]