<html>
    <head>
        <style type="text/css">
            body { quotes: "WW" "WWWW"; }
            body { quotes: baseline; } /* This should be ignored, as "baseline" is not a vaild value for quotes */
        </style>
        <script type="text/javascript">
            if (window.testRunner) {
                testRunner.dumpAsText();
                testRunner.waitUntilDone();
            }

            function run() {
                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></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"><span>WW</span>a<span>WW</span>b<span>WWWW</span><span>WWWW</span></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>
