<!DOCTYPE html>
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/testharnessreport.js"></script>
<input type="text" value="value" id="textfield"></input>
<script>
async_test(function(t) {
    window.onload = t.step_func(function() {
        if (!window.eventSender) {
            t.done();
            return;
        }
        doSetSelectionRange('focus');
        doSetSelectionRange('mouseup');
        doSetSelectionRange('click');
        t.done();
    });

    function doSetSelectionRange(eventType) {
        var textfield = document.getElementById('textfield');
        textfield.setSelectionRange(0, 0);
        var tx = textfield.offsetLeft + 4;
        var ty = textfield.offsetTop + 4;

        textfield.addEventListener(eventType, setSelectionRange);
        eventSender.gestureTapDown(tx, ty);
        eventSender.gestureShowPress(tx, ty);
        eventSender.gestureTap(tx, ty);
        assert_equals(textfield.selectionStart, 0);
        assert_equals(textfield.selectionEnd, 5);
        textfield.setSelectionRange(0, 0);
        textfield.removeEventListener(eventType, setSelectionRange);
    }

    function setSelectionRange(e) {
        var textfield = document.getElementById('textfield');
        textfield.setSelectionRange(0, textfield.value.length);
    }
}, "This tests the selection of the text field after setSelectionRange is called during a tap.");
</script>
