<html>
    <head>
        <script src="resources/dump-list.js"></script>
        <script>
            function test()
            {
                if (window.testRunner)
                    testRunner.dumpAsText();

                var list = document.getElementById("list");
                list.offsetTop; // Force a relayout.

                var nestedList = document.getElementById("nested-list");

                var li2 = document.createElement("li");
                li2.innerText = "Twenty five";
                li2.value = "25";
                var li1 = document.createElement("li");
                li1.innerText = "One";
                var li3 = document.createElement("li");
                li3.innerText = "Twenty six";

                nestedList.appendChild(li2);
                nestedList.insertBefore(li1, li2);
                nestedList.appendChild(li3);

                document.getElementById("console").innerHTML = dumpList(list);

                // Don't show the actual list as it is useless in the text-only mode.
                list.parentNode.removeChild(list);
            }
        </script>
    </head>
    <body onload="test()">
        <p>This tests that list item markers do not change when adding new items to a nested list.</p>
        <ol id="list">
            <li>One</li>
            <li>Two</li>
            <li>Three</li>
            <li>Four</li>
            <li>Five <ol id="nested-list"></ol></li>
            <li>Six</li>
            <li>Seven</li>
        </ol>

        <div id="console"></div>
    </body>
</html>
