<html>
    <head>
        <style type="text/css">
            .initialQuotes { quotes: initial; }
            .noQuotes { quotes: none; }
        </style>
        <script type="text/javascript">
            if (window.testRunner) {
                testRunner.dumpAsText();
                testRunner.waitUntilDone();
            }

            function run() {
                if (window.testRunner)
                    document.getElementById("onlyInBrowser").setAttribute("style", "display: none;");
                testWidth = window.getComputedStyle(document.getElementById("testContainer"), null).getPropertyValue("width");
                referenceWidth = window.getComputedStyle(document.getElementById("reference"), null).getPropertyValue("width");
                if (testWidth == referenceWidth)
                    document.getElementById("console").innerText = "PASSED";
                else
                    document.getElementById("console").innerText = "FAILED: testWidth=" + testWidth +"; expected " + referenceWidth;
               if (window.testRunner)
                    testRunner.notifyDone();
           }
        </script>
    </head>

    <body onload="setTimeout('run()', 0);">
        <p id="onlyInBrowser">The texts between the markers should be identical.</p>
        <p>========Marker1========</p>
        <table>
            <tr>
                <td id="testContainer" class="noQuotes"><q>a<q class="initialQuotes">b</q>c</q></td>
                <td>1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1</td>
            </tr>
        </table>
        <p>========Marker2========</p>
        <table>
            <tr>
                <td id="reference">a'b'c</td>
                <td>1 1 1 1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1</td>
            </tr>
        </table>
        <p>========Marker3========</p>
        <pre id="console"/>
    </body>
</html>
