OLD | NEW |
| (Empty) |
1 <!DOCTYPE HTML> | |
2 <html> | |
3 <script src='test.js'></script> | |
4 <script src='add_cookie.js'></script> | |
5 <script> | |
6 | |
7 // Run with --enable-file-cookies. | |
8 | |
9 /** | |
10 * Return the value of the cookie with the given name. | |
11 * | |
12 * If there are two or more cookies with the same name but in different domains | |
13 * or paths, return the one that appears first in document.cookie. | |
14 * If there is no such cookie, throw an error. | |
15 * | |
16 * @param {!string} name Name of the cookie. | |
17 * @return {string} The cookie value. | |
18 */ | |
19 function getCookieValue(name) { | |
20 var cookies = document.cookie.split(';'); | |
21 for (var i = 0; i < cookies.length; ++i) { | |
22 var cookie = cookies[i].replace(/^\s+|\s+$/g, ''); | |
23 var cookieName = cookie.substr(0, cookie.indexOf('=')); | |
24 if (cookieName == name) | |
25 return unescape(cookie.substr(cookie.indexOf('=') + 1)); | |
26 } | |
27 throw new Error('cookie not found:' + name); | |
28 } | |
29 | |
30 /** | |
31 * Create and return a cookie object. The cookie follows the specification in | |
32 * https://code.google.com/p/selenium/wiki/JsonWireProtocol#Cookie_JSON_Object. | |
33 * | |
34 * The cookie has the following field value: | |
35 * <ul> | |
36 * <li>name: 'dummyname' + id | |
37 * <li>value: 'dummyvalue' + id | |
38 * <li>path: '/' | |
39 * <li>domain: document.domain | |
40 * <li>secure: false | |
41 * <li>expiry: three days after creation | |
42 * </ul> | |
43 * | |
44 * @param {!number} id The id to append to the name and value of the cookie. | |
45 * @return {*} An object representing a cookie. | |
46 */ | |
47 function createDummyCookie(id) { | |
48 var cookie = {}; | |
49 cookie['name'] = 'dummyname' + id; | |
50 cookie['value'] = 'dummyvalue' + id; | |
51 cookie['path'] = '/'; | |
52 cookie['domain'] = document.domain; | |
53 var expiredDate = new Date(); | |
54 expiredDate.setDate(expiredDate.getDate() + 3); | |
55 cookie['expiry'] = parseInt(expiredDate.getTime() / 1000); | |
56 cookie['secure'] = false; | |
57 return cookie; | |
58 } | |
59 | |
60 function assertAddCookieFailed(cookie, code) { | |
61 try { | |
62 addCookie(cookie); | |
63 assert(false); | |
64 } catch (error) { | |
65 if (code) | |
66 assertEquals(code, error.code); | |
67 } | |
68 } | |
69 | |
70 function testMissingName() { | |
71 var cookie = createDummyCookie(1); | |
72 delete cookie['name']; | |
73 assertAddCookieFailed(cookie); | |
74 } | |
75 | |
76 function testInvalidName() { | |
77 var cookie = createDummyCookie(2); | |
78 var invalidNames = [ | |
79 '', ' a', '\ta', 'a ', 'a\t', 'a;b', 'a=b', 'a\nb', 'a\rb', 'a\0b' | |
80 ]; | |
81 for (var i = 0; i < invalidNames.length; i++) { | |
82 cookie['name'] = invalidNames[i]; | |
83 assertAddCookieFailed(cookie); | |
84 } | |
85 } | |
86 | |
87 function testDomainTooManyColons() { | |
88 var cookie = createDummyCookie(3); | |
89 cookie['domain'] = 'domain.name:1:2'; | |
90 assertAddCookieFailed(cookie); | |
91 } | |
92 | |
93 function testInvalidDomain() { | |
94 var cookie = createDummyCookie(4); | |
95 var invalidDomains = [ | |
96 ' a', '\ta', 'a ', 'a\t', 'a\nb', 'a\rb', 'a\0b', 'bad.domain' | |
97 ]; | |
98 for (var i = 0; i < invalidDomains.length; i++) { | |
99 cookie['domain'] = invalidDomains[i]; | |
100 assertAddCookieFailed(cookie, 24); | |
101 } | |
102 } | |
103 | |
104 function testMissingPath() { | |
105 var cookie = createDummyCookie(5); | |
106 delete cookie['path']; | |
107 addCookie(cookie); | |
108 assertEquals(cookie['value'], getCookieValue(cookie['name'])); | |
109 } | |
110 | |
111 function testMissingDomain() { | |
112 var cookie = createDummyCookie(6); | |
113 delete cookie['domain']; | |
114 addCookie(cookie); | |
115 assertEquals(cookie['value'], getCookieValue(cookie['name'])); | |
116 } | |
117 | |
118 function testNormal() { | |
119 var cookie = createDummyCookie(7); | |
120 addCookie(cookie); | |
121 assertEquals(cookie['value'], getCookieValue(cookie['name'])); | |
122 } | |
123 | |
124 </script> | |
125 <body> | |
126 </body> | |
127 </html> | |
OLD | NEW |