<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
#telugu {
font-size: 2cm;
line-height: 1.5em;
font-family: "Lohit Telugu";
}
</style>
<script>
var ITERATIONS = 10000;

if (window.testRunner)
    testRunner.waitUntilDone();

function mouseSelection() {
    var body = document.body;
    body.focus();

    xStart = 0;
    yStart = 0;

    if (window.eventSender) {
        eventSender.mouseMoveTo(xStart, yStart);
        eventSender.mouseDown();
        for(i=0;i<ITERATIONS;i++) {
            randomCoord = randomCoordinate();
            eventSender.mouseMoveTo(randomCoord.x, randomCoord.y);
        }
    }
    if (window.testRunnder)
        testRunner.notifyDone();
}

function randomCoordinate(axis) {
    return { x: Math.floor(Math.random()*window.innerWidth),
             y: Math.floor(Math.random()* window.innerHeight) }
}

</script>
</head>
<body onload="mouseSelection()"><p>
   This test fuzzes HarfBuzzShaper::offsetForPosition to trigger an assertion in the downstream function characterIndexForXPosition().
   See https://bugs.webkit.org/show_bug.cgi?id=92376 - reason of the assertion being hit is a minuscule floating point inaccuracy 
   between an if condition that gates the call to characterIndexForXPosition and the actual argument that's then given to the function.
   This test works on WebKit EFL, with the Ubuntu Telugu Lohit font installed to the EFL jhbuild font directory, like:</p>
     <pre>$ cp /usr/share/fonts/truetype/ttf-telugu-fonts/lohit_te.ttf WebKitBuild/Dependencies/Source/webkitgtk-test-fonts-0.0.3</pre>
   <p>Run with:</p>
     <pre>$ WebKitBuild/Debug/bin/DumpRenderTree ManualTests/harfbuzz-mouse-selection-crash.html</pre>
   <p>Before the change, this would crash 10/10 times. Test passes if it does not crash.</p>
<p id="telugu">చేనేత కార్మికుల సమస్యలను ప్రభుత్వం దృష్టికి తీసుకువెళ్లేందుకు సిరిసిల్లలో వైఎస్ఆర్ సిపి గౌరవాధ్యక్షురాలు విజయమ్మ చేపట్టినదీక్ష విజయవంతమైంది.</p>
</body>
</html>
