<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test.js"></script>
<script src="resources/shadow-dom.js"></script>
</head>
<body>
<div id='console'></div>
<div id='sandbox'></div>
<script>
description("Tests for a shadow element's getDistributedNodes().");

var sandbox = document.getElementById('sandbox');

function prepareTree(root) {
    sandbox.innerHTML = '';
    sandbox.appendChild(root);
}

function assertDistributedNodes(insertionPointId, expectedDistributedNodes) {
    debug('\ngetDistributedNodes() for "' + insertionPointId + '" should return [' + expectedDistributedNodes + ']');
    var insertionPoint = getNodeInComposedTree(insertionPointId);
    var distributedNodes = insertionPoint.getDistributedNodes();
    window.distributedNodes = distributedNodes;
    window.expectedDistributedNodes = expectedDistributedNodes;
    shouldBe("distributedNodes.length", "expectedDistributedNodes.length");
    for (var i = 0; i < distributedNodes.length && i < expectedDistributedNodes.length; ++i) {
        shouldBe("distributedNodes.item(" + i + ")", "getNodeInComposedTree(expectedDistributedNodes[" + i + "])");
    }
}

prepareTree(
    createDOM('shadow', {'id': 'shadow'}));
assertDistributedNodes('shadow', []);

prepareTree(
    createDOM('div', {'id': 'host'},
              createShadowRoot(
                  createDOM('shadow', {'id': 'shadow'}))));
assertDistributedNodes('host/shadow', []);

prepareTree(
    createDOM('div', {'id': 'host'},
              createShadowRoot(
                  createDOM('shadow', {'id': 'shadow'},
                            createDOM('div', {'id': 'shadow-child'})))));
assertDistributedNodes('host/shadow', []);

prepareTree(
    createDOM('div', {'id': 'host'},
              createShadowRoot(
                  createDOM('shadow', {'id': 'shadow'})),
              createDOM('div', {'id': 'host-child'})));
assertDistributedNodes('host/shadow', ['host-child']);

prepareTree(
    createDOM('div', {'id': 'host'},
              createShadowRoot(
                  createDOM('shadow', {'id': 'shadow'},
                            createDOM('div'))),
              createDOM('div', {'id': 'host-child'})));
assertDistributedNodes('host/shadow', ['host-child']);

prepareTree(
    createDOM('div', {'id': 'host'},
              createShadowRoot(
                  createDOM('div', {'id': 'older-child'})),
              createShadowRoot(
                  createDOM('shadow', {'id': 'shadow'}))));
assertDistributedNodes('host//shadow', ['host/older-child']);

prepareTree(
    createDOM('div', {'id': 'host'},
              createShadowRoot(
                  createDOM('div', {'id': 'older-child-1'}),
                  createDOM('content', {'id': 'content'}),
                  createDOM('div', {'id': 'older-child-2'})),
              createShadowRoot(
                  createDOM('shadow', {'id': 'shadow'})),
              createDOM('div', {'id': 'host-child'})));
assertDistributedNodes('host//shadow', ['host/older-child-1', 'host-child', 'host/older-child-2']);

prepareTree(
    createDOM('div', {'id': 'host'},
              createShadowRoot(
                  createDOM('div', {'id': 'older-child-1'}),
                  createDOM('content', {'id': 'content'}),
                  createDOM('div', {'id': 'older-child-2'})),
              createShadowRoot(
                  createDOM('shadow', {'id': 'shadow'})),
              createDOM('div', {'id': 'host-child'})));
assertDistributedNodes('host//shadow', ['host/older-child-1', 'host-child', 'host/older-child-2']);

prepareTree(
    createDOM('div', {'id': 'host'},
              createShadowRoot(
                  createDOM('div', {'id': 'older-child-1'}),
                  createDOM('content', {'id': 'content'}),
                  createDOM('div', {'id': 'older-child-2'})),
              createShadowRoot(
                  createDOM('shadow', {'id': 'shadow'}))));
assertDistributedNodes('host//shadow', ['host/older-child-1', 'host/older-child-2']);

prepareTree(
    createDOM('div', {'id': 'host'},
              createShadowRoot(
                  createDOM('div', {'id': 'older-child-1'}),
                  createDOM('content', {'id': 'content'},
                            createDOM('div', {'id': 'older-content-child'})),
                  createDOM('div', {'id': 'older-child-2'})),
              createShadowRoot(
                  createDOM('shadow', {'id': 'shadow'}))));
assertDistributedNodes('host//shadow', ['host/older-child-1', 'host/older-content-child', 'host/older-child-2']);

prepareTree(
    createDOM('div', {'id': 'host'},
              createShadowRoot(
                  createDOM('div', {'id': 'oldest-child-1'}),
                  createDOM('content', {'id': 'content'}),
                  createDOM('div', {'id': 'oldest-child-2'})),
              createShadowRoot(
                  createDOM('div', {'id': 'older-child-1'}),
                  createDOM('shadow', {'id': 'older-shadow'}),
                  createDOM('div', {'id': 'older-child-2'})),
              createShadowRoot(
                  createDOM('shadow', {'id': 'shadow'})),
              createDOM('div', {'id': 'host-child'})));
assertDistributedNodes('host//older-shadow', ['host/oldest-child-1', 'host-child', 'host/oldest-child-2']);
assertDistributedNodes('host///shadow', ['host//older-child-1', 'host/oldest-child-1', 'host-child', 'host/oldest-child-2', 'host//older-child-2']);

</script>
</body>
</html>
