File: test_parseStyleSheet_nested.html

package info (click to toggle)
firefox 141.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,550,616 kB
  • sloc: cpp: 7,426,508; javascript: 6,367,238; ansic: 3,707,354; python: 1,368,984; xml: 623,983; asm: 426,916; java: 184,324; sh: 64,488; makefile: 19,203; objc: 13,059; perl: 12,955; yacc: 4,583; cs: 3,846; pascal: 3,352; lex: 1,720; ruby: 1,071; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (79 lines) | stat: -rw-r--r-- 2,224 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<!DOCTYPE HTML>
<html>
  <head>
    <title>Test InspectorUtils.parseStyleSheet with nested rules</title>
    <script src="/tests/SimpleTest/SimpleTest.js"></script>
    <style>
      h1 {
        .mySpan {
          background: gold;
          &.mySpan {
            color: red;
          }
        }
      }
    </style>
  </head>
  <body>
    <h1>Hello<span class="mySpan">world</span>
    <script>
      add_task(function() {
        info("Flush layout");
        // This is important to reproduce the original issue
        document.documentElement.getBoundingClientRect();

        const InspectorUtils = SpecialPowers.InspectorUtils;
        const sheet = document.styleSheets[0];
        const spanEl = document.querySelector(".mySpan");

        is(
          sheet.cssRules[0].cssRules[0].cssRules[0].cssText,
          `&.mySpan { color: red; }`,
          "Nested rule has expected initial text"
        );

        is(
          InspectorUtils.getMatchingCSSRules(spanEl).length,
          2,
          "getMatchingCSSRules returned 2 rules for .mySpan"
        );

        info("Modify stylesheet using InspectorUtils.parseStyleSheet");
        InspectorUtils.parseStyleSheet(
          sheet,
          `h1 {
            .mySpan {
              background: gold;
              &.mySpan {
                color: black;
              }
            }
          }`
        );

        is(
          sheet.cssRules[0].cssRules[0].cssRules[0].cssText,
          `&.mySpan { color: black; }`,
          "Nested rule has expected text after updating the stylesheet"
        );

        info("Flush layout");
        // This is important to reproduce the original issue
        document.documentElement.getBoundingClientRect();

        is(
          getComputedStyle(spanEl).color,
          "rgb(0, 0, 0)",
          "the color of the span element was properly updated"
        );
        const rules = InspectorUtils.getMatchingCSSRules(spanEl);
        is(
          rules.length,
          2,
          "getMatchingCSSRules still returned 2 rules for .mySpan after stylesheet was updated"
        );
        is(rules[1].style.color, "black", "rule was properly updated");
      });
    </script>
  </body>
</html>