<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
target {
    color: black;
}
trigger[style] ~ target {
    color: pink;
}
</style>
</head>
<body>
    <div>
        <!-- With renderer -->
        <trigger></trigger>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <target></target>
    </div>
    <div style="display:none;">
        <!-- Without renderer -->
        <trigger></trigger>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <padding></padding>
        <target></target>
    </div>
</body>
<script>

description('Test that style invalidation through inline-style propagates correctly to siblings when a combinator requires it.');

function testTargetColor(expectedColor) {
    let allTargets = document.querySelectorAll("target");
    for (let i = 0; i < allTargets.length; ++i) {
        shouldBeEqualToString('getComputedStyle(document.querySelectorAll("target")[' + i + ']).color', expectedColor);
    }
}

testTargetColor('rgb(0, 0, 0)');

// Set a style through CSS OM.
function setPropertyWithCSSOM() {
    let allTriggers = document.querySelectorAll("trigger");
    for (let i = 0; i < allTriggers.length; ++i) {
        allTriggers[i].style.cursor = "auto";
    }
}
setPropertyWithCSSOM()
testTargetColor('rgb(255, 192, 203)');

// If we remove the attribute, we should be back to normal.
function removeStyleAttribute() {
    let allTriggers = document.querySelectorAll("trigger");
    for (let i = 0; i < allTriggers.length; ++i) {
        allTriggers[i].removeAttribute("style");
    }
}
removeStyleAttribute();
testTargetColor('rgb(0, 0, 0)');

// Setting the style through a style attribute directly.
function setStyleAttribute() {
    let allTriggers = document.querySelectorAll("trigger");
    for (let i = 0; i < allTriggers.length; ++i) {
        allTriggers[i].setAttribute("style", "alt: \"WebKit!\"");
    }
}
setStyleAttribute();
testTargetColor('rgb(255, 192, 203)');

// Removing the property on the style attribute through CSSOM.
// This leaves an empty style attribute.
function removePropertyWithCSSOM() {
    let allTriggers = document.querySelectorAll("trigger");
    for (let i = 0; i < allTriggers.length; ++i) {
        allTriggers[i].style.removeProperty("alt");
    }
}
removePropertyWithCSSOM()
testTargetColor('rgb(255, 192, 203)');
</script>
<script src="../../resources/js-test-post.js"></script>
</html>
