blob: 9007b09e436fe04dfac1ad8975fec8c023b9b4ad [file] [log] [blame]
<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="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");
snav.assertSnavEnabledAndTestable(true /* focuslessSpatNav */ );
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>