<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test.js"></script>
<script>
window.jsTestIsAsync = true;
document.addEventListener('DOMContentLoaded', function () {
listenForEvents(document.querySelector('#outer'));
listenForEvents(document.querySelector('#inner1'));
listenForEvents(document.querySelector('#inner2'));
listenForEvents(document.querySelector('#inner3'));
if (window.testRunner) {
eventSender.mouseMoveTo(1, 1);
eventSender.mouseMoveTo(90,140);
debug("// Entering #outer");
eventSender.mouseMoveTo(110,140);
debug("// Entering #inner1");
eventSender.mouseMoveTo(130,140);
debug("// Entering #inner3 (and therefore also #inner2)");
eventSender.mouseMoveTo(170,140);
debug("// Leaving #inner3 and #inner2, but not #outer");
eventSender.mouseMoveTo(180,140);
debug("// Leaving #outer");
eventSender.mouseMoveTo(210,140);
}
finishJSTest();
});
function handleEvent(e) {
var phases = ['', 'capturing', 'at target', 'bubbling'];
var target = e.target ? e.target : e.srcElement;
if (target.id && target.id != "console") {
debug(e.type + " (" + phases[e.eventPhase] + ") on " + target.id);
if (e.relatedTarget && e.relatedTarget.id)
debug('- Related target: ' + e.relatedTarget.id);
}
}
function listenForEvents(el) {
['mouseover', 'mouseout', 'mouseenter', 'mouseleave'].forEach(function(type) {
el.addEventListener(type, handleEvent);
});
}
</script>
<style>
#outer {
background: blue;
height: 100px;
left: 100px;
position: absolute;
top: 100px;
width: 100px;
}
#inner1 {
background: red;
height: 50px;
left: 20px;
position: absolute;
top: 20px;
width: 50px;
}
#inner2 {
background: yellow;
height: 20px;
left: 60px;
position: absolute;
top: 30px;
width: 20px;
}
#inner3 {
background-color: green;
height: 10px;
margin: 5px;
width: 10px;
}
</style>
</head>
<body>
<div id="outer">
<div id="inner1"></div>
<div id="inner2">
<div id="inner3"></div>
</div>
</div>
</body>
</html>