tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>