| <html> | |
| <head> | |
| <script> | |
| var testevent_divid2_called = false, testevent_document_called = false, cnt=0; | |
| function ok(b,m) { | |
| return external.ok(b, m); | |
| } | |
| function broken(expr) { | |
| return external.broken(expr); | |
| } | |
| function ondataavailable_test() { | |
| var evobj, div, b = false; | |
| div = document.getElementById("divid"); | |
| function ondataavailableHandler() { | |
| b = true; | |
| ok(window.event === evobj, "window.event != evobj"); | |
| ok(evobj.srcElement === div, "evobj.srcElement = " + evobj.srcElement); | |
| ok(evobj.fromElement === null, "evobj.srcElement = " + evobj.fromElement); | |
| ok(evobj.toElement === null, "evobj.srcElement = " + evobj.toElement); | |
| ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type); | |
| } | |
| function ondataavailableDocHandler() { | |
| b = true; | |
| ok(window.event === evobj, "window.event != evobj"); | |
| ok(evobj.srcElement === null, "evobj.srcElement = " + evobj.srcElement); | |
| ok(evobj.fromElement === null, "evobj.srcElement = " + evobj.fromElement); | |
| ok(evobj.toElement === null, "evobj.srcElement = " + evobj.toElement); | |
| ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type); | |
| } | |
| div.attachEvent("ondataavailable", ondataavailableHandler); | |
| evobj = document.createEventObject(); | |
| ok(evobj.srcElement === null, "evobj.srcElement = " + evobj.srcElement); | |
| ok(evobj.fromElement === null, "evobj.srcElement = " + evobj.fromElement); | |
| ok(evobj.toElement === null, "evobj.srcElement = " + evobj.toElement); | |
| ok(evobj.type === "", "evobj.type = " + evobj.type); | |
| div.fireEvent("ondataavailable", evobj); | |
| ok(b, "ondataavailable handler not called?"); | |
| ok(evobj.srcElement === div, "evobj.srcElement = " + evobj.srcElement); | |
| ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type); | |
| div.detachEvent("ondataavailable", ondataavailableHandler); | |
| b = false; | |
| div.fireEvent("ondataavailable", evobj); | |
| ok(!b, "ondataavailable handler called?"); | |
| ok(evobj.srcElement === div, "evobj.srcElement = " + evobj.srcElement); | |
| ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type); | |
| document.attachEvent("ondataavailable", ondataavailableDocHandler); | |
| evobj = document.createEventObject(); | |
| document.fireEvent("ondataavailable", evobj); | |
| ok(b, "ondataavailable handler not called?"); | |
| ok(evobj.srcElement === null, "evobj.srcElement = " + evobj.srcElement); | |
| ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type); | |
| } | |
| function test_scriptfor() { | |
| var div = document.getElementById("divid2"); | |
| ok("onclick" in div, "testevent not in div"); | |
| ok(typeof(div.onclick) === "function", "typeof(div.onclick) = " + typeof(div.onclick)); | |
| ok(testevent_divid2_called === false, "testevent_divid2_called = " + testevent_divid2_called); | |
| ok(typeof(document.onclick) === "function", "typeof(document.onclick) = " + typeof(document.onclick)); | |
| ok(testevent_document_called === false, "testevent_document_called = " + testevent_document_called); | |
| div.click(); | |
| ok(testevent_divid2_called === true, "testevent_divid2_called = " + testevent_divid2_called); | |
| ok(testevent_document_called === true, "testevent_document_called = " + testevent_document_called); | |
| ok(!("ontest" in div), "testevent in div"); | |
| ok(typeof(div.ontest) === "undefined", "typeof(div.ontest) = " + typeof(div.ontest)); | |
| } | |
| function test_handler_this() { | |
| document.body.innerHTML = '<div id="d1"><div id="d2"></div></div>'; | |
| var div1 = document.getElementById("d1"); | |
| var div2 = document.getElementById("d2"); | |
| var calls = new Array(); | |
| function createHandler(name, node) { | |
| return function() { | |
| ok(this === node, "this !== node"); | |
| calls.push(name); | |
| } | |
| } | |
| function registerHandler(name, target) { | |
| var b = target.attachEvent("onclick", function() { | |
| ok(this === window, "this !== window"); | |
| calls.push(name+"*"); | |
| }); | |
| ok(b, "attachEvent failed"); | |
| } | |
| registerHandler("div1", div1); | |
| registerHandler("div2", div2); | |
| registerHandler("body", document.body); | |
| div1.onclick = createHandler("div1", div1); | |
| div2.onclick = createHandler("div2", div2); | |
| document.body.onclick = createHandler("body", document.body); | |
| div2.click(); | |
| ok(calls == "div2,div2*,div1,div1*,body,body*", "calls = " + calls); | |
| } | |
| function test_insert_script() { | |
| var e = document.createElement("script"); | |
| extern_cnt = 0; | |
| e.src = "externscr.js"; | |
| var readystatechange_log = ""; | |
| e.onreadystatechange = function() { | |
| readystatechange_log += "," + e.readyState; | |
| ok(extern_cnt === 1, "extern_cnt = " + extern_cnt); | |
| if(e.readyState === "complete") { | |
| ok(readystatechange_log === "append,complete", "readystatechange_log = " + readystatechange_log); | |
| external.reportSuccess(); | |
| } | |
| } | |
| document.body.appendChild(e); | |
| ok(extern_cnt === 1, "extern_cnt = " + extern_cnt); | |
| readystatechange_log = "append"; | |
| } | |
| var string_handler_called = false; | |
| function test_string_event_handler() { | |
| var e = document.createElement("div"); | |
| var event_str = "string_handler_called = true;"; | |
| document.body.appendChild(e); | |
| e.onclick = event_str; | |
| ok(e.onclick === event_str, "e.onclick = " + e.onclick); | |
| e.click(); | |
| ok(string_handler_called === false, "string handler called"); | |
| e.setAttribute("onclick", event_str); | |
| ok(e.onclick === event_str, "e.onclick = " + e.onclick); | |
| e.click(); | |
| ok(string_handler_called === false, "string handler called"); | |
| } | |
| function test_body_events() { | |
| var f = function() {} | |
| document.body.onload = f; | |
| ok(document.body.onload === f, "body.onload != f"); | |
| ok(window.onload === f, "window.onload != f"); | |
| document.body.onfocus = f; | |
| ok(document.body.onfocus === f, "body.onfocus != f"); | |
| ok(window.onfocus === f, "window.onfocus != f"); | |
| } | |
| window.onload = function() { | |
| try { | |
| ok(inlscr_complete_called, "onreadystatechange not fired"); | |
| ok(extern_res_script_rs === "eval,complete1," || extern_res_script_rs == "loaded0,eval,complete1,", | |
| "extern_res_script_rs = " + extern_res_script_rs + " expected (loaded0)?,eval,complete1,"); | |
| ok(extern_http_script_rs === "loading,loaded,complete,", | |
| "extern_http_script_rs = " + extern_http_script_rs + " expected loading,loaded,complete,"); | |
| ok(cnt == 1, "cnt=" + cnt + " exception during loading?"); | |
| ok(this === window, "this !== window"); | |
| ok(typeof(window.onload) === "function", "typeof(window.onload) = " + typeof(window.onload)); | |
| ok(document.body.onload === window.onload, "document.body.onload !== window.onload"); | |
| ok(img_onload_called, "img.onload not called before window.onload"); | |
| test_scriptfor(); | |
| ondataavailable_test(); | |
| test_handler_this(); | |
| test_insert_script(); | |
| test_string_event_handler(); | |
| test_body_events(); | |
| }catch(e) { | |
| ok(false, "Got an exception: " + e.message); | |
| } | |
| } | |
| </script> | |
| <script> | |
| var img = document.createElement("img"); | |
| img.src = "http://test.winehq.org/tests/winehq_snapshot/index_files/winehq_logo_glass.png"; | |
| var img_onload_called = false; | |
| img.onload = function() { | |
| external.trace("img.onload"); | |
| img_onload_called = true; | |
| } | |
| </script> | |
| </head> | |
| <body> | |
| <div id="divid"></div> | |
| <div id="divid2"></div> | |
| <script event="onclick" for="divid2"> | |
| testevent_divid2_called = true; | |
| </script> | |
| <script event="onclick" for="document"> | |
| testevent_document_called = true; | |
| </script> | |
| <script event="ontest" for="divid2"> | |
| ok(false, "unexpected ontest"); | |
| </script> | |
| <script> | |
| (function() { | |
| var div = document.getElementById("divid2"); | |
| ok(div.onclick === null, "div.onclick = null"); | |
| cnt++; | |
| })(); | |
| </script> | |
| <script> | |
| var inlscr_complete_called = false, extern_res_script_rs = "", extern_http_script_rs = ""; | |
| var extern_cnt = 0; | |
| function expect_inlscr_complete() { | |
| var elem = document.getElementById("inlscr"); | |
| ok(elem.readyState === "complete" || broken(elem.readyState === "loading"), "expect_inlscr_complete: elem.readyState = " + elem.readyState); | |
| if(elem.readyState === "complete") | |
| inlscr_complete_called = true; | |
| } | |
| function extern_res_script_readystatechange() { | |
| var elem = document.getElementById("extscr"); | |
| if(elem.readyState != "loading") | |
| extern_res_script_rs += elem.readyState + extern_cnt + ","; | |
| else | |
| external.trace("Got loading readyState from external res script."); | |
| } | |
| function http_script_readystatechange() { | |
| var elem = document.getElementById("httpscr"); | |
| extern_http_script_rs += elem.readyState + ","; | |
| } | |
| function on_externscr() { | |
| var elem = document.getElementById("extscr"); | |
| ok(elem.readyState === "interactive" || broken(elem.readyState === "loading"), | |
| "on_externscr: elem.readyState = " + elem.readyState); | |
| extern_res_script_rs += "eval,"; | |
| } | |
| </script> | |
| <script id="inlscr" onreadystatechange="expect_inlscr_complete();"> | |
| (function() { | |
| ok(inlscr_complete_called === false || broken(inlscr_complete_called), "onreadystatechange fired too early"); | |
| var elem = document.getElementById("inlscr"); | |
| ok(elem.readyState === "interactive", "inlscr: elem.readyState = " + elem.readyState); | |
| })(); | |
| </script> | |
| <script id="extscr" onreadystatechange="extern_res_script_readystatechange()" src="externscr.js"></script> | |
| <script id="httpscr" onreadystatechange="http_script_readystatechange()" src="https://test.winehq.org/tests/empty.js?123456"></script> | |
| <script> | |
| document.body.appendChild(img); | |
| </script> | |
| </body> | |
| </html> |