<link rel=author title="Tab Atkins-Bittner" href="https://www.xanthir.com/contact/">
<link rel="help" href="https://drafts.csswg.org/css-values/#calc-range">
<body><!doctype html>
<title>Serializing Integers Never Uses Scinot</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<link rel=author title="Tab Atkins-Bittner" href="https://www.xanthir.com/contact/">
<link rel="help" href="https://drafts.csswg.org/cssom/#serialize-a-css-component-value">
<!--
  Per CSSOM, integers always serialize all their digits out.
  They never serialize to scinot, regardless of size,
  because that makes them stop being an integer.
  This applies to custom properties as well.
-->
<body>

<script>

try {
CSS.registerProperty({
    name: "--two",
    value: "<integer>",
    inherits: true,
    initial: -1
});
}catch(e){}

testIntLength(4);
testIntLength(6);
testIntLength(8);
testIntLength(12);
// JS starts serializing with scinot at 22 digits...
testIntLength(25);

function testIntLength(len) {
    let el = document.body;
    const val = "1".repeat(len);
    test(()=>{
        el.removeAttribute("style");
        const nullVal = getComputedStyle(el).zIndex;
        el.style.zIndex=val;
        assert_not_equals(getComputedStyle(el).zIndex, nullVal)
    }, `z-index can take a ${len}-digit integer`);

    test(()=>{
        el.removeAttribute("style");
        el.style.setProperty("--one", val);
        assert_equals(getComputedStyle(el).getPropertyValue("--one"), val);
    }, `An unregistered custom prop can take a ${len}-digit integer`);

    test(()=>{
        el.removeAttribute("style");
        el.style.setProperty("--two", val);
        assert_equals(getComputedStyle(el).getPropertyValue("--two"), val);
    }, `An <integer> custom prop can take a ${len}-digit integer`);

    test(()=>{
        el.removeAttribute("style");
        el.style.zIndex = val;
        const standardVal = getComputedStyle(el).zIndex;
        el.removeAttribute("style");
        el.style.setProperty("--three", val);
        el.style.zIndex = "var(--three)";
        assert_equals(getComputedStyle(el).zIndex, standardVal);
    }, `z-index can take a custom property set to a ${len}-digit integer`);
}

</script>
