<html>
<head>
    <title></title>
    <style>
        span { color: blue; }
    </style>
    <script>
        function test()
        {
            if (window.testRunner)
                testRunner.dumpAsText();

            var result = document.getElementById("result");
            var target = document.getElementById("target");
            
            document.body.offsetTop;
            result.appendChild(document.createTextNode(target.innerHTML));
        }
    </script>
</head>
<body onload="test()">
    <p>
        Test for <i><a href="http://bugs.webkit.org/show_bug.cgi?id=13091">http://bugs.webkit.org/show_bug.cgi?id=13091</a>
        REGRESSION (r20075): Wrong text style and pixel break in Apple Store Locator HUD</i>.
    </p>
    <p>
        This tests that <tt>.innerHTML</tt> does not introduce additional inline style.
    </p>
    <p>
        The following markup should not include a <tt>style</tt> attribute:
    </p>
    <div id="target"><span></span></div>
    <pre id="result"></pre>
</body>
</html>
