<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>

<input type="text" id="textfield" value="textfield text">
<br>
<textarea id="textarea">text area text</textarea>
outside text

<p id="description"></p>
<div id="console"></div>

<script>
    description("This tests that the select text mechanism will not return results outside of a text input control.");
    
    if (window.accessibilityController) {
        var textfield = accessibilityController.accessibleElementById("textfield");
        var windowSelection = window.getSelection();

        document.getElementById("textfield").focus();
        document.getElementById("textfield").setSelectionRange(0, 0);

        // Try to select text inside the text field.
        result = textfield.selectTextWithCriteria("AXSelectTextAmbiguityResolutionClosestToSelection", "textfield");
        shouldBe("result", "'textfield'");
        shouldBe("document.getElementById('textfield').selectionStart", "0");
        shouldBe("document.getElementById('textfield').selectionEnd", "9");

        document.getElementById("textfield").setSelectionRange(0, 0);

        // Try to select text outside the focused text field. It should fail.
        result = textfield.selectTextWithCriteria("AXSelectTextAmbiguityResolutionClosestToSelection", "outside");
        shouldBe("result", "''");
        shouldBe("document.getElementById('textfield').selectionStart", "0");
        shouldBe("document.getElementById('textfield').selectionEnd", "0");

        // Do the same for text area
        document.getElementById("textarea").focus();
        document.getElementById("textarea").setSelectionRange(0, 0);

        var textarea = accessibilityController.accessibleElementById("textarea");

        // Try to select text inside the text field.
        result = textarea.selectTextWithCriteria("AXSelectTextAmbiguityResolutionClosestToSelection", "text area");
        shouldBe("result", "'text area'");
        shouldBe("document.getElementById('textarea').selectionStart", "0");
        shouldBe("document.getElementById('textarea').selectionEnd", "9");

        document.getElementById("textarea").setSelectionRange(0, 0);

        // Try to select text outside the focused text field. It should fail.
        result = textarea.selectTextWithCriteria("AXSelectTextAmbiguityResolutionClosestToSelection", "outside");
        shouldBe("result", "''");
        shouldBe("document.getElementById('textarea').selectionStart", "0");
        shouldBe("document.getElementById('textarea').selectionEnd", "0");
    }
</script>

<script src="../../resources/js-test-post.js"></script>
</body>
</html>
