101 lines
2.9 KiB
HTML
101 lines
2.9 KiB
HTML
<!DOCTYPE html><!-- webkit-test-runner [ TabsToLinks=true SpatialNavigationEnabled=true ] -->
|
|
<html>
|
|
<!--
|
|
This test ensures the correctness the following Spatial Navigation
|
|
(SNav) algorithm features.
|
|
|
|
1) There is no unit overflow in the Spatial Navigation algorithm while
|
|
calculating the best node candidate to move focus to. To test that this
|
|
page positions some elements 33554309 pixels (subpixel overflow limitation)
|
|
far from each other (distance
|
|
that can considered large enough for most of the Web Pages on the
|
|
Internet).
|
|
|
|
2) Make sure that a best focusable candidate only gets focused
|
|
if it is visible in the current Viewport. Scroll-in-direction
|
|
is performed otherwise.
|
|
|
|
* Pre-conditions:
|
|
1) DRT support for SNav enable/disable.
|
|
|
|
* Navigation steps:
|
|
1) Loads this page, focus goes to "start" automatically.
|
|
2) Attempt to move focus down to "end. As it is too far and out of
|
|
viewport, focus change will not happen and page will be scrolled
|
|
a step down.
|
|
3) By sending an "End" keypress, page gets scrolled down to a place
|
|
where the "end" node gets visible in the viewport.
|
|
4) Step _1_ is ran again, and "end" gets focused. -->
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<script src="resources/spatial-navigation-utils.js"></script>
|
|
<script type="application/javascript">
|
|
|
|
var resultMap1 = [
|
|
["Down", "start"],
|
|
["DONE", "DONE"]
|
|
];
|
|
|
|
var resultMap2 = [
|
|
["Down", "end"],
|
|
["DONE", "DONE"]
|
|
];
|
|
|
|
if (window.testRunner) {
|
|
testRunner.dumpAsText();
|
|
testRunner.waitUntilDone();
|
|
}
|
|
|
|
function runTest()
|
|
{
|
|
// starting the test itself: get to a known place.
|
|
document.getElementById("start").focus();
|
|
|
|
setTimeout(step1 , 0);
|
|
}
|
|
|
|
function step1()
|
|
{
|
|
// Actions in 'resultMap1' should keep the focus in the currently
|
|
// focused element ('start') once the best candidate ('end') is not
|
|
// visible in current viewport.
|
|
initTest(resultMap1, step1Completed);
|
|
}
|
|
|
|
function step2()
|
|
{
|
|
shouldBeTrue(String(document.scrollingElement.scrollTop != 0));
|
|
|
|
// Then it scrolls down to the end of the page ...
|
|
if (window.eventSender)
|
|
eventSender.keyDown("end");
|
|
|
|
// And 'resultMap2' re-tries to move focus down.
|
|
initTest(resultMap2, step2Completed);
|
|
}
|
|
|
|
function step1Completed()
|
|
{
|
|
setTimeout(step2 , 0);
|
|
}
|
|
|
|
function step2Completed()
|
|
{
|
|
if (window.testRunner)
|
|
testRunner.notifyDone();
|
|
}
|
|
|
|
window.onload = runTest;
|
|
|
|
</script>
|
|
<script src="../resources/js-test-post.js"></script>
|
|
</head>
|
|
<body id="some-content" xmlns="http://www.w3.org/1999/xhtml">
|
|
<a id="start" href="a">Start</a>
|
|
<div style='margin-top:33554309px'>
|
|
<a id="end" href="a">End</a>
|
|
</div>
|
|
<div id="console"></div>
|
|
</body>
|
|
</html>
|