<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../fast/js/resources/js-test-pre.js"></script>
</head>
<body>
<script language="javascript" type="text/javascript">
description('Test that WebKit changes the dir attribute and sends an input event when we change the text direction.');

// The string used for storing the expected text direction when we receive an input event.
var expected = '';
var sentInputEvent = false;

function removeChildAndForceGC(child) {
    document.body.removeChild(child);
    gc();
}

// Create a textarea element and an input element. These elements are used for
// changing their text direction with Editor::setBaseWritingDirection() calls.
var textarea = document.createElement('textarea');
textarea.rows = 10;
textarea.cols = 10;
textarea.oninput = function() {
    shouldBe('expected', 'textarea.dir');
    sentInputEvent = true;

    // When we change the direction to ltr, we remove this element to verify WebKit
    // continue running without crashes.
    if (expected == 'ltr')
        removeChildAndForceGC(textarea);
}
document.body.appendChild(textarea);

var input = document.createElement('input');
input.type = 'text';
input.oninput = function() {
    shouldBe('expected', 'input.dir');
    sentInputEvent = true;

    // When we change the direction to ltr, we remove this element to verify WebKit
    // continue running without crashes.
    if (expected == 'ltr')
        removeChildAndForceGC(input);
}
document.body.appendChild(input);

// Change the text direction of the textarea element to RTL.
expected = 'rtl';
sentInputEvent = false;
textarea.focus();
testRunner.setTextDirection('rtl');
shouldBeTrue('sentInputEvent');

// Change the text direction of the textarea element to LTR.
// This also removes the element to verify WebKit works without crashes.
expected = 'ltr';
sentInputEvent = false;
textarea.focus();
testRunner.setTextDirection('ltr');
shouldBeTrue('sentInputEvent');

// Change the text direction of the input element to RTL.
expected = 'rtl';
sentInputEvent = false;
input.focus();
testRunner.setTextDirection('rtl');
shouldBeTrue('sentInputEvent');

// Change the text direction of the input element to LTR.
// This also removes the element to verify WebKit works without crashes.
expected = 'ltr';
sentInputEvent = false;
input.focus();
testRunner.setTextDirection('ltr');
shouldBeTrue('sentInputEvent');
</script>
<script src="../../fast/js/resources/js-test-post.js"></script>
</body>
</html>
