<!doctype html>
<script src='/resources/testharness.js'></script>
<script src='/resources/testharnessreport.js'></script>
<link rel='stylesheet' href='./support/base.css' />
<link rel="help" href="https://drafts.csswg.org/css-tables-3/#caption-side-property">
<main>

    <h1>Caption-side</h1>
    <p>Checks that browsers implement properly the caption-side property</p>

    <hr/>
    <p>This should read ABC:</p>
    <p>
        The first caption (C) should be put on the bottom because it inherits caption-side:bottom from the table;<br/>
        The second captin (A) should be put on the top because it has caption-side:top specified;
    </p>
    <div><table style="caption-side:bottom"><caption>C</caption><tbody><tr><td>B</td></tr></tbody><caption style="caption-side:top">A</caption></table></div>

    <script>void function() { var table; while(table = document.querySelector('.to-remove')) table.parentNode.replaceChild(table.firstChild,table) }();</script>
    <script>void function() { var td; while(td = document.querySelector('table.no-td td')) td.parentNode.replaceChild(document.createElement('x-td'),td) }();</script>
    <script>void function() { var divs = document.querySelectorAll("main > div"); for(var i = divs.length; i--;) { var div = divs[i]; var pre = document.createElement('pre'); pre.title = pre.textContent = div.innerHTML; div.parentNode.insertBefore(pre, div); }; }();</script>
    <hr/>

</main>

<script>

    var i = 1;
    generate_tests(assert_equals, [
        [
            "Caption-side inherits and reorder captions properly",
            document.querySelector("main > div:nth-of-type("+(i++)+") caption:first-child").offsetTop > document.querySelector("main > div:nth-of-type("+(i-1)+") caption:last-child").offsetTop,
            true
        ],
        [
            "Multiple captions can be rendered",
            document.querySelector("main > div:nth-of-type("+(i-1)+") table").offsetHeight > 3 * 16,
            true
        ],
    ])

</script>
