| <!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> |