blob: a3afa858611566e6b1e3bd71c83ea75a675e312a [file] [log] [blame]
<!DOCTYPE html>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<style></style>
<div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div id="found">
<div></div>
</div>
<span></span>
</div>
<div id="placeholderWrapper">
<textarea placeholder="Placeholder text"></textarea>
</div>
<textarea placeholder="Placeholder text"></textarea>
<script>
test(() => {
assert_true(!!window.internals, "Tests require window.internals.");
}, "Test for prerequisites.");
function applyRuleAndReturnAffectedElementCount(ruleString) {
document.body.offsetTop;
document.styleSheets[0].insertRule(ruleString, 0);
var recalcCount = internals.updateStyleAndReturnAffectedElementCount();
document.styleSheets[0].removeRule();
return recalcCount;
}
test(() => {
assert_equals(applyRuleAndReturnAffectedElementCount(
"span { background: green }"), 1,
"Check that only the span is affected.");
}, "A style rule with a type selector should only invalidate elements with that type.");
test(() => {
assert_equals(applyRuleAndReturnAffectedElementCount(
"#notfound div { background: red }"), 0,
"Check that none of divs are recalculated.");
}, "A type selector scoped in an unknown id should not invalidate any elements.");
test(() => {
assert_equals(applyRuleAndReturnAffectedElementCount(
"#found div { background: red }"), 1,
"Check that only one of the divs is recalculated.");
}, "A type selector scoped by a known id should only invalidate descendants of the element with that id.");
test(() => {
assert_equals(applyRuleAndReturnAffectedElementCount(
"::-webkit-input-placeholder { background: green }"), 2,
"Check that only custom pseudo elements are recalculated.");
}, "A style rule with a custom pseudo element should only invalidate custom pseudo elements.");
test(() => {
assert_equals(applyRuleAndReturnAffectedElementCount(
"#notfound ::-webkit-input-placeholder { background: green }"), 0,
"Check that no elements are recalculated.");
}, "A custom pseudo element scoped in an unknown id should not invalidate any elements.");
test(() => {
assert_equals(applyRuleAndReturnAffectedElementCount(
"#placeholderWrapper ::-webkit-input-placeholder { background: green }"), 1,
"Check that only the scoped custom pseudo element is recalculated.");
}, "A custom pseudo element scoped in a known id should only invalidate descendants of the element with that id.");
</script>