<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
* {
    color: black;
}
[CamelCase] {
    color: pink;
}
</style>
</head>
<body>
    <div>
        <!-- With renderer -->
        <target></target>
    </div>
    <div style="display:none;">
        <!-- Without renderer -->
        <target></target>
    </div>
</body>
<script><![CDATA[
// It is okay to increase the amount of invalidation in this test for correctness if necessary.
description('Test that we only invalidate the style when changing an attribute referenced by a stylesheet. This test requires the internals object to work properly.');

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

function setAttribute(name, value) {
    var allTargets = document.querySelectorAll("target");
    allTargets[0].setAttribute(name, value);
    allTargets[1].setAttribute(name, value);
}

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

function getStyle() {
    var allTargets = document.querySelectorAll("target");
    getComputedStyle(allTargets[0]).color;
    getComputedStyle(allTargets[1]).color;
}

// Force a layout to ensure we don't have dirty styles.
var offsetTop = document.documentElement.offsetTop;
shouldNeedStyleRecalc(false);

debug("Changing the attribute 'foo', it is not referenced by any stylesheet and should not cause any invalidation.");
setAttribute("foo", "bar");
shouldNeedStyleRecalc(false);

debug("Changing the attribute 'CamelCase'. It is used by the stylesheet and should cause the target to be invalidated.");
setAttribute("CamelCase", "");
shouldNeedStyleRecalc(true);

debug("Getting the computed style should for the style to be resolved.");
getStyle();
shouldNeedStyleRecalc(false);

debug("Removing the attribute should also invalidate the style.");
removeAttribute("CamelCase");
shouldNeedStyleRecalc(true);

debug("Getting the computed style should for the style to be resolved.");
getStyle();
shouldNeedStyleRecalc(false)

debug("Changing the attribute 'camelcase'. Since XML attributes are case sensitive, this does not invalidate the style since it is a different attribute.");
setAttribute("camelcase", "");
shouldNeedStyleRecalc(false);

debug("Changing the attribute 'CAMELCASE'. Same deal, this is a different attribute.");
setAttribute("CAMELCASE", "");
shouldNeedStyleRecalc(false);
]]></script>
<script src="../../resources/js-test-post.js"></script>
</html>
