blob: 86a05a4b6d4ce744bfacd0982ce18f781b5b1b71 [file] [log] [blame]
<!DOCTYPE html>
<script src="../../../../../resources/testharness.js"></script>
<script src="../../../../../resources/testharnessreport.js"></script>
<script src="../../../../../fast/spatial-navigation/resources/snav-testharness.js"></script>
<style>
div {
width: 130px;
height: 130px;
border: 1px solid black;
}
#clip {
margin: 5px;
width: 100px;
height: 100px;
overflow: hidden;
background-color: lightgrey;
}
#target {
margin: 20px;
height: 50px;
}
pre {
position: absolute;
top: 400px;
}
</style>
<div tabindex="0" id="outer">
Outer Target
<div id="clip" tabindex="0">
Clip
<div id="target" tabindex="0">Inner Target</div>
</div>
</div>
<script>
const outer = document.getElementById("outer");
const clip = document.getElementById("clip");
const target = document.getElementById("target");
// This test checks that the spatial navigation overlap testing works
// correctly in the presence of clipping. The spatial navigation algorithm
// attempts to prioritize inner elements that are fully contained by another
// valid target.
//
// The spatial navigation algorithm focuses "containers" from the outside and
// in. This test ensures that also clipped "insiders" are reachable.
test(() => {
assert_true(!!window.internals);
snav.triggerMove('Down');
assert_equals(window.internals.interestedElement,
outer,
"Expected interest to move to |outer| element.");
snav.triggerMove('Down');
assert_equals(window.internals.interestedElement,
clip,
"Expected interest to move to |clip| element.");
snav.triggerMove('Down');
assert_equals(window.internals.interestedElement,
target,
"Expected interest to move to |target| element.");
}, "Navigation to fully contained but clipped element.");
</script>