<!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>
