<!DOCTYPE HTML>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/elementsFromPoint.js"></script>
<style>
html, body {
    margin: 0;
    padding: 0;
}
body {
    height: 500px;
}
#simpleDiv {
    width: 200px;
    height: 200px;
    background-color: rgba(0,0,255,0.5);
}
#divWithPseudo {
    position: absolute;
    left: 50px;
    top: 50px;
    width: 100px;
    height: 100px;
    background-color: rgba(255,0,0,0.5);
}
#divWithPseudo::before {
    position: absolute;
    left: 20px;
    top: 20px;
    width: 100px;
    height: 100px;
    content: "::before";
    background-color: rgba(255,0,0,0.5);
    z-index: 9999;
}
#divBetweenPseudo {
    position: absolute;
    left: 100px;
    top: 100px;
    width: 100px;
    height: 100px;
    background-color: rgba(0,255,0,0.5);
}
#withMargin {
    margin-top: -15px;
    width: 200px;
    height: 200px;
    background-color: rgba(0,0,0,0.5);
}
#inlineSpan {
    float: right;
    background-color: yellow;
    width: 100px;
    height: 1em;
}
#noPointerEvents {
    position: absolute;
    left: 50px;
    top: 50px;
    width: 100px;
    height: 300px;
    background-color: rgba(0,0,0,0.1);
    pointer-events: none;
}
#threeD {
    position: absolute;
    transform: translate3d(-100px, -100px, 10px);
    left: 140px;
    top: 140px;
    width: 200px;
    height: 50px;
    background-color: rgba(255,255,255,0.5);
}
</style>
<div id="simpleDiv"></div>
<div id="divWithPseudo"></div>
<div id="divBetweenPseudo"></div>
<div id="withMargin"><span id="inlineSpan"></span></div>
<div id="noPointerEvents"></div>
<div id="threeD"></div>
<script>
var body = document.body;
var html = document.documentElement;
test(function() {
    checkElementsFromPointFourCorners('document', 'simpleDiv',
        [simpleDiv, body, html],
        [simpleDiv, body, html],
        [withMargin, simpleDiv, body, html],
        [divBetweenPseudo, inlineSpan, withMargin, simpleDiv, body, html]);
}, "elementsFromPoint for each corner of a simple div");

test(function() {
    checkElementsFromPointFourCorners('document', 'divWithPseudo',
        [threeD, divWithPseudo, simpleDiv, body, html],
        [threeD, divWithPseudo, simpleDiv, body, html],
        [divWithPseudo, simpleDiv, body, html],
        [divWithPseudo, divBetweenPseudo, divWithPseudo, simpleDiv, body, html]);
}, "elementsFromPoint for each corner of a div that has a pseudo-element");

test(function() {
    checkElementsFromPointFourCorners('document', 'divBetweenPseudo',
        [divWithPseudo, divBetweenPseudo, divWithPseudo, simpleDiv, body, html],
        [divBetweenPseudo, simpleDiv, body, html],
        [divBetweenPseudo, inlineSpan, withMargin, simpleDiv, body, html],
        [divBetweenPseudo, inlineSpan, withMargin, simpleDiv, body, html]);
}, "elementsFromPoint for each corner of a div that is between another div and its pseudo-element");

test(function() {
    checkElementsFromPointFourCorners('document', 'withMargin',
        [withMargin, simpleDiv, body, html],
        [divBetweenPseudo, inlineSpan, withMargin, simpleDiv, body, html],
        [withMargin, body, html],
        [withMargin, body, html]);
}, "elementsFromPoint for each corner of a div that has a margin");

test(function() {
    checkElementsFromPointFourCorners('document', 'noPointerEvents',
        [threeD, divWithPseudo, simpleDiv, body, html],
        [threeD, divWithPseudo, simpleDiv, body, html],
        [withMargin, body, html],
        [withMargin, body, html]);
}, "elementsFromPoint for each corner of a div with pointer-events:none");

test(function() {
    checkElementsFromPointFourCorners('document', 'threeD',
        [threeD, simpleDiv, body, html],
        [threeD, body, html],
        [threeD, simpleDiv, body, html],
        [threeD, body, html]);
}, "elementsFromPoint for each corner of a div with a 3d transform");
</script>
