1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.javascript.host.css;
16
17 import org.htmlunit.WebDriverTestCase;
18 import org.htmlunit.junit.annotation.Alerts;
19 import org.htmlunit.junit.annotation.HtmlUnitNYI;
20 import org.junit.jupiter.api.Test;
21
22
23
24
25
26
27
28 public class CSSMediaRuleTest extends WebDriverTestCase {
29
30
31
32
33 @Test
34 @Alerts("TypeError")
35 public void ctor() throws Exception {
36 final String html = DOCTYPE_HTML
37 + "<html><body>\n"
38 + LOG_TEXTAREA
39 + "<script>\n"
40 + LOG_TEXTAREA_FUNCTION
41 + "try {\n"
42 + " var rule = new CSSMediaRule();\n"
43 + " log(rule);\n"
44 + "} catch(e) { logEx(e); }\n"
45 + "</script></body></html>";
46
47 loadPageVerifyTextArea2(html);
48 }
49
50
51
52
53 @Test
54 @Alerts({"[object CSSMediaRule]", "[object CSSMediaRule]"})
55 public void scriptableToString() throws Exception {
56 final String html = DOCTYPE_HTML
57 + "<html><body>\n"
58
59 + "<style>\n"
60 + " @media screen { p { background-color:#FFFFFF; }};\n"
61 + "</style>\n"
62
63 + "<script>\n"
64 + LOG_TITLE_FUNCTION
65 + " var styleSheet = document.styleSheets[0];\n"
66 + " var rule = styleSheet.cssRules[0];\n"
67 + " log(Object.prototype.toString.call(rule));\n"
68 + " log(rule);\n"
69 + "</script>\n"
70
71 + "</body></html>";
72
73 loadPageVerifyTitle2(html);
74 }
75
76
77
78
79 @Test
80 @Alerts("@media screen {\n p { background-color: rgb(255, 255, 255); }\n}")
81 public void cssText() throws Exception {
82 final String html = DOCTYPE_HTML
83 + "<html><body>\n"
84
85 + LOG_TEXTAREA
86
87 + "<style>\n"
88 + " @media screen { p { background-color:#FFFFFF; }};\n"
89 + "</style>\n"
90
91 + "<script>\n"
92 + LOG_TEXTAREA_FUNCTION
93 + " var styleSheet = document.styleSheets[0];\n"
94 + " var rule = styleSheet.cssRules[0];\n"
95 + " log(rule.cssText);\n"
96 + "</script>\n"
97
98 + "</body></html>";
99
100 loadPageVerifyTextArea2(html);
101 }
102
103
104
105
106 @Test
107 @Alerts("@media screen {\n}")
108 public void cssTextEmpty() throws Exception {
109 final String html = DOCTYPE_HTML
110 + "<html><body>\n"
111
112 + LOG_TEXTAREA
113
114 + "<style>\n"
115 + " @media screen {};\n"
116 + "</style>\n"
117
118 + "<script>\n"
119 + LOG_TEXTAREA_FUNCTION
120 + " var styleSheet = document.styleSheets[0];\n"
121 + " var rule = styleSheet.cssRules[0];\n"
122 + " log(rule.cssText);\n"
123 + "</script>\n"
124
125 + "</body></html>";
126
127 loadPageVerifyTextArea2(html);
128 }
129
130
131
132
133 @Test
134 @Alerts("@media screen {\n p { }\n div { }\n}")
135 public void cssTextMultipleRules() throws Exception {
136 final String html = DOCTYPE_HTML
137 + "<html><body>\n"
138
139 + LOG_TEXTAREA
140
141 + "<style>\n"
142 + " @media screen { p {} div {}};\n"
143 + "</style>\n"
144
145 + "<script>\n"
146 + LOG_TEXTAREA_FUNCTION
147 + " var styleSheet = document.styleSheets[0];\n"
148 + " var rule = styleSheet.cssRules[0];\n"
149 + " log(rule.cssText);\n"
150 + "</script>\n"
151
152 + "</body></html>";
153
154 loadPageVerifyTextArea2(html);
155 }
156
157
158
159
160 @Test
161 @Alerts("@media print {\n #navigation { display: none; }"
162 + "\n @media (max-width: 12cm) {\n .note { float: none; }\n}\n}")
163 @HtmlUnitNYI(CHROME = "@media print {\n *#navigation { display: none; }"
164 + "\n @media (max-width: 12cm) {\n *.note { float: none; }\n}\n}",
165 EDGE = "@media print {\n *#navigation { display: none; }"
166 + "\n @media (max-width: 12cm) {\n *.note { float: none; }\n}\n}",
167 FF = "@media print {\n *#navigation { display: none; }"
168 + "\n @media (max-width: 12cm) {\n *.note { float: none; }\n}\n}",
169 FF_ESR = "@media print {\n *#navigation { display: none; }"
170 + "\n @media (max-width: 12cm) {\n *.note { float: none; }\n}\n}")
171 public void cssTextNested() throws Exception {
172 final String html = DOCTYPE_HTML
173 + "<html><body>\n"
174
175 + LOG_TEXTAREA
176
177 + "<style>\n"
178 + " @media print { #navigation { display: none }"
179 + "@media (max-width: 12cm) { .note { float: none } } }"
180 + "</style>\n"
181
182 + "<script>\n"
183 + LOG_TEXTAREA_FUNCTION
184 + " var styleSheet = document.styleSheets[0];\n"
185 + " var rule = styleSheet.cssRules[0];\n"
186 + " log(rule.cssText);\n"
187 + "</script>\n"
188
189 + "</body></html>";
190
191 loadPageVerifyTextArea2(html);
192 }
193
194
195
196
197 @Test
198 @Alerts("@media screen {\n p { background-color: rgb(255, 255, 255); }\n}")
199 public void cssTextSet() throws Exception {
200 final String html = DOCTYPE_HTML
201 + "<html><body>\n"
202
203 + LOG_TEXTAREA
204
205 + "<style>\n"
206 + " @media screen { p { background-color:#FFFFFF; }};\n"
207 + "</style>\n"
208
209 + "<script>\n"
210 + LOG_TEXTAREA_FUNCTION
211 + " var styleSheet = document.styleSheets[0];\n"
212 + " var rule = styleSheet.cssRules[0];\n"
213 + " try {"
214 + " rule.cssText = '@media screen { span { color: rgb(0, 0, 0); }}';\n"
215 + " log(rule.cssText);\n"
216 + " } catch(e) {\n"
217 + " logEx(e);\n"
218 + " }\n"
219 + "</script>\n"
220
221 + "</body></html>";
222
223 loadPageVerifyTextArea2(html);
224 }
225
226
227
228
229 @Test
230 @Alerts("null")
231 public void parentRule() throws Exception {
232 final String html = DOCTYPE_HTML
233 + "<html><body>\n"
234
235 + "<style>\n"
236 + " @media screen { p { background-color:#FFFFFF; }};\n"
237 + "</style>\n"
238
239 + "<script>\n"
240 + LOG_TITLE_FUNCTION
241 + " var styleSheet = document.styleSheets[0];\n"
242 + " var rule = styleSheet.cssRules[0];\n"
243 + " log(rule.parentRule);\n"
244 + "</script>\n"
245
246 + "</body></html>";
247
248 loadPageVerifyTitle2(html);
249 }
250
251
252
253
254 @Test
255 @Alerts({"[object CSSMediaRule]", "[object CSSMediaRule]"})
256 public void parentRuleNested() throws Exception {
257 final String html = DOCTYPE_HTML
258 + "<html><body>\n"
259
260 + "<style>\n"
261 + " @media print { #navigation { display: none; } "
262 + "@media (max-width: 12cm) { .note { float: none; } } }"
263 + "</style>\n"
264
265 + "<script>\n"
266 + LOG_TITLE_FUNCTION
267 + " var styleSheet = document.styleSheets[0];\n"
268 + " var ruleOuter = styleSheet.cssRules[0];\n"
269 + " var ruleInner = ruleOuter.cssRules[1];\n"
270 + " log(ruleInner);\n"
271 + " log(ruleInner.parentRule);\n"
272 + "</script>\n"
273
274 + "</body></html>";
275
276 loadPageVerifyTitle2(html);
277 }
278
279
280
281
282 @Test
283 @Alerts("null")
284 public void parentRuleSet() throws Exception {
285 final String html = DOCTYPE_HTML
286 + "<html><body>\n"
287
288 + "<style>\n"
289 + " @media screen { p { background-color:#FFFFFF; }};\n"
290 + "</style>\n"
291
292 + "<script>\n"
293 + LOG_TITLE_FUNCTION
294 + " var styleSheet = document.styleSheets[0];\n"
295 + " var rule = styleSheet.cssRules[0];\n"
296 + " try {"
297 + " rule.parentRule = rule;\n"
298 + " log(rule.parentRule);\n"
299 + " } catch(e) {\n"
300 + " logEx(e);\n"
301 + " }\n"
302 + "</script>\n"
303
304 + "</body></html>";
305
306 loadPageVerifyTitle2(html);
307 }
308
309
310
311
312 @Test
313 @Alerts("[object CSSStyleSheet]")
314 public void parentStyleSheet() throws Exception {
315 final String html = DOCTYPE_HTML
316 + "<html><body>\n"
317
318 + "<style>\n"
319 + " @media screen { p { background-color:#FFFFFF; }};\n"
320 + "</style>\n"
321
322 + "<script>\n"
323 + LOG_TITLE_FUNCTION
324 + " var styleSheet = document.styleSheets[0];\n"
325 + " var rule = styleSheet.cssRules[0];\n"
326 + " log(rule.parentStyleSheet);\n"
327 + "</script>\n"
328
329 + "</body></html>";
330
331 loadPageVerifyTitle2(html);
332 }
333
334
335
336
337 @Test
338 @Alerts("[object CSSStyleSheet]")
339 public void parentStyleSheetSet() throws Exception {
340 final String html = DOCTYPE_HTML
341 + "<html><body>\n"
342
343 + "<style>\n"
344 + " @media screen { p { background-color:#FFFFFF; }};\n"
345 + "</style>\n"
346
347 + "<script>\n"
348 + LOG_TITLE_FUNCTION
349 + " var styleSheet = document.styleSheets[0];\n"
350 + " var rule = styleSheet.cssRules[0];\n"
351 + " try {"
352 + " rule.parentStyleSheet = null;\n"
353 + " log(rule.parentStyleSheet);\n"
354 + " } catch(e) {\n"
355 + " logEx(e);\n"
356 + " }\n"
357 + "</script>\n"
358
359 + "</body></html>";
360
361 loadPageVerifyTitle2(html);
362 }
363
364
365
366
367 @Test
368 @Alerts({"[object MediaList]", "all", "1", "all", "all", "all"})
369 public void mediaAll() throws Exception {
370 final String html = DOCTYPE_HTML
371 + "<html><body>\n"
372
373 + "<style>\n"
374 + " @media all { p { background-color:#FFFFFF; }};\n"
375 + "</style>\n"
376
377 + "<script>\n"
378 + LOG_TITLE_FUNCTION
379 + " var styleSheet = document.styleSheets[0];\n"
380 + " var rule = styleSheet.cssRules[0];\n"
381 + " var mediaList = rule.media;\n"
382 + " log(Object.prototype.toString.call(mediaList));\n"
383 + " log(mediaList);\n"
384 + " log(mediaList.length);\n"
385 + " for (var i = 0; i < mediaList.length; i++) {\n"
386 + " log(mediaList.item(i));\n"
387 + " }\n"
388 + " log(mediaList.mediaText);\n"
389 + " log(rule.conditionText);\n"
390 + "</script>\n"
391
392 + "</body></html>";
393
394 loadPageVerifyTitle2(html);
395 }
396
397
398
399
400 @Test
401 @Alerts({"[object MediaList]", "screen", "1", "screen", "screen", "screen"})
402 public void media() throws Exception {
403 final String html = DOCTYPE_HTML
404 + "<html><body>\n"
405
406 + "<style>\n"
407 + " @media screen { p { background-color:#FFFFFF; }};\n"
408 + "</style>\n"
409
410 + "<script>\n"
411 + LOG_TITLE_FUNCTION
412 + " var styleSheet = document.styleSheets[0];\n"
413 + " var rule = styleSheet.cssRules[0];\n"
414 + " var mediaList = rule.media;\n"
415 + " log(Object.prototype.toString.call(mediaList));\n"
416 + " log(mediaList);\n"
417 + " log(mediaList.length);\n"
418 + " for (var i = 0; i < mediaList.length; i++) {\n"
419 + " log(mediaList.item(i));\n"
420 + " }\n"
421 + " log(mediaList.mediaText);\n"
422 + " log(rule.conditionText);\n"
423 + "</script>\n"
424
425 + "</body></html>";
426
427 loadPageVerifyTitle2(html);
428 }
429
430
431
432
433 @Test
434 @Alerts({"2", "only screen and (color)", "print and (max-width: 12cm) and (min-width: 30em)",
435 "only screen and (color), print and (max-width: 12cm) and (min-width: 30em)",
436 "only screen and (color), print and (max-width: 12cm) and (min-width: 30em)"})
437 public void mediaQuery() throws Exception {
438 final String html = DOCTYPE_HTML
439 + "<html><body>\n"
440
441 + "<style>\n"
442 + " @media only screen and (color ),print and ( max-width:12cm) and (min-width: 30em) { "
443 + "p { background-color:#FFFFFF; }};\n"
444 + "</style>\n"
445
446 + "<script>\n"
447 + LOG_TITLE_FUNCTION
448 + " var styleSheet = document.styleSheets[0];\n"
449 + " var rule = styleSheet.cssRules[0];\n"
450 + " var mediaList = rule.media;\n"
451 + " log(mediaList.length);\n"
452 + " for (var i = 0; i < mediaList.length; i++) {\n"
453 + " log(mediaList.item(i));\n"
454 + " }\n"
455 + " log(mediaList.mediaText);\n"
456 + " log(rule.conditionText);\n"
457 + "</script>\n"
458
459 + "</body></html>";
460
461 loadPageVerifyTitle2(html);
462 }
463
464
465
466
467 @Test
468 @Alerts({"[object CSSRuleList]", "[object CSSRuleList]", "1", "[object CSSStyleRule]",
469 "p { background-color: rgb(255, 255, 255); }", "[object CSSMediaRule]"})
470 public void cssRules() throws Exception {
471 final String html = DOCTYPE_HTML
472 + "<html><body>\n"
473
474 + "<style>\n"
475 + " @media screen { p { background-color:#FFFFFF; }};\n"
476 + "</style>\n"
477
478 + "<script>\n"
479 + LOG_TITLE_FUNCTION
480 + " var styleSheet = document.styleSheets[0];\n"
481 + " var rule = styleSheet.cssRules[0];\n"
482 + " var rules = rule.cssRules;\n"
483 + " log(Object.prototype.toString.call(rules));\n"
484 + " log(rules);\n"
485 + " log(rules.length);\n"
486 + " for (var i = 0; i < rules.length; i++) {\n"
487 + " log(rules.item(i));\n"
488 + " log(rules.item(i).cssText);\n"
489 + " log(rules.item(i).parentRule);\n"
490 + " }\n"
491 + "</script>\n"
492
493 + "</body></html>";
494
495 loadPageVerifyTitle2(html);
496 }
497
498
499
500
501 @Test
502 @Alerts({"[object CSSRuleList]", "[object CSSRuleList]", "1", "[object CSSStyleRule]",
503 "p { background-color: rgb(255, 255, 255); }", "[object CSSMediaRule]"})
504 public void cssRulesMediaNotMatching() throws Exception {
505 final String html = DOCTYPE_HTML
506 + "<html><body>\n"
507
508 + "<style>\n"
509 + " @media print { p { background-color:#FFFFFF; }};\n"
510 + "</style>\n"
511
512 + "<script>\n"
513 + LOG_TITLE_FUNCTION
514 + " var styleSheet = document.styleSheets[0];\n"
515 + " var rule = styleSheet.cssRules[0];\n"
516 + " var rules = rule.cssRules;\n"
517 + " log(Object.prototype.toString.call(rules));\n"
518 + " log(rules);\n"
519 + " log(rules.length);\n"
520 + " for (var i = 0; i < rules.length; i++) {\n"
521 + " log(rules.item(i));\n"
522 + " log(rules.item(i).cssText);\n"
523 + " log(rules.item(i).parentRule);\n"
524 + " }\n"
525 + "</script>\n"
526
527 + "</body></html>";
528
529 loadPageVerifyTitle2(html);
530 }
531
532
533
534
535 @Test
536 @Alerts({"1", "0", "2", "span { color: rgb(0, 0, 0); }", "[object CSSMediaRule]",
537 "p { background-color: rgb(255, 255, 255); }", "[object CSSMediaRule]"})
538 public void insertRule() throws Exception {
539 final String html = DOCTYPE_HTML
540 + "<html><body>\n"
541
542 + "<style>\n"
543 + " @media screen { p { background-color:#FFFFFF; }};\n"
544 + "</style>\n"
545
546 + "<script>\n"
547 + LOG_TITLE_FUNCTION
548 + " var styleSheet = document.styleSheets[0];\n"
549 + " var rule = styleSheet.cssRules[0];\n"
550 + " var rules = rule.cssRules;\n"
551 + " log(rules.length);\n"
552 + " try {\n"
553 + " log(rule.insertRule('span { color:#000000; }'));\n"
554 + " log(rules.length);\n"
555 + " for (var i = 0; i < rules.length; i++) {\n"
556 + " log(rules.item(i).cssText);\n"
557 + " log(rules.item(i).parentRule);\n"
558 + " }\n"
559 + " } catch(e) {\n"
560 + " logEx(e);\n"
561 + " }\n"
562 + "</script>\n"
563
564 + "</body></html>";
565
566 loadPageVerifyTitle2(html);
567 }
568
569
570
571
572 @Test
573 @Alerts("SyntaxError/DOMException")
574 public void insertRuleNull() throws Exception {
575 final String html = DOCTYPE_HTML
576 + "<html><body>\n"
577
578 + "<style>\n"
579 + " @media screen { p { background-color:#FFFFFF; }};\n"
580 + "</style>\n"
581
582 + "<script>\n"
583 + LOG_TITLE_FUNCTION
584 + " var styleSheet = document.styleSheets[0];\n"
585 + " var rule = styleSheet.cssRules[0];\n"
586 + " var rules = rule.cssRules;\n"
587 + " try {\n"
588 + " rule.insertRule(null);\n"
589 + " } catch(e) {\n"
590 + " logEx(e);\n"
591 + " }\n"
592 + "</script>\n"
593
594 + "</body></html>";
595
596 loadPageVerifyTitle2(html);
597 }
598
599
600
601
602 @Test
603 @Alerts("SyntaxError/DOMException")
604 public void insertRuleEmpty() throws Exception {
605 final String html = DOCTYPE_HTML
606 + "<html><body>\n"
607
608 + "<style>\n"
609 + " @media screen { p { background-color:#FFFFFF; }};\n"
610 + "</style>\n"
611
612 + "<script>\n"
613 + LOG_TITLE_FUNCTION
614 + " var styleSheet = document.styleSheets[0];\n"
615 + " var rule = styleSheet.cssRules[0];\n"
616 + " var rules = rule.cssRules;\n"
617 + " try {\n"
618 + " rule.insertRule('');\n"
619 + " } catch(e) {\n"
620 + " logEx(e);\n"
621 + " }\n"
622 + "</script>\n"
623
624 + "</body></html>";
625
626 loadPageVerifyTitle2(html);
627 }
628
629
630
631
632 @Test
633 @Alerts("SyntaxError/DOMException")
634 public void insertRuleInvalid() throws Exception {
635 final String html = DOCTYPE_HTML
636 + "<html><body>\n"
637
638 + "<style>\n"
639 + " @media screen { p { background-color:#FFFFFF; }};\n"
640 + "</style>\n"
641
642 + "<script>\n"
643 + LOG_TITLE_FUNCTION
644 + " var styleSheet = document.styleSheets[0];\n"
645 + " var rule = styleSheet.cssRules[0];\n"
646 + " var rules = rule.cssRules;\n"
647 + " try {\n"
648 + " rule.insertRule('%ab');\n"
649 + " } catch(e) {\n"
650 + " logEx(e);\n"
651 + " }\n"
652 + "</script>\n"
653
654 + "</body></html>";
655
656 loadPageVerifyTitle2(html);
657 }
658
659
660
661
662 @Test
663 @Alerts({"1", "1", "2", "p { background-color: rgb(255, 255, 255); }", "[object CSSMediaRule]",
664 "span { color: rgb(0, 0, 0); }", "[object CSSMediaRule]"})
665 public void insertRuleWithIndex() throws Exception {
666 final String html = DOCTYPE_HTML
667 + "<html><body>\n"
668
669 + "<style>\n"
670 + " @media screen { p { background-color:#FFFFFF; }};\n"
671 + "</style>\n"
672
673 + "<script>\n"
674 + LOG_TITLE_FUNCTION
675 + " var styleSheet = document.styleSheets[0];\n"
676 + " var rule = styleSheet.cssRules[0];\n"
677 + " var rules = rule.cssRules;\n"
678 + " log(rules.length);\n"
679 + " try {\n"
680 + " log(rule.insertRule('span { color:#000000; }', 1));\n"
681 + " log(rules.length);\n"
682 + " for (var i = 0; i < rules.length; i++) {\n"
683 + " log(rules.item(i).cssText);\n"
684 + " log(rules.item(i).parentRule);\n"
685 + " }\n"
686 + " } catch(e) {\n"
687 + " logEx(e);\n"
688 + " }\n"
689 + "</script>\n"
690
691 + "</body></html>";
692
693 loadPageVerifyTitle2(html);
694 }
695
696
697
698
699 @Test
700 @Alerts("SyntaxError/DOMException")
701 public void insertRuleNullWithIndex() throws Exception {
702 final String html = DOCTYPE_HTML
703 + "<html><body>\n"
704
705 + "<style>\n"
706 + " @media screen { p { background-color:#FFFFFF; }};\n"
707 + "</style>\n"
708
709 + "<script>\n"
710 + LOG_TITLE_FUNCTION
711 + " var styleSheet = document.styleSheets[0];\n"
712 + " var rule = styleSheet.cssRules[0];\n"
713 + " var rules = rule.cssRules;\n"
714 + " try {\n"
715 + " rule.insertRule(null, 1);\n"
716 + " } catch(e) {\n"
717 + " logEx(e);\n"
718 + " }\n"
719 + "</script>\n"
720
721 + "</body></html>";
722
723 loadPageVerifyTitle2(html);
724 }
725
726
727
728
729 @Test
730 @Alerts({"1", "SyntaxError/DOMException"})
731 public void insertRuleEmptyWithIndex() throws Exception {
732 final String html = DOCTYPE_HTML
733 + "<html><body>\n"
734
735 + "<style>\n"
736 + " @media screen { p { background-color:#FFFFFF; }};\n"
737 + "</style>\n"
738
739 + "<script>\n"
740 + LOG_TITLE_FUNCTION
741 + " var styleSheet = document.styleSheets[0];\n"
742 + " var rule = styleSheet.cssRules[0];\n"
743 + " var rules = rule.cssRules;\n"
744 + " log(rules.length);\n"
745 + " try {\n"
746 + " log(rule.insertRule('', 1));\n"
747 + " log(rules.length);\n"
748 + " for (var i = 0; i < rules.length; i++) {\n"
749 + " log(rules.item(i).cssText);\n"
750 + " log(rules.item(i).parentRule);\n"
751 + " }\n"
752 + " } catch(e) {\n"
753 + " logEx(e);\n"
754 + " }\n"
755 + "</script>\n"
756
757 + "</body></html>";
758
759 loadPageVerifyTitle2(html);
760 }
761
762
763
764
765 @Test
766 @Alerts("SyntaxError/DOMException")
767 public void insertRuleInvalidWithIndex() throws Exception {
768 final String html = DOCTYPE_HTML
769 + "<html><body>\n"
770
771 + "<style>\n"
772 + " @media screen { p { background-color:#FFFFFF; }};\n"
773 + "</style>\n"
774
775 + "<script>\n"
776 + LOG_TITLE_FUNCTION
777 + " var styleSheet = document.styleSheets[0];\n"
778 + " var rule = styleSheet.cssRules[0];\n"
779 + " var rules = rule.cssRules;\n"
780 + " try {\n"
781 + " rule.insertRule('%ab', 1);\n"
782 + " } catch(e) {\n"
783 + " logEx(e);\n"
784 + " }\n"
785 + "</script>\n"
786
787 + "</body></html>";
788
789 loadPageVerifyTitle2(html);
790 }
791
792
793
794
795 @Test
796 @Alerts({"1", "0", "2", "span { color: rgb(0, 0, 0); }", "[object CSSMediaRule]",
797 "p { background-color: rgb(255, 255, 255); }", "[object CSSMediaRule]"})
798 public void insertRuleWithIndexNull() throws Exception {
799 final String html = DOCTYPE_HTML
800 + "<html><body>\n"
801
802 + "<style>\n"
803 + " @media screen { p { background-color:#FFFFFF; }};\n"
804 + "</style>\n"
805
806 + "<script>\n"
807 + LOG_TITLE_FUNCTION
808 + " var styleSheet = document.styleSheets[0];\n"
809 + " var rule = styleSheet.cssRules[0];\n"
810 + " var rules = rule.cssRules;\n"
811 + " log(rules.length);\n"
812 + " try {\n"
813 + " log(rule.insertRule('span { color:#000000; }', null));\n"
814 + " log(rules.length);\n"
815 + " for (var i = 0; i < rules.length; i++) {\n"
816 + " log(rules.item(i).cssText);\n"
817 + " log(rules.item(i).parentRule);\n"
818 + " }\n"
819 + " } catch(e) { logEx(e); }\n"
820 + "</script>\n"
821
822 + "</body></html>";
823
824 loadPageVerifyTitle2(html);
825 }
826
827
828
829
830 @Test
831 @Alerts({"1", "0", "2", "span { color: rgb(0, 0, 0); }", "[object CSSMediaRule]",
832 "p { background-color: rgb(255, 255, 255); }", "[object CSSMediaRule]"})
833 public void insertRuleWithIndexNaN() throws Exception {
834 final String html = DOCTYPE_HTML
835 + "<html><body>\n"
836
837 + "<style>\n"
838 + " @media screen { p { background-color:#FFFFFF; }};\n"
839 + "</style>\n"
840
841 + "<script>\n"
842 + LOG_TITLE_FUNCTION
843 + " var styleSheet = document.styleSheets[0];\n"
844 + " var rule = styleSheet.cssRules[0];\n"
845 + " var rules = rule.cssRules;\n"
846 + " log(rules.length);\n"
847 + " try {\n"
848 + " log(rule.insertRule('span { color:#000000; }', 'abc'));\n"
849 + " log(rules.length);\n"
850 + " for (var i = 0; i < rules.length; i++) {\n"
851 + " log(rules.item(i).cssText);\n"
852 + " log(rules.item(i).parentRule);\n"
853 + " }\n"
854 + " } catch(e) { logEx(e); }\n"
855 + "</script>\n"
856
857 + "</body></html>";
858
859 loadPageVerifyTitle2(html);
860 }
861
862
863
864
865 @Test
866 @Alerts({"1", "IndexSizeError/DOMException"})
867 public void insertRuleWithIndexNegative() throws Exception {
868 final String html = DOCTYPE_HTML
869 + "<html><body>\n"
870
871 + "<style>\n"
872 + " @media screen { p { background-color:#FFFFFF; }};\n"
873 + "</style>\n"
874
875 + "<script>\n"
876 + LOG_TITLE_FUNCTION
877 + " var styleSheet = document.styleSheets[0];\n"
878 + " var rule = styleSheet.cssRules[0];\n"
879 + " var rules = rule.cssRules;\n"
880 + " log(rules.length);\n"
881 + " try {\n"
882 + " rule.insertRule('span { color:#000000; }', 2);\n"
883 + " } catch(e) {\n"
884 + " logEx(e);\n"
885 + " }\n"
886 + "</script>\n"
887
888 + "</body></html>";
889
890 loadPageVerifyTitle2(html);
891 }
892
893
894
895
896 @Test
897 @Alerts({"1", "IndexSizeError/DOMException"})
898 public void insertRuleWithIndexGreaterThanLength() throws Exception {
899 final String html = DOCTYPE_HTML
900 + "<html><body>\n"
901
902 + "<style>\n"
903 + " @media screen { p { background-color:#FFFFFF; }};\n"
904 + "</style>\n"
905
906 + "<script>\n"
907 + LOG_TITLE_FUNCTION
908 + " var styleSheet = document.styleSheets[0];\n"
909 + " var rule = styleSheet.cssRules[0];\n"
910 + " var rules = rule.cssRules;\n"
911 + " log(rules.length);\n"
912 + " try {\n"
913 + " rule.insertRule('span { color:#000000; }', 2);\n"
914 + " } catch(e) {\n"
915 + " logEx(e);\n"
916 + " }\n"
917 + "</script>\n"
918
919 + "</body></html>";
920
921 loadPageVerifyTitle2(html);
922 }
923
924
925
926
927 @Test
928 @Alerts({"2", "1", "p { background-color: rgb(255, 255, 255); }"})
929 public void deleteRule() throws Exception {
930 final String html = DOCTYPE_HTML
931 + "<html><body>\n"
932
933 + "<style>\n"
934 + " @media screen { p { background-color:#FFFFFF; } span { color: rgb(0, 0, 0); }};\n"
935 + "</style>\n"
936
937 + "<script>\n"
938 + LOG_TITLE_FUNCTION
939 + " var styleSheet = document.styleSheets[0];\n"
940 + " var rule = styleSheet.cssRules[0];\n"
941 + " var rules = rule.cssRules;\n"
942 + " log(rules.length);\n"
943 + " try {\n"
944 + " rule.deleteRule(1);\n"
945 + " log(rules.length);\n"
946 + " for (var i = 0; i < rules.length; i++) {\n"
947 + " log(rules.item(i).cssText);\n"
948 + " }\n"
949 + " } catch(e) {\n"
950 + " logEx(e);\n"
951 + " }\n"
952 + "</script>\n"
953
954 + "</body></html>";
955
956 loadPageVerifyTitle2(html);
957 }
958
959
960
961
962 @Test
963 @Alerts({"2", "1", "span { color: rgb(0, 0, 0); }"})
964 public void deleteRuleNull() throws Exception {
965 final String html = DOCTYPE_HTML
966 + "<html><body>\n"
967
968 + "<style>\n"
969 + " @media screen { p { background-color:#FFFFFF; } span { color: rgb(0, 0, 0); }};\n"
970 + "</style>\n"
971
972 + "<script>\n"
973 + LOG_TITLE_FUNCTION
974 + " var styleSheet = document.styleSheets[0];\n"
975 + " var rule = styleSheet.cssRules[0];\n"
976 + " var rules = rule.cssRules;\n"
977 + " log(rules.length);\n"
978 + " try {\n"
979 + " rule.deleteRule(null);\n"
980 + " log(rules.length);\n"
981 + " for (var i = 0; i < rules.length; i++) {\n"
982 + " log(rules.item(i).cssText);\n"
983 + " }\n"
984 + " } catch(e) {\n"
985 + " logEx(e);\n"
986 + " }\n"
987 + "</script>\n"
988
989 + "</body></html>";
990
991 loadPageVerifyTitle2(html);
992 }
993
994
995
996
997 @Test
998 @Alerts({"2", "1", "span { color: rgb(0, 0, 0); }"})
999 public void deleteRuleNaN() throws Exception {
1000 final String html = DOCTYPE_HTML
1001 + "<html><body>\n"
1002
1003 + "<style>\n"
1004 + " @media screen { p { background-color:#FFFFFF; } span { color: rgb(0, 0, 0); }};\n"
1005 + "</style>\n"
1006
1007 + "<script>\n"
1008 + LOG_TITLE_FUNCTION
1009 + " var styleSheet = document.styleSheets[0];\n"
1010 + " var rule = styleSheet.cssRules[0];\n"
1011 + " var rules = rule.cssRules;\n"
1012 + " log(rules.length);\n"
1013 + " try {\n"
1014 + " rule.deleteRule('abc');\n"
1015 + " log(rules.length);\n"
1016 + " for (var i = 0; i < rules.length; i++) {\n"
1017 + " log(rules.item(i).cssText);\n"
1018 + " }\n"
1019 + " } catch(e) {\n"
1020 + " logEx(e);\n"
1021 + " }\n"
1022 + "</script>\n"
1023
1024 + "</body></html>";
1025
1026 loadPageVerifyTitle2(html);
1027 }
1028
1029
1030
1031
1032 @Test
1033 @Alerts({"2", "IndexSizeError/DOMException"})
1034 public void deleteRuleNegative() throws Exception {
1035 final String html = DOCTYPE_HTML
1036 + "<html><body>\n"
1037
1038 + "<style>\n"
1039 + " @media screen { p { background-color:#FFFFFF; } span { color: rgb(0, 0, 0); }};\n"
1040 + "</style>\n"
1041
1042 + "<script>\n"
1043 + LOG_TITLE_FUNCTION
1044 + " var styleSheet = document.styleSheets[0];\n"
1045 + " var rule = styleSheet.cssRules[0];\n"
1046 + " var rules = rule.cssRules;\n"
1047 + " log(rules.length);\n"
1048 + " try {\n"
1049 + " rule.deleteRule(-1);\n"
1050 + " } catch(e) {\n"
1051 + " logEx(e);\n"
1052 + " }\n"
1053 + "</script>\n"
1054
1055 + "</body></html>";
1056
1057 loadPageVerifyTitle2(html);
1058 }
1059
1060
1061
1062
1063 @Test
1064 @Alerts({"2", "IndexSizeError/DOMException"})
1065 public void deleteRuleGreaterThanLength() throws Exception {
1066 final String html = DOCTYPE_HTML
1067 + "<html><body>\n"
1068
1069 + "<style>\n"
1070 + " @media screen { p { background-color:#FFFFFF; } span { color: rgb(0, 0, 0); }};\n"
1071 + "</style>\n"
1072
1073 + "<script>\n"
1074 + LOG_TITLE_FUNCTION
1075 + " var styleSheet = document.styleSheets[0];\n"
1076 + " var rule = styleSheet.cssRules[0];\n"
1077 + " var rules = rule.cssRules;\n"
1078 + " log(rules.length);\n"
1079 + " try {\n"
1080 + " rule.deleteRule(2);\n"
1081 + " } catch(e) {\n"
1082 + " logEx(e);\n"
1083 + " }\n"
1084 + "</script>\n"
1085
1086 + "</body></html>";
1087
1088 loadPageVerifyTitle2(html);
1089 }
1090 }