<!DOCTYPE html>
<script src="../../resources/js-test.js"></script>
<script src="../../fast/dom/shadow/resources/shadow-dom.js"></script>
<body></body>
<script>
description("Tests for getDestinationInsertionPoints() which involves re-distribution.");

document.body.appendChild(
    createDOM('div', {},
              createDOM('div', {'id': 'host-1'},
                        createShadowRoot(
                            createDOM('div', {'id': 'host-2'},
                                      createShadowRoot(
                                          createDOM('content', {'id': 'content-2'})),
                                      createDOM('content', {'id': 'content-1'}))),
                        createDOM('div', {'id': 'child-1'}))));

shouldBeEqualAsArray(document.getElementById('child-1').getDestinationInsertionPoints(),
                     [getNodeInComposedTree('host-1/content-1'), getNodeInComposedTree('host-1/host-2/content-2')]);

document.body.appendChild(
    createDOM('div', {},
              createDOM('div', {'id': 'host-10'},
                        createShadowRoot(
                            createDOM('div', {'id': 'host-20'},
                                      attachShadow(
                                          {'mode': 'open'},
                                          createDOM('content', {'id': 'content-20'})),
                                      createDOM('content', {'id': 'content-10'}))),
                        createDOM('div', {'id': 'child-10'}))));

shouldBeEqualAsArray(document.getElementById('child-10').getDestinationInsertionPoints(),
                     [getNodeInComposedTree('host-10/content-10')]);

document.body.appendChild(
    createDOM('div', {},
              createDOM('div', {'id': 'host-11'},
                        createShadowRoot(
                            createDOM('div', {'id': 'host-21'},
                                      attachShadow(
                                          {'mode': 'closed'},
                                          createDOM('content', {'id': 'content-21'})),
                                      createDOM('content', {'id': 'content-11'}))),
                        createDOM('div', {'id': 'child-11'}))));

shouldBeEqualAsArray(document.getElementById('child-11').getDestinationInsertionPoints(),
                     [getNodeInComposedTree('host-11/content-11')]);

document.body.appendChild(
    createDOM('div', {},
              createDOM('div', {'id': 'host-12'},
                        attachShadow(
                            {'mode': 'closed'},
                            createDOM('div', {'id': 'host-22'},
                                      createShadowRoot(
                                          createDOM('content', {'id': 'content-22'})),
                                      createDOM('content', {'id': 'content-12'}))),
                        createDOM('div', {'id': 'child-12'}))));

shouldBe('document.getElementById("child-12").getDestinationInsertionPoints().length', '0');
</script>
