<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
#test { color: blue; }
@media all {
    #test { color: blue; }
}
</style>
</head>
<body>
<div id=test>
</div>
<script>

description("Test that CSSStyleRules returned by getMatchedCSSRules can't be mutated");

var testDiv = document.getElementById('test');
var rules = getMatchedCSSRules(testDiv);

function tryMutateSelector(index) {
    originalText = rules[index].selectorText;
    rules[index].selectorText = "#mutated";
    shouldBe("rules["+index+"].selectorText", "originalText");
}

function tryMutateCSSText(index) {
    originalText = rules[index].style.cssText;
    rules[index].style.cssText = "color: red";
    shouldBe("rules["+index+"].style.cssText", "originalText");
}

function tryMutateProperty(index) {
    originalText = rules[index].style.color;
    rules[index].style.color = "green";
    shouldBe("rules["+index+"].style.color", "originalText");
}

function tryMutateProperty2(index) {
    originalText = rules[index].style.getPropertyValue("color");
    rules[index].style.setProperty("color", "white");
    shouldBe("rules["+index+"].style.getPropertyValue('color')", "originalText");
}

function tryRemoveProperty(index) {
    originalText = rules[index].style.color;
    rules[index].style.removeProperty("color");
    shouldBe("rules["+index+"].style.color", "originalText");
}

shouldBe("rules.length", "2");
tryMutateSelector(0);
tryMutateSelector(1);
tryMutateCSSText(0);
tryMutateCSSText(1);
tryMutateProperty(0);
tryMutateProperty(1);
tryMutateProperty2(0);
tryMutateProperty2(1);
tryRemoveProperty(0);
tryRemoveProperty(1);

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