<!--
Calculating collapsed borders for big tables is expensive, so we cache them and recalculate when needed.
Here we change colgroup border color, expect that cache is invalidated and paint produces expected image.
-->
<html>
    <head>
        <title></title>
        <link rel="stylesheet" href="resources/cached.css">
        <script type="text/javascript">
            function test() {
                document.body.offsetTop;
                if (window.testRunner)
                    testRunner.displayAndTrackRepaints();
                document.getElementById("colgroup").style.borderColor = "yellow";
            }
        </script>
    </head>
    <body onload="test()">
        <table style="border-collapse:collapse; border:1px solid blue">
            <colgroup style="border:4px solid pink" id="colgroup">
                <col>
                <col>
            </colgroup>
            <colgroup>
                <col>
            </colgroup>
            <tbody>
                <tr>
                    <td style="border:2px solid lime"/>
                    <td/>
                    <td/>
                </tr>
                <tr>
                    <td/>
                    <td/>
                    <td/>
                </tr>
            </tbody>
        </table>
    </body>
</html>

