<!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;
}
</style>
<body>
<div id="host"></div>
<div id="blockHost"></div>
<span id="inlineBlockHost" style="display:inline-block;"></span>
<input type="submit" id="submit">
<script>
function assertElementsFromPoint(doc, x, y, expected) {
  var query = doc + '.elementsFromPoint(' + x + ',' + y + ')';
  var sequence = eval(query);
  assert_equals(nodeListToString(sequence), nodeListToString(expected), query);
}

function createBox(id) {
    var div = document.createElement('div');
    div.id = id;
    div.style.width = '100px';
    div.style.height = '10px';
    return div;
}

function centerX(element) {
    return element.offsetLeft + element.offsetWidth / 2;
}

function centerY(element) {
    return element.offsetTop + element.offsetHeight / 2;
}

var shadowRoot = host.attachShadow({mode: 'closed'});
var box11 = createBox('box11');
var box12 = createBox('box12');
var box13 = createBox('box13');
shadowRoot.appendChild(box11);
shadowRoot.appendChild(box12);
shadowRoot.appendChild(box13);

var nestedHost = document.createElement('div');
var nestedShadowRoot = nestedHost.attachShadow({mode: 'closed'});
var box21 = createBox('box21');
var box22 = createBox('box22');
var box23 = createBox('box23');
nestedShadowRoot.appendChild(box21);
nestedShadowRoot.appendChild(box22);
nestedShadowRoot.appendChild(box23);

shadowRoot.appendChild(nestedHost);

var x12 = centerX(box12);
var y12 = centerY(box12);
var x22 = centerX(box22);
var y22 = centerY(box22);

var root3 = blockHost.attachShadow({mode: 'closed'});
root3.appendChild(document.createTextNode('text1'));
var root4 = inlineBlockHost.attachShadow({mode: 'closed'});
root4.appendChild(document.createTextNode('text2'));

test(function() {
    assertElementsFromPoint('document', x22, y22, [host, document.body, document.documentElement]);
    assertElementsFromPoint('document', centerX(blockHost), centerY(blockHost),
        [blockHost, document.body, document.documentElement]);
    assertElementsFromPoint('document', centerX(inlineBlockHost), centerY(inlineBlockHost),
        [inlineBlockHost, document.body, document.documentElement]);
    assertElementsFromPoint('document', centerX(submit), centerY(submit),
        [submit, document.body, document.documentElement]);
}, 'elementsFromPoint on the document root should not return elements in shadow trees');

test(function() {
    assert_not_equals(shadowRoot.elementsFromPoint(x12, y12).indexOf(box12), -1);
    assert_not_equals(shadowRoot.elementsFromPoint(x22, y22).indexOf(nestedHost), -1);
    assert_not_equals(nestedShadowRoot.elementsFromPoint(x22, y22).indexOf(box22), -1);
}, 'elementsFromPoint on a shadow root should include elements in that shadow tree');
</script>
</body>
