<html> 
  <head> 
    <script> 
        if (window.testRunner)
            window.testRunner.dumpAsText();

        function getInput()
        {
            return document.getElementById('inputId');
        }

        var DEFAULT_LINE_1 = "line\t(1 of 2)\r\nline\t(2 of 2)";
        var EXPECTED_LINE_1 = "line\t(1 of 2) line\t(2 of 2)";

        // FIXME: Is this really expected behavior to truncate the string at a null byte?
        // It doesn't match Firefox 4 and common sense.
        var DEFAULT_LINE_2 = "null\0char";
        var EXPECTED_LINE_2 = "null";

        var DEFAULT_LINE_3 = "line with trailing newlines\r\n\r\n";
        var EXPECTED_LINE_3 = "line with trailing newlines";

        var TEST_NAME_1 = "Multi-line test";
        var TEST_NAME_2 = "Null char test";
        var TEST_NAME_3 = "Trailing newline test";

        function testMultiline()
        {
          log(TEST_NAME_1 + ":");
          testInputField(DEFAULT_LINE_1, EXPECTED_LINE_1);

          log(TEST_NAME_2 + ":");
          testInputField(DEFAULT_LINE_2, EXPECTED_LINE_2);

          log(TEST_NAME_3 + ":");
          testInputField(DEFAULT_LINE_3, EXPECTED_LINE_3);
        }
 
        function testInputField(input_value, expected)
        {
            var input = getInput();
            input.focus();
            document.execCommand("SelectAll", false, null);
            document.execCommand("InsertText", false, input_value);
            var str = jsEscape(input.value);
            if (str == jsEscape(expected))
                log("PASS");
            else
                log("FAIL: " + str);
        }

        function log(str) {
            var valueField = document.getElementById('console');
            valueField.appendChild(document.createTextNode(str));
            valueField.appendChild(document.createElement("br"));
        }

        function jsEscape(s)
        {
            // Partial
            var replacements = [
                ["\r", "\\r"],
                ["\n", "\\n"],
                ["\t", "\\t"],
                ["\f", "\\f"],
                ["\t", "\\t"],
                ["\0", "\\0"]
            ];
 
            for (var i = 0; i < replacements.length; ++i) {
                var r = replacements[i];
                s = s.replace(r[0], r[1]);
            }
            return s;
        }
    </script>
    <style>
        .pass { color: green; } 
        .fail { color: red; }
        .code { font-family: monospace; }
    </style> 
  </head> 
  <body onload="testMultiline()"> 
    <h2>Test: This test verifies that text inputs will accept multiple lines of pasted text.  You should see three tests "PASS" below.</h2> 
    <input id=inputId size=60 /><br>
    <span class=code id=console></span>
  </body> 
</html> 
