<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
* {
    color: black;
}
:checked:matches(*, :last-of-type, *) ~ target {
    color: rgb(0, 1, 2);
}
</style>
</head>
<body>
    <div>
        <!-- With renderer -->
        <input class="activator" type="checkbox">
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <target></target>
    </div>
    <div style="display:none;">
        <!-- Without renderer -->
        <input class="activator" type="radio">
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <target></target>
    </div>
</body>
<script>

description('Test the style invalidation of elements affected by an indirect adjacent.');

function shouldNeedStyleRecalc(expected) {
    var testFunction = expected ? shouldBeTrue : shouldBeFalse;
    testFunction("window.internals.nodeNeedsStyleRecalc(document.querySelectorAll(\".activator\")[0])");
    testFunction("window.internals.nodeNeedsStyleRecalc(document.querySelectorAll(\".activator\")[1])");
    testFunction("window.internals.nodeNeedsStyleRecalc(document.querySelectorAll(\"target\")[0])");
    testFunction("window.internals.nodeNeedsStyleRecalc(document.querySelectorAll(\"target\")[1])");
}

function setId(name) {
    var allTargets = document.querySelectorAll("target");
    allTargets[0].id = name;
    allTargets[1].id = name;
}

function checkStyle(expectedColor) {
    var allTargets = document.querySelectorAll("target");
    shouldBeEqualToString('getComputedStyle(document.querySelectorAll("target")[0]).color', expectedColor);
    shouldBeEqualToString('getComputedStyle(document.querySelectorAll("target")[1]).color', expectedColor);
}
// Force a layout to ensure we don't have dirty styles.
var offsetTop = document.documentElement.offsetTop;

// Initial state.
shouldNeedStyleRecalc(false);
checkStyle("rgb(0, 0, 0)");

// Check the input fields.
var allActivators = document.querySelectorAll("input.activator:matches([type=checkbox], [type=radio])");
for (let i = 0; i < allActivators.length; ++i) {
    allActivators[i].checked = true;
}
shouldNeedStyleRecalc(true);
checkStyle("rgb(0, 1, 2)");
shouldNeedStyleRecalc(false);

// Uncheck the input fields.
var allActivators = document.querySelectorAll("input.activator:matches([type=checkbox], [type=radio])");
for (let i = 0; i < allActivators.length; ++i) {
    allActivators[i].checked = false;
}
shouldNeedStyleRecalc(true);
checkStyle("rgb(0, 0, 0)");
shouldNeedStyleRecalc(false);

</script>
<script src="../../resources/js-test-post.js"></script>
</html>
