chromium/third_party/blink/web_tests/fast/forms/textarea/textarea-input-event.html

<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>

<div oninput="handleDivOnInput(event)">
    <textarea id="ta">before</textarea>
</div>

<script>
description('Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=15189">https://bugs.webkit.org/show_bug.cgi?id=15189</a><br>');

var handleTextareaOnInputCallCount = 0;
var handleDivOnInputCallCount = 0;
var successfullyParsed = false;

function handleDivOnInput(e) {
    if (e.target !== ta) {
        testFailed('Wrong target');
    } else {
        handleDivOnInputCallCount++;
        shouldBeEqualToString('ta.value', 'x');
    }
}

function handleTextareaOnInput(e) {
    if (e.target !== ta) {
        testFailed('Wrong target');
    } else {
        handleTextareaOnInputCallCount++;
        shouldBeEqualToString('ta.value', 'x');
    }
}

var ta = document.getElementById('ta');
ta.setAttribute('oninput', 'handleTextareaOnInput(event)');

// Change the value before focusing.
ta.value = '';

ta.focus();

if (window.eventSender) {
    eventSender.keyDown('x', []);
    shouldEvaluateTo('handleTextareaOnInputCallCount', 1);
    shouldEvaluateTo('handleDivOnInputCallCount', 1);
    
    // Change programmatically
    ta.value = 'programmatically';
    
    // Should not have triggered the events.
    shouldEvaluateTo('handleTextareaOnInputCallCount', 1);
    shouldEvaluateTo('handleDivOnInputCallCount', 1);
}
</script>
</body>
</html>