@@ -75,5 +75,91 @@ describe('HTMLStyleElement', () => {
75
75
expect ( element . sheet . cssRules [ 1 ] . cssText ) . toBe ( 'body { background-color: red; }' ) ;
76
76
expect ( element . sheet . cssRules [ 2 ] . cssText ) . toBe ( 'div { background-color: green; }' ) ;
77
77
} ) ;
78
+
79
+ it ( 'Updates rules when appending a text node.' , ( ) => {
80
+ document . head . appendChild ( element ) ;
81
+
82
+ expect ( element . sheet . cssRules . length ) . toBe ( 0 ) ;
83
+
84
+ const textNode = document . createTextNode (
85
+ 'body { background-color: red }\ndiv { background-color: green }'
86
+ ) ;
87
+
88
+ element . appendChild ( textNode ) ;
89
+
90
+ expect ( element . sheet . cssRules [ 0 ] . cssText ) . toBe ( 'body { background-color: red; }' ) ;
91
+ expect ( element . sheet . cssRules [ 1 ] . cssText ) . toBe ( 'div { background-color: green; }' ) ;
92
+ } ) ;
93
+
94
+ it ( 'Updates rules when removing a text node.' , ( ) => {
95
+ document . head . appendChild ( element ) ;
96
+
97
+ const textNode = document . createTextNode (
98
+ 'body { background-color: red }\ndiv { background-color: green }'
99
+ ) ;
100
+
101
+ element . appendChild ( textNode ) ;
102
+
103
+ expect ( element . sheet . cssRules . length ) . toBe ( 2 ) ;
104
+
105
+ expect ( element . sheet . cssRules [ 0 ] . cssText ) . toBe ( 'body { background-color: red; }' ) ;
106
+ expect ( element . sheet . cssRules [ 1 ] . cssText ) . toBe ( 'div { background-color: green; }' ) ;
107
+
108
+ element . removeChild ( textNode ) ;
109
+
110
+ expect ( element . sheet . cssRules . length ) . toBe ( 0 ) ;
111
+ } ) ;
112
+
113
+ it ( 'Updates rules when inserting a text node.' , ( ) => {
114
+ document . head . appendChild ( element ) ;
115
+
116
+ const textNode = document . createTextNode (
117
+ 'body { background-color: red }\ndiv { background-color: green }'
118
+ ) ;
119
+
120
+ element . appendChild ( textNode ) ;
121
+
122
+ expect ( element . sheet . cssRules . length ) . toBe ( 2 ) ;
123
+
124
+ expect ( element . sheet . cssRules [ 0 ] . cssText ) . toBe ( 'body { background-color: red; }' ) ;
125
+ expect ( element . sheet . cssRules [ 1 ] . cssText ) . toBe ( 'div { background-color: green; }' ) ;
126
+
127
+ const textNode2 = document . createTextNode ( 'html { background-color: blue }' ) ;
128
+
129
+ element . insertBefore ( textNode2 , textNode ) ;
130
+
131
+ expect ( element . sheet . cssRules . length ) . toBe ( 3 ) ;
132
+
133
+ expect ( element . sheet . cssRules [ 0 ] . cssText ) . toBe ( 'html { background-color: blue; }' ) ;
134
+ expect ( element . sheet . cssRules [ 1 ] . cssText ) . toBe ( 'body { background-color: red; }' ) ;
135
+ expect ( element . sheet . cssRules [ 2 ] . cssText ) . toBe ( 'div { background-color: green; }' ) ;
136
+ } ) ;
137
+
138
+ it ( 'Updates rules editing data of a child Text node.' , ( ) => {
139
+ document . head . appendChild ( element ) ;
140
+
141
+ expect ( element . sheet . cssRules . length ) . toBe ( 0 ) ;
142
+
143
+ const textNode = document . createTextNode (
144
+ 'body { background-color: red }\ndiv { background-color: green }'
145
+ ) ;
146
+
147
+ const documentElementComputedStyle = window . getComputedStyle ( document . documentElement ) ;
148
+
149
+ element . appendChild ( textNode ) ;
150
+
151
+ expect ( element . sheet . cssRules . length ) . toBe ( 2 ) ;
152
+ expect ( element . sheet . cssRules [ 0 ] . cssText ) . toBe ( 'body { background-color: red; }' ) ;
153
+ expect ( element . sheet . cssRules [ 1 ] . cssText ) . toBe ( 'div { background-color: green; }' ) ;
154
+
155
+ expect ( documentElementComputedStyle . backgroundColor ) . toBe ( '' ) ;
156
+
157
+ textNode . data = 'html { background-color: blue }' ;
158
+
159
+ expect ( element . sheet . cssRules . length ) . toBe ( 1 ) ;
160
+ expect ( element . sheet . cssRules [ 0 ] . cssText ) . toBe ( 'html { background-color: blue; }' ) ;
161
+
162
+ expect ( documentElementComputedStyle . backgroundColor ) . toBe ( 'blue' ) ;
163
+ } ) ;
78
164
} ) ;
79
165
} ) ;
0 commit comments