blob: f0ec3a248427553798383efaeda2baa8dc89ab2e [file] [log] [blame]
<!DOCTYPE html>
<script src='../../resources/testharness.js'></script>
<script src='../../resources/testharnessreport.js'></script>
<script src='../../resources/gesture-util.js'></script>
<style>
body, html {
margin: 0;
height: 500vh;
}
div {
height: 50px;
width: 100%;
}
.hoverme {
background-color: rgb(0, 0, 255);
}
.hoverme:hover {
background-color: rgb(255, 255, 0);
}
.message {
width: 100%;
text-align: left;
}
</style>
<div class="message">
First move your mouse cursor to the page, you will see the color under the mouse cursor changed from blue to yellow. <br>
Do a JS scroll, you will see the hover update on a text under the mouse cursor when the scrolling finishes.
</div>
<div class="hoverme">hover over me</div>
<div class="hoverme">hover over me</div>
<div class="hoverme">hover over me</div>
<div class="hoverme">hover over me</div>
<div class="hoverme">hover over me</div>
<script>
const elementHeight = 50;
window.onload = async () => {
await waitForCompositorCommit();
array = document.getElementsByClassName('hoverme');
promise_test(async () => {
let x = array[0].offsetLeft + 10;
let y = array[0].offsetTop + 25;
// Move cursor to 1st element.
await mouseMoveTo(x, y);
await waitFor( () => { return array[0].matches(":hover");}, 'wait for move to 1st element');
assert_true(array[0].matches(":hover"));
assert_false(array[1].matches(":hover"));
// Scroll end up at 4th element. Hover state does not update during scrolling,
// only the 4th element has a hover effect.
assert_equals(document.scrollingElement.scrollTop, 0);
window.scrollTo({top: 150, left: 0});
// Wait enough time to see if we fire a fake mouse move event to update the hover state.
await waitForAnimationEnd(() => { return document.scrollingElement.scrollTop; }, 300, 60);
assert_approx_equals(document.scrollingElement.scrollTop, 3 * elementHeight, 25);
assert_false(array[0].matches(":hover"));
assert_false(array[1].matches(":hover"));
assert_false(array[2].matches(":hover"));
assert_true(array[3].matches(":hover"));
assert_false(array[4].matches(":hover"));
}, 'JS scroll on the page, no hover update during scrolling, but updating hover at the end of scroll.');
}
</script>