Reactos
1<html>
2<head>
3<script>
4var testevent_divid2_called = false, testevent_document_called = false, cnt=0;
5
6function ok(b,m) {
7 return external.ok(b, m);
8}
9
10function broken(expr) {
11 return external.broken(expr);
12}
13
14function ondataavailable_test() {
15 var evobj, div, b = false;
16
17 div = document.getElementById("divid");
18
19 function ondataavailableHandler() {
20 b = true;
21 ok(window.event === evobj, "window.event != evobj");
22
23 ok(evobj.srcElement === div, "evobj.srcElement = " + evobj.srcElement);
24 ok(evobj.fromElement === null, "evobj.srcElement = " + evobj.fromElement);
25 ok(evobj.toElement === null, "evobj.srcElement = " + evobj.toElement);
26 ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type);
27 }
28
29 function ondataavailableDocHandler() {
30 b = true;
31 ok(window.event === evobj, "window.event != evobj");
32
33 ok(evobj.srcElement === null, "evobj.srcElement = " + evobj.srcElement);
34 ok(evobj.fromElement === null, "evobj.srcElement = " + evobj.fromElement);
35 ok(evobj.toElement === null, "evobj.srcElement = " + evobj.toElement);
36 ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type);
37 }
38
39 div.attachEvent("ondataavailable", ondataavailableHandler);
40
41 evobj = document.createEventObject();
42 ok(evobj.srcElement === null, "evobj.srcElement = " + evobj.srcElement);
43 ok(evobj.fromElement === null, "evobj.srcElement = " + evobj.fromElement);
44 ok(evobj.toElement === null, "evobj.srcElement = " + evobj.toElement);
45 ok(evobj.type === "", "evobj.type = " + evobj.type);
46
47 div.fireEvent("ondataavailable", evobj);
48 ok(b, "ondataavailable handler not called?");
49
50 ok(evobj.srcElement === div, "evobj.srcElement = " + evobj.srcElement);
51 ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type);
52
53 div.detachEvent("ondataavailable", ondataavailableHandler);
54
55 b = false;
56 div.fireEvent("ondataavailable", evobj);
57 ok(!b, "ondataavailable handler called?");
58
59 ok(evobj.srcElement === div, "evobj.srcElement = " + evobj.srcElement);
60 ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type);
61
62 document.attachEvent("ondataavailable", ondataavailableDocHandler);
63
64 evobj = document.createEventObject();
65
66 document.fireEvent("ondataavailable", evobj);
67 ok(b, "ondataavailable handler not called?");
68
69 ok(evobj.srcElement === null, "evobj.srcElement = " + evobj.srcElement);
70 ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type);
71}
72
73function test_scriptfor() {
74 var div = document.getElementById("divid2");
75 ok("onclick" in div, "testevent not in div");
76 ok(typeof(div.onclick) === "function", "typeof(div.onclick) = " + typeof(div.onclick));
77 ok(testevent_divid2_called === false, "testevent_divid2_called = " + testevent_divid2_called);
78 ok(typeof(document.onclick) === "function", "typeof(document.onclick) = " + typeof(document.onclick));
79 ok(testevent_document_called === false, "testevent_document_called = " + testevent_document_called);
80 div.click();
81 ok(testevent_divid2_called === true, "testevent_divid2_called = " + testevent_divid2_called);
82 ok(testevent_document_called === true, "testevent_document_called = " + testevent_document_called);
83
84 ok(!("ontest" in div), "testevent in div");
85 ok(typeof(div.ontest) === "undefined", "typeof(div.ontest) = " + typeof(div.ontest));
86}
87
88function test_handler_this() {
89 document.body.innerHTML = '<div id="d1"><div id="d2"></div></div>';
90
91 var div1 = document.getElementById("d1");
92 var div2 = document.getElementById("d2");
93 var calls = new Array();
94
95 function createHandler(name, node) {
96 return function() {
97 ok(this === node, "this !== node");
98 calls.push(name);
99 }
100 }
101
102 function registerHandler(name, target) {
103 var b = target.attachEvent("onclick", function() {
104 ok(this === window, "this !== window");
105 calls.push(name+"*");
106 });
107 ok(b, "attachEvent failed");
108 }
109
110 registerHandler("div1", div1);
111 registerHandler("div2", div2);
112 registerHandler("body", document.body);
113 div1.onclick = createHandler("div1", div1);
114 div2.onclick = createHandler("div2", div2);
115 document.body.onclick = createHandler("body", document.body);
116
117 div2.click();
118 ok(calls == "div2,div2*,div1,div1*,body,body*", "calls = " + calls);
119}
120
121function test_insert_script() {
122 var e = document.createElement("script");
123
124 extern_cnt = 0;
125 e.src = "externscr.js";
126
127 var readystatechange_log = "";
128 e.onreadystatechange = function() {
129 readystatechange_log += "," + e.readyState;
130 ok(extern_cnt === 1, "extern_cnt = " + extern_cnt);
131 if(e.readyState === "complete") {
132 ok(readystatechange_log === "append,complete", "readystatechange_log = " + readystatechange_log);
133 external.reportSuccess();
134 }
135 }
136
137 document.body.appendChild(e);
138 ok(extern_cnt === 1, "extern_cnt = " + extern_cnt);
139 readystatechange_log = "append";
140}
141
142var string_handler_called = false;
143
144function test_string_event_handler() {
145 var e = document.createElement("div");
146 var event_str = "string_handler_called = true;";
147
148 document.body.appendChild(e);
149 e.onclick = event_str;
150 ok(e.onclick === event_str, "e.onclick = " + e.onclick);
151 e.click();
152 ok(string_handler_called === false, "string handler called");
153
154 e.setAttribute("onclick", event_str);
155 ok(e.onclick === event_str, "e.onclick = " + e.onclick);
156 e.click();
157 ok(string_handler_called === false, "string handler called");
158}
159
160window.onload = function() {
161 try {
162 ok(inlscr_complete_called, "onreadystatechange not fired");
163 ok(extern_res_script_rs === "eval,complete1,",
164 "extern_res_script_rs = " + extern_res_script_rs + " expected eval,complete1,");
165 ok(extern_http_script_rs === "loading,loaded,complete,",
166 "extern_http_script_rs = " + extern_http_script_rs + " expected loading,loaded,complete,");
167
168 ok(cnt == 1, "cnt=" + cnt + " exception during loading?");
169 ok(this === window, "this !== window");
170
171 ok(typeof(window.onload) === "function", "typeof(window.onload) = " + typeof(window.onload));
172 ok(document.body.onload === window.onload, "document.body.onload !== window.onload");
173
174 ok(img_onload_called, "img.onload not called before window.onload");
175
176 test_scriptfor();
177 ondataavailable_test();
178 test_handler_this();
179 test_insert_script();
180 test_string_event_handler();
181 }catch(e) {
182 ok(false, "Got an exception: " + e.message);
183 }
184}
185</script>
186<script>
187var img = document.createElement("img");
188img.src = "http://test.winehq.org/tests/winehq_snapshot/index_files/winehq_logo_glass.png";
189
190var img_onload_called = false;
191img.onload = function() {
192 external.trace("img.onload");
193 img_onload_called = true;
194}
195</script>
196</head>
197<body>
198<div id="divid"></div>
199<div id="divid2"></div>
200<script event="onclick" for="divid2">
201 testevent_divid2_called = true;
202</script>
203<script event="onclick" for="document">
204 testevent_document_called = true;
205</script>
206<script event="ontest" for="divid2">
207 ok(false, "unexpected ontest");
208</script>
209<script>
210(function() {
211 var div = document.getElementById("divid2");
212 ok(div.onclick === null, "div.onclick = null");
213 cnt++;
214})();
215</script>
216<script>
217var inlscr_complete_called = false, extern_res_script_rs = "", extern_http_script_rs = "";
218var extern_cnt = 0;
219
220function expect_inlscr_complete() {
221 var elem = document.getElementById("inlscr");
222 ok(elem.readyState === "complete" || broken(elem.readyState === "loading"), "expect_inlscr_complete: elem.readyState = " + elem.readyState);
223 if(elem.readyState === "complete")
224 inlscr_complete_called = true;
225}
226
227function extern_res_script_readystatechange() {
228 var elem = document.getElementById("extscr");
229 if(elem.readyState != "loading")
230 extern_res_script_rs += elem.readyState + extern_cnt + ",";
231 else
232 external.trace("Got loading readyState from external res script.");
233}
234
235function http_script_readystatechange() {
236 var elem = document.getElementById("httpscr");
237 extern_http_script_rs += elem.readyState + ",";
238}
239
240function on_externscr() {
241 var elem = document.getElementById("extscr");
242 ok(elem.readyState === "interactive" || broken(elem.readyState === "loading"),
243 "on_externscr: elem.readyState = " + elem.readyState);
244 extern_res_script_rs += "eval,";
245}
246
247</script>
248<script id="inlscr" onreadystatechange="expect_inlscr_complete();">
249(function() {
250 ok(inlscr_complete_called === false || broken(inlscr_complete_called), "onreadystatechange fired too early");
251
252 var elem = document.getElementById("inlscr");
253 ok(elem.readyState === "interactive", "inlscr: elem.readyState = " + elem.readyState);
254})();
255</script>
256<script id="extscr" onreadystatechange="extern_res_script_readystatechange()" src="externscr.js"></script>
257<script id="httpscr" onreadystatechange="http_script_readystatechange()" src="https://test.winehq.org/tests/empty.js?123456"></script>
258<script>
259document.body.appendChild(img);
260</script>
261</body>
262</html>