blob: 282a33cd7caa9791573a4b0c92593f0a253fa764 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test.js"></script>
<script src="resources/shadow-dom.js"></script>
</head>
<body>
<p>This test confirms that the number of elements having Shadow in a shadow subtree is correctly counted.
See <a href="https://bugs.webkit.org/show_bug.cgi?id=100922">Bug 100922</a> also.</p>
<div id="container"></div>
<pre id="console"></pre>
<script>
function testCase(f)
{
container.innerHTML = '';
container.appendChild(createDOM('div', {'id': 'host'},
createShadowRoot()));
shadowRoot = internals.shadowRoot(host);
f();
debug('');
}
testCase(function()
{
debug('Initial count should be 0');
shouldBe('internals.countElementShadow(shadowRoot)', '0');
});
testCase(function()
{
debug('Inserted into / removed from an element having shadow');
var div = createDOM('div', {}, createShadowRoot());
shadowRoot.appendChild(div);
shouldBe('internals.countElementShadow(shadowRoot)', '1');
shadowRoot.removeChild(div);
shouldBe('internals.countElementShadow(shadowRoot)', '0');
});
testCase(function()
{
debug('Should be counted by each shadow root (nested shadow root case)');
var div = createDOM('div', {}, createShadowRoot());
nestedShadowRoot = internals.shadowRoot(div);
shadowRoot.appendChild(div);
shouldBe('internals.countElementShadow(shadowRoot)', '1');
shouldBe('internals.countElementShadow(nestedShadowRoot)', '0');
nestedShadowRoot.appendChild(createDOM('div', {}, createShadowRoot()));
shouldBe('internals.countElementShadow(shadowRoot)', '1');
shouldBe('internals.countElementShadow(nestedShadowRoot)', '1');
shadowRoot.appendChild(createDOM('div', {}, createShadowRoot()));
shouldBe('internals.countElementShadow(shadowRoot)', '2');
shouldBe('internals.countElementShadow(nestedShadowRoot)', '1');
nestedShadowRoot.appendChild(createDOM('div', {}, createShadowRoot()));
shouldBe('internals.countElementShadow(shadowRoot)', '2');
shouldBe('internals.countElementShadow(nestedShadowRoot)', '2');
});
testCase(function()
{
debug('Should be counted by each shadow root (deep nested shadow root case)');
var div = createDOM('div', {}, createShadowRoot());
nestedShadowRoot = internals.shadowRoot(div);
shadowRoot.appendChild(div);
shouldBe('internals.countElementShadow(shadowRoot)', '1');
shouldBe('internals.countElementShadow(nestedShadowRoot)', '0');
var div1 = createDOM('div', {}, createShadowRoot());
div1.setAttribute('title', 'debugstop');
deepNestedShadowRoot = internals.shadowRoot(div1);
var div2 = createDOM('div', {}, createShadowRoot());
var shadowRoot2 = internals.shadowRoot(div2);
deepNestedShadowRoot.appendChild(div2);
// When not in document, we don't count it.
shouldBe('internals.countElementShadow(deepNestedShadowRoot)', '0');
nestedShadowRoot.appendChild(div1);
shouldBe('internals.countElementShadow(shadowRoot)', '1');
shouldBe('internals.countElementShadow(nestedShadowRoot)', '1');
shouldBe('internals.countElementShadow(deepNestedShadowRoot)', '1');
container.innerHTML = "";
shouldBe('internals.countElementShadow(shadowRoot)', '0');
shouldBe('internals.countElementShadow(nestedShadowRoot)', '0');
shouldBe('internals.countElementShadow(deepNestedShadowRoot)', '0');
});
finishJSTest();
</script>
</body>
</html>