blob: b89b0e0b6ba4dd3c7df0cf02c0fab3286fcfae0f [file] [log] [blame]
<!DOCTYPE html>
<script src="../../../resources/js-test.js"></script>
<style>
div { width: 100px }
#outer1on #inner1on { width: 200px }
#outer2on { width: 150px }
#outer3on#nomatch1 { width: 300px; }
</style>
<div id="outer">
<div id="mid">
<div id="inner1on">
<div id="innerChild">
</div>
</div>
<div id="inner2">
</div>
</div>
</div>
<div id="outer2">
<div id="inner3"></div>
</div>
<div id="outer3">
<div class="nomatch"></div>
<div class="outer3"></div>
</div>
<script>
description("Test that adding and removing ids only updates the elements that are affected.");
function insertStyleSheet(css)
{
var styleElement = document.createElement("style");
styleElement.textContent = css;
(document.head || document.documentElement).appendChild(styleElement);
}
var outer = document.getElementById('outer');
var inner = document.getElementById('inner1on');
var outer2 = document.getElementById('outer2');
var outer3 = document.getElementById('outer3');
// Style recalc should happen on "inner" and "outer", but not "inner2" or "mid".
outer.offsetTop;
outer.id = 'outer1on';
shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "1");
shouldBe("getComputedStyle(inner).width", '"200px"');
// Style recalc should happen on "inner", but not "innerChild".
inner.offsetTop;
inner.id = '';
shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "1");
shouldBe("getComputedStyle(inner).width", '"100px"');
// Style recalc should happen on "outer2", but not "inner3".
outer2.offsetTop;
outer2.id = 'outer2on';
shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "1");
shouldBe("getComputedStyle(outer2).width", '"150px"');
// Style recalc should happen on "outer3", but none of its children.
outer3.offsetTop;
outer3.id = 'outer3on';
shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "1");
</script>