blob: 495586abefd4df80e045920f185474a6a47c5b25 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="resources/shadow-dom.js"></script>
<script src="../../../resources/js-test.js"></script>
</head>
<body>
<div id='sandbox'>
</div>
</body>
<script>
var borderColor;
function colorOf(node)
{
return document.defaultView.getComputedStyle(node, null).getPropertyValue('color');
}
function colorShouldBe(selector, color)
{
var text = 'colorOf(getNodeInComposedTree("' + selector + '"))';
shouldBeEqualToString(text, color);
}
function colorShouldNotBe(selector, color)
{
var text = 'colorOf(getNodeInComposedTree("' + selector + '"))';
var unevaledString = '"' + color.replace(/\\/g, "\\\\").replace(/"/g, "\"") + '"';
shouldNotBe(text, unevaledString);
}
function cleanUp()
{
document.getElementById('sandbox').innerHTML = '';
}
description('crbug.com/337573: Test direct/indirect adjucent and positinal rules under shadow root.');
sandbox.appendChild(
createDOM('div', {'id': 'host'},
createShadowRoot(
createDOM('style', {},
document.createTextNode('#child1.target + #child2 { color: green }')),
createDOM('div', {'id': 'child1'},
document.createTextNode('first div')),
createDOM('div', {'id': 'child2'},
document.createTextNode('second div')))));
document.body.offsetLeft;
getNodeInComposedTree('host/child1').className = 'target';
colorShouldBe('host/child2', 'rgb(0, 128, 0)');
cleanUp();
sandbox.appendChild(
createDOM('div', {'id': 'host'},
createShadowRoot(
createDOM('style', {},
document.createTextNode('#child1.target ~ div { color: green }')),
createDOM('div', {'id': 'child1'},
document.createTextNode('first div')),
createDOM('div', {'id': 'child2'},
document.createTextNode('second div')),
createDOM('div', {'id': 'child3'},
document.createTextNode('third div')))));
document.body.offsetLeft;
getNodeInComposedTree('host/child1').className = 'target';
colorShouldBe('host/child2', 'rgb(0, 128, 0)');
colorShouldBe('host/child3', 'rgb(0, 128, 0)');
cleanUp();
// Test div:first-child under shadow-root.
sandbox.appendChild(
createDOM('div', {'id': 'host'},
createShadowRoot(
createDOM('div', {'id': 'child1'},
document.createTextNode('first div')),
createDOM('div', {'id': 'child2'},
document.createTextNode('second div')),
createDOM('div', {'id': 'child3'},
document.createTextNode('third div')),
createDOM('style', {},
document.createTextNode('div:first-child { color: green }')))));
colorShouldBe('host/child1', 'rgb(0, 128, 0)');
colorShouldNotBe('host/child2', 'rgb(0, 128, 0)');
colorShouldNotBe('host/child3', 'rgb(0, 128, 0)');
cleanUp();
// Test div:last-child under shadow-root.
sandbox.appendChild(
createDOM('div', {'id': 'host'},
createShadowRoot(
createDOM('style', {},
document.createTextNode('div:last-child { color: green }')),
createDOM('div', {'id': 'child1'},
document.createTextNode('first div')),
createDOM('div', {'id': 'child2'},
document.createTextNode('second div')),
createDOM('div', {'id': 'child3'},
document.createTextNode('third div')))));
colorShouldNotBe('host/child1', 'rgb(0, 128, 0)');
colorShouldNotBe('host/child2', 'rgb(0, 128, 0)');
colorShouldBe('host/child3', 'rgb(0, 128, 0)');
cleanUp();
// Test div:nth-child under shadow-root.
sandbox.appendChild(
createDOM('div', {'id': 'host'},
createShadowRoot(
createDOM('style', {},
document.createTextNode('div:nth-child(3) { color: green }')),
createDOM('div', {'id': 'child1'},
document.createTextNode('first div')),
createDOM('div', {'id': 'child2'},
document.createTextNode('second div')),
createDOM('div', {'id': 'child3'},
document.createTextNode('third div')))));
colorShouldNotBe('host/child1', 'rgb(0, 128, 0)');
colorShouldBe('host/child2', 'rgb(0, 128, 0)');
colorShouldNotBe('host/child3', 'rgb(0, 128, 0)');
cleanUp();
// Test div:first-of-type under shadow-root.
sandbox.appendChild(
createDOM('div', {'id': 'host'},
createShadowRoot(
createDOM('span', {},
document.createTextNode('first span')),
createDOM('div', {'id': 'child1'},
document.createTextNode('first div')),
createDOM('div', {'id': 'child2'},
document.createTextNode('second div')) ,
createDOM('div', {'id': 'child3'},
document.createTextNode('third div')),
createDOM('style', {},
document.createTextNode('div:first-of-type { color: green }')))));
colorShouldBe('host/child1', 'rgb(0, 128, 0)');
colorShouldNotBe('host/child2', 'rgb(0, 128, 0)');
colorShouldNotBe('host/child3', 'rgb(0, 128, 0)');
cleanUp();
// Test div:last-of-type under shadow-root.
sandbox.appendChild(
createDOM('div', {'id': 'host'},
createShadowRoot(
createDOM('style', {},
document.createTextNode('div:last-of-type { color: green }')),
createDOM('span', {},
document.createTextNode('first span')),
createDOM('div', {'id': 'child1'},
document.createTextNode('first div')),
createDOM('div', {'id': 'child2'},
document.createTextNode('second div')) ,
createDOM('div', {'id': 'child3'},
document.createTextNode('last div')),
createDOM('span', {'id': 'child4'},
document.createTextNode('last span')))));
colorShouldNotBe('host/child1', 'rgb(0, 128, 0)');
colorShouldNotBe('host/child2', 'rgb(0, 128, 0)');
colorShouldBe('host/child3', 'rgb(0, 128, 0)');
colorShouldNotBe('host/child4', 'rgb(0, 128, 0)');
cleanUp();
// Test div:nth-of-type under shadow-root.
sandbox.appendChild(
createDOM('div', {'id': 'host'},
createShadowRoot(
createDOM('style', {},
document.createTextNode('div:nth-of-type(2) { color: green }')),
createDOM('span', {},
document.createTextNode('first span')),
createDOM('div', {'id': 'child1'},
document.createTextNode('first div')),
createDOM('span', {},
document.createTextNode('second span')),
createDOM('div', {'id': 'child2'},
document.createTextNode('second div')) ,
createDOM('div', {'id': 'child3'},
document.createTextNode('last div')),
createDOM('span', {},
document.createTextNode('last span')))));
colorShouldNotBe('host/child1', 'rgb(0, 128, 0)');
colorShouldBe('host/child2', 'rgb(0, 128, 0)');
colorShouldNotBe('host/child3', 'rgb(0, 128, 0)');
cleanUp();
</script>
</html>