blob: 9059aa84f0e6c2a776bedb8864f5460d95d81408 [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>
<div id="second" tabindex="0">Second</div>
<div id="third" tabindex="0">Third</div>
<script>
// This test checks that calling prevent default on key events doesn't
// prevent moving interest or entering/exiting focus.
let first = document.getElementById("first");
let second = document.getElementById("second");
let third = document.getElementById("third");
second.addEventListener('keydown', (e) => {
if (e.key !== "Escape")
e.preventDefault();
});
test(() => {
assert_true(!!window.internals);
// Move interest to 'second'
snav.triggerMove('Down');
snav.triggerMove('Down');
// Enter focus into 'second'
eventSender.keyDown('Enter');
assert_equals(document.activeElement,
second,
"Enter key moves focus into 'second'");
// Press down arrow. This should dispatch key event to the element. Since
// it is preventDefault'ed, we shouldn't change the interested element or
// focus.
let key_down_was_called = false;
const handler = (e) => {
assert_equals(e.key, 'ArrowDown');
key_down_was_called = true;
};
second.addEventListener('keydown', handler);
snav.triggerMove('Down');
assert_true(key_down_was_called, "'second' gets key events while focused");
second.removeEventListener('keydown', handler);
assert_equals(document.activeElement,
second,
"preventDefault on arrow key prevents movement");
assert_equals(window.internals.interestedElement,
second,
"preventDefault on arrow key prevents movement");
// Send escape key, this should remove focus from the element but keep
// interest.
eventSender.keyDown('Escape');
assert_not_equals(document.activeElement,
second,
"Escape key should blur 'second'");
assert_equals(window.internals.interestedElement,
second,
"Escape key shouldn't change interest from 'second'");
// Send down key. Now that focus was lost from 'second', we should move
// interest.
snav.triggerMove('Down');
assert_equals(window.internals.interestedElement,
third,
"Movement possible over key event capturing element");
}, "Focusless navigation with event cancelling handlers.");
</script>