<html>
<head>
    <title></title>
    <script>
        function log(message)
        {
            document.getElementById("console").appendChild(document.createTextNode(message + "\n"));
        }

        function testParsing(markup, expected)
        {
            var playground = document.getElementById("playground");
            playground.innerHTML = markup;
            var actual = playground.innerHTML;
            if (actual == expected)
                log("PASS: " + markup + " parsed as " + actual + " as expected.");
            else
                log("FAIL: " + markup + " parsed as " + actual + " instead of " + expected);
            playground.innerHTML = "";
        }

        function test()
        {
            if (window.testRunner)
                testRunner.dumpAsText();

            // One block to cross:
            testParsing("1<i>2<div>3</i>4</div>5",
                        "1<i>2</i><div><i>3</i>4</div>5");

            // One block to cross:
            testParsing("1<i><div>2</i>3</div>4",
                        "1<i></i><div><i>2</i>3</div>4");

            // Non-affected block to cross:
            testParsing("1<i>2<object>3</i>4</object>5",
                        "1<i>2<object>34</object>5</i>");

            // Two blocks to cross:
            testParsing("1<i>2<div>3<pre>4</i>5</pre>6</div>7",
                        "1<i>2</i><div><i>3</i><pre><i>4</i>5</pre>6</div>7");

            // Now with an inline without residual style:
            testParsing("1<i>2<div>3<span>4<pre>5</i>6</pre>7</div>8",
                        "1<i>2</i><div><i>3<span>4</span></i><pre><i>5</i>6</pre>7</div>8");

            // Now with residual style to restore:
            testParsing("1<i>2<div>3<pre>4<b>5</i>6</b>7</pre>8</div>9",
                        "1<i>2</i><div><i>3</i><pre><i>4<b>5</b></i><b>6</b>7</pre>8</div>9");

            // Three blocks to cross:
            testParsing("1<i>2<div>3<pre>4<p>5</i>6</p>7</pre>8</div>9",
                        "1<i>2</i><div><i>3</i><pre><i>4</i><p><i>5</i>6</p>7</pre>8</div>9");

            // Non-affected block in the middle:
            testParsing("1<i>2<div>3<object>4<p>5</i>6</p>7</object>8</div>9",
                        "1<i>2<div>3<object>4<p>56</p>7</object>8</div>9</i>");

            // Bug 13603 reduction:
            testParsing("<a href=\"#1\"><div><div><a href=\"#2\"></a><p>Shouldn't be a link</p></div><p>Shouldn't be a link</p></div><p>Shouldn't be a link</p></a>",
                        "<a href=\"#1\"></a><div><a href=\"#1\"></a><div><a href=\"#1\"></a><a href=\"#2\"></a><p>Shouldn't be a link</p></div><p>Shouldn't be a link</p></div><p>Shouldn't be a link</p>");

            // Almost bug 8750 reduction:
            testParsing("<p><a>RED</p>RED<div>RED<p>RED<a>RED</a>BLACK</p>BLACK</div>BLACK",
                        "<p><a>RED</a></p><a>RED</a><div><a>RED</a><p><a>RED</a><a>RED</a>BLACK</p>BLACK</div>BLACK");

            // Bug 12808 reduction:
            testParsing("<a href=\"#outside\"><p>Outside link.</p><div><div><a href=\"#inside\">Inside link.</a></div></div><p>After all links</p>",
                        "<a href=\"#outside\"><p>Outside link.</p></a><div><a href=\"#outside\"></a><div><a href=\"#outside\"></a><a href=\"#inside\">Inside link.</a></div></div><p>After all links</p>");
            
            // Bug 12861 reduction:
            testParsing("<a href=\"http://webkit.org\"><div><h3><a href=\"about:blank\">This is a link.</a></h3>This is not a link under Firefox, but it is under Safari.",
                        "<a href=\"http://webkit.org\"></a><div><a href=\"http://webkit.org\"></a><h3><a href=\"http://webkit.org\"></a><a href=\"about:blank\">This is a link.</a></h3>This is not a link under Firefox, but it is under Safari.</div>");
            
        }
    </script>
</head>
<body onload="test()">
    <pre id="console"></pre>
    <div id="playground"></div>
</body>
</html>
