blob: 8bca9f3bc9c7cf299302f877a76edac3f076425a [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: 100px;
height: 100px;
margin: 5px;
border: 1px solid black;
}
</style>
<div id="first" tabindex="0">First</div>
<input id="second" type="text" value="Second (|d| key will remove)"></input>
<div id="third" tabindex="0">Third</div>
<script>
// This checks that setting |display:none| on an editable element that is
// interested and focused resets spat nav and allows further navigation.
let first = document.getElementById("first");
let second = document.getElementById("second");
let third = document.getElementById("third");
function setDisplayNone() {
return new Promise(function(resolve) {
second.style.display = "none";
// Need a rAF for automated testing since focus won't be reevaluated
// until BeginFrame.
requestAnimationFrame(() => requestAnimationFrame(resolve));
});
}
// For manual testing.
second.addEventListener('keydown', (e) => {
if (e.key == 'd')
setDisplayNone();
});
promise_test(async () => {
// Move interest to 'second' and focus it.
snav.triggerMove('Down');
snav.triggerMove('Down');
eventSender.keyDown('Enter');
assert_equals(window.internals.interestedElement,
second,
"Input box starts off with interest.");
assert_equals(document.activeElement,
second,
"Enter key moves focus into 'second'");
// Set |display:none| on the focused input. Ensure navigation resets and
// starts as if from un-interested; continues to work.
await setDisplayNone();
snav.triggerMove('Down');
assert_equals(window.internals.interestedElement,
first,
"'first' box should be interested.");
snav.triggerMove('Down');
assert_equals(window.internals.interestedElement,
third,
"'third' box should be interested.");
}, "Spat-Nav resets gracefully after focused editable becomes display:none.");
</script>