OLD | NEW |
---|---|
1 <!doctype html> | |
1 <html> | 2 <html> |
2 <head> | 3 <head> |
3 <title>Check exception thrown by getReponseHeader </title> | 4 <title>Testing XMLHttpRequest.getReponseHeader behavior</title> |
5 <script src="../resources/js-test-pre.js"></script> | |
4 <script type="text/javascript"> | 6 <script type="text/javascript"> |
7 description("Test the required behavior of XMLHttpRequest.getResponseHeader()"); | |
8 | |
9 window.jsTestIsAsync = true; | |
5 | 10 |
6 var savedHeader = null; | 11 var savedHeader = null; |
7 var headerName="Content-Type"; | 12 var headerName="Content-Type"; |
tyoshino (SeeGerritForStatus)
2013/10/26 19:05:13
please insert a space on the right and left of =
| |
8 var nullTests = new Array("SeT-COoKie", "sEt-coOkIE2", | 13 var nullTests = [ "SeT-COoKie", |
9 "xxx-mytest-headerabc", null, "Content-Type:"); | 14 » » "sEt-coOkIE2", |
tyoshino (SeeGerritForStatus)
2013/10/26 19:05:13
use spaces plz
| |
15 » » "xxx-mytest-headerabc", | |
16 » » null, | |
17 » » "Content-Type:" ]; | |
10 | 18 |
11 function log (msg) { | 19 var xhr = new XMLHttpRequest(); |
12 var paragraph = document.createElement("li"); | |
13 paragraph.innerHTML=msg.replace(/\n/gm,"<br>"); | |
14 document.getElementById("console").appendChild(paragraph); | |
15 } | |
16 | 20 |
17 function log4(status, rState, subState, msg) { | 21 var headerValue; |
18 log(status + " " + rState + " " + subState + ": " + msg); | 22 function testGetResponseHeader(xhr, headerName, expected) { |
19 } | 23 shouldNotThrow("{state: " + xhr.readyState + "}; headerValue = xhr.getRespon seHeader('" + headerName + "');"); |
20 | 24 if (headerValue !== expected) |
21 function log3(status, rState, msg) { | 25 testFailed("Expected '" + expected + "', got: '" + headerValue + "'"); |
22 log4(status, rState, headerName, msg); | 26 else |
23 } | 27 testPassed("headerValue is " + expected); |
tyoshino (SeeGerritForStatus)
2013/10/26 19:05:13
this will be shorter if shouldBe is used though we
sof
2013/10/26 20:02:26
Done, but I don't particularly like this way of ex
tyoshino (SeeGerritForStatus)
2013/10/26 20:22:46
Yes. I agree it's weird... If you strongly prefer
| |
24 | 28 return headerValue; |
25 if (window.XMLHttpRequest) { | |
26 xhr = new XMLHttpRequest(); | |
27 } else { | |
28 try { | |
29 xhr = new ActiveXObject("Msxml2.XMLHTTP"); | |
30 } catch (ex) { | |
31 xhr = new ActiveXObject("Microsoft.XMLHTTP"); | |
32 } | |
33 } | 29 } |
34 | 30 |
35 xhr.onreadystatechange = function() { | 31 xhr.onreadystatechange = function() { |
36 var rState = this.readyState; | 32 var rState = this.readyState; |
37 // We expect an INVALID_STATE_ERR exception for readyState < 2 | 33 var result = testGetResponseHeader(this, headerName, rState <= XMLHttpReques t.OPENED ? null : "text/html"); |
38 // and no exception for readyState >= 2 | 34 if (result) { |
39 try { | 35 if (savedHeader) |
40 var header = this.getResponseHeader(headerName); | 36 if (result !== savedHeader) |
41 if (rState != this.readyState) | 37 testFailed("Expected '" + savedHeader + "', got: '" + result + " '"); |
42 log3("UNCERTAIN", rState, "readyState changed while getting the head er."); | 38 else |
43 if (rState < 2) { | 39 testPassed("header value is unchanged."); |
tyoshino (SeeGerritForStatus)
2013/10/26 19:05:13
ditto
| |
44 log3("FAILED", rState, headerName + "=" + header); | 40 |
45 } else if (header) { | 41 savedHeader = result; |
46 if (savedHeader) | 42 |
47 if (savedHeader != header) { | 43 for (var i = 0; i < nullTests.length; ++i) |
48 log3("FAILED", rState,headerName + " changed after it was fi rst returned. Previous " + headerName | 44 testGetResponseHeader(this, nullTests[i], null); |
49 + "=" + savedHeader + "; New " + headerName + "=" + head er + "."); | 45 } else { |
50 savedHeader = header; | 46 shouldBeGreaterThanOrEqual("XMLHttpRequest.OPENED", "xhr.readyState"); |
51 } | |
52 else //savedHeader == header here; no need to reprint header | |
53 log3("PASSED", rState, headerName); | |
54 else {//first header value retrieved | |
55 if (window.testRunner) | |
56 //do not print the header's value for automated tests to avoid false failures. | |
57 log3("PASSED", rState, "ResponseHeader(" + headerName + ") r eturned a value."); | |
58 else | |
59 log3("PASSED", rState, "getResponseHeader(" + headerName + " ) returned: " + header + "."); | |
60 savedHeader = header; | |
61 } | |
62 for (var i=0;i<nullTests.length;++i) { | |
63 try { | |
64 var str = this.getResponseHeader(nullTests[i]); | |
65 if (str == null) | |
66 log4("PASSED", rState, nullTests[i], "getResponseHeader( " + nullTests[i] + | |
67 ") returned null."); | |
68 else | |
69 log4("FAILED", rState, nullTests[i], "getResponseHeader( " + nullTests[i] + | |
70 ") returned \"" + str + "\""); | |
71 } catch(e) { | |
72 log4("FAILED", rState, nullTests[i], "getResponseHeader(" + nullTests[i] + ") threw exception:" + e); | |
73 } | |
74 } | |
75 } | |
76 else //header is null | |
77 log3("FAILED", rState, "null " + headerName + " returned."); | |
78 } catch (e) { | |
79 if (rState < 2) | |
80 log3("PASSED", rState, "exception thrown"); | |
81 else | |
82 log3("FAILED", rState, "exception thrown: " + e.message + "."); | |
83 } | 47 } |
84 if ((rState == 4) && (window.testRunner)) | 48 |
85 testRunner.notifyDone(); | 49 if (rState == 4) |
50 finishJSTest(); | |
86 } | 51 } |
87 | 52 |
88 if (window.testRunner) { | 53 function runTest() { |
89 testRunner.waitUntilDone(); | 54 // Test for readyState = 0 |
90 testRunner.dumpAsText(); | 55 testGetResponseHeader(xhr, headerName, null); |
56 shouldNotThrow('xhr.open("GET","resources/1251.html", true);'); | |
tyoshino (SeeGerritForStatus)
2013/10/26 19:05:13
space after "GET",
| |
57 // Test for readyState = 1 | |
58 testGetResponseHeader(xhr, headerName, null); | |
59 shouldNotThrow("xhr.send(null);"); | |
91 } | 60 } |
92 | 61 runTest(); |
93 function test() { | |
94 // Test for readyState = 0 | |
95 try { | |
96 var header = xhr.getResponseHeader(headerName); | |
97 log3("FAILED", xhr.readyState, headerName + "=" + header + "."); | |
98 } catch (e) { | |
99 log3("PASSED", xhr.readyState, "exception thrown."); | |
100 } | |
101 try { | |
102 xhr.open("GET","resources/1251.html", true); | |
103 xhr.send(null); | |
104 } catch(e) { | |
105 log3("FAILED", "open/send", "exception thrown: " + e.message +"."); | |
106 if (window.testRunner) | |
107 testRunner.notifyDone(); | |
108 } | |
109 } | |
110 </script> | 62 </script> |
111 </head> | 63 </head> |
112 <body onload="test()"> | 64 <script src="../resources/js-test-post.js"></script> |
tyoshino (SeeGerritForStatus)
2013/10/26 19:05:13
put before </head>?
| |
113 | |
114 <p>Test page for <a href="http://bugs.webkit.org/show_bug.cgi?id=15356">bug | |
115 15356</a> | |
116 and <a href="http://bugs.webkit.org/show_bug.cgi?id=29121">bug 29121</a></p> | |
117 <p>Assertion: Invoking the getResponseHeader method when readyState >= 2 | |
118 (HEADERS_RECEIVED) returns a header value if the header exists.</p> | |
119 <p>Assertion: Invoking the getResponseHeader method with the parameter | |
120 satisfying the following conditions causes getResponseHeader | |
121 to return null: | |
122 <li>1a. The parameter case-insensitively matches Set-Cookie;</li> | |
123 <li>1b. The parameter case-insensitively matches Set-Cookie2;</li> | |
124 <li>2. The parameter does not match any header in the response;</li> | |
125 <li>3a. The parameter is null (it is not a valid header name);</li> | |
126 <li>3b. The parameter is "Content-Type:" (it is not a valid header name).</li> | |
127 | |
128 <script> | |
129 if (!window.testRunner) | |
130 document.write("<p>If the test passes one should see \ | |
131 below the ruler the text \"passed\" in all capital letters, once for every ready state < 2, \ | |
132 followed each time by a space and the readyState number and 6 times for every re ady state >= 2.</p>\n\ | |
133 <p>ReadyState numbers should be in ascending order 0 to 4.</p>\n\ | |
134 <p>ReadyState numbers should be followed by a blank, the name of the header test ed, colon a space and a message.</p>\ | |
135 <p>The value of the " + headerName + " header should be printed for ready state 2.</p>"); | |
136 </script> | |
137 <hr> | |
138 <p><ol id=console></ol></p> | |
139 </body> | |
140 </html> | 65 </html> |
OLD | NEW |