<!DOCTYPE html>
<html>
<head>
<style>

input { width: 200px; background: -webkit-linear-gradient(left, white 110px, green 100px); }
input:focus { width: 100px; }

</style>
</head>
<body>
<p>This test ensures WebKit allows text be typed in an input element, when input:focus rule shrinks the width of input element
and the focus was set by mouse down on the shrunken part of the element.</p>
<p>To manually test, click on the right half of the input element (green part). You should see 'PASS'.</p>
<div><input type="text" value="FAIL" onmousedown="setTimeout(typeText, 0)"></div>
<script>

var input = document.getElementsByTagName('input')[0];

function typeText() {
    document.execCommand('SelectAll', false, null);
    document.execCommand('InsertText', false, 'PASS');
    if (window.testRunner) {
        input.parentNode.innerHTML = input.value;
        testRunner.notifyDone();
    }
}

if (window.testRunner) {
    testRunner.dumpAsText();
    if (!window.eventSender)
        document.write('This test requires eventSender');
    else {
        testRunner.waitUntilDone();

        eventSender.mouseMoveTo(input.offsetLeft + input.offsetWidth * 2 / 3, input.offsetTop + input.offsetHeight / 2);
        eventSender.mouseDown();
        eventSender.leapForward(200);
        eventSender.mouseUp();
    }
}

</script>
</body>
</html>
