blob: 7bee7014a170bdf1fa4b3b81da2189c6747b8e61 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<style>
/* relative positioning ensures underlying RenderLayer */
.container {
position: relative;
}
.span {
display: boxed-inline;
margin: 2px;
border: solid;
}
</style>
<script src="../resources/shadow-test-driver.js"></script>
<script>
var testFuncs = [];
testFuncs.push(function renderingDoubleShadowRoot(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span><span>BEFORE 1</span><span>MID</span><span>AFTER 1</span><span>AFTER 2</span></div>";
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(document.createElement('shadow'));
sr1.appendChild(createSpanWithText('AFTER 1'));
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(document.createElement('shadow'));
sr2.appendChild(createSpanWithText('AFTER 2'));
document.getElementById('actual-container').appendChild(root);
callIfDone();
});
testFuncs.push(function renderingDoubleShadowRootWithOneShadowElement(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span><span>BEFORE 1</span><span>AFTER 1</span><span>AFTER 2</span></div>";
// MID won't be rendered.
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(createSpanWithText('AFTER 1'));
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(document.createElement('shadow'));
sr2.appendChild(createSpanWithText('AFTER 2'));
document.getElementById('actual-container').appendChild(root);
callIfDone();
});
testFuncs.push(function renderingTripleShadowRoot(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 3</span><span>BEFORE 2</span><span>BEFORE 1</span>" +
"<span>MID</span>" +
"<span>AFTER 1</span><span>AFTER 2</span><span>AFTER 3</span></div>";
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(document.createElement('shadow'));
sr1.appendChild(createSpanWithText('AFTER 1'));
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(document.createElement('shadow'));
sr2.appendChild(createSpanWithText('AFTER 2'));
var sr3 = root.webkitCreateShadowRoot();
sr3.appendChild(createSpanWithText('BEFORE 3'));
sr3.appendChild(document.createElement('shadow'));
sr3.appendChild(createSpanWithText('AFTER 3'));
document.getElementById('actual-container').appendChild(root);
callIfDone();
});
testFuncs.push(function renderingTwoShadowRoots(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span>" +
"<span>BEFORE 1</span><span>MID</span><span>AFTER 1</span>" +
"<span>FALLBACK 2-2</span>" +
"<span>AFTER 2</span></div>";
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(document.createElement('shadow'));
sr1.appendChild(createSpanWithText('AFTER 1'));
var sr2 = root.webkitCreateShadowRoot();
var shadow21 = document.createElement('shadow');
shadow21.appendChild(createSpanWithText('FALLBACK 2-1'));
var shadow22 = document.createElement('shadow');
shadow22.appendChild(createSpanWithText('FALLBACK 2-2'));
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(shadow21);
sr2.appendChild(shadow22);
sr2.appendChild(createSpanWithText('AFTER 2'));
document.getElementById('actual-container').appendChild(root);
callIfDone();
});
testFuncs.push(function testWithDoubleShadowRootWithContent1(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span><span>MID 2</span>" +
"<span>BEFORE 1</span><span>MID 1</span><span>MID 3</span><span>AFTER 1</span>" +
"<span>AFTER 2</span></div>";
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID 3', 'sr3'));
root.appendChild(createSpanWithText('MID 1', 'sr1'));
root.appendChild(createSpanWithText('MID 2', 'sr2'));
var shadow1 = document.createElement('shadow');
shadow1.appendChild(createSpanWithText('SHADOW FALLBACK 1'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
var content1 = createContentWithSelect('.sr1', 'CONTENT FALLBACK 1');
sr1.appendChild(content1);
sr1.appendChild(shadow1);
sr1.appendChild(createSpanWithText('AFTER 1'));
var shadow2 = document.createElement('shadow');
shadow2.appendChild(createSpanWithText('SHADOW FALLBACK 2'));
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
var content;
sr2.appendChild(content = createContentWithSelect('.sr2', 'CONTENT FALLBACK 2'));
content.title = "debugstop";
sr2.appendChild(shadow2);
sr2.appendChild(createSpanWithText('AFTER 2'));
document.getElementById('actual-container').appendChild(root);
callIfDone();
});
testFuncs.push(function testWithDoubleShadowRootWithContent2(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span><span>MID 2</span><span>MID 3</span><span>MID 1</span>" +
"<span>BEFORE 1</span><span>CONTENT FALLBACK 1</span><span>SHADOW FALLBACK 1</span><span>AFTER 1</span>" +
"<span>AFTER 2</span></div>";
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID 3', 'sr3'));
root.appendChild(createSpanWithText('MID 1', 'sr1'));
root.appendChild(createSpanWithText('MID 2', 'sr2'));
var shadow1 = document.createElement('shadow');
shadow1.appendChild(createSpanWithText('SHADOW FALLBACK 1'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(createContentWithSelect('.sr1', 'CONTENT FALLBACK 1'));
sr1.appendChild(shadow1);
sr1.appendChild(createSpanWithText('AFTER 1'));
var shadow2 = document.createElement('shadow');
shadow2.appendChild(createSpanWithText('SHADOW FALLBACK 2'));
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(createContentWithSelect('.sr2', 'CONTENT FALLBACK 2'));
sr2.appendChild(createContentWithSelect('span', 'CONTENT FALLBACK 3'));
sr2.appendChild(shadow2);
sr2.appendChild(createSpanWithText('AFTER 2'));
document.getElementById('actual-container').appendChild(root);
callIfDone();
});
testFuncs.push(function renderingDoubleShadowRootDynamicallyAdded1(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span><span>BEFORE 1</span><span>MID</span><span>AFTER 1</span><span>AFTER 2</span></div>";
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(document.createElement('shadow'));
sr1.appendChild(createSpanWithText('AFTER 1'));
document.getElementById('actual-container').appendChild(root);
var f = (function(root, callIfDone) { return function() {
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(document.createElement('shadow'));
sr2.appendChild(createSpanWithText('AFTER 2'));
callIfDone();
};})(root, callIfDone);
setTimeout(f, 0);
});
testFuncs.push(function renderingDoubleShadowRootDynamicallyAdded2(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span><span>BEFORE 1</span><span>MID</span><span>AFTER 1</span><span>AFTER 2</span></div>";
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(document.createElement('shadow'));
sr1.appendChild(createSpanWithText('AFTER 1'));
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(createSpanWithText('AFTER 2'));
document.getElementById('actual-container').appendChild(root);
var f = (function(sr2, callIfDone) { return function() {
var shadow = document.createElement('shadow');
sr2.insertBefore(shadow, sr2.lastChild);
callIfDone()
};})(sr2, callIfDone);
setTimeout(f, 0);
});
testFuncs.push(function renderingDoubleShadowRootDynamicallyAdded3(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span><span>BEFORE 1</span><span>MID</span><span>AFTER 1</span><span>AFTER 2</span></div>";
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(createSpanWithText('AFTER 1'));
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(document.createElement('shadow'));
sr2.appendChild(createSpanWithText('AFTER 2'));
document.getElementById('actual-container').appendChild(root);
var f = (function(sr1, callIfDone) { return function() {
var shadow = document.createElement('shadow');
sr1.insertBefore(shadow, sr1.lastChild);
callIfDone()
};})(sr1, callIfDone);
setTimeout(f, 0);
});
testFuncs.push(function renderingDoubleShadowRootDynamicallyRemoved1(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span><span>AFTER 2</span></div>";
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(document.createElement('shadow'));
sr1.appendChild(createSpanWithText('AFTER 1'));
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(document.createElement('shadow'));
sr2.appendChild(createSpanWithText('AFTER 2'));
document.getElementById('actual-container').appendChild(root);
var f = (function(sr2, callIfDone) { return function() {
sr2.removeChild(sr2.firstChild.nextSibling);
callIfDone();
};})(sr2, callIfDone);
setTimeout(f, 0);
});
testFuncs.push(function renderingDoubleShadowRootDynamicallyRemoved2(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span><span>BEFORE 1</span><span>AFTER 1</span><span>AFTER 2</span></div>";
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(document.createElement('shadow'));
sr1.appendChild(createSpanWithText('AFTER 1'));
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(document.createElement('shadow'));
sr2.appendChild(createSpanWithText('AFTER 2'));
document.getElementById('actual-container').appendChild(root);
var f = (function(sr1, callIfDone) { return function() {
sr1.removeChild(sr1.firstChild.nextSibling);
callIfDone();
};})(sr1, callIfDone);
setTimeout(f, 0);
});
testFuncs.push(function renderingLightChildrenDynamicallyAdded(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span><span>BEFORE 1</span><span>MID</span><span>AFTER 1</span><span>AFTER 2</span></div>";
var root = document.createElement('div');
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(document.createElement('shadow'));
sr1.appendChild(createSpanWithText('AFTER 1'));
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(document.createElement('shadow'));
sr2.appendChild(createSpanWithText('AFTER 2'));
document.getElementById('actual-container').appendChild(root);
var f = (function(root, callIfDone) { return function() {
root.appendChild(createSpanWithText('MID'));
callIfDone();
};})(root, callIfDone);
setTimeout(f, 0);
});
testFuncs.push(function renderingOlderShadowRootContentDynamicallyAdded(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span><span>BEFORE 1</span><span>MID</span><span>AFTER 1</span><span>AFTER 2</span></div>";
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(document.createElement('shadow'));
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(document.createElement('shadow'));
sr2.appendChild(createSpanWithText('AFTER 2'));
document.getElementById('actual-container').appendChild(root);
var f = (function(sr1, callIfDone) { return function() {
sr1.appendChild(createSpanWithText('AFTER 1'));
callIfDone();
};})(sr1, callIfDone);
setTimeout(f, 0);
});
testFuncs.push(function renderingLightChildrenDynamicallyRemoved(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span><span>BEFORE 1</span><span>AFTER 1</span><span>AFTER 2</span></div>";
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(document.createElement('shadow'));
sr1.appendChild(createSpanWithText('AFTER 1'));
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(document.createElement('shadow'));
sr2.appendChild(createSpanWithText('AFTER 2'));
document.getElementById('actual-container').appendChild(root);
var f = (function(root, callIfDone) { return function() {
root.removeChild(root.firstChild);
callIfDone();
};})(root, callIfDone);
setTimeout(f, 0);
});
testFuncs.push(function renderingOlderShadowRootContentDynamicallyRemoved(callIfDone) {
document.getElementById('expect-container').innerHTML =
"<div><span>BEFORE 2</span><span>BEFORE 1</span><span>MID</span><span>AFTER 1</span><span>AFTER 2</span></div>";
var root = document.createElement('div');
root.appendChild(createSpanWithText('MID'));
var sr1 = root.webkitCreateShadowRoot();
sr1.appendChild(createSpanWithText('BEFORE 1'));
sr1.appendChild(document.createElement('shadow'));
sr1.appendChild(createSpanWithText('AFTER 1'));
sr1.appendChild(createSpanWithText('SHOULD NOT BE RENDERED'));
var sr2 = root.webkitCreateShadowRoot();
sr2.appendChild(createSpanWithText('BEFORE 2'));
sr2.appendChild(document.createElement('shadow'));
sr2.appendChild(createSpanWithText('AFTER 2'));
document.getElementById('actual-container').appendChild(root);
var f = (function(sr1, callIfDone) { return function() {
sr1.removeChild(sr1.lastChild);
callIfDone();
};})(sr1, callIfDone);
setTimeout(f, 0);
});
</script>
</head>
<body onload="doTest(testFuncs)">
<div id="actual-container" class="container"></div>
<div id="expect-container" class="container"></div>
<pre id="console"></pre>
</body>
</html>