<!DOCTYPE html>
<html>
<pre id="console"></pre>

<p>This test ensures shadow root won't expose to JS layer.<p>
<div id='div1'>BEFORE</div>
<div id='container'>CONTAINER</div>
<div id='div4'>AFTER</di>
<script src="../editing.js"></script>
<script src="../../resources/js-test.js"></script>
<script>
if (window.testRunner)
    testRunner.dumpAsText();

var container = document.getElementById('container');
var shadowRoot = container.createShadowRoot();

var div2 = document.createElement('div');
div2.appendChild(document.createTextNode('IN SHADOW TREE 1'));
var div3 = document.createElement('div');
div3.appendChild(document.createTextNode('IN SHADOW TREE 2'));

shadowRoot.appendChild(div2);
shadowRoot.appendChild(div3);

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

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

function assertNotInShadow(element) {
    if (element == div2 || element == div2.firstChild)
        return false;
    if (element == div3 || element == div3.firstChild)
        return false;
    return true;
}

if (window.eventSender) {
    // Try select from outside of a shadow subtree to inside of a shadow subtree.
    eventSender.mouseMoveTo(midX(div1), midY(div1));
    eventSender.mouseDown();
    eventSender.mouseMoveTo(midX(div2), midY(div2));
    eventSender.mouseUp();

    var selection = window.getSelection();
    shouldBe('assertNotInShadow(selection.anchorNode)', 'true');
    shouldBe('assertNotInShadow(selection.focusNode)', 'true');

    selection.removeAllRanges();

    // Try select from inside of a shadow subtree to outside of a shadow subtree.
    eventSender.mouseMoveTo(midX(div3), midY(div3));
    eventSender.mouseDown();
    eventSender.mouseMoveTo(midX(div4), midY(div4));
    eventSender.mouseUp();

    selection = window.getSelection();
    shouldBe('assertNotInShadow(selection.anchorNode)', 'true');
    shouldBe('assertNotInShadow(selection.focusNode)', 'true');
    selection.removeAllRanges();

    // Try select inside shadow subtrees.
    eventSender.mouseMoveTo(midX(div2), midY(div2));
    eventSender.mouseDown();
    eventSender.mouseMoveTo(midX(div3), midY(div3));
    eventSender.mouseUp();

    selection = window.getSelection();
    shouldBe('assertNotInShadow(selection.anchorNode)', 'true');
    shouldBe('assertNotInShadow(selection.focusNode)', 'true');
    selection.removeAllRanges();
}

var successfullyParsed = true;
</script>
</html>
