chromium/third_party/blink/web_tests/fast/dom/fragment-activation-focuses-target.html

<!DOCTYPE html>
<html>
<head>
    <script src="../../resources/js-test.js"></script>
</head>
<body>
    <a href="#fragment1" id="link1" tabindex="0">link1</a>
    <a href="#fragment2" id="link2" tabindex="0">link2</a>
    <a href="#fragment3" id="link3" tabindex="0">link3</a>
    <a href="#top" id="link4" tabindex="0">link4</a>
    <a href="#" id="link5" tabindex="0">link5</a>
    <a href="#input1" id="link6" tabindex="0">link6</a>
    <br><br>
    <div id="fragment1" name="fragment1" tabindex="0">fragment1</div>
    <div id="fragment2" name="fragment2">fragment2</div>
    <input id="input1" value="abcdef">
    <script>
        description("This tests that if an in-page link is activated, focus control is transferred to the fragment if possible.");

        var link1 = document.getElementById("link1");
        link1.focus();
        debug("Verify that the focus is on the link.");
        shouldBe("document.activeElement", "link1");

        link1.click();
        debug("Click the link and verify that focus has moved to the fragment.");
        shouldBe("document.activeElement", "document.getElementById('fragment1')");

        debug("Move focus back to the link and verify.");
        link1.focus();
        shouldBe("document.activeElement", "link1");

        if (window.testRunner) {
            debug("Send an enter key event which should also trigger focus to move to the fragment.");
            eventSender.keyDown("Enter");
            shouldBe("document.activeElement", "document.getElementById('fragment1')");
        }

        debug("Activate a link that does not have a focusable fragment and verify that the currently focused element is unfocused.");
        var link2 = document.getElementById("link2");
        link2.focus();
        shouldBe("document.activeElement", "link2");
        link2.click();
        shouldBe("document.activeElement", "document.body");

        debug("Activate a link that does not refer to an existing fragment and verify that the currently focused element remains focused.");
        var link3 = document.getElementById("link3");
        link3.focus();
        shouldBe("document.activeElement", "link3");
        link3.click();
        shouldBe("document.activeElement", "link3");

        debug("Activate a link to #top and verify that the link remains focused");
        var link4 = document.getElementById("link4");
        link4.focus();
        shouldBe("document.activeElement", "link4");
        link4.click();
        shouldBe("document.activeElement", "link4");

        debug("Activate a link to # and verify that the link remains focused");
        var link5 = document.getElementById("link5");
        link5.focus();
        shouldBe("document.activeElement", "link5");
        link5.click();
        shouldBe("document.activeElement", "link5");

        debug("Activate a link to an INPUT elemnt, verify that the INPUT is editable");
        var input1 = document.getElementById("input1");
        input1.setSelectionRange(3, 3);
        var link6 = document.getElementById("link6");
        link6.focus();
        shouldBe("document.activeElement", "link6");
        link6.click();
        shouldBe("document.activeElement", "input1");
        if (window.eventSender) {
            eventSender.keyDown('X');
            shouldBeEqualToString("input1.value", "abcXdef");
        }
        var successfullyParsed = true;
    </script>
</body>
</html>