| <!DOCTYPE html> |
| <title>CSSOM: CSSPageRule tests</title> |
| <link rel="help" href="https://drafts.csswg.org/cssom/#the-csspagerule-interface" /> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <style> |
| @page {} |
| </style> |
| <script> |
| const sheet = document.styleSheets[0]; |
| const rule = sheet.cssRules[0]; |
| |
| test(() => { |
| assert_true(!!rule); |
| assert_equals(rule.type, CSSRule.PAGE_RULE); |
| }, "Sanity checks"); |
| |
| test(() => { |
| assert_equals(rule.selectorText, ""); |
| }, "Page selector is initially the empty string"); |
| |
| test(() => { |
| assert_equals(rule.cssText, "@page { }"); |
| }, "Page selector 'cssText' is initially the @page { }"); |
| |
| test(() => { |
| rule.selectorText = ":left"; |
| assert_equals(rule.selectorText, ":left"); |
| }, "Set selectorText to :left pseudo page"); |
| |
| test(() => { |
| rule.selectorText = ":left"; |
| assert_equals(rule.cssText, "@page :left { }"); |
| }, "Set cssText to :left pseudo page"); |
| |
| test(() => { |
| rule.selectorText = "named"; |
| assert_equals(rule.selectorText, "named"); |
| }, "Set selectorText to named page"); |
| |
| test(() => { |
| rule.selectorText = "named"; |
| assert_equals(rule.cssText, "@page named { }"); |
| }, "Set cssText to named page"); |
| |
| test(() => { |
| rule.selectorText = "named:first"; |
| assert_equals(rule.selectorText, "named:first"); |
| }, "Set selectorText to named page with :first pseudo page"); |
| |
| test(() => { |
| rule.selectorText = "named:first"; |
| assert_equals(rule.cssText, "@page named:first { }"); |
| }, "Set cssText to named page with :first pseudo page"); |
| |
| test(() => { |
| rule.selectorText = "named:First"; |
| assert_equals(rule.selectorText, "named:first"); |
| }, "Set selectorText to named page with case insensitive :first pseudo page"); |
| |
| test(() => { |
| rule.selectorText = "named:First"; |
| assert_equals(rule.cssText, "@page named:first { }"); |
| }, "Set cssText to named page with case insensitive :first pseudo page"); |
| |
| test(() => { |
| rule.selectorText = "named:first:first"; |
| assert_equals(rule.selectorText, "named:first:first"); |
| }, "Set selectorText to named page with two :first pseudo page"); |
| |
| test(() => { |
| rule.selectorText = "named:first:first"; |
| assert_equals(rule.cssText, "@page named:first:first { }"); |
| }, "Set cssText to named page with two :first pseudo page"); |
| |
| test(() => { |
| rule.selectorText = "named:first:left:right:first"; |
| assert_equals(rule.selectorText, "named:first:left:right:first"); |
| }, "Set selectorText to named page with pseudo pages of " + |
| ":first, :left, :right, :first in order."); |
| |
| test(() => { |
| rule.selectorText = "named:first:left:right:first"; |
| assert_equals(rule.cssText, "@page named:first:left:right:first { }"); |
| }, "Set cssText to named page with pseudo pages of " + |
| ":first, :left, :right, :first in order."); |
| |
| test(() => { |
| rule.selectorText = ""; |
| rule.selectorText = "named :first"; |
| assert_equals(rule.selectorText, ""); |
| }, "Cannot set selectorText to named page with pseudo, whitespace between"); |
| |
| test(() => { |
| rule.selectorText = ""; |
| rule.selectorText = "named :first"; |
| assert_equals(rule.cssText, "@page { }"); |
| }, "Cannot set cssText to named page with pseudo, whitespace between - return default @page { }"); |
| |
| test(() => { |
| rule.selectorText = ""; |
| rule.selectorText = ":first :left"; |
| assert_equals(rule.selectorText, ""); |
| }, "Cannot set selectorText to two pseudos, whitespace between"); |
| |
| test(() => { |
| rule.selectorText = ""; |
| rule.selectorText = ":first :left"; |
| assert_equals(rule.cssText, "@page { }"); |
| }, "Cannot set cssText to two pseudos, whitespace between - return default @page { }"); |
| |
| test(() => { |
| rule.selectorText = ""; |
| rule.selectorText = ":notapagepseudo"; |
| assert_equals(rule.selectorText, ""); |
| }, "Cannot set selectorText to invalid pseudo page"); |
| |
| test(() => { |
| rule.selectorText = ""; |
| rule.selectorText = ":notapagepseudo"; |
| assert_equals(rule.cssText, "@page { }"); |
| }, "Cannot set cssText to invalid pseudo page - return default @page { }"); |
| |
| test(() => { |
| assert_equals(rule.parentStyleSheet, sheet); |
| sheet.deleteRule(0); |
| assert_equals(rule.parentStyleSheet, null); |
| rule.selectorText = "pagename"; |
| }, "Set selectorText to named page after rule was removed"); |
| </script> |