<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../js/resources/js-test-pre.js"></script>
</head>
<body>
<script type="text/javascript">
description('Tests for speech button click with &lt;input type="text" speech>.');

function startSpeechInput(id) {
    // Clicking the speech button should fill in mock speech-recognized text.
    var input = document.getElementById(id);
    var isRTL = input.dir == 'rtl';
    var x = 0;
    if (isRTL)
        x = input.offsetLeft + 4;
    else
        x = input.offsetLeft + input.offsetWidth - 4;
    var y = input.offsetTop + input.offsetHeight / 2;
    if (!isRTL && input.style.paddingRight.length)
        x -= parseInt(input.style.paddingRight.substr(0, input.style.paddingRight.length - 2));
    else if (isRTL && input.style.paddingLeft.length)
        x += parseInt(input.style.paddingLeft.substr(0, input.style.paddingLeft.length - 2));
    eventSender.mouseMoveTo(x, y);
    eventSender.mouseDown();
    eventSender.mouseUp();
}

var testIndex = 1;
function onWebkitSpeechChange() {
    shouldBeEqualToString('document.getElementById("speechInput' + testIndex + '").value', 'Pictures of the moon');
    if (testIndex == 4) {
        finishJSTest();
        return;
    }
    ++testIndex;
    setTimeout(function() {
        startSpeechInput("speechInput" + testIndex);
    }, 50);
}

function run() {
    if (window.layoutTestController && window.eventSender) {
        layoutTestController.addMockSpeechInputResult('Pictures of the moon', 1.0, '');
        startSpeechInput("speechInput" + testIndex);
    }
}

window.onload = run;
window.jsTestIsAsync = true;
window.successfullyParsed = true;
</script>
<script src="../js/resources/js-test-post.js"></script>
<input id='speechInput1' x-webkit-speech onwebkitspeechchange="onWebkitSpeechChange()">
<input id='speechInput2' x-webkit-speech onwebkitspeechchange="onWebkitSpeechChange()" dir="rtl">
<input id='speechInput3' x-webkit-speech onwebkitspeechchange="onWebkitSpeechChange()" style="padding:5px 10px">
<input id='speechInput4' x-webkit-speech onwebkitspeechchange="onWebkitSpeechChange()" style="padding:5px 10px" dir="rtl">
</body>
</html>

