<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>CSSMediaRule functions test</title>
<style id="style1">
@media all { .test { color: green; } }
</style>
<script>
function log(message) {
var item = document.createElement("li");
item.appendChild(document.createTextNode(message));
document.getElementById("console").appendChild(item);
}
function test() {
if (window.testRunner)
testRunner.dumpAsText();
var styleSheet = document.getElementById('style1').sheet;
var mediaRule = styleSheet.cssRules[0];
// CSSMediaRule.insertRule(rule, index) tests
// Test that insertRule works.
try {
var index = mediaRule.insertRule(".test2 { color: blue; }", mediaRule.cssRules.length);
log("PASS: No exception raised! New rule inserted successfully.");
} catch (e) {
log("FAIL: no exception should have been thrown! Type of thrown exception was: " + e);
}
// Test that insertRule raises an exception for indexes greater than the length of the list.
try {
var index = mediaRule.insertRule("p {color: red; }", mediaRule.cssRules.length + 1);
log("FAIL: an exception should have been thrown!");
} catch (e) {
if (e.code == 1)
log("PASS: Exception raised successfully. Type: " + e);
else
log("FAIL: wrong exception type thrown. " + e + " was thrown, should of been 'Error: IndexSizeError: DOM Exception 1'.");
}
// Test that insertRule raises an exception for indexes less than 0.
try {
var index = mediaRule.insertRule("p {color: red; }", -1);
log("FAIL: an exception should have been thrown!");
} catch (e) {
if (e.code == 1)
log("PASS: Exception raised successfully. Type: " + e);
else
log("FAIL: wrong exception type thrown. " + e + " was thrown, should of been 'Error: IndexSizeError: DOM Exception 1'.");
}
// Test that insertRule raises an exception for malformed rules.
try {
var index = mediaRule.insertRule("badbeef }{", mediaRule.cssRules.length);
log("FAIL: an exception should have been thrown!");
} catch (e) {
if (e.code == 12)
log("PASS: Exception raised successfully. Type: " + e);
else
log("FAIL: wrong exception type thrown. " + e + " was thrown, should of been Error: SyntaxError: DOM Exception 12!");
}
// Test that insertRule raises an exception for illegally placed rules.
try {
// NamespaceRule illegal inside a MediaRule.
var index = mediaRule.insertRule("@namespace mynamespace url(http://www.w3.org/1999/xhtml);", mediaRule.cssRules.length);
log("FAIL: an exception should have been thrown!");
} catch (e) {
if (e.code == 3)
log("PASS: Exception raised successfully. Type: " + e);
else
log("FAIL: wrong exception type thrown. " + e.code + " was thrown, should of been Error: HierarchyRequestError: DOM Exception 3!");
}
try {
// ImportRule illegal inside a MediaRule.
var index = mediaRule.insertRule("@import url(sheet.css);", mediaRule.cssRules.length);
log("FAIL: an exception should have been thrown!");
} catch (e) {
if (e.code == 3)
log("PASS: Exception raised successfully. Type: " + e);
else
log("FAIL: wrong exception type thrown. " + e.code + " was thrown, should of been Error: HierarchyRequestError: DOM Exception 3!");
}
try {
// CharsetRule illegal inside a MediaRule.
var index = mediaRule.insertRule("@charset \"ISO-8859-1\";", mediaRule.cssRules.length);
log("FAIL: an exception should have been thrown!");
} catch (e) {
// FIXME: this should throw a HIERARCHY_REQUEST_ERR, not a SYNTAX_ERR.
if (e.code == 12)
log("PASS: Exception raised successfully. Type: " + e);
else
log("FAIL: wrong exception type thrown. " + e + " was thrown, should of been Error: SyntaxError: DOM Exception 12!");
}
try {
// Nested MediaRule illegal inside a MediaRule.
var index = mediaRule.insertRule("@media screen { p { color: red; } };", mediaRule.cssRules.length);
log("FAIL: an exception should have been thrown!");
} catch (e) {
// FIXME: this should throw a HIERARCHY_REQUEST_ERR, not a SYNTAX_ERR.
if (e.code == 12)
log("PASS: Exception raised successfully. Type: " + e);
else
log("FAIL: wrong exception type thrown. " + e + " was thrown, should of been Error: SyntaxError: DOM Exception 12!");
}
// CSSMediaRule.deleteRule(index) tests
// Test that deleteRule works.
try {
mediaRule.deleteRule(mediaRule.cssRules.length - 1);
log("PASS: No exception raised! Rule at position 'length - 1' deleted successfully.");
} catch (e) {
log("FAIL: no exception should have been thrown! Type of thrown exception was: " + e);
}
// Test that deleteRule raises an exception for specified indexes not corresponding to a
// rule in the media rule list.
try {
mediaRule.deleteRule(mediaRule.cssRules.length);
log("FAIL: an exception should have been thrown!");
} catch (e) {
if (e.code == 1)
log("PASS: Exception raised successfully. Type: " + e);
else
log("FAIL: wrong exception type thrown. " + e + " was thrown, should of been 'Error: IndexSizeError: DOM Exception 1'.");
}
try {
mediaRule.deleteRule(-1);
log("FAIL: an exception should have been thrown!");
} catch (e) {
if (e.code == 1)
log("PASS: Exception raised successfully. Type: " + e);
else
log("FAIL: wrong exception type thrown. " + e + " was thrown, should of been 'Error: IndexSizeError: DOM Exception 1'.");
}
}
</script>
</head>
<body onload="test();">
<p>This tests the insertRule(rule, index) and deleteRule(index) methods of the CSSMediaRule interface. It has passed if
all of the output below begins with the text "PASS".
<ol id="console">
</ol>
</body>
</html>