<!doctype html>
<meta charset=utf-8>
<title>offset* properties on tables</title>
<link rel="help" href="https://drafts.csswg.org/cssom-view/#extensions-to-the-htmlelement-interface">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id="test-target" style="position: absolute"></div>
<script>
  test(function() {
    // Each test consists of four elements: the markup to use, the expected
    // value of offsetWidth on the table, the expected value of offsetHeight
    // on the table, and the description string.
    var tests = [
      [ `<table style="width: 20px; height: 30px">`,
        20, 30,
        "Basic table" ],
      [ `<table><caption style="width: 40px; height: 50px">`,
        40, 50,
        "Basic caption" ],
      [ `<table style="width: 20px; height: 30px">
           <caption style="width: 10px; height: 20px">`,
        20, 50,
        "Table and narrower caption" ],
      [ `<table style="width: 20px; height: 30px">
           <caption style="width: 40px; height: 20px">`,
        40, 50,
        "Table and wider caption" ],
      [ `<table style="width: 20px; height: 30px; padding: 1px 2px 3px 4px">`,
        20, 30,
        "Table with padding" ],
      [ `<table style="width: 20px; height: 30px; padding: 1px 2px 3px 4px;
                       box-sizing: content-box">`,
        26, 34,
        "Table with padding and content-box sizing" ],
      [ `<table style="width: 20px; height: 30px;
                       border-width: 1px 2px 3px 4px; border-style: solid;
                       border-collapse: separate; box-sizing: content-box">`,
        26, 34,
        "Table with separated border" ],
      [ `<table style="width: 20px; height: 30px;
                       border-width: 2px 4px 6px 8px; border-style: solid;
                       border-collapse: collapse; box-sizing: content-box">
           <tr><td>`,
        26, 34,
        "Table with collapsed border" ],
      [ `<table>
           <caption style="width: 40px; height: 50px; padding: 1px 2px 3px 4px">`,
        46, 54,
        "Caption with padding" ],
      [ `<table>
           <caption style="width: 40px; height: 50px;
                           border-width: 1px 2px 3px 4px; border-style: solid">`,
        46, 54,
        "Caption with border" ],
      [ `<table>
           <caption style="width: 40px; height: 50px; margin: 1px 2px 3px 4px;">`,
        46, 54,
        "Caption with margin" ],
      [ `<table style="caption-side: bottom">
           <caption style="width: 40px; height: 50px;">`,
        40, 50,
        "Bottom caption" ],
    ];

    function target() {
      return document.getElementById("test-target");
    }

    function table() {
      return target().querySelector("table");
    }

    for (var t of tests) {
      test(function() {
        target().innerHTML = t[0];
        assert_equals(table().offsetWidth, t[1], t[3] + " offsetWidth");
        assert_equals(table().offsetHeight, t[2], t[3] + " offsetHeight");
        assert_equals(table().offsetLeft, 0, t[3] + " offsetLeft");
        assert_equals(table().offsetTop, 0, t[3] + " offsetTop");
      }, t[3]);
    }
  }, "Overall test to make sure there are no exceptions");
</script>
