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

<p contenteditable="true" id="text">The man jumped higher.</p>

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

<script>
    description("This tests that selection matches whole words, rather than partial matches.");
    
    if (window.accessibilityController) {
        var text = accessibilityController.accessibleElementById("text");
        var windowSelection = window.getSelection();

        // A matching range before the selection should be selected when searching for closest match.
        document.getElementById("text").focus();

        // First find the range before the current selection.
        var range = document.createRange();
        range.setStart(document.getElementById("text").firstChild, 0);
        range.setEnd(document.getElementById("text").firstChild, 0);
        windowSelection.removeAllRanges();
        windowSelection.addRange(range);
      
        // Try to select a partial word, it should fail.
        result = text.selectTextWithCriteria("AXSelectTextAmbiguityResolutionClosestToSelection", "jump");
        shouldBe("result", "''");
        shouldBe("windowSelection.getRangeAt(0).startOffset", "0");
        shouldBe("windowSelection.getRangeAt(0).endOffset", "0");

        // Select the whole word, it should succeed.
        result = text.selectTextWithCriteria("AXSelectTextAmbiguityResolutionClosestToSelection", "jumped");
        shouldBe("result", "'jumped'");
        shouldBe("windowSelection.getRangeAt(0).startOffset", "8");
        shouldBe("windowSelection.getRangeAt(0).endOffset", "14");
        windowSelection.removeAllRanges();
        windowSelection.addRange(range);

        // Select multiple whole word, it should succeed.
        result = text.selectTextWithCriteria("AXSelectTextAmbiguityResolutionClosestToSelection", "jumped higher");
        shouldBe("result", "'jumped higher'");
        shouldBe("windowSelection.getRangeAt(0).startOffset", "8");
        shouldBe("windowSelection.getRangeAt(0).endOffset", "21");
        windowSelection.removeAllRanges();
        windowSelection.addRange(range);

        // Select multiple words, where one is not a whole word, it should fail.
        result = text.selectTextWithCriteria("AXSelectTextAmbiguityResolutionClosestToSelection", "jumped high");
        shouldBe("result", "''");
        shouldBe("windowSelection.getRangeAt(0).startOffset", "0");
        shouldBe("windowSelection.getRangeAt(0).endOffset", "0");
    }
</script>

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