<!-- webkit-test-runner [ useCharacterSelectionGranularity=true ] -->
<meta name=viewport content="width=device-width">
<style>
    #target {
        height: 100px;
        width: 200px;
        background-color: silver;
    }
</style>
<div id="target">
	<p style="font-family: ahem;">PressMe</p>
    This test requires UIScriptController to run.
</div>
<script>
    if (window.testRunner) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();
    }

    function getUIScript()
    {
        return `
        (function() {
            uiController.longPressAtPoint(30, 20, function() {
                uiController.uiScriptComplete(JSON.stringify(uiController.textSelectionRangeRects));
            });
        })();`
    }

    function runTest()
    {
        if (!testRunner.runUIScript)
            return;

        var target = document.getElementById('target');
        if (testRunner.runUIScript) {
            testRunner.runUIScript(getUIScript(), function(result) {
                var textSelectionRangeRects = JSON.parse(result);
                var output;
                if (textSelectionRangeRects.length !== 1)
                    output = 'FAIL: Unexpected number of selection range views: ' + result;
                else {
                    var rect = textSelectionRangeRects[0];
                    if (rect.left != 8 || rect.top != 8 || rect.width != 112 || rect.height != 17 )
                        output = 'FAIL: Unexpected selection range view frame: ' + result;
                    else
                        output = 'PASS';
                }
                document.getElementById('target').innerText = output;
                testRunner.notifyDone();
            });
        }
    }

    runTest();
</script>
