| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <title>CSS Paged Media: parsing invalid @page selectors</title> | |
| <link rel="author" title="Mozilla" href="https://mozilla.org"/> | |
| <link rel="help" href="https://drafts.csswg.org/css-page/#page-selectors"/> | |
| <meta name="assert" content="Test that @page selectors are parsed correctly."> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <style> | |
| @page 1 { | |
| size: 1in; | |
| } | |
| @page -3 { | |
| size: 2in; | |
| } | |
| @page --a { | |
| size: 3in; | |
| } | |
| @page 7cm { | |
| size: 4in; | |
| } | |
| @page 0.17 { | |
| size: 5in; | |
| } | |
| @page a, 123 { | |
| size: 6in; | |
| } | |
| </style> | |
| <script> | |
| const invalidSelectorTexts = [ | |
| "1", | |
| "-3", | |
| "--a", | |
| "7cm", | |
| "0.17", | |
| "a, 123", | |
| ]; | |
| let styleSheets = document.styleSheets; | |
| for (let sheet of styleSheets) { | |
| for (let rule of sheet.cssRules) { | |
| test(function(){ | |
| assert_not_equals(rule.type, CSSRule.PAGE_RULE, | |
| "no @page rule should have been parsed"); | |
| }, "rule with invalid selector ['" + rule.selectorText + "']"); | |
| } | |
| } | |
| let ruleIndex = styleSheets[0].insertRule("@page{}"); | |
| let rule = styleSheets[0].cssRules[ruleIndex]; | |
| test(function() { | |
| assert_equals(rule.selectorText, "", "Initial selector text should have been empty"); | |
| assert_equals(rule.type, CSSRule.PAGE_RULE, "unexpected rule type (not @page)"); | |
| }, "adding a blank @page rule"); | |
| for (let selectorText of invalidSelectorTexts){ | |
| test(function() { | |
| // Clear the selector first | |
| rule.selectorText = ""; | |
| rule.selectorText = selectorText; | |
| assert_equals(rule.selectorText, "", | |
| "should not be able to assign an invalid selector"); | |
| }, "assigning invalid selector text ['" + selectorText + "']"); | |
| } | |
| </script> |