<!
DOCTYPE HTML>
<
html>
<
head>
<
title>CSS Variables Allowed Syntax</
title>
<
link rel=
"author" title=
"L. David Baron" href=
"https://dbaron.org/">
<
link rel=
"author" title=
"Mozilla Corporation" href=
"http://mozilla.com/" />
<
link rel=
"help" href=
"http://www.w3.org/TR/css3-conditional/#the-cssgroupingrule-interface">
<
meta name=
"assert" content=
"requirements in definition of insertRule">
<
script src=
"/resources/testharness.js"></
script>
<
script src=
"/resources/testharnessreport.js"></
script>
<
style id=
"style">
@media print {}
</
style>
<
script id=
"metadata_cache">/*
{
"rule_type": {},
"rule_length": {},
"insert_import_throws": {},
"insert_index_throws1": {},
"insert_index_throws2": {},
"insert_media_succeed": {},
"insert_style_succeed": {},
"insert_bad_media_throw": {},
"insert_empty_throw": {},
"insert_garbage_after_media_throw": {},
"insert_garbage_after_style_throw": {},
"insert_two_media_throw": {},
"insert_style_media_throw": {},
"insert_media_style_throw": {},
"insert_two_style_throw": {},
"insert_retval": {}
}
*/</
script>
</
head>
<
body onload=
"run()">
<
div id=log></
div>
<
div id=
"test"></
div>
<
script>
var sheet = document.getElementById(
"style").sheet;
var grouping_rule = sheet.cssRules[
0];
test(function() {
assert_equals(grouping_rule.type, CSSRule.MEDIA_RULE,
"Rule type of @media rule");
},
"rule_type");
test(function() {
assert_equals(grouping_rule.cssRules.length,
0,
"Starting cssRules.length of @media rule");
},
"rule_length");
test(function() {
assert_throws(
"HIERARCHY_REQUEST_ERR",
function() {
grouping_rule.insertRule(
"@import url(foo.css);",
0);
},
"inserting a disallowed rule should throw HIERARCHY_REQUEST_ERR");
},
"insert_import_throws");
test(function() {
assert_throws(
"INDEX_SIZE_ERR",
function() {
grouping_rule.insertRule(
"p { color: green }",
1);
},
"inserting at a bad index throws INDEX_SIZE_ERR");
},
"insert_index_throws1");
test(function() {
grouping_rule.insertRule(
"p { color: green }",
0);
assert_equals(grouping_rule.cssRules.length,
1,
"Modified cssRules.length of @media rule");
grouping_rule.insertRule(
"p { color: blue }",
1);
assert_equals(grouping_rule.cssRules.length,
2,
"Modified cssRules.length of @media rule");
grouping_rule.insertRule(
"p { color: aqua }",
1);
assert_equals(grouping_rule.cssRules.length,
3,
"Modified cssRules.length of @media rule");
assert_throws(
"INDEX_SIZE_ERR",
function() {
grouping_rule.insertRule(
"p { color: green }",
4);
},
"inserting at a bad index throws INDEX_SIZE_ERR");
assert_equals(grouping_rule.cssRules.length,
3,
"Modified cssRules.length of @media rule");
},
"insert_index_throws2");
test(function() {
while (grouping_rule.cssRules.length >
0) {
grouping_rule.deleteRule(
0);
}
grouping_rule.insertRule(
"@media print {}",
0);
assert_equals(grouping_rule.cssRules.length,
1,
"Modified cssRules.length of @media rule");
assert_equals(grouping_rule.cssRules[
0].type, CSSRule.MEDIA_RULE,
"inserting syntactically correct media rule succeeds");
},
"insert_media_succeed");
test(function() {
while (grouping_rule.cssRules.length >
0) {
grouping_rule.deleteRule(
0);
}
grouping_rule.insertRule(
"p { color: yellow }",
0);
assert_equals(grouping_rule.cssRules.length,
1,
"Modified cssRules.length of @media rule");
assert_equals(grouping_rule.cssRules[
0].type, CSSRule.STYLE_RULE,
"inserting syntactically correct style rule succeeds");
},
"insert_style_succeed");
test(function() {
while (grouping_rule.cssRules.length >
0) {
grouping_rule.deleteRule(
0);
}
assert_throws(
"SYNTAX_ERR",
function() {
grouping_rule.insertRule(
"@media bad syntax;",
0);
},
"inserting syntactically invalid rule throws syntax error");
assert_equals(grouping_rule.cssRules.length,
0,
"Modified cssRules.length of @media rule");
},
"insert_bad_media_throw");
test(function() {
while (grouping_rule.cssRules.length >
0) {
grouping_rule.deleteRule(
0);
}
assert_throws(
"SYNTAX_ERR",
function() {
grouping_rule.insertRule(
"",
0);
},
"inserting empty rule throws syntax error");
assert_equals(grouping_rule.cssRules.length,
0,
"Modified cssRules.length of @media rule");
},
"insert_empty_throw");
test(function() {
while (grouping_rule.cssRules.length >
0) {
grouping_rule.deleteRule(
0);
}
assert_throws(
"SYNTAX_ERR",
function() {
grouping_rule.insertRule(
"@media print {} foo",
0);
},
"inserting rule with garbage afterwards throws syntax error");
assert_equals(grouping_rule.cssRules.length,
0,
"Modified cssRules.length of @media rule");
},
"insert_garbage_after_media_throw");
test(function() {
while (grouping_rule.cssRules.length >
0) {
grouping_rule.deleteRule(
0);
}
assert_throws(
"SYNTAX_ERR",
function() {
grouping_rule.insertRule(
"p { color: yellow } foo",
0);
},
"inserting rule with garbage afterwards throws syntax error");
assert_equals(grouping_rule.cssRules.length,
0,
"Modified cssRules.length of @media rule");
},
"insert_garbage_after_style_throw");
test(function() {
while (grouping_rule.cssRules.length >
0) {
grouping_rule.deleteRule(
0);
}
assert_throws(
"SYNTAX_ERR",
function() {
grouping_rule.insertRule(
"@media print {} @media print {}",
0);
},
"inserting multiple rules throws syntax error");
assert_equals(grouping_rule.cssRules.length,
0,
"Modified cssRules.length of @media rule");
},
"insert_two_media_throw");
test(function() {
while (grouping_rule.cssRules.length >
0) {
grouping_rule.deleteRule(
0);
}
assert_throws(
"SYNTAX_ERR",
function() {
grouping_rule.insertRule(
"p { color: yellow } @media print {}",
0);
},
"inserting multiple rules throws syntax error");
assert_equals(grouping_rule.cssRules.length,
0,
"Modified cssRules.length of @media rule");
},
"insert_style_media_throw");
test(function() {
while (grouping_rule.cssRules.length >
0) {
grouping_rule.deleteRule(
0);
}
assert_throws(
"SYNTAX_ERR",
function() {
grouping_rule.insertRule(
"@media print {} p { color: yellow }",
0);
},
"inserting multiple rules throws syntax error");
assert_equals(grouping_rule.cssRules.length,
0,
"Modified cssRules.length of @media rule");
},
"insert_media_style_throw");
test(function() {
while (grouping_rule.cssRules.length >
0) {
grouping_rule.deleteRule(
0);
}
assert_throws(
"SYNTAX_ERR",
function() {
grouping_rule.insertRule(
"p { color: yellow } p { color: yellow }",
0);
},
"inserting multiple rules throws syntax error");
assert_equals(grouping_rule.cssRules.length,
0,
"Modified cssRules.length of @media rule");
},
"insert_two_style_throw");
test(function() {
while (grouping_rule.cssRules.length >
0) {
grouping_rule.deleteRule(
0);
}
var res = grouping_rule.insertRule(
"p { color: green }",
0);
assert_equals(res,
0,
"return value should be index");
assert_equals(grouping_rule.cssRules.length,
1,
"Modified cssRules.length of @media rule");
res = grouping_rule.insertRule(
"p { color: green }",
0);
assert_equals(res,
0,
"return value should be index");
assert_equals(grouping_rule.cssRules.length,
2,
"Modified cssRules.length of @media rule");
res = grouping_rule.insertRule(
"p { color: green }",
2);
assert_equals(res,
2,
"return value should be index");
assert_equals(grouping_rule.cssRules.length,
3,
"Modified cssRules.length of @media rule");
},
"insert_retval");
</
script>
</
body>
</
html>