blob: ed739a220e406f81e06e90e068efe0827036ceef [file] [log] [blame]
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<div></div>
<div class=styled><div></div></div>
<div><div class=styled></div></div>
<div id=host></div>
<script>
var host = document.getElementById('host');
var shadow = host.attachShadow({mode: 'closed'});
shadow.innerHTML = `
<div></div>
<div class=styled><div></div></div>
<div><div class=styled></div></div>
`;
function testInvalidation(scope, cssText, shouldInvalidate, name)
{
test(() => {
internals.updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks();
var style = document.createElement("style");
style.textContent = cssText;
scope.appendChild(style);
var styledDiv = scope.querySelectorAll("div.styled");
for (var div of styledDiv)
assert_equals(internals.styleChangeType(div), shouldInvalidate ? "InlineStyleChange" : "NoStyleChange");
var notStyledDiv = scope.querySelectorAll("div:not(.styled)");
for (var div of notStyledDiv)
assert_equals(internals.styleChangeType(div), "NoStyleChange");
}, name);
}
testInvalidation(document.body, ".styled { color: red }", true, "Test that adding stylesheet with matching selector invalidates in document scope");
testInvalidation(document.body, ".nothere { color: red }", false, "Test that adding stylesheet without matching selector does not invalidate in document scope");
testInvalidation(shadow, ".styled { color: red }", true, "Test that adding stylesheet with matching selector invalidates in shadow scope");
testInvalidation(shadow, ".nothere { color: red }", false, "Test that adding stylesheet without matching selector does not invalidate in shadow scope");
</script>