blob: 368fa82cb25369f2160faf115da6ba14c5dc9cc4 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
<script src="../../dom/shadow/resources/polyfill.js"></script>
<script>
if (window.testRunner)
testRunner.dumpAsText();
shouldBeDefined("window.internals");
function dumpComputedStyle(node)
{
debug(node.id + ": " + document.defaultView.getComputedStyle(node, null).getPropertyValue('color'));
}
function testScopedStyleInShadow()
{
debug("test a scoped style in shadow subtree.");
var div = document.createElement("div");
document.body.appendChild(div);
var shadow = div.webkitCreateShadowRoot();
shadow.innerHTML = "<div><style scoped>div { color: red; }</style><div id='E'>EEE</div></div><div id='F'>FFF</div>";
document.body.offsetLeft;
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
document.body.removeChild(div);
}
function testStyleInShadow()
{
debug("test a style in shadow subtree.");
var div = document.createElement("div");
document.body.appendChild(div);
var shadow = div.webkitCreateShadowRoot();
shadow.innerHTML = "<div><div id='E'>EEE</div><style>div { color: red; }</style></div><div id='F'>FFF</div>";
document.body.offsetLeft;
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
document.body.removeChild(div);
}
function testStyleInMultipleShadow()
{
debug("test styles in multiple shadow subtrees.");
var div = document.createElement("div");
var shadow1 = div.webkitCreateShadowRoot();
shadow1.innerHTML = "<div><style>div { color: red; }</style><div id='E'>EEE</div></div><div id='F'>FFF</div>";
var shadow2 = div.webkitCreateShadowRoot();
shadow2.innerHTML = "<div><style scoped>div { color: blue }</style><shadow></shadow><div id='G'>GGG</div></div>";
document.body.appendChild(div);
document.body.offsetLeft;
dumpComputedStyle(shadow1.getElementById("E"));
dumpComputedStyle(shadow1.getElementById("F"));
dumpComputedStyle(shadow2.getElementById("G"));
document.body.removeChild(div);
}
function testScopedStyleInNestedShadow()
{
debug("test a scoped style in nested shadow subtree.");
var div = document.createElement("div");
document.body.appendChild(div);
var shadow1 = div.webkitCreateShadowRoot();
shadow1.innerHTML = "<div><style scoped>div { color: red; }</style><div id='E'>EEE</div></div><div id='F'>FFF</div>";
var e = shadow1.getElementById("E");
var shadow2 = e.webkitCreateShadowRoot();
shadow2.innerHTML = "<div><style scoped>div { color: blue; }</style><div id='G'>GGGG</div></div><div id='H'>HHHH</div>";
document.body.offsetLeft;
dumpComputedStyle(shadow1.getElementById("E"));
dumpComputedStyle(shadow1.getElementById("F"));
dumpComputedStyle(shadow2.getElementById("G"));
dumpComputedStyle(shadow2.getElementById("H"));
document.body.removeChild(div);
}
function testStyleInNestedShadow()
{
debug("test a style in nested shadow subtree.");
var div = document.createElement("div");
document.body.appendChild(div);
var shadow1 = div.webkitCreateShadowRoot();
shadow1.innerHTML = "<div><style>div { color: red; }</style><div id='E'>EEE</div></div><div id='F'>FFF</div>";
var e = shadow1.getElementById("E");
var shadow2 = e.webkitCreateShadowRoot();
shadow2.innerHTML = "<div><style>div { color: blue; }</style><div id='G'>GGGG</div></div><div id='H'>HHHH</div>";
document.body.offsetLeft;
dumpComputedStyle(shadow1.getElementById("E"));
dumpComputedStyle(shadow1.getElementById("F"));
dumpComputedStyle(shadow2.getElementById("G"));
dumpComputedStyle(shadow2.getElementById("H"));
document.body.removeChild(div);
}
function testChangeScopedToScoped()
{
debug("test changing a style in shadow subtree from scoped to scoped.");
var div = document.createElement("div");
document.body.appendChild(div);
var shadow = div.webkitCreateShadowRoot();
shadow.innerHTML = "<div><style scoped id='style-in-shadow'>div { color: red; }</style><div id='E'>EEE</div></div><div id='F'>FFF</div>";
document.body.offsetLeft;
// before
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
shadow.getElementById("style-in-shadow").setAttribute("scoped", "scoped");
document.body.offsetLeft;
// after
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
document.body.removeChild(div);
}
function testChangeScopedToNotScoped()
{
debug("test changing a style in shadow subtree from scoped to not-scoped.");
var div = document.createElement("div");
document.body.appendChild(div);
var shadow = div.webkitCreateShadowRoot();
shadow.innerHTML = "<div><style scoped id='style-in-shadow'>div { color: red; }</style><div id='E'>EEE</div></div><div id='F'>FFF</div>";
document.body.offsetLeft;
// before
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
shadow.getElementById("style-in-shadow").removeAttribute("scoped");
document.body.offsetLeft;
// after
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
document.body.removeChild(div);
}
function testChangeNotScopedToScoped()
{
debug("test changing a style in shadow subtree from not-scoped to scoped.");
var div = document.createElement("div");
document.body.appendChild(div);
var shadow = div.webkitCreateShadowRoot();
shadow.innerHTML = "<div><style id='style-in-shadow'>div { color: red; }</style><div id='E'>EEE</div></div><div id='F'>FFF</div>";
document.body.offsetLeft;
// before
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
shadow.getElementById("style-in-shadow").setAttribute("scoped", "scoped");
document.body.offsetLeft;
// after
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
document.body.removeChild(div);
}
function testRemoveScopedStyleFromDocument()
{
debug("test removing a scoped style from shadow subtree.");
var div = document.createElement("div");
document.body.appendChild(div);
var shadow = div.webkitCreateShadowRoot();
shadow.innerHTML = "<div><style scoped id='style-in-shadow'>div { color: red; }</style><div id='E'>EEE</div></div><div id='F'>FFF</div>";
document.body.offsetLeft;
// before
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
var styleInShadow = shadow.getElementById("style-in-shadow");
styleInShadow.parentNode.removeChild(styleInShadow);
document.body.offsetLeft;
// after
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
document.body.removeChild(div);
}
function testRemoveStyleFromDocument()
{
debug("test removing a style from shadow subtree.");
var div = document.createElement("div");
document.body.appendChild(div);
var shadow = div.webkitCreateShadowRoot();
shadow.innerHTML = "<div><style id='style-in-shadow'>div { color: red; }</style><div id='E'>EEE</div></div><div id='F'>FFF</div>";
document.body.offsetLeft;
// before
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
var styleInShadow = shadow.getElementById("style-in-shadow");
styleInShadow.parentNode.removeChild(styleInShadow);
document.body.offsetLeft;
// after
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
document.body.removeChild(div);
}
function testInsertScopedStyleIntoDocument()
{
debug("test inserting a scoped style into shadow subtree.");
var div = document.createElement("div");
document.body.appendChild(div);
var shadow = div.webkitCreateShadowRoot();
shadow.innerHTML = "<div><div id='E'>EEE</div></div><div id='F'>FFF</div>";
document.body.offsetLeft;
var style = document.createElement("style");
style.innerHTML = "div { color: red; }";
style.setAttribute("scoped", "scoped");
shadow.getElementById("E").parentNode.appendChild(style);
document.body.offsetLeft;
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
document.body.removeChild(div);
}
function testInsertStyleIntoDocument()
{
debug("test inserting a style into shadow subtree.");
var div = document.createElement("div");
document.body.appendChild(div);
var shadow = div.webkitCreateShadowRoot();
shadow.innerHTML = "<div><div id='E'>EEE</div></div><div id='F'>FFF</div>";
document.body.offsetLeft;
var style = document.createElement("style");
style.innerHTML = "div { color: red; }";
shadow.getElementById("E").parentNode.appendChild(style);
document.body.offsetLeft;
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
document.body.removeChild(div);
}
function testChangeScopedToNotScopedNotInDocument()
{
debug("test re-inserting a style after changing scoped to not scoped offline.");
var div = document.createElement("div");
document.body.appendChild(div);
var shadow = div.webkitCreateShadowRoot();
shadow.innerHTML = "<div><style scoped id='style-in-shadow'>div { color: red; }</style><div id='E'>EEE</div></div><div id='F'>FFF</div>";
document.body.offsetLeft;
var style = shadow.getElementById("style-in-shadow");
style.parentNode.removeChild(style);
style.removeAttribute("scoped");
shadow.getElementById("E").parentNode.appendChild(style);
document.body.offsetLeft;
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
document.body.removeChild(div);
}
function testChangeNotScopedToScopedNotInDocument()
{
debug("test re-inserting a style after changing not scoped to scoped offline.");
var div = document.createElement("div");
document.body.appendChild(div);
var shadow = div.webkitCreateShadowRoot();
shadow.innerHTML = "<div><style id='style-in-shadow'>div { color: red; }</style><div id='E'>EEE</div></div><div id='F'>FFF</div>";
document.body.offsetLeft;
var style = shadow.getElementById("style-in-shadow");
style.parentNode.removeChild(style);
style.setAttribute("scoped", "scoped");
shadow.getElementById("E").parentNode.appendChild(style);
document.body.offsetLeft;
dumpComputedStyle(shadow.getElementById("E"));
dumpComputedStyle(shadow.getElementById("F"));
document.body.removeChild(div);
}
function runTests()
{
testScopedStyleInShadow();
testStyleInShadow();
testStyleInMultipleShadow();
testScopedStyleInNestedShadow();
testStyleInNestedShadow();
testChangeScopedToScoped();
testChangeScopedToNotScoped();
testChangeNotScopedToScoped();
testRemoveScopedStyleFromDocument();
testRemoveStyleFromDocument();
testInsertScopedStyleIntoDocument();
testInsertStyleIntoDocument();
testChangeScopedToNotScopedNotInDocument();
testChangeNotScopedToScopedNotInDocument();
}
</script>
</head>
<body onload="runTests()">
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>