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