blob: 84103eb32a301504e87f493d24cab7d6e0821abf [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
.test {
position: relative;
}
.foo {
font-size: 10px;
}
.bar {
}
</style>
</head>
<body>
<script>
function setStyleAndForceLayout(changeFunc)
{
if (window.internals) {
internals.updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks();
internals.startTrackingStyleRecalcs();
}
changeFunc();
var numStyleRecalcs = 0;
if (window.internals) {
internals.updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks();
numStyleRecalcs = internals.styleRecalcCount();
}
return numStyleRecalcs;
}
description("Test to count the number of recalcStyle calls on inline style and class changes.")
var testContainer = document.createElement("div");
testContainer.className = 'test';
document.body.appendChild(testContainer);
var style = testContainer.style;
var numStyleRecalcs = setStyleAndForceLayout(function() { style.height = "10px"; });
shouldBe("numStyleRecalcs", "1");
numStyleRecalcs = setStyleAndForceLayout(function() { style.height = "20px"; });
shouldBe("numStyleRecalcs", "1");
numStyleRecalcs = setStyleAndForceLayout(function() { style.height = "20px"; });
shouldBe("numStyleRecalcs", "0");
numStyleRecalcs = setStyleAndForceLayout(function() { style.backgroundPosition = "10px 10%"; });
shouldBe("numStyleRecalcs", "1");
numStyleRecalcs = setStyleAndForceLayout(function() { style.backgroundPosition = "10px 10%"; });
shouldBe("numStyleRecalcs", "0");
numStyleRecalcs = setStyleAndForceLayout(function() { style.backgroundColor = "red"; });
shouldBe("numStyleRecalcs", "1");
numStyleRecalcs = setStyleAndForceLayout(function() { style.backgroundColor = "red"; });
shouldBe("numStyleRecalcs", "0");
numStyleRecalcs = setStyleAndForceLayout(function() { style.transform = "translate(10px, 10px) rotate(10deg)"; });
shouldBe("numStyleRecalcs", "1");
numStyleRecalcs = setStyleAndForceLayout(function() { style.transform = "translate(10px, 10px) rotate(10deg)"; });
shouldBe("numStyleRecalcs", "0");
numStyleRecalcs = setStyleAndForceLayout(function() { testContainer.classList.add('foo'); });
shouldBe("numStyleRecalcs", "1");
numStyleRecalcs = setStyleAndForceLayout(function() { testContainer.classList.add('foo'); });
shouldBe("numStyleRecalcs", "0");
numStyleRecalcs = setStyleAndForceLayout(function() { testContainer.classList.add('bar'); });
shouldBe("numStyleRecalcs", "0");
document.body.removeChild(testContainer);
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>