<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)";

        var DEFAULT_LINE_2 = "null\0char";
        var EXPECTED_LINE_2 = "null\0char";

        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> 
