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> 128