blob: f406a84fac837a3802cc16e4b2fb9bdf0c03a5cb [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<style>
div {
line-height: 50px;
}
.hoverme {
background-color: lightblue;
}
</style>
<script src="../js/resources/js-test-pre.js"></script>
</head>
<body onload="runtest()" style="margin:0">
<script type="text/javascript">
function centerOfDivAtIndex(n)
{
return elementHeight * n + elementHeight / 2;
}
function scrolledWhileCursorNotVisible()
{
// The delay is necessary to guarantee that the fake mouse move
// event timer has fired. We have to wait the full length of time
// since the cursor is not visible and so we do not expect the
// hover effect to be invoked.
if (Date.now() - startTime < fakeMouseMoveTimerDelay) {
window.setTimeout(scrolledWhileCursorNotVisible, 10);
return;
}
shouldBeEqualToString("array[0].innerHTML", textWhenWasHovered);
shouldBeEqualToString("array[1].innerHTML", textWhenWasHovered);
shouldBeEqualToString("array[2].innerHTML", textWhenHovered);
shouldBeEqualToString("array[3].innerHTML", textWhenNotHovered);
shouldBeEqualToString("array[4].innerHTML", textWhenNotHovered);
shouldBe("document.documentElement.scrollTop", "100");
testRunner.notifyDone();
}
function scrolledWhileCursorVisible()
{
// The delay is necessary to guarantee that the fake mouse move
// event timer has fired. But since the cursor is visible, we
// can stop waiting as soon as the hover effect has been invoked.
var elementHovered = array[2].innerHTML == textWhenHovered;
if (!elementHovered && Date.now() - startTime < fakeMouseMoveTimerDelay) {
window.setTimeout(scrolledWhileCursorVisible, 10);
return;
}
shouldBeEqualToString("array[0].innerHTML", textWhenWasHovered);
shouldBeEqualToString("array[1].innerHTML", textWhenWasHovered);
shouldBeEqualToString("array[2].innerHTML", textWhenHovered);
shouldBeEqualToString("array[3].innerHTML", textWhenNotHovered);
debug("Mouse is not visible, scrolling page so the mouse ends up on the fourth div.");
shouldBe("document.documentElement.scrollTop", "50");
internals.setIsCursorVisible(document, false);
startTime = Date.now();
eventSender.continuousMouseScrollBy(0, -elementHeight);
scrolledWhileCursorNotVisible();
}
var array;
var numHoverElements = 30;
var elementHeight = 50;
var fakeMouseMoveTimerDelay = 150;
var textWhenNotHovered = "hover over me";
var textWhenHovered = "currently hovered";
var textWhenWasHovered = "was hovered";
var startTime;
function runtest()
{
buildPage();
array = document.getElementsByClassName('hoverme');
for (var i = 0; i < array.length; i++) {
array[i].addEventListener('mouseover', function(e) {
this.innerHTML = textWhenHovered;
this.style.backgroundColor = "yellow";
});
array[i].addEventListener('mouseout', function(e) {
this.innerHTML = textWhenWasHovered;
this.style.backgroundColor = "green";
});
}
if (!window.testRunner || !window.eventSender)
return;
if (!window.internals || !window.internals.setIsCursorVisible) {
debug("window.internals.setIsCursorVisible is required to run this test.");
return;
}
testRunner.waitUntilDone();
debug("Mouse is visible, moving it over the first div.");
internals.setIsCursorVisible(document, true);
eventSender.mouseMoveTo(42, centerOfDivAtIndex(0));
shouldBeEqualToString("array[0].innerHTML", textWhenHovered);
shouldBeEqualToString("array[1].innerHTML", textWhenNotHovered);
debug("Mouse is visible, moving it over the second div.");
eventSender.mouseMoveTo(53, centerOfDivAtIndex(1));
shouldBeEqualToString("array[0].innerHTML", textWhenWasHovered);
shouldBeEqualToString("array[1].innerHTML", textWhenHovered);
shouldBeEqualToString("array[2].innerHTML", textWhenNotHovered);
debug("Mouse is visible, scrolling page so the mouse ends up on the third div.");
shouldBe("document.documentElement.scrollTop", "0");
startTime = Date.now();
eventSender.continuousMouseScrollBy(0, -elementHeight);
scrolledWhileCursorVisible();
}
function buildPage()
{
var table = document.getElementById('table_to_fill');
var i;
for (i = 0; i < numHoverElements; i++) {
var p = document.createElement('tr');
p.innerHTML = '<tr><td><div class="hoverme">' + textWhenNotHovered + '</div></td></tr>';
table.appendChild(p);
}
}
</script>
<table id="table_to_fill" width="100%" cellpadding="0px" cellspacing="0px" border="0px">
<tr><td><div class="hoverme">hover over me</div></td></tr>
</table>
<p>Test for <a href="http://crbug.com/153784">http://crbug.com/153784</a>. New hover effects should not be invoked during scroll if the mouse cursor is not visible.</p>
<div id="console"></div>
</body>
</html>