<!DOCTYPE html>
<html>
<head>
<script src="resources/shadow-dom.js"></script>
<style>
div {
  margin: 10px 10px 10px 10px;
  border: solid black;
}
</style>
</head>
<body>
<script>
function text(contents) {
    return document.createTextNode(contents);
}

function shadowRoot() {
    return createShadowRootWithAttributes({'applyAuthorStyles': true}, Array.prototype.slice.call(arguments));
}

// Test for a content element which is selected by another content element.
document.body.appendChild(
    createDOM('div', {},
              shadowRoot(
                  createDOM('div', {},
                            shadowRoot(
                                createDOM('content', {'select': '#b-content'}),
                                createDOM('div', {}, text('b-1')),
                                createDOM('content', {'select': '#b-2'})),
                            createDOM('content', {'id': 'b-content', 'select': '#b-2'},
                                      createDOM('div', {}, text('should-not-be-used'))),
                            createDOM('div', {}, text('should-not-be-used')))),
              createDOM('div', {'id': 'b-2'}, text('b-2'))));

// debug('Test for a reprojection. Content elements should be used in document order.');
document.body.appendChild(
    createDOM('div', {},
              shadowRoot(
                  createDOM('content', {'select': '#c-1'}),
                  createDOM('div', {},
                            shadowRoot(
                                createDOM('content', {'select': '.child'})),
                            createDOM('content', {'select': '.child'}))),
              createDOM('div', {'id': 'c-1', 'class': 'child'}, text('c-1')),
              createDOM('div', {'id': 'c-2', 'class': 'child'}, text('c-2'))));

// debug('Test for complex re-projections.');
document.body.appendChild(
    createDOM('div', {},
              shadowRoot(
                  createDOM('div', {},
                            shadowRoot(
                                // Select #d-child-1, div, d-5
                                createDOM('content', {'select': '.foo'}),
                                createDOM('div', {}, text('d-1'))),
                            // Select #d-child-1
                            createDOM('content', {'select': '#d-child-1'},
                                      createDOM('div', {}, text('Should not be used')),
                                      createDOM('content', {'select': '.foo'}, text('Should not select any nodes. This is inactive.'))),
                            createDOM('div', {'class': 'foo'},
                                      shadowRoot(
                                          createDOM('div', {}, text('d-2')),
                                          // Select #d-child-2 and #d-4.
                                          createDOM('content', {'select': '.foo'}),
                                          createDOM('div', {}, text('d-3'))),
                                      // Select #d-child-2
                                      createDOM('content', {'select': '#d-child-2'}),
                                      createDOM('div', {'id': 'd-4', 'class': 'foo'}, text('d-4'))),
                            createDOM('div', {}, text('Should not be selected')),
                            createDOM('div', {'class': 'foo'}, text('d-5')))),
              createDOM('div', {'id': 'd-child-1', 'class': 'foo'}, text('d-child-1')),
              createDOM('div', {'class': 'foo'}, text('should-not-be-selected')),
              createDOM('div', {'id': 'd-child-2', 'class': 'foo'}, text('d-child-2'))));
</script>
</body>
</html>
