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

<div id="container">
    <input id="input" type="text" value="something">
    <input id="readonlyInput" type="text" readonly value="something">
    <input id="disabledInput" type="text" disabled value="something">

    <textarea id="textarea">something</textarea>
    <textarea id="readonlyTextarea" readonly>something</textarea>
    <textarea id="disabledTextarea" disabled>something</textarea>
</div>
<pre id="console"></pre>

<script>
async function doubleClickOn(element)
{
    var x = element.offsetLeft + element.offsetWidth / 2;
    var y = element.offsetTop + element.offsetHeight / 2;

    await eventSender.asyncMouseMoveTo(x, y);
    await eventSender.asyncMouseDown();
    await eventSender.asyncMouseUp();
    await eventSender.asyncMouseDown();
    await eventSender.asyncMouseUp();
}

var selectEventFiredOnInput = false;
var selectEventFiredOnReadonlyInput = false;
var selectEventFiredOnDisabledInput = false;
var selectEventFiredOnTextarea = false;
var selectEventFiredOnReadonlyTextarea = false;
var selectEventFiredOnDisabledTextarea = false;

input.addEventListener('select', function() {
    selectEventFiredOnInput = true;
});
readonlyInput.addEventListener('select', function() {
    selectEventFiredOnReadonlyInput = true;
});
disabledInput.addEventListener('select', function() {
    selectEventFiredOnDisabledInput = true;
});

textarea.addEventListener('select', function() {
    selectEventFiredOnTextarea = true;
});
readonlyTextarea.addEventListener('select', function() {
    selectEventFiredOnReadonlyTextarea = true;
});
disabledTextarea.addEventListener('select', function() {
    selectEventFiredOnDisabledTextarea = true;
});

onload = async () => {
    if (!window.testRunner)
        return;

    testRunner.waitUntilDone();

    debug('double clicking on normal input');
    await doubleClickOn(input);
    shouldBeTrue('selectEventFiredOnInput');
    debug('');

    debug('double clicking on readonly input');
    await doubleClickOn(readonlyInput);
    shouldBeTrue('selectEventFiredOnReadonlyInput');
    debug('');

    debug('double clicking on disabled input');
    await doubleClickOn(disabledInput);
    shouldBeTrue('selectEventFiredOnDisabledInput');
    debug('');

    debug('double clicking on normal textarea');
    await doubleClickOn(textarea);
    shouldBeTrue('selectEventFiredOnTextarea');
    debug('');

    debug('double clicking on readonly textarea');
    await doubleClickOn(readonlyTextarea);
    shouldBeTrue('selectEventFiredOnReadonlyTextarea');
    debug('');

    debug('double clicking on disabled textarea');
    await doubleClickOn(disabledTextarea);
    shouldBeTrue('selectEventFiredOnDisabledTextarea');
    debug('');

    container.innerHTML = "";

    testRunner.notifyDone();
}
</script>

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