cssom-pagerule.html (4360B)
1 <!DOCTYPE html> 2 <title>CSSOM: CSSPageRule tests</title> 3 <link rel="help" href="https://drafts.csswg.org/cssom/#the-csspagerule-interface" /> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <style> 7 @page {} 8 </style> 9 <script> 10 const sheet = document.styleSheets[0]; 11 const rule = sheet.cssRules[0]; 12 13 test(() => { 14 assert_true(!!rule); 15 assert_equals(rule.type, CSSRule.PAGE_RULE); 16 }, "Sanity checks"); 17 18 test(() => { 19 assert_equals(rule.selectorText, ""); 20 }, "Page selector is initially the empty string"); 21 22 test(() => { 23 assert_equals(rule.cssText, "@page { }"); 24 }, "Page selector 'cssText' is initially the @page { }"); 25 26 test(() => { 27 rule.selectorText = ":left"; 28 assert_equals(rule.selectorText, ":left"); 29 }, "Set selectorText to :left pseudo page"); 30 31 test(() => { 32 rule.selectorText = ":left"; 33 assert_equals(rule.cssText, "@page :left { }"); 34 }, "Set cssText to :left pseudo page"); 35 36 test(() => { 37 rule.selectorText = "named"; 38 assert_equals(rule.selectorText, "named"); 39 }, "Set selectorText to named page"); 40 41 test(() => { 42 rule.selectorText = "named"; 43 assert_equals(rule.cssText, "@page named { }"); 44 }, "Set cssText to named page"); 45 46 test(() => { 47 rule.selectorText = "named:first"; 48 assert_equals(rule.selectorText, "named:first"); 49 }, "Set selectorText to named page with :first pseudo page"); 50 51 test(() => { 52 rule.selectorText = "named:first"; 53 assert_equals(rule.cssText, "@page named:first { }"); 54 }, "Set cssText to named page with :first pseudo page"); 55 56 test(() => { 57 rule.selectorText = "named:First"; 58 assert_equals(rule.selectorText, "named:first"); 59 }, "Set selectorText to named page with case insensitive :first pseudo page"); 60 61 test(() => { 62 rule.selectorText = "named:First"; 63 assert_equals(rule.cssText, "@page named:first { }"); 64 }, "Set cssText to named page with case insensitive :first pseudo page"); 65 66 test(() => { 67 rule.selectorText = "named:first:first"; 68 assert_equals(rule.selectorText, "named:first:first"); 69 }, "Set selectorText to named page with two :first pseudo page"); 70 71 test(() => { 72 rule.selectorText = "named:first:first"; 73 assert_equals(rule.cssText, "@page named:first:first { }"); 74 }, "Set cssText to named page with two :first pseudo page"); 75 76 test(() => { 77 rule.selectorText = "named:first:left:right:first"; 78 assert_equals(rule.selectorText, "named:first:left:right:first"); 79 }, "Set selectorText to named page with pseudo pages of " + 80 ":first, :left, :right, :first in order."); 81 82 test(() => { 83 rule.selectorText = "named:first:left:right:first"; 84 assert_equals(rule.cssText, "@page named:first:left:right:first { }"); 85 }, "Set cssText to named page with pseudo pages of " + 86 ":first, :left, :right, :first in order."); 87 88 test(() => { 89 rule.selectorText = ""; 90 rule.selectorText = "named :first"; 91 assert_equals(rule.selectorText, ""); 92 }, "Cannot set selectorText to named page with pseudo, whitespace between"); 93 94 test(() => { 95 rule.selectorText = ""; 96 rule.selectorText = "named :first"; 97 assert_equals(rule.cssText, "@page { }"); 98 }, "Cannot set cssText to named page with pseudo, whitespace between - return default @page { }"); 99 100 test(() => { 101 rule.selectorText = ""; 102 rule.selectorText = ":first :left"; 103 assert_equals(rule.selectorText, ""); 104 }, "Cannot set selectorText to two pseudos, whitespace between"); 105 106 test(() => { 107 rule.selectorText = ""; 108 rule.selectorText = ":first :left"; 109 assert_equals(rule.cssText, "@page { }"); 110 }, "Cannot set cssText to two pseudos, whitespace between - return default @page { }"); 111 112 test(() => { 113 rule.selectorText = ""; 114 rule.selectorText = ":notapagepseudo"; 115 assert_equals(rule.selectorText, ""); 116 }, "Cannot set selectorText to invalid pseudo page"); 117 118 test(() => { 119 rule.selectorText = ""; 120 rule.selectorText = ":notapagepseudo"; 121 assert_equals(rule.cssText, "@page { }"); 122 }, "Cannot set cssText to invalid pseudo page - return default @page { }"); 123 124 test(() => { 125 assert_equals(rule.parentStyleSheet, sheet); 126 sheet.deleteRule(0); 127 assert_equals(rule.parentStyleSheet, null); 128 rule.selectorText = "pagename"; 129 }, "Set selectorText to named page after rule was removed"); 130 </script>