blob: e5c39c40c9c73e0cbf1abca60f09657dedad0451 [file] [log] [blame]
<!doctype html>
<html>
<head>
<script src="../test_bootstrap.js"></script>
<script type="text/javascript">
goog.require('bot.dom');
goog.require('goog.testing.jsunit');
</script>
</head>
<body>
<h1>Page for Shadow DOM tests</h1>
<div id="is-shown">Foo</div>
<div id="is-shown-in-shadow"></div>
<div id="is-shown-directly-in-shadow"></div>
<div id="is-shown-in-slot"><div>Foo</div></div>
<div id="get-parent"><div></div></div>
<div id="get-parent-slot"><div></div></div>
<div id="get-text">Foo</div>
<div id="get-text-shadow"></div>
<div id="get-text-slot">Foo</div>
<div id="get-text-slots">
<div slot="a">Foo</div>
<div slot="b">Bar</div>
<div slot="c">Baz</div>
</div>
<script>
var elementIsShownInShadow;
var elementIsShown;
var elementIsShownDirectlyInShadow;
var elementIsShownInSlot;
var elementGetParent;
var elementGetParentSlot;
var elementGetText;
var elementGetTextShadow;
var elementGetTextSlot;
var elementGetTextSlots;
if (bot.dom.IS_SHADOW_DOM_ENABLED) {
elementIsShownInShadow =
document.querySelector('#is-shown-in-shadow');
elementIsShownInShadow.attachShadow({ mode: 'open' });
elementIsShownInShadow.shadowRoot.innerHTML =
'<div><div class="test">Foo</div></div>';
elementIsShownDirectlyInShadow =
document.querySelector('#is-shown-directly-in-shadow');
elementIsShownDirectlyInShadow.attachShadow({ mode: 'open' });
elementIsShownDirectlyInShadow.shadowRoot.innerHTML =
'<div>Foo</div>';
elementIsShown = document.querySelector('#is-shown');
elementIsShownInSlot =
document.querySelector('#is-shown-in-slot');
elementIsShownInSlot.attachShadow({ mode: 'open' });
elementIsShownInSlot.shadowRoot.innerHTML =
'<slot></slot>';
elementGetParent =
document.querySelector('#get-parent');
elementGetParentSlot =
document.querySelector('#get-parent-slot');
elementGetParentSlot.attachShadow({ mode: 'open' });
elementGetParentSlot.shadowRoot.innerHTML =
'<div><slot></slot></div>';
elementGetText =
document.querySelector('#get-text');
elementGetTextShadow =
document.querySelector('#get-text-shadow');
elementGetTextShadow.attachShadow({ mode: 'open' });
elementGetTextShadow.shadowRoot.innerHTML = 'foo';
elementGetTextSlot =
document.querySelector('#get-text-slot');
elementGetTextSlot.attachShadow({ mode: 'open' });
elementGetTextSlot.shadowRoot.innerHTML =
'<span>a</span><slot></slot><span>b</span>';
elementGetTextSlots =
document.querySelector('#get-text-slots');
elementGetTextSlots.attachShadow({ mode: 'open' });
elementGetTextSlots.shadowRoot.innerHTML =
'<slot name="a">Default</slot><slot name="b">Default</slot>';
}
function testIsShown() {
if (!bot.dom.IS_SHADOW_DOM_ENABLED) {
return;
}
assert(bot.dom.isShown(elementIsShown));
elementIsShown.style.display = 'none';
assertFalse(bot.dom.isShown(elementIsShown));
}
function testIsShownInShadow() {
if (!bot.dom.IS_SHADOW_DOM_ENABLED) {
return;
}
var el = elementIsShownInShadow
.shadowRoot
.querySelector('.test');
assert(bot.dom.isShown(el));
elementIsShownInShadow.style.display = 'none';
assertFalse(bot.dom.isShown(el));
}
function testIsShownDirectlyInShadow() {
if (!bot.dom.IS_SHADOW_DOM_ENABLED) {
return;
}
var el = elementIsShownDirectlyInShadow
.shadowRoot
.querySelector('div');
assert(bot.dom.isShown(el));
elementIsShownDirectlyInShadow.style.display = 'none';
assertFalse(bot.dom.isShown(el));
}
function testIsShownInSlot() {
if (!bot.dom.IS_SHADOW_DOM_ENABLED) {
return;
}
var el = elementIsShownInSlot.children[0];
assert(bot.dom.isShown(el));
elementIsShownInSlot.style.display = 'none';
assertFalse(bot.dom.isShown(el));
elementIsShownInSlot.style.display = '';
// Remove the slot, so our child is no longer slotted
elementIsShownInSlot.shadowRoot.innerHTML = '';
assertFalse(bot.dom.isShown(el));
}
function testGetParentNodeInComposedDom() {
if (!bot.dom.IS_SHADOW_DOM_ENABLED) {
return;
}
var el = elementGetParent.children[0];
assertEquals(elementGetParent, bot.dom.getParentNodeInComposedDom(el));
el = elementGetParentSlot.children[0];
assertEquals(
elementGetParentSlot.shadowRoot.querySelector('div'),
bot.dom.getParentNodeInComposedDom(el)
);
elementGetParentSlot.shadowRoot.innerHTML = '';
assertEquals(null, bot.dom.getParentNodeInComposedDom(el));
}
function testGetVisibleText() {
if (!bot.dom.IS_SHADOW_DOM_ENABLED) {
return;
}
assertEquals('Foo', bot.dom.getVisibleText(elementGetText));
}
function testGetVisibleTextInShadow() {
if (!bot.dom.IS_SHADOW_DOM_ENABLED) {
return;
}
assertEquals('foo', bot.dom.getVisibleText(elementGetTextShadow));
}
function testGetVisibleTextInSlot() {
if (!bot.dom.IS_SHADOW_DOM_ENABLED) {
return;
}
assertEquals('aFoob', bot.dom.getVisibleText(elementGetTextSlot));
}
function testGetVisibleTextInSlots() {
if (!bot.dom.IS_SHADOW_DOM_ENABLED) {
return;
}
assertEquals('Foo\nBar', bot.dom.getVisibleText(elementGetTextSlots));
}
</script>
</body>
</html>