CSSGroupingRule-insertRule.html (4087B)
1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>CSSOM - CSSGroupingRule - insertRule</title> 6 <link rel="help" href="https://drafts.csswg.org/cssom/#the-cssgroupingrule-interface"> 7 <script src="/resources/testharness.js"></script> 8 <script src="/resources/testharnessreport.js"></script> 9 <script> 10 function create(t) { 11 var style = document.createElement('style'); 12 style.appendChild(document.createTextNode('@media all { * {} }')); 13 document.head.appendChild(style); 14 t.add_cleanup(function() { 15 document.head.removeChild(style); 16 }); 17 18 assert_true(!!style.sheet, 'setup - sheet defined'); 19 assert_equals( 20 style.sheet.cssRules.length, 1, 'setup - grouping rule created' 21 ); 22 assert_equals( 23 style.sheet.cssRules[0].cssRules.length, 1, 'setup - rule created' 24 ); 25 return style.sheet.cssRules[0]; 26 } 27 28 test(function (t) { 29 var groupingRule = create(t); 30 var first = groupingRule.cssRules[0].cssText; 31 var result; 32 33 result = groupingRule.insertRule('.foo {}', 0); 34 35 assert_equals(groupingRule.cssRules.length, 2); 36 assert_not_equals(groupingRule.cssRules[0].cssText, first); 37 assert_equals(groupingRule.cssRules[1].cssText, first); 38 assert_equals(result, 0, 'result'); 39 }, 'index before first'); 40 41 test(function (t) { 42 var groupingRule = create(t); 43 var first = groupingRule.cssRules[0].cssText; 44 var result; 45 46 result = groupingRule.insertRule('.foo {}', 1); 47 48 assert_equals(groupingRule.cssRules.length, 2); 49 assert_equals(groupingRule.cssRules[0].cssText, first); 50 assert_not_equals(groupingRule.cssRules[1].cssText, first); 51 assert_equals(result, 1); 52 }, 'index after final'); 53 54 test(function (t) { 55 var groupingRule = create(t); 56 var first = groupingRule.cssRules[0].cssText; 57 var result; 58 59 result = groupingRule.insertRule('.foo {}'); 60 61 assert_equals(groupingRule.cssRules.length, 2); 62 assert_not_equals(groupingRule.cssRules[0].cssText, first); 63 assert_equals(groupingRule.cssRules[1].cssText, first); 64 assert_equals(result, 0); 65 }, 'index not specified'); 66 67 test(function (t) { 68 var groupingRule = create(t); 69 var first = groupingRule.cssRules[0].cssText; 70 71 assert_throws_dom('IndexSizeError', function() { 72 // The syntax error is intentional; it verifies that the insertion 73 // index is validated prior to the CSS text. 74 groupingRule.insertRule('???', 2); 75 }); 76 77 assert_equals(groupingRule.cssRules.length, 1); 78 assert_equals(groupingRule.cssRules[0].cssText, first); 79 }, 'index exceeds length'); 80 81 test(function (t) { 82 var groupingRule = create(t); 83 var first = groupingRule.cssRules[0].cssText; 84 85 assert_throws_dom('SyntaxError', function() { 86 groupingRule.insertRule('???', 0); 87 }); 88 89 assert_equals(groupingRule.cssRules.length, 1); 90 assert_equals(groupingRule.cssRules[0].cssText, first); 91 }, 'CSS parsing error'); 92 93 test(function (t) { 94 var groupingRule = create(t); 95 var first = groupingRule.cssRules[0].cssText; 96 97 assert_throws_dom('HierarchyRequestError', function() { 98 groupingRule.insertRule('@import url("foo.css");', 0); 99 }); 100 101 assert_equals(groupingRule.cssRules.length, 1); 102 assert_equals(groupingRule.cssRules[0].cssText, first); 103 }, 'constraint violation'); 104 105 test(function (t) { 106 var groupingRule = create(t); 107 var first = groupingRule.cssRules[0].cssText; 108 109 assert_throws_dom('HierarchyRequestError', function() { 110 groupingRule.insertRule('@namespace url(http://www.w3.org/1999/xhtml);', 0); 111 }); 112 113 assert_equals(groupingRule.cssRules.length, 1); 114 assert_equals(groupingRule.cssRules[0].cssText, first); 115 }, 'disallowed namespace rule'); 116 </script> 117 </head> 118 </html>