Reviewed by Adele.
[WebKit-https.git] / LayoutTests / http / tests / xmlhttprequest / exceptions.html
1 <html>
2 <head>
3 <title>Test XMLHttpRequest exceptions</title>
4 <meta http-equiv="content-type" content="text/html;charset=utf-8">
5 <body>
6 <p>Test that XMLHttpRequest raises exceptions when it should.</p>
7 <script>
8
9     if (window.layoutTestController)
10         layoutTestController.dumpAsText();
11
12     var console_messages = document.createElement("ul");
13     document.body.appendChild(console_messages);
14     
15     function log(message)
16     {
17         var item = document.createElement("li");
18         item.appendChild(document.createTextNode(message));
19         console_messages.appendChild(item);
20     }
21     
22     function shouldThrow(_a, _e) {
23         var exception;
24         var _av;
25         try {
26             _av = eval(_a);
27         } catch (e) {
28             exception = e.description ? e.description : e;
29         }
30         
31         var _ev;
32         if (_e)
33             _ev =  eval(_e);
34         
35         if (exception) {
36             if (typeof _e == "undefined" || exception == _ev)
37                 log("PASS: " + _a + " threw exception " + exception + ".");
38             else
39                 log("FAIL: " + _a + " should throw exception " + _ev + ". Threw exception " + exception + ".");
40         } else if (typeof _av == "undefined")
41             log("FAIL: " + _a + " should throw exception " + _e + ". Was undefined.");
42         else
43             log("FAIL: " + _a + " should throw exception " + _e + ". Was " + _av + ".");
44     }
45
46 // -------------------------
47     
48     if (window.XMLHttpRequest) {
49         req = new XMLHttpRequest();
50     } else {
51         try {
52             req = new ActiveXObject("Msxml2.XMLHTTP");
53         } catch (ex) {
54             req = new ActiveXObject("Microsoft.XMLHTTP");
55         }
56     }
57     log("new XMLHttpRequest()");
58
59     // According to the XHR spec, this should throw INVALID_STATE_ERR. However,
60     // widgets exist that depend on WebKit not throwing an exception here, and
61     // to make them keep working we have to go against spec and support this
62     // legacy behavior. See <rdar://problem/4758577> "REGRESSION: Business and
63     // People widgets fails to complete search query" for more details.
64     req.setRequestHeader("Foo", "bar");
65
66     shouldThrow('req.send(null)');
67
68     shouldThrow('req.open("GET", "http://www.apple.com/", true)');
69     
70     req.open('GET', 'resources/zero-length.txt', false);
71     log("open()");
72     
73     shouldThrow('req.setRequestHeader()');
74     shouldThrow('req.setRequestHeader("Foo")');
75     shouldThrow('req.status()');
76     shouldThrow('req.statusText()');
77     
78     req.send(null);
79     log("send()");
80
81     shouldThrow('req.send(null)');
82
83     // According to the XHR spec, this should throw INVALID_STATE_ERR. However,
84     // widgets exist that depend on WebKit not throwing an exception here, and
85     // to make them keep working we have to go against spec and support this
86     // legacy behavior. See <rdar://problem/4758577> "REGRESSION: Business and
87     // People widgets fails to complete search query" for more details.
88     req.setRequestHeader("Foo", "bar");
89
90     shouldThrow('req.getResponseHeader()');
91    
92 </script>
93 </body>
94 </html>