<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Text Fragments Test</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
</head>
<body>
<!--
The document performs a same-document navigation, which contains the text fragment 'foo'.
'foo' is inside of a <a> element. If it were focused, hitting `Enter` would
directly navigate to its href, which is not intended.
Instead, it should only have the sequential focus, ie. pressing `Tab` would focus the next
focusable element.
-->
<a href="#" id="link">foo</a>
<button id="next-button">Next Focusable Element</button>
<script>
// Define the test for text fragment focus behavior
promise_test(async t => {
const link = document.getElementById('link');
const nextButton = document.getElementById('next-button');
const hashChange = new Promise(r => window.addEventListener('hashchange', r, { once: true }));
// Simulate a same-document load to the text fragment
location.hash = '#some-hash-to-trigger-hashchange:~:text=foo';
await hashChange;
// Assert that the link element does not have focus initially
assert_not_equals(document.activeElement, link, 'Link element should not have focus initially');
// Simulate pressing TAB to shift focus to the next element
await test_driver.send_keys(document.body, '\uE004'); // '\uE004' is the WebDriver key code for TAB
// Assert that the next focusable element (button) has focus
assert_equals(document.activeElement, nextButton, 'Next focusable element should have focus after pressing TAB');
}, 'Text Fragment focus behavior');
</script>
</body>
</html>