blob: e90827d837c5bc1ad7318c81af24c103d8bb1fe0 [file] [log] [blame]
<!doctype html>
<html>
<head>
<meta charset=utf-8>
<title>Test cookie name parsing</title>
<meta name=help href="https://tools.ietf.org/html/rfc6265#section-5.2">
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/cookies/resources/cookie-test.js"></script>
</head>
<body>
<div id=log></div>
<script>
const nameTests = [
{
cookie: "test1=; path = /",
expected: "test1=",
name: "Set valueless cookie to its name with empty value",
defaultValue: false,
},
{
cookie: "=test=2",
expected: "test=2",
name: "Set a nameless cookie (that has an = in its value)",
},
{
cookie: "===test=2b",
expected: "==test=2b",
name: "Set a nameless cookie (that has multiple ='s in its value)",
},
{
cookie: "=test2c",
expected: "test2c",
name: "Set a nameless cookie",
},
{
cookie: "test =3",
expected: "test=3",
name: "Remove trailing WSP characters from the name string",
},
{
cookie: " test=4",
expected: "test=4",
name: "Remove leading WSP characters from the name string",
},
{
cookie: ['"test=5"=test', '"test=5'],
expected: '"test=5',
name: "Only return the new cookie (with the same name)",
},
{
cookie: "test6;cool=dude",
expected: "test6",
name: "Ignore invalid attributes after nameless cookie",
},
{
cookie: "$Version=1; test=7",
expected: "$Version=1",
name: "Ignore invalid attributes after valid name (that looks like Cookie2 Version attribute)",
},
{
cookie: "test test=8",
expected: "test test=8",
name: "Set a cookie that has whitespace in its name",
},
{
cookie: '"test9;test"=9',
expected: '"test9',
name: "Set a nameless cookie ignoring characters after first ;",
},
{
cookie: '"test\"10;baz"=qux',
expected: '"test\"10',
name: "Set a nameless cookie ignoring characters after first ; (2)",
},
{
cookie: ["=test=11", "test11"],
expected: "test11",
name: "Return the most recent nameless cookie",
},
{
cookie: ["test11", "test11a"],
expected: "test11a",
name: "Return the most recent nameless cookie, without leading =",
},
{
cookie: ["test11", "test11a", "=test11b"],
expected: "test11b",
name: "Return the most recent nameless cookie, even if preceded by =",
},
{
cookie: ["test11", "test11a", "=test11b", "test=11c"],
expected: "test11b; test=11c",
name: "Return the most recent nameless cookie, even if preceded by =, in addition to other valid cookie",
},
{
cookie: ["test12=11", "test12=12"],
expected: "test12=12",
name: "Use last value for cookies with identical names",
},
{
cookie: ["testA=13", "testB=13"],
expected: "testA=13; testB=13",
name: "Keep first-in, first-out name order",
},
{
cookie: ["a=test14", "z=test14"],
expected: "a=test14; z=test14",
name: "Keep first-in, first-out single-char name order",
},
{
cookie: ["z=test15", "a=test15"],
expected: "z=test15; a=test15",
name: "Keep non-alphabetic first-in, first-out name order",
},
{
cookie: "z=test16, a=test16",
expected: "z=test16, a=test16",
name: "Keep first-in, first-out order if comma-separated",
},
{
cookie: ["testA=16", "=test16", "testB=16"],
expected: "testA=16; test16; testB=16",
name: "Set nameless cookie, given `Set-Cookie: =test16`",
},
{
cookie: ["test17a", "test17b"],
expected: "test17b",
name: "Overwrite nameless cookie",
},
{
cookie: "=",
expected: "",
name: "Ignore cookie with empty name and empty value",
},
{
cookie: "",
expected: "",
name: "Ignore cookie with no name or value",
},
];
for (const test of nameTests) {
httpCookieTest(test.cookie, test.expected, test.name);
}
for (const name of ["a", "1", "$", "!a", "@a", "#a", "$a", "%a",
"^a", "&a", "*a", "(a", ")a", "-a", "_a", "+",
'"a', '"a=b"'
]) {
const cookie = `${name}=test`;
httpCookieTest(cookie, cookie, `Name is set as expected for ${name}=test`);
}
</script>
</body>
</html>