<!doctype html>
<title>Inclusive Ranges</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>

foo { z-index: 0; }

</style>

<meta name="author" title="Tab Atkins-Bittner">
<link rel=help href="https://drafts.csswg.org/css-syntax/#digit">
<link rel=help href="https://drafts.csswg.org/css-syntax/#non-printable-code-point">

<script>

function roundtripIdent(str) {
    const rule = document.styleSheets[0].cssRules[0];
    rule.selectorText = "original-ident";
    rule.selectorText = str;
    // Check for parse error.
    if(rule.selectorText == "original-ident") return "parse error";
    return rule.selectorText;
}
function roundtripInteger(str) {
    const rule = document.styleSheets[0].cssRules[0];
    rule.style.zIndex = "12345";
    rule.style.zIndex = str;
    // Check for parse error.
    if(rule.style.zIndex == "12345") return "parse error";
    return rule.style.zIndex;
}
function testInteger(input, expected) {
    test(()=>{
        assert_equals(roundtripInteger(input), expected);
    }, `"${input}" becomes "${expected}"`);
}
function testIdent(input, expected) {
    test(()=>{
        assert_equals(roundtripIdent(input), expected);
    }, `"${input}" becomes "${expected}"`);
}

/* Digits are the inclusive range 0-9 */
for(var i = 0; i <= 9; i++) {
    testInteger(i+"", i+"");
}

/* Non-printables are the inclusive ranges 0-8, b, e-1f, or 7f */
// 0 never shows up due to preprocessing, so start at 1
for(var i = 1; i <= 8; i++) {
    testIdent("foo"+String.fromCodePoint(i), "parse error");
}
testIdent("foo"+String.fromCodePoint(0xb), "parse error");
for(var i = 0xe; i <= 0x1f; i++) {
    testIdent("foo"+String.fromCodePoint(i), "parse error");
}
testIdent("foo" + String.fromCodePoint(0x7f), "parse error");

</script>
