blob: 5d155c78b3d3ac11732547f6893b69394e486753 [file] [log] [blame]
<!doctype html>
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
<style>
rightmost .target {
color:rgb(0,0,0);
background-color:rgb(0, 0, 0);
}
rightmost .target:first-child {
color:rgb(1,2,3);
}
rightmost .target:not(:first-child) {
background-color:rgb(4, 5, 6);
}
ancestor .target {
color:rgb(255, 255, 255);
background-color:rgb(255, 255, 255);
}
ancestor .parent:first-child .target {
color:rgb(7, 8, 9);
}
ancestor .parent:not(:first-child) .target {
background-color:rgb(10, 11, 12);
}
</style>
</head>
<body>
<div style="display:none">
<rightmost>
<span id="target1" class="target"></span>
<span id="target2" class="target"></span>
<span id="target3" class="target"></span>
</rightmost>
<ancestor>
<span class="parent">
<span id="target4" class="target"></span>
</span>
<span class="parent">
<span id="target5" class="target"></span>
</span>
<span class="parent">
<span id="target6" class="target"></span>
</span>
</ancestor>
</div>
</body>
<script>
description("When updating the tree, the style needs to be invalidated when the :first-child changes, even if there is no renderer.");
debug("Base case for rightmost element with :first-child");
shouldBeEqualToString('getComputedStyle(document.getElementById("target1")).color', 'rgb(1, 2, 3)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target2")).color', 'rgb(0, 0, 0)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target3")).color', 'rgb(0, 0, 0)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target1")).backgroundColor', 'rgb(0, 0, 0)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target2")).backgroundColor', 'rgb(4, 5, 6)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target3")).backgroundColor', 'rgb(4, 5, 6)');
var target1 = document.getElementById("target1");
var parentElement = target1.parentElement;
parentElement.removeChild(target1);
debug("Removed first child (target1)");
shouldBeEqualToString('getComputedStyle(document.getElementById("target2")).color', 'rgb(1, 2, 3)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target3")).color', 'rgb(0, 0, 0)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target2")).backgroundColor', 'rgb(0, 0, 0)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target3")).backgroundColor', 'rgb(4, 5, 6)');
parentElement.appendChild(target1);
debug("Add back target1 at the end");
shouldBeEqualToString('getComputedStyle(document.getElementById("target2")).color', 'rgb(1, 2, 3)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target3")).color', 'rgb(0, 0, 0)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target1")).color', 'rgb(0, 0, 0)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target2")).backgroundColor', 'rgb(0, 0, 0)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target3")).backgroundColor', 'rgb(4, 5, 6)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target1")).backgroundColor', 'rgb(4, 5, 6)');
debug("Base case for a styled element with an ancestor affected by :first-child");
shouldBeEqualToString('getComputedStyle(document.getElementById("target4")).color', 'rgb(7, 8, 9)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target5")).color', 'rgb(255, 255, 255)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target6")).color', 'rgb(255, 255, 255)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target4")).backgroundColor', 'rgb(255, 255, 255)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target5")).backgroundColor', 'rgb(10, 11, 12)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target6")).backgroundColor', 'rgb(10, 11, 12)');
var target4Parent = document.getElementById("target4").parentElement;
var parentElement = target4Parent.parentElement;
parentElement.removeChild(target4Parent);
debug("Removed first child (target4's parent)");
shouldBeEqualToString('getComputedStyle(document.getElementById("target5")).color', 'rgb(7, 8, 9)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target6")).color', 'rgb(255, 255, 255)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target5")).backgroundColor', 'rgb(255, 255, 255)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target6")).backgroundColor', 'rgb(10, 11, 12)');
debug("Add back target4's parent at the end");
parentElement.appendChild(target4Parent);
shouldBeEqualToString('getComputedStyle(document.getElementById("target5")).color', 'rgb(7, 8, 9)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target6")).color', 'rgb(255, 255, 255)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target4")).color', 'rgb(255, 255, 255)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target5")).backgroundColor', 'rgb(255, 255, 255)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target6")).backgroundColor', 'rgb(10, 11, 12)');
shouldBeEqualToString('getComputedStyle(document.getElementById("target4")).backgroundColor', 'rgb(10, 11, 12)');
</script>
<script src="../../../resources/js-test-post.js"></script>
</html>