| <html> | |
| <head> | |
| <script> | |
| var testevent_divid2_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); | |
| div.click(); | |
| ok(testevent_divid2_called === true, "testevent_divid2_called = " + testevent_divid2_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="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> |