301 lines
11 KiB
HTML
301 lines
11 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
|
|
<script>
|
|
function test()
|
|
{
|
|
let suite = InspectorTest.createSyncSuite("Cookie");
|
|
|
|
suite.addTestCase({
|
|
name: "WI.Cookie.parseCookieRequestHeader",
|
|
description: "Cookie request header.",
|
|
test() {
|
|
function test(header, expectedCookies) {
|
|
InspectorTest.log(`HEADER: Cookie: ${header}`);
|
|
let cookies = WI.Cookie.parseCookieRequestHeader(header);
|
|
InspectorTest.expectEqual(cookies.length, expectedCookies.length, `Should have ${expectedCookies.length} cookies.`);
|
|
for (let i = 0; i < cookies.length; ++i) {
|
|
let cookie = cookies[i];
|
|
let expected = expectedCookies[i];
|
|
InspectorTest.expectThat(cookie instanceof WI.Cookie, `Value should be a WI.Cookie.`);
|
|
InspectorTest.expectEqual(cookie.type, WI.Cookie.Type.Request, `cookie.type should be WI.Cookie.Type.Request.`);
|
|
InspectorTest.expectEqual(cookie.name, expected.name, `cookie.name should be '${expected.name}'.`);
|
|
InspectorTest.expectEqual(cookie.value, expected.value, `cookie.value should be '${expected.value}'.`);
|
|
}
|
|
InspectorTest.log("");
|
|
}
|
|
|
|
test("", []);
|
|
|
|
test(`foo=bar`, [
|
|
{name: "foo", value: "bar"},
|
|
]);
|
|
|
|
test(`foo=bar; alpha=beta`, [
|
|
{name: "foo", value: "bar"},
|
|
{name: "alpha", value: "beta"},
|
|
]);
|
|
|
|
test(`foo=a,b,c, d, e, f,g; alpha=123423 qwerty; beta=gamma`, [
|
|
{name: "foo", value: "a,b,c, d, e, f,g"},
|
|
{name: "alpha", value: "123423 qwerty"},
|
|
{name: "beta", value: "gamma"},
|
|
]);
|
|
|
|
return true;
|
|
}
|
|
});
|
|
|
|
suite.addTestCase({
|
|
name: "WI.Cookie.parseSetCookieResponseHeader",
|
|
description: "Set-Cookie response headers.",
|
|
test() {
|
|
function test(header, expected) {
|
|
InspectorTest.log(`HEADER: Set-Cookie: ${header}`);
|
|
let cookie = WI.Cookie.parseSetCookieResponseHeader(header);
|
|
InspectorTest.expectThat(cookie instanceof WI.Cookie, `Value should be a WI.Cookie.`);
|
|
InspectorTest.expectEqual(cookie.header, header, `cookie.header should be the original header text.`);
|
|
InspectorTest.expectEqual(cookie.type, WI.Cookie.Type.Response, `cookie.type should be WI.Cookie.Type.Response.`);
|
|
InspectorTest.expectEqual(cookie.name, expected.name, `cookie.name should be '${expected.name}'.`);
|
|
InspectorTest.expectEqual(cookie.value, expected.value, `cookie.value should be '${expected.value}'.`);
|
|
if (cookie.expires && expected.expires)
|
|
InspectorTest.expectEqual(cookie.expires.getTime(), expected.expires.getTime(), `cookie.expires should be '${expected.expires}'.`);
|
|
else
|
|
InspectorTest.expectEqual(cookie.expires, expected.expires, `cookie.expires should be '${expected.expires}'.`);
|
|
InspectorTest.expectEqual(cookie.maxAge, expected.maxAge, `cookie.maxAge should be '${expected.maxAge}'.`);
|
|
InspectorTest.expectEqual(cookie.path, expected.path, `cookie.path should be '${expected.path}'.`);
|
|
InspectorTest.expectEqual(cookie.domain, expected.domain, `cookie.domain should be '${expected.domain}'.`);
|
|
InspectorTest.expectEqual(cookie.secure, expected.secure, `cookie.secure should be '${expected.secure}'.`);
|
|
InspectorTest.expectEqual(cookie.httpOnly, expected.httpOnly, `cookie.httpOnly should be '${expected.httpOnly}'.`);
|
|
InspectorTest.expectEqual(cookie.sameSite, expected.sameSite, `cookie.sameSite should be '${expected.sameSite}'.`);
|
|
InspectorTest.log("");
|
|
}
|
|
|
|
InspectorTest.expectNull(WI.Cookie.parseSetCookieResponseHeader(""), "Empty header should produce null.");
|
|
|
|
test(`name=value`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: null,
|
|
maxAge: null,
|
|
path: null,
|
|
domain: null,
|
|
secure: false,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
test(`name=value; path=/foo`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: null,
|
|
maxAge: null,
|
|
path: "/foo",
|
|
domain: null,
|
|
secure: false,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
test(`name=value; domain=example.com`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: null,
|
|
maxAge: null,
|
|
path: null,
|
|
domain: "example.com",
|
|
secure: false,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
test(`name=value; secure`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: null,
|
|
maxAge: null,
|
|
path: null,
|
|
domain: null,
|
|
secure: true,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
test(`name=value; Secure`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: null,
|
|
maxAge: null,
|
|
path: null,
|
|
domain: null,
|
|
secure: true,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
test(`name=value; HttpOnly`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: null,
|
|
maxAge: null,
|
|
path: null,
|
|
domain: null,
|
|
secure: false,
|
|
httpOnly: true,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
test(`name=value; SameSite=lax`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: null,
|
|
maxAge: null,
|
|
path: null,
|
|
domain: null,
|
|
secure: false,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.Lax,
|
|
});
|
|
|
|
test(`name=value; SameSite=strict`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: null,
|
|
maxAge: null,
|
|
path: null,
|
|
domain: null,
|
|
secure: false,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.Strict,
|
|
});
|
|
|
|
// SameSite with unknown value is ignored.
|
|
test(`name=value; SameSite=invalid`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: null,
|
|
maxAge: null,
|
|
path: null,
|
|
domain: null,
|
|
secure: false,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
// SameSite without value is ignored.
|
|
test(`name=value; SameSite`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: null,
|
|
maxAge: null,
|
|
path: null,
|
|
domain: null,
|
|
secure: false,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
test(`name=value; expires=Fri 06-Oct-2017 03:20:27 GMT; Max-Age=3600`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: new Date("Fri 06-Oct-2017 03:20:27 GMT"),
|
|
maxAge: 3600,
|
|
path: null,
|
|
domain: null,
|
|
secure: false,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
test(`name=value; expires=Fri 06-Oct-2017 03:43:47 GMT; Max-Age=5000; path=/foo; domain=example.com; secure; HttpOnly`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: new Date("Fri 06-Oct-2017 03:43:47 GMT"),
|
|
maxAge: 5000,
|
|
path: "/foo",
|
|
domain: "example.com",
|
|
secure: true,
|
|
httpOnly: true,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
test(`name=value; Unknown; path=/one/two`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: null,
|
|
maxAge: null,
|
|
path: "/one/two",
|
|
domain: null,
|
|
secure: false,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
test(`name=value; Unknown=Ignored; path=/one/two`, {
|
|
name: "name",
|
|
value: "value",
|
|
expires: null,
|
|
maxAge: null,
|
|
path: "/one/two",
|
|
domain: null,
|
|
secure: false,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
test(`name=somewhat longer value than normal with spaces, and commas; domain=other.example.com`, {
|
|
name: "name",
|
|
value: "somewhat longer value than normal with spaces, and commas",
|
|
expires: null,
|
|
maxAge: null,
|
|
path: null,
|
|
domain: "other.example.com",
|
|
secure: false,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
// Some servers omit the required space after the semicolon.
|
|
test(`name==value=;Domain=.example.com;Expires=Wed, 04-Apr-2018 03:34:02 GMT`, {
|
|
name: "name",
|
|
value: "=value=",
|
|
expires: new Date("Wed, 04-Apr-2018 03:34:02 GMT"),
|
|
maxAge: null,
|
|
path: null,
|
|
domain: ".example.com",
|
|
secure: false,
|
|
httpOnly: false,
|
|
sameSite: WI.Cookie.SameSiteType.None,
|
|
});
|
|
|
|
return true;
|
|
}
|
|
});
|
|
|
|
suite.addTestCase({
|
|
name: "WI.Cookie.url",
|
|
description: "Cookie url property.",
|
|
test() {
|
|
let cookieWithDomain = WI.Cookie.parseSetCookieResponseHeader(`name=value; domain=example.com`);
|
|
InspectorTest.expectEqual(cookieWithDomain.url, "http://example.com", "Cookie url should include domain.");
|
|
|
|
let cookieWithDomainAndPath = WI.Cookie.parseSetCookieResponseHeader(`name=value; domain=example.com; path=/foo`);
|
|
InspectorTest.expectEqual(cookieWithDomainAndPath.url, "http://example.com/foo", "Cookie url should include domain and path.");
|
|
|
|
let secureCookie = WI.Cookie.parseSetCookieResponseHeader(`name=value; domain=example.com; secure`);
|
|
InspectorTest.expectEqual(secureCookie.url, "https://example.com", "Secure cookie url should begin with 'https'.");
|
|
|
|
return true;
|
|
}
|
|
});
|
|
|
|
suite.runTestCasesAndFinish();
|
|
}
|
|
</script>
|
|
</head>
|
|
<body onload="runTest()">
|
|
<p>Testing WI.Cookie.</p>
|
|
</body>
|
|
</html>
|