<!DOCTYPE HTML>
<script src="../../../resources/js-test.js"></script>
<script src="resources/elementsFromPoint.js"></script>
<style>
html, body {
    margin: 0;
    padding: 0;
}
#svg {
    margin: 100px;
    background-color: rgba(0,180,0,0.2);
}
rect {
    fill: rgba(180,0,0,0.2);
}
#topRightSvg, #middleG1, #middleG2, #bottomLeftG, #bottomRightG1, #bottomRightG2 {
    pointer-events: bounding-box;
}
#topLeftRect2NoHitTest {
    pointer-events: none;
}
</style>
<div id='sandbox'>
    <svg id='svg' width='300' height='300'>
        <rect id='topLeftRect1' x='5' y='5' width='90' height='90'/>
        <rect id='topLeftRect2NoHitTest' x='10' y='10' width='80' height='80'/>
        <rect id='topLeftRect3' x='15' y='15' width='70' height='70'/>

        <foreignObject id="fo" x="210" y="110" width="80" height="80">
            <div id="foDiv" style="width: 80px; height: 80px; background-color: rgba(180,0,0,0.2)"></div>
        </foreignObject>

        <svg id='topRightSvg' x='205' y='5' width='90' height='90'>
            <rect id='topRightRect1' x='5' y='5' width='80' height='80'/>
            <rect id='topRightRect2' x='10' y='10' width='70' height='70'/>
        </svg>

        <g id='middleG1'>
            <g id='middleG2'>
                <rect id='middleRect1' x='105' y='105' width='90' height='90'/>
                <rect id='middleRect2' x='110' y='110' width='80' height='80'/>
            </g>
        </g>

        <g id='bottomLeftG'>
            <image id='bottomLeftImage1' x='5' y='205' width='90' height='90' xlink:href='data:image/svg+xml;utf8,<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="rgba(180,0,0,0.2)"/></svg>'/>
            <image id='bottomLeftImage2' x='10' y='210' width='80' height='80' xlink:href='data:image/svg+xml;utf8,<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="rgba(180,0,0,0.2)"/></svg>'/>
        </g>

        <g id='bottomRightG1' transform='translate(300, 300)'>
            <g id='bottomRightG2' transform='translate(-100, -100)'>
                <rect id='bottomRightRect1' x='5' y='5' width='90' height='90'/>
                <rect id='bottomRightRect2' x='110' y='110' width='80' height='80' transform='translate(-100, -100)'/>
            </g>
        </g>
    </svg>
</div>
<div id="console"></div>
<script>
window.jsTestIsAsync = true;

if (window.testRunner)
    testRunner.dumpAsText();

onload = function() {
    // Verify two overlapping rects can be hit.
    assertElementsFromPoint('document.elementsFromPoint(125, 125)', [topLeftRect3, topLeftRect1, svg, sandbox, document.body, document.documentElement]);

    // Verify two rects inside an svg element with pointer-events: bounding-box can be hit.
    assertElementsFromPoint('document.elementsFromPoint(325, 125)', [topRightRect2, topRightRect1, topRightSvg, svg, sandbox, document.body, document.documentElement]);

    // Verify two rects can be hit when inside a <g>.
    assertElementsFromPoint('document.elementsFromPoint(225, 225)', [middleRect2, middleRect1, middleG2, middleG1, svg, sandbox, document.body, document.documentElement]);

    // Verify two overlapping images can be hit.
    assertElementsFromPoint('document.elementsFromPoint(125, 325)', [bottomLeftImage2, bottomLeftImage1, bottomLeftG, svg, sandbox, document.body, document.documentElement]);

    // Verify transformed <g>s and <rect>s can be hit.
    assertElementsFromPoint('document.elementsFromPoint(325, 325)', [bottomRightRect2, bottomRightRect1, bottomRightG2, bottomRightG1, svg, sandbox, document.body, document.documentElement]);

    // Verify <foreignObject>s can be hit.
    assertElementsFromPoint('document.elementsFromPoint(350, 250)', [foDiv, fo, svg, sandbox, document.body, document.documentElement]);

    finishJSTest();
}
</script>
