| <html> |
| <head> |
| <script> |
| var testevent_divid2_called = false, testevent_document_called = false, cnt=0; |
| |
| function ok(b,m) { |
| return external.ok(b, m); |
| } |
| |
| 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 runTests(t) { |
| try { |
| ok(cnt == 1, "cnt=" + cnt + " exception during loading?"); |
| ok(t === window, "t !== window"); |
| |
| ok(typeof(window.onload) === "function", "typeof(window.onload) = " + typeof(window.onload)); |
| ok(document.body.onload === window.onload, "document.body.onload !== window.onload"); |
| |
| test_scriptfor(); |
| ondataavailable_test(); |
| test_handler_this(); |
| }catch(e) { |
| ok(false, "Got an exception: " + e.message); |
| } |
| |
| external.reportSuccess(); |
| } |
| </script> |
| </head> |
| <body onload="runTests(this)"> |
| <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> |
| </body> |
| </html> |