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