| Index: LayoutTests/fast/css/style-scoped/style-scoped-change-scoped-in-shadow.html
|
| diff --git a/LayoutTests/fast/css/style-scoped/style-scoped-change-scoped-in-shadow.html b/LayoutTests/fast/css/style-scoped/style-scoped-change-scoped-in-shadow.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..13d1123efec64bb472f773b0133d5865b161a036
|
| --- /dev/null
|
| +++ b/LayoutTests/fast/css/style-scoped/style-scoped-change-scoped-in-shadow.html
|
| @@ -0,0 +1,304 @@
|
| +<!DOCTYPE html>
|
| +<html>
|
| +<head>
|
| +<script src="../../../resources/js-test.js"></script>
|
| +<script src="../../dom/shadow/resources/shadow-dom.js"></script>
|
| +<script>
|
| +shouldBeDefined("window.internals");
|
| +
|
| +var textColor;
|
| +
|
| +function shouldHaveTextColor(node, col)
|
| +{
|
| + textColor = document.defaultView.getComputedStyle(node, null).getPropertyValue('color');
|
| + shouldBeEqualToString('textColor', col);
|
| +}
|
| +
|
| +function cleanUp()
|
| +{
|
| + document.getElementById('sandbox').innerHTML = '';
|
| +}
|
| +
|
| +function testScopedStyle()
|
| +{
|
| + debug('test a scoped style in shadow tree.');
|
| + document.getElementById('sandbox').appendChild(
|
| + createDOM('div', {'id': 'host'},
|
| + createShadowRoot(
|
| + createDOM('div', {},
|
| + createDOM('style', {'scoped': 'scoped'},
|
| + document.createTextNode('div { color: red; }')),
|
| + createDOM('div', {'id': 'E'})),
|
| + createDOM('div', {'id': 'F'}))));
|
| +
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)');
|
| + cleanUp();
|
| +}
|
| +
|
| +function testStyle()
|
| +{
|
| + debug('test a style in shadow tree.');
|
| + document.getElementById('sandbox').appendChild(
|
| + createDOM('div', {'id': 'host'},
|
| + createShadowRoot(
|
| + createDOM('div', {},
|
| + createDOM('div', {'id': 'E'},
|
| + createDOM('style', {},
|
| + document.createTextNode('div { color: red; }')))),
|
| + createDOM('div', {'id': 'F'}))));
|
| +
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)');
|
| + cleanUp();
|
| +}
|
| +
|
| +function testStyleWithMultipleShadowRoots()
|
| +{
|
| + debug('test styles in multiple shadow trees.');
|
| +
|
| + document.getElementById('sandbox').appendChild(
|
| + createDOM('div', {'id': 'host'},
|
| + createShadowRoot(
|
| + createDOM('div', {},
|
| + createDOM('style', {},
|
| + document.createTextNode('div { color: red; }')),
|
| + createDOM('div', {'id': 'E'})),
|
| + createDOM('div', {'id': 'F'})),
|
| +
|
| + createShadowRoot(
|
| + createDOM('div', {},
|
| + createDOM('style', {'scoped': 'scoped'},
|
| + document.createTextNode('div { color: blue; }')),
|
| + createDOM('shadow', {}),
|
| + createDOM('div', {'id': 'G'})))));
|
| +
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host//G'), 'rgb(0, 0, 255)');
|
| + cleanUp();
|
| +}
|
| +
|
| +function testScopedStyleWithNestedShadowRoots()
|
| +{
|
| + debug('test a scoped style in nested shadow tree.');
|
| + document.getElementById('sandbox').appendChild(
|
| + createDOM('div', {'id': 'host'},
|
| + createShadowRoot(
|
| + createDOM('div', {},
|
| + createDOM('style', {'scoped': 'scoped'},
|
| + document.createTextNode('div { color: red; }')),
|
| + createDOM('div', {'id': 'E'},
|
| + createShadowRoot(
|
| + createDOM('div', {},
|
| + createDOM('style', {'scoped': 'scoped'},
|
| + document.createTextNode('div { color: blue; }')),
|
| + createDOM('div', {'id': 'G'})),
|
| + createDOM('div', {'id': 'H'})))),
|
| + createDOM('div', {'id': 'F'}))));
|
| +
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E/G'), 'rgb(0, 0, 255)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E/H'), 'rgb(255, 0, 0)');
|
| + cleanUp();
|
| +}
|
| +
|
| +function testStyleWithNestedShadowRoots()
|
| +{
|
| + debug('test a style in nested shadow tree.');
|
| + document.getElementById('sandbox').appendChild(
|
| + createDOM('div', {'id': 'host'},
|
| + createShadowRoot(
|
| + createDOM('div', {},
|
| + createDOM('style', {},
|
| + document.createTextNode('div { color: red; }')),
|
| + createDOM('div', {'id': 'E'},
|
| + createShadowRoot(
|
| + createDOM('div', {},
|
| + createDOM('style', {},
|
| + document.createTextNode('div { color: blue; }')),
|
| + createDOM('div', {'id': 'G'})),
|
| + createDOM('div', {'id': 'H'})))),
|
| + createDOM('div', {'id': 'F'}))));
|
| +
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E/G'), 'rgb(0, 0, 255)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E/H'), 'rgb(0, 0, 255)');
|
| + cleanUp();
|
| +}
|
| +
|
| +function testChangeScopedAttributeOnline()
|
| +{
|
| + debug('test changing scoped attribute online.');
|
| + document.getElementById('sandbox').appendChild(
|
| + createDOM('div', {'id': 'host'},
|
| + createShadowRoot(
|
| + createDOM('div', {},
|
| + createDOM('style', {'id': 'style-in-shadow', 'scoped': 'scoped'},
|
| + document.createTextNode('div { color: red; }')),
|
| + createDOM('div', {'id': 'E'})),
|
| + createDOM('div', {'id': 'F'}))));
|
| +
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)');
|
| + document.body.offsetLeft;
|
| +
|
| + // changing from scoped to scoped.
|
| + getNodeInTreeOfTrees('host/style-in-shadow').setAttribute('scoped', 'scoped');
|
| +
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)');
|
| +
|
| + // removing scoped.
|
| + getNodeInTreeOfTrees('host/style-in-shadow').removeAttribute('scoped');
|
| +
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)');
|
| +
|
| + // changing from not scoped to scoped.
|
| + getNodeInTreeOfTrees('host/style-in-shadow').setAttribute('scoped', 'scoped');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)');
|
| + cleanUp();
|
| +}
|
| +
|
| +function testRemoveScopedStyle()
|
| +{
|
| + debug('test removing a scoped style from shadow tree.');
|
| + document.getElementById('sandbox').appendChild(
|
| + createDOM('div', {'id': 'host'},
|
| + createShadowRoot(
|
| + createDOM('div', {},
|
| + createDOM('style', {'id': 'style-in-shadow', 'scoped': 'scoped'},
|
| + document.createTextNode('div { color: red; }')),
|
| + createDOM('div', {'id': 'E'})),
|
| + createDOM('div', {'id': 'F'}))));
|
| +
|
| + // before
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)');
|
| +
|
| + var styleInShadow = getNodeInTreeOfTrees('host/style-in-shadow');
|
| + styleInShadow.parentNode.removeChild(styleInShadow);
|
| +
|
| + // after
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(0, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)');
|
| + cleanUp();
|
| +}
|
| +
|
| +function testRemoveStyle()
|
| +{
|
| + debug('test removing a style from shadow tree.');
|
| + document.getElementById('sandbox').appendChild(
|
| + createDOM('div', {'id': 'host'},
|
| + createShadowRoot(
|
| + createDOM('div', {},
|
| + createDOM('style', {'id': 'style-in-shadow'},
|
| + document.createTextNode('div { color: red; }')),
|
| + createDOM('div', {'id': 'E'})),
|
| + createDOM('div', {'id': 'F'}))));
|
| +
|
| + // before
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)');
|
| +
|
| + var styleInShadow = getNodeInTreeOfTrees('host/style-in-shadow');
|
| + styleInShadow.parentNode.removeChild(styleInShadow);
|
| +
|
| + // after
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(0, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)');
|
| + cleanUp();
|
| +}
|
| +
|
| +function testInsertScopedStyle()
|
| +{
|
| + debug('test inserting a scoped style into shadow tree.');
|
| + document.getElementById('sandbox').appendChild(
|
| + createDOM('div', {'id': 'host'},
|
| + createShadowRoot(
|
| + createDOM('div', {'id': 'D'},
|
| + createDOM('div', {'id': 'E'})),
|
| + createDOM('div', {'id': 'F'}))));
|
| +
|
| + var style = document.createElement('style');
|
| + style.innerHTML = 'div { color: red; }';
|
| + style.setAttribute('scoped', 'scoped');
|
| + getNodeInTreeOfTrees('host/D').appendChild(style);
|
| +
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)');
|
| + cleanUp();
|
| +}
|
| +
|
| +function testInsertStyle()
|
| +{
|
| + debug('test inserting a style into shadow tree.');
|
| + document.getElementById('sandbox').appendChild(
|
| + createDOM('div', {'id': 'host'},
|
| + createShadowRoot(
|
| + createDOM('div', {'id': 'D'},
|
| + createDOM('div', {'id': 'E'})),
|
| + createDOM('div', {'id': 'F'}))));
|
| +
|
| + var style = document.createElement('style');
|
| + style.innerHTML = 'div { color: red; }';
|
| + getNodeInTreeOfTrees('host/D').appendChild(style);
|
| +
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)');
|
| + cleanUp();
|
| +}
|
| +
|
| +function testChangeScopedAttributeOffline()
|
| +{
|
| + debug('test re-inserting a style after changing scoped attribute offline.');
|
| + document.getElementById('sandbox').appendChild(
|
| + createDOM('div', {'id': 'host'},
|
| + createShadowRoot(
|
| + createDOM('div', {'id': 'D'},
|
| + createDOM('style', {'id': 'style-in-shadow', 'scoped': 'scoped'},
|
| + document.createTextNode('div { color: red; }')),
|
| + createDOM('div', {'id': 'E'})),
|
| + createDOM('div', {'id': 'F'}))));
|
| +
|
| + var style = getNodeInTreeOfTrees('host/style-in-shadow');
|
| + style.parentNode.removeChild(style);
|
| + style.removeAttribute('scoped');
|
| + getNodeInTreeOfTrees('host/D').appendChild(style);
|
| +
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(255, 0, 0)');
|
| +
|
| + style.parentNode.removeChild(style);
|
| + style.setAttribute('scoped', 'scoped');
|
| + getNodeInTreeOfTrees('host/D').appendChild(style);
|
| +
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/E'), 'rgb(255, 0, 0)');
|
| + shouldHaveTextColor(getNodeInTreeOfTrees('host/F'), 'rgb(0, 0, 0)');
|
| + cleanUp();
|
| +}
|
| +
|
| +function runTests()
|
| +{
|
| + testScopedStyle();
|
| + testStyle();
|
| + testStyleWithMultipleShadowRoots();
|
| + testScopedStyleWithNestedShadowRoots();
|
| + testStyleWithNestedShadowRoots();
|
| + testChangeScopedAttributeOnline();
|
| + testRemoveScopedStyle();
|
| + testRemoveStyle();
|
| + testInsertScopedStyle();
|
| + testInsertStyle();
|
| + testChangeScopedAttributeOffline();
|
| +}
|
| +</script>
|
| +</head>
|
| +<body onload="runTests()">
|
| + <div id='sandbox'></div>
|
| +</body>
|
| +</html>
|
|
|