OLD | NEW |
| 1 <!doctype html> |
1 <html> | 2 <html> |
2 <head> | 3 <head> |
3 <title>Check exception thrown by getAllResponseHeaders and some | 4 <title>Testing XMLHttpRequest.getReponseHeader behavior</title> |
4 characteristics of the return value</title> | 5 <script src="../resources/js-test-pre.js"></script> |
5 <script type="text/javascript"> | 6 <script type="text/javascript"> |
| 7 description("Test the required behavior of XMLHttpRequest.getAllResponseHeaders(
)"); |
6 | 8 |
7 function log (msg) { | 9 window.jsTestIsAsync = true; |
8 var paragraph = document.createElement("li"); | 10 |
9 paragraph.innerHTML=msg.replace(/\n/gm,"<br>"); | 11 var xhr = new XMLHttpRequest(); |
10 document.getElementById("console").appendChild(paragraph); | 12 |
| 13 var savedHeaders = null; |
| 14 |
| 15 var headerValues; |
| 16 function testGetAllResponseHeaders(xhr, expectEmpty) { |
| 17 shouldNotThrow("{state: " + xhr.readyState + "}; headerValues = xhr.getAllRe
sponseHeaders();"); |
| 18 if (expectEmpty && headerValues !== "") |
| 19 testFailed("Expected the empty string, got: '" + headerValues + "'"); |
| 20 else |
| 21 testPassed("headerValues is " + (!expectEmpty ? "not " : "") + "the empt
y string"); |
| 22 return headerValues; |
11 } | 23 } |
12 | 24 |
13 var xhr; | 25 var responseHeaders; |
| 26 xhr.onreadystatechange = function() { |
| 27 var rState = this.readyState; |
| 28 responseHeaders = testGetAllResponseHeaders(this, rState <= XMLHttpRequest.O
PENED); |
| 29 if (responseHeaders) { |
| 30 if (savedHeaders) { |
| 31 shouldBe("responseHeaders", "savedHeaders"); |
| 32 } else { |
| 33 if (/^Set-Cookie:|^Set-Cookie2:/im.test(responseHeaders)) { |
| 34 testFailed("Did not expect to find a Set-Cookie{2} header, got:
'" + responseHeaders + "'"); |
| 35 } else { |
| 36 // Do not print list for automated tests to avoid false failures
. |
| 37 if (self.testRunner) |
| 38 testPassed("Header values appears to be conforming."); |
| 39 else |
| 40 testPassed("Header values appears ok: " + JSON.stringify(hea
derValues)); |
| 41 } |
| 42 } |
| 43 savedHeaders = responseHeaders; |
| 44 } else { |
| 45 if (rState > XMLHttpRequest.OPENED) |
| 46 testFailed("In ready state " + rState + ", unexpected empty value.")
; |
| 47 else if (responseHeaders !== "") |
| 48 testFailed("In ready state " + rState + ", expected the empty string
, got: " + JSON.stringify(responseHeaders) + "."); |
| 49 else |
| 50 testPassed("getAllResponseHeaders() result is empty in ready state "
+ rState + "."); |
| 51 } |
14 | 52 |
15 if (window.XMLHttpRequest) { | 53 if (rState == XMLHttpRequest.DONE) |
16 xhr = new XMLHttpRequest(); | 54 finishJSTest(); |
17 } else { | |
18 try { | |
19 xhr = new ActiveXObject("Msxml2.XMLHTTP"); | |
20 } catch (ex) { | |
21 xhr = new ActiveXObject("Microsoft.XMLHTTP"); | |
22 } | |
23 } | 55 } |
24 | 56 |
25 var savedHeader = null; | 57 function runTest() { |
26 xhr.onreadystatechange = function() { | 58 // Test for readyState = 0 |
27 var rState = this.readyState; | 59 testGetAllResponseHeaders(xhr, true); |
28 // We expect an INVALID_STATE_ERR exception for readyState < 2 | 60 shouldNotThrow('xhr.open("GET", "resources/1251.html", true);'); |
29 // and no exception for readyState >= 2 | 61 // Test for readyState = 1 |
30 try { | 62 testGetAllResponseHeaders(xhr, true); |
31 var header = this.getAllResponseHeaders(); | 63 shouldNotThrow("xhr.send(null);"); |
32 if (rState != this.readyState) | |
33 log("UNCERTAIN " + rState + ": readyState changed while getting head
ers."); | |
34 if (rState < 2) { | |
35 log("FAILED " + rState + ": headerlist=" + header); | |
36 } else if (header) | |
37 if (savedHeader) | |
38 if (savedHeader != header) { | |
39 log("FAILED " + rState + | |
40 ": headerlist changed after it was first returned. Previous header list:\n" | |
41 + savedHeader + "\n New headerlist:\n" + header); | |
42 savedHeader = header; | |
43 } | |
44 else //savedHeader == header here; no need to reprint header | |
45 log("PASSED " + rState); | |
46 else {//first header list retrieved | |
47 if (/^Set-Cookie:|^Set-Cookie2:/im.test(header)) | |
48 log("FAILED " + rState + | |
49 ": /^Set-Cookie:|^Set-Cookie2:/ matches. getAllResponseHeaders returned:\n" + he
ader); | |
50 else if (window.testRunner) | |
51 //do not print list for automated tests to avoid false failures. | |
52 log("PASSED " + rState + | |
53 ": getAllResponseHeaders returned what looks like a conforming headerlist."); | |
54 else | |
55 log("PASSED " + rState + | |
56 ": getAllResponseHeaders returned:\n" + header); | |
57 savedHeader = header; | |
58 } | |
59 else //header is null | |
60 log("FAILED " + rState + ": null header list returned"); | |
61 } catch (e) { | |
62 if (rState < 2) { | |
63 log("PASSED " + rState); | |
64 } else { | |
65 log("FAILED " + rState + ": EXCEPTION THROWN: " + e.message + "."); | |
66 } | |
67 } | |
68 if ((rState == 4) && (window.testRunner)) | |
69 testRunner.notifyDone(); | |
70 } | 64 } |
71 | 65 runTest(); |
72 function test() { | |
73 if (window.testRunner) { | |
74 testRunner.waitUntilDone(); | |
75 testRunner.dumpAsText(); | |
76 } | |
77 // Test for readyState = 0 | |
78 try { | |
79 var header = xhr.getAllResponseHeaders(); | |
80 log("FAILED " + xhr.readyState + ": header=" + header); | |
81 } catch (e) { | |
82 log("PASSED " + xhr.readyState); | |
83 } | |
84 try { | |
85 xhr.open("GET","resources/1251.html", true); | |
86 xhr.send(null); | |
87 } catch(e) { | |
88 log("FAILED open/send: EXCEPTION THROWN: " + e.message +"."); | |
89 if (window.testRunner) | |
90 testRunner.notifyDone(); | |
91 } | |
92 } | |
93 </script> | 66 </script> |
| 67 <script src="../resources/js-test-post.js"></script> |
94 </head> | 68 </head> |
95 <body onload="test()"> | |
96 | |
97 <p>Test page for <a href="http://bugs.webkit.org/show_bug.cgi?id=15356">bug 1535
6</a> | |
98 and <a href="http://bugs.webkit.org/show_bug.cgi?id=29121">bug 29121</a></p> | |
99 <p>Assertion: Invoking getAllResponseHeaders method when readyState >= 2 | |
100 (HEADERS_RECEIVED) should return a conforming list of headers.</p> | |
101 <script> | |
102 if (!window.testRunner) | |
103 document.write("<p>If the test passes one should see \ | |
104 below the ruler the text \"passed\" in all capital letters, 5 times, \ | |
105 followed each time by a space and the readyState number.</p>\n\ | |
106 <p>ReadyStatenumbers should be in ascending order 0 to 4.</p>\n\ | |
107 <p>A conforming list of response headers should also be printed.</p>\n\ | |
108 <p>A conforming list of headers:</p> \ | |
109 <li> contains one header per line.</li> \ | |
110 <li> has header names and header values separated by a COLON and \ | |
111 a SPACE.</li>\ | |
112 <li> does not contain any headers that match (case-insensitively) \ | |
113 Set-Cookie or Set-Cookie2</li>"); | |
114 </script> | |
115 <hr> | |
116 <p><ol id=console></ol></p> | |
117 </body> | |
118 </html> | 69 </html> |
OLD | NEW |