<html>
    <head>
        <style type="text/css">
            .myQuotes { quotes: "WW" "WWWW" "WWW" "WWWWW"; }
        </style>
        <script type="text/javascript">
            if (window.testRunner) {
                testRunner.dumpAsText();
                testRunner.waitUntilDone();
            }

            function run() {
                if (window.testRunner)
                    document.getElementById("onlyInBrowser").setAttribute("style", "display: none;");
                document.body.setAttribute("class", "myQuotes");
                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"><q>a<q>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">WWaWWWbWWWWWcWWWW</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>
