<!DOCTYPE html>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<div id="outer">
    <div id="inner">
        <div id="innermost">
        </div>
    </div>
</div>
<script>
test(function(t)
{
    if (!window.internals)
        assert_unreached('This test requires window.internals.');

    outer.style.fontSize = "16px";
    innermost.style.fontSize = "1em";

    inner.offsetTop; // Force recalc.
    assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 0);

    assert_equals(getComputedStyle(outer).fontSize, "16px");
    assert_equals(getComputedStyle(inner).fontSize, "16px");
    assert_equals(getComputedStyle(innermost).fontSize, "16px");

    inner.offsetTop; // Force recalc.
    outer.style.fontSize = '10px';
    assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 3);

    assert_equals(getComputedStyle(outer).fontSize, "10px");
    assert_equals(getComputedStyle(inner).fontSize, "10px");
    assert_equals(getComputedStyle(innermost).fontSize, "10px");

    inner.offsetTop; // Force recalc.
    inner.style.fontSize = '16px';
    assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 2);

    assert_equals(getComputedStyle(outer).fontSize, "10px");
    assert_equals(getComputedStyle(inner).fontSize, "16px");
    assert_equals(getComputedStyle(innermost).fontSize, "16px");
}, "Changing font-size (a non-independent inherited property) in a way that results in an identical ComputedStyle still triggers a style recalc for its children.");

test(function(t)
{
    if (!window.internals)
        assert_unreached('This test requires window.internals.');

    outer.style.fontWeight = "normal";
    innermost.style.fontWeight = "lighter";

    inner.offsetTop; // Force recalc.
    assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 0);

    assert_equals(getComputedStyle(outer).fontWeight, "normal");
    assert_equals(getComputedStyle(inner).fontWeight, "normal");
    assert_equals(getComputedStyle(innermost).fontWeight, "100");

    inner.offsetTop; // Force recalc.
    inner.style.fontWeight = 'bolder';
    assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 2);

    assert_equals(getComputedStyle(outer).fontWeight, "normal");
    assert_equals(getComputedStyle(inner).fontWeight, "bold");
    assert_equals(getComputedStyle(innermost).fontWeight, "normal");

    inner.offsetTop; // Force recalc.
    outer.style.fontWeight = 'bold';
    assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 3);

    assert_equals(getComputedStyle(outer).fontWeight, "bold");
    assert_equals(getComputedStyle(inner).fontWeight, "900");
    assert_equals(getComputedStyle(innermost).fontWeight, "bold");
}, "Changing font-weight (a non-independent inherited property) in a way that results in an identical ComputedStyle still triggers a style recalc for its children.");
</script>
