1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/events/test/test_bug432698.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,223 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<!-- 1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id=432698 1.8 +--> 1.9 +<head> 1.10 + <title>Test for Bug 432698</title> 1.11 + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.12 + <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script> 1.13 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 1.14 +</head> 1.15 +<body> 1.16 +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=432698">Mozilla Bug 432698</a> 1.17 +<p id="display"></p> 1.18 +<div id="content" style="display: none"> 1.19 + 1.20 +</div> 1.21 +<pre id="test"> 1.22 +<script type="application/javascript"> 1.23 + 1.24 +/** Test for Bug 432698 **/ 1.25 +SimpleTest.waitForExplicitFinish(); 1.26 +SimpleTest.waitForFocus(runTests); 1.27 +var outer; 1.28 +var middle; 1.29 +var inner; 1.30 +var outside; 1.31 +var container; 1.32 +var file; 1.33 +var iframe; 1.34 +var checkRelatedTarget = false; 1.35 +var expectedRelatedEnter = null; 1.36 +var expectedRelatedLeave = null; 1.37 +var mouseentercount = 0; 1.38 +var mouseleavecount = 0; 1.39 +var mouseovercount = 0; 1.40 +var mouseoutcount = 0; 1.41 + 1.42 +function sendMouseEvent(t, elem) { 1.43 + var r = elem.getBoundingClientRect(); 1.44 + synthesizeMouse(elem, r.width / 2, r.height / 2, {type: t}); 1.45 +} 1.46 + 1.47 +var expectedMouseEnterTargets = []; 1.48 +var expectedMouseLeaveTargets = []; 1.49 + 1.50 +function runTests() { 1.51 + outer = document.getElementById("outertest"); 1.52 + middle = document.getElementById("middletest"); 1.53 + inner = document.getElementById("innertest"); 1.54 + outside = document.getElementById("outside"); 1.55 + container = document.getElementById("container"); 1.56 + file = document.getElementById("file"); 1.57 + iframe = document.getElementById("iframe"); 1.58 + 1.59 + // Make sure ESM thinks mouse is outside the test elements. 1.60 + sendMouseEvent("mousemove", outside); 1.61 + 1.62 + mouseentercount = 0; 1.63 + mouseleavecount = 0; 1.64 + mouseovercount = 0; 1.65 + mouseoutcount = 0; 1.66 + checkRelatedTarget = true; 1.67 + expectedRelatedEnter = outside; 1.68 + expectedRelatedLeave = inner; 1.69 + expectedMouseEnterTargets = ["outertest", "middletest", "innertest"]; 1.70 + sendMouseEvent("mousemove", inner); 1.71 + is(mouseentercount, 3, "Unexpected mouseenter event count!"); 1.72 + is(mouseovercount, 1, "Unexpected mouseover event count!"); 1.73 + is(mouseoutcount, 0, "Unexpected mouseout event count!"); 1.74 + is(mouseleavecount, 0, "Unexpected mouseleave event count!"); 1.75 + expectedRelatedEnter = inner; 1.76 + expectedRelatedLeave = outside; 1.77 + expectedMouseLeaveTargets = ["innertest", "middletest", "outertest"]; 1.78 + sendMouseEvent("mousemove", outside); 1.79 + is(mouseentercount, 3, "Unexpected mouseenter event count!"); 1.80 + is(mouseovercount, 1, "Unexpected mouseover event count!"); 1.81 + is(mouseoutcount, 1, "Unexpected mouseout event count!"); 1.82 + is(mouseleavecount, 3, "Unexpected mouseleave event count!"); 1.83 + 1.84 + // Event handling over native anonymous content. 1.85 + var r = file.getBoundingClientRect(); 1.86 + expectedRelatedEnter = outside; 1.87 + expectedRelatedLeave = file; 1.88 + synthesizeMouse(file, r.width / 6, r.height / 2, {type: "mousemove"}); 1.89 + is(mouseentercount, 4, "Unexpected mouseenter event count!"); 1.90 + is(mouseovercount, 2, "Unexpected mouseover event count!"); 1.91 + is(mouseoutcount, 1, "Unexpected mouseout event count!"); 1.92 + is(mouseleavecount, 3, "Unexpected mouseleave event count!"); 1.93 + 1.94 + // Moving mouse over type="file" shouldn't cause mouseover/out/enter/leave events 1.95 + synthesizeMouse(file, r.width - (r.width / 6), r.height / 2, {type: "mousemove"}); 1.96 + is(mouseentercount, 4, "Unexpected mouseenter event count!"); 1.97 + is(mouseovercount, 2, "Unexpected mouseover event count!"); 1.98 + is(mouseoutcount, 1, "Unexpected mouseout event count!"); 1.99 + is(mouseleavecount, 3, "Unexpected mouseleave event count!"); 1.100 + 1.101 + expectedRelatedEnter = file; 1.102 + expectedRelatedLeave = outside; 1.103 + sendMouseEvent("mousemove", outside); 1.104 + is(mouseentercount, 4, "Unexpected mouseenter event count!"); 1.105 + is(mouseovercount, 2, "Unexpected mouseover event count!"); 1.106 + is(mouseoutcount, 2, "Unexpected mouseout event count!"); 1.107 + is(mouseleavecount, 4, "Unexpected mouseleave event count!"); 1.108 + 1.109 + // Initialize iframe 1.110 + iframe.contentDocument.documentElement.style.overflow = "hidden"; 1.111 + iframe.contentDocument.body.style.margin = "0px"; 1.112 + iframe.contentDocument.body.style.width = "100%"; 1.113 + iframe.contentDocument.body.style.height = "100%"; 1.114 + iframe.contentDocument.body.innerHTML = 1.115 + "<div style='width: 100%; height: 50%; border: 1px solid black;'></div>" + 1.116 + "<div style='width: 100%; height: 50%; border: 1px solid black;'></div>"; 1.117 + iframe.contentDocument.body.offsetLeft; // flush 1.118 + 1.119 + iframe.contentDocument.body.firstChild.onmouseenter = menter; 1.120 + iframe.contentDocument.body.firstChild.onmouseleave = mleave; 1.121 + iframe.contentDocument.body.lastChild.onmouseenter = menter; 1.122 + iframe.contentDocument.body.lastChild.onmouseleave = mleave; 1.123 + r = iframe.getBoundingClientRect(); 1.124 + expectedRelatedEnter = outside; 1.125 + expectedRelatedLeave = iframe; 1.126 + // Move mouse inside the iframe. 1.127 + synthesizeMouse(iframe.contentDocument.body, r.width / 2, r.height / 4, {type: "mousemove"}, 1.128 + iframe.contentWindow); 1.129 + synthesizeMouse(iframe.contentDocument.body, r.width / 2, r.height - (r.height / 4), {type: "mousemove"}, 1.130 + iframe.contentWindow); 1.131 + is(mouseentercount, 7, "Unexpected mouseenter event count!"); 1.132 + expectedRelatedEnter = iframe; 1.133 + expectedRelatedLeave = outside; 1.134 + sendMouseEvent("mousemove", outside); 1.135 + is(mouseleavecount, 7, "Unexpected mouseleave event count!"); 1.136 + 1.137 + checkRelatedTarget = false; 1.138 + 1.139 + iframe.contentDocument.body.firstChild.onmouseenter = null; 1.140 + iframe.contentDocument.body.firstChild.onmouseleave = null; 1.141 + iframe.contentDocument.body.lastChild.onmouseenter = null; 1.142 + iframe.contentDocument.body.lastChild.onmouseleave = null; 1.143 + 1.144 + container.onmouseenter = null; 1.145 + container.onmouseleave = null; 1.146 + container.onmouseout = null; 1.147 + container.onmouseover = null; 1.148 + 1.149 + var children = container.getElementsByTagName('*'); 1.150 + for (var i=0;i<children.length;i++) { 1.151 + children[i].onmouseenter = null; 1.152 + children[i].onmouseleave = null; 1.153 + children[i].onmouseout = null; 1.154 + children[i].onmouseover = null; 1.155 + } 1.156 + 1.157 + SimpleTest.finish(); 1.158 +} 1.159 + 1.160 +function menter(evt) { 1.161 + ++mouseentercount; 1.162 + evt.stopPropagation(); 1.163 + if (expectedMouseEnterTargets.length) { 1.164 + var t = expectedMouseEnterTargets.shift(); 1.165 + is(evt.target.id, t, "Wrong event target!"); 1.166 + } 1.167 + is(evt.bubbles, false, evt.type + " should not bubble!"); 1.168 + is(evt.cancelable, false, evt.type + " is not cancelable!"); 1.169 + is(evt.target, evt.currentTarget, "Wrong event target!"); 1.170 + ok(!evt.relatedTarget || evt.target.ownerDocument == evt.relatedTarget.ownerDocument, 1.171 + "Leaking nodes to another document?"); 1.172 + if (checkRelatedTarget && evt.target.ownerDocument == document) { 1.173 + is(evt.relatedTarget, expectedRelatedEnter, "Wrong related target (mouseenter)"); 1.174 + } 1.175 +} 1.176 + 1.177 +function mleave(evt) { 1.178 + ++mouseleavecount; 1.179 + evt.stopPropagation(); 1.180 + if (expectedMouseLeaveTargets.length) { 1.181 + var t = expectedMouseLeaveTargets.shift(); 1.182 + is(evt.target.id, t, "Wrong event target!"); 1.183 + } 1.184 + is(evt.bubbles, false, evt.type + " should not bubble!"); 1.185 + is(evt.cancelable, false, evt.type + " is not cancelable!"); 1.186 + is(evt.target, evt.currentTarget, "Wrong event target!"); 1.187 + ok(!evt.relatedTarget || evt.target.ownerDocument == evt.relatedTarget.ownerDocument, 1.188 + "Leaking nodes to another document?"); 1.189 + if (checkRelatedTarget && evt.target.ownerDocument == document) { 1.190 + is(evt.relatedTarget, expectedRelatedLeave, "Wrong related target (mouseleave)"); 1.191 + } 1.192 +} 1.193 + 1.194 +function mover(evt) { 1.195 + ++mouseovercount; 1.196 + evt.stopPropagation(); 1.197 +} 1.198 + 1.199 +function mout(evt) { 1.200 + ++mouseoutcount; 1.201 + evt.stopPropagation(); 1.202 +} 1.203 + 1.204 +</script> 1.205 +</pre> 1.206 +<div id="container" onmouseenter="menter(event)" onmouseleave="mleave(event)" 1.207 + onmouseout="mout(event)" onmouseover="mover(event)"> 1.208 + <div id="outside" onmouseout="event.stopPropagation()" onmouseover="event.stopPropagation()">foo</div> 1.209 + <div id="outertest" onmouseenter="menter(event)" onmouseleave="mleave(event)" 1.210 + onmouseout="mout(event)" onmouseover="mover(event)"> 1.211 + <div id="middletest" onmouseenter="menter(event)" onmouseleave="mleave(event)" 1.212 + onmouseout="mout(event)" onmouseover="mover(event)"> 1.213 + <div id="innertest" onmouseenter="menter(event)" onmouseleave="mleave(event)" 1.214 + onmouseout="mout(event)" onmouseover="mover(event)">foo</div> 1.215 + </div> 1.216 + </div> 1.217 + <input type="file" id="file" 1.218 + onmouseenter="menter(event)" onmouseleave="mleave(event)" 1.219 + onmouseout="mout(event)" onmouseover="mover(event)"> 1.220 + <br> 1.221 + <iframe id="iframe" width="50px" height="50px" 1.222 + onmouseenter="menter(event)" onmouseleave="mleave(event)" 1.223 + onmouseout="mout(event)" onmouseover="mover(event)"></iframe> 1.224 +</div> 1.225 +</body> 1.226 +</html>