blob: 746541f57de0907502a7379b32da7aab1e3aec2e [file] [log] [blame]
benjamin@webkit.orgbe7315e2015-09-09 23:40:55 +00001<!DOCTYPE html>
2<html>
3<head>
4<script src="../../resources/js-test-pre.js"></script>
5<style>
6* {
7 color: black;
8}
9:checked ~ target {
10 color: rgb(0, 1, 2);
11}
12</style>
13</head>
14<body>
15 <div>
16 <!-- With renderer -->
17 <input class="activator" type="checkbox">
18 <padding></padding>
19 <padding></padding>
20 <padding></padding>
21 <padding></padding>
22 <padding></padding>
23 <padding></padding>
24 <padding></padding>
25 <padding></padding>
26 <padding></padding>
27 <target></target>
28 </div>
29 <div style="display:none;">
30 <!-- Without renderer -->
31 <input class="activator" type="radio">
32 <padding></padding>
33 <padding></padding>
34 <padding></padding>
35 <padding></padding>
36 <padding></padding>
37 <padding></padding>
38 <padding></padding>
39 <padding></padding>
40 <padding></padding>
41 <target></target>
42 </div>
43</body>
44<script>
45
46description('Test the style invalidation of elements affected by an indirect adjacent.');
47
48function shouldNeedStyleRecalc(expected) {
49 var testFunction = expected ? shouldBeTrue : shouldBeFalse;
antti@apple.com15dd6742018-02-15 01:27:52 +000050 testFunction("window.internals.nodeNeedsStyleRecalc(document.querySelectorAll(\"target\")[0])");
51 testFunction("window.internals.nodeNeedsStyleRecalc(document.querySelectorAll(\"target\")[1])");
benjamin@webkit.orgbe7315e2015-09-09 23:40:55 +000052}
53
54function setId(name) {
55 var allTargets = document.querySelectorAll("target");
56 allTargets[0].id = name;
57 allTargets[1].id = name;
58}
59
60function checkStyle(expectedColor) {
61 var allTargets = document.querySelectorAll("target");
62 shouldBeEqualToString('getComputedStyle(document.querySelectorAll("target")[0]).color', expectedColor);
63 shouldBeEqualToString('getComputedStyle(document.querySelectorAll("target")[1]).color', expectedColor);
64}
65// Force a layout to ensure we don't have dirty styles.
66var offsetTop = document.documentElement.offsetTop;
67
68// Initial state.
69shouldNeedStyleRecalc(false);
70checkStyle("rgb(0, 0, 0)");
71
72// Check the input fields.
73var allActivators = document.querySelectorAll("input.activator:matches([type=checkbox], [type=radio])");
74for (let i = 0; i < allActivators.length; ++i) {
75 allActivators[i].checked = true;
76}
77shouldNeedStyleRecalc(true);
78checkStyle("rgb(0, 1, 2)");
79shouldNeedStyleRecalc(false);
80
81// Uncheck the input fields.
82var allActivators = document.querySelectorAll("input.activator:matches([type=checkbox], [type=radio])");
83for (let i = 0; i < allActivators.length; ++i) {
84 allActivators[i].checked = false;
85}
86shouldNeedStyleRecalc(true);
87checkStyle("rgb(0, 0, 0)");
88shouldNeedStyleRecalc(false);
89
90</script>
91<script src="../../resources/js-test-post.js"></script>
92</html>