<!doctype html>
<meta charset=utf-8>
<title></title>
<script src=../../../../../resources/testharness.js></script>
<script src=../../../../../resources/testharnessreport.js></script>
<div id=log></div>
<div id="parent" style="overflow:scroll; height: 100px; position: relative">
  <div id="spacer" style="height: 200px"></div>
  <div id="child"></div>
  <div id="absolute-child" style="position: absolute; top: 41px; left: 43px"></div>
</div>
<script>
test(function() {
    var child = document.getElementById("child");
    assert_equals(child.offsetTop, 200, "Child is after spacer");
    assert_equals(child.offsetLeft, 0, "Child is flush left");
    var absChild = document.getElementById("absolute-child");
    assert_equals(absChild.offsetTop, 41, "Abspos child is y-positioned");
    assert_equals(absChild.offsetLeft, 43, "Abspos child is x-positioned");
}, "Basic functionality");

test(function() {
    var parent = document.getElementById("parent");
    parent.scrollTop = 100;
    var child = document.getElementById("child");
    assert_equals(child.offsetTop, 200, "Child is after spacer");
    assert_equals(child.offsetLeft, 0, "Child is flush left");
    var absChild = document.getElementById("absolute-child");
    assert_equals(absChild.offsetTop, 41, "Abspos child is y-positioned");
    assert_equals(absChild.offsetLeft, 43, "Abspos child is x-positioned");
}, "Basic functionality in scrolled parent");

test(function() {
    var child = document.getElementById("child");
    child.style.marginTop = "20px"
    child.style.marginLeft = "100px";
    assert_equals(child.offsetTop, 220, "Child is after spacer and margin");
    assert_equals(child.offsetLeft, 100, "Child is 100px from left");
    var absChild = document.getElementById("absolute-child");
    absChild.style.marginTop = "20px"
    absChild.style.marginLeft = "100px";
    assert_equals(absChild.offsetTop, 61, "Abspos child is y-positioned and has margin");
    assert_equals(absChild.offsetLeft, 143, "Abspos child is x-positioned and has margin");
}, "Margins on child");

test(function() {
    var parent = document.getElementById("parent");
    parent.style.marginTop = "66px"
    parent.style.marginLeft = "33px";
    var child = document.getElementById("child");
    assert_equals(child.offsetTop, 220, "Child is after spacer and margin");
    assert_equals(child.offsetLeft, 100, "Child is 100px from left");
    var absChild = document.getElementById("absolute-child");
    assert_equals(absChild.offsetTop, 61, "Abspos child is y-positioned and has margin");
    assert_equals(absChild.offsetLeft, 143, "Abspos child is x-positioned and has margin");
}, "Margins on child and parent");

test(function() {
    var child = document.getElementById("child");
    child.style.borderTop = "13px solid green";
    child.style.borderLeft = "7px solid green";
    assert_equals(child.offsetTop, 220, "Child is after spacer and margin");
    assert_equals(child.offsetLeft, 100, "Child is 100px from left");
    var absChild = document.getElementById("absolute-child");
    absChild.style.borderTop = "13px solid green";
    absChild.style.borderLeft = "7px solid green";
    assert_equals(absChild.offsetTop, 61, "Abspos child is y-positioned and has margin");
    assert_equals(absChild.offsetLeft, 143, "Abspos child is x-positioned and has margin");
}, "Margins on child and parent, border on child");

test(function() {
    var parent = document.getElementById("parent");
    parent.style.borderTop = "23px solid yellow";
    parent.style.borderLeft = "19px solid yellow";
    var child = document.getElementById("child");
    assert_equals(child.offsetTop, 220, "Child is after spacer and margin");
    assert_equals(child.offsetLeft, 100, "Child is 100px from left");
    var absChild = document.getElementById("absolute-child");
    assert_equals(absChild.offsetTop, 61, "Abspos child is y-positioned and has margin");
    assert_equals(absChild.offsetLeft, 143, "Abspos child is x-positioned and has margin");
}, "Margins on child and parent, border on child and parent");


test(function() {
    var child = document.getElementById("child");
    child.style.paddingTop = "31px";
    child.style.paddingLeft = "37px";
    assert_equals(child.offsetTop, 220, "Child is after spacer and margin");
    assert_equals(child.offsetLeft, 100, "Child is 100px from left");
    var absChild = document.getElementById("absolute-child");
    absChild.style.paddingTop = "31px";
    absChild.style.paddingLeft = "37px";
    assert_equals(absChild.offsetTop, 61, "Abspos child is y-positioned and has margin");
    assert_equals(absChild.offsetLeft, 143, "Abspos child is x-positioned and has margin");
}, "Margins on child and parent, border on child and parent, padding on child");


test(function() {
    var parent = document.getElementById("parent");
    parent.style.paddingTop = "31px";
    parent.style.paddingLeft = "37px";
    var child = document.getElementById("child");
    assert_equals(child.offsetTop, 251, "Child is after spacer and margin and parent padding");
    assert_equals(child.offsetLeft, 137, "Child is 100px + parent padding from left");
    var absChild = document.getElementById("absolute-child");
    // Padding on the parent does not affect the position of the absolute containing block.
    assert_equals(absChild.offsetTop, 61, "Abspos child is y-positioned and has margin");
    assert_equals(absChild.offsetLeft, 143, "Abspos child is x-positioned and has margin");
}, "Margins on child and parent, border on child and parent, padding on child and parent");

</script>
