<style>
    div.box { -webkit-box-sizing: border; border: solid blue; }
    div.shorter { height: 54px; }
    div.taller { height: 72px; }
</style>
<div style="height: 100px; width: 630; -webkit-columns:6; -webkit-column-gap:5px; columns:6; column-gap:5px;">
    <div class="taller box"></div>
    <div class="taller box"></div>
    <div id="break-before" class="shorter box" style="-webkit-column-break-before: always;"></div>
    <div class="shorter box" style="-webkit-column-break-after: always;"></div>
    <div id="after-break" class="shorter box"></div>
    <div id="no-break" class="shorter box" style="-webkit-column-break-inside: avoid;"></div>
    <div id="subPixelTest" style="width:10.5px"></div>
</div>
<pre id="console"></pre>
<script>
    if (window.testRunner)
        testRunner.dumpAsText();

    function log(message)
    {
        document.getElementById("console").appendChild(document.createTextNode(message + "\n"));
    }

    function testBoxPosition(id, expectedLeft, expectedTop)
    {
        var rect = document.getElementById(id).getBoundingClientRect();
        if (Math.round(rect.left) === expectedLeft && Math.round(rect.top) === expectedTop)
            log("PASS: '" + id + "' is at (" + expectedLeft + ", " + expectedTop + ")");
        else
            log("FAIL: '" + id + "' is at (" + Math.round(rect.left) + ", " + Math.round(rect.top) + ") instead of (" + expectedLeft + " ," + expectedTop + ")");
    }

    var rect = document.getElementById('subPixelTest').getBoundingClientRect();
    var hasSubpixelSupport = Math.round(rect.right) != rect.right;

    testBoxPosition("break-before", hasSubpixelSupport ? 220 : 218, 8);
    testBoxPosition("after-break", hasSubpixelSupport ? 431 : 428, 8);
    testBoxPosition("no-break", hasSubpixelSupport ? 537 : 533, 8);
</script>
