<!doctype html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
* {
    background-color: white;
}
target:read-only {
    background-color: red;
}
target:read-write {
    background-color: lime;
}
</style>
</head>
<body>
    <div style="display:none">
        <target></target>
        <target id="target"></target>
        <target></target>
    </div>
</body>
<script>
description('Test that the style is invalidated and updated properly when properties causing :read-only/:read-write change.');

function testStyle(expectReadOnly)
{
    shouldBeEqualToString('getComputedStyle(document.getElementById("target")).backgroundColor', expectReadOnly ? 'rgb(255, 0, 0)' : 'rgb(0, 255, 0)');
}

debug("Initially, the target should be read only.");
testStyle(true);

debug("Changing content editable via the API.");
var target = document.getElementById('target');
target.contentEditable = "true";
testStyle(false);

target.contentEditable = "false";
testStyle(true);

target.contentEditable = "plaintext-only";
testStyle(false);

target.contentEditable = false;
testStyle(true);

debug("Changing content editable via the attributes.");
target.setAttribute("CoNtEnTeDiTaBlE", "true");
testStyle(false);

target.setAttribute("CoNtEnTeDiTaBlE", "false");
testStyle(true);

target.setAttribute("CoNtEnTeDiTaBlE", "");
testStyle(false);

target.removeAttribute("contenteditable");
testStyle(true);

debug("Changing content editable on the parent via the API.");
var parent = target.parentElement;
parent.contentEditable = "true";
testStyle(false);

parent.contentEditable = "false";
testStyle(true);

parent.contentEditable = "plaintext-only";
testStyle(false);

parent.contentEditable = false;
testStyle(true);

debug("Changing content editable via the attributes.");
parent.setAttribute("CoNtEnTeDiTaBlE", "true");
testStyle(false);

parent.setAttribute("CoNtEnTeDiTaBlE", "false");
testStyle(true);

parent.setAttribute("CoNtEnTeDiTaBlE", "");
testStyle(false);

parent.removeAttribute("contenteditable");
testStyle(true);

debug("Moving the document to design mode.");
document.designMode = "on";
testStyle(false);

debug("Setting the target's contenteditable to true should not change a thing now.");
target.contentEditable = "true";
testStyle(false);

debug("Setting the target's contenteditable to false should still be respected in design mode.");
target.contentEditable = "false";
testStyle(true);

debug("Let's remove the contenteditable attribute on the target, we should still be read-write because of design mode.");
target.removeAttribute("contenteditable");
testStyle(false);

debug("Disabling design mode.");
document.designMode = "off";
testStyle(true);

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