chromium/third_party/blink/web_tests/fast/borders/border-radius-parsing.html

<pre id="console"></pre>
<script>

    function log(message)
    {
        document.getElementById("console").appendChild(document.createTextNode(message + "\n"));
    }

    function testBorderRadiusStyleProperty(property, value, expected)
    {
        log ("Testing " + property + ": " + value + ";");
        var element = document.createElement("div");
        document.body.appendChild(element);
        element.style.setProperty(property, value);
        var failed = false;

        if(element.style[property] !== expected) {
            log("FAILED style: " + property + " was " + element.style[property] + " instead of " + expected);
            failed = true;  
        }


        if (!failed)
            log("SUCCESS");

        document.body.removeChild(element);
    }

    function testBorderRadiusValue(property, value, expectedRadii)
    {
        log ("Testing " + property + ": " + value + ";");
        var element = document.createElement("div");
        document.body.appendChild(element);
        element.style.setProperty(property, value);
        var computedStyle = getComputedStyle(element);
        var properties = ["border-top-left-radius", "border-top-right-radius",
                          "border-bottom-right-radius", "border-bottom-left-radius"];
        var failed = false;
        for (var i = 0; i < 4; ++i) {
            actualRadius = computedStyle.getPropertyValue(properties[i]);
            if (actualRadius === expectedRadii[i])
                continue;

            failed = true;
            log("FAILED: " + properties[i] + " was " + actualRadius + " instead of " + expectedRadii[i]);
        }
        if (!failed)
            log("SUCCESS");
        document.body.removeChild(element);
    }

    if (window.testRunner)
        testRunner.dumpAsText();



    testBorderRadiusStyleProperty("border-radius", "10px", "10px", "10px", "10px", "10px");
    testBorderRadiusStyleProperty("border-radius", "10px 20px 30px 40px", "10px 20px 30px 40px");
    testBorderRadiusStyleProperty("border-radius", "10px 20px 30px 40px 50px", "");
    testBorderRadiusStyleProperty("border-radius", "10px 20px", "10px 20px");
    
    testBorderRadiusValue("border-radius", "10px 20px", ["10px", "20px", "10px", "20px"]);
    testBorderRadiusValue("border-radius", "10px", ["10px", "10px", "10px", "10px"]);
    testBorderRadiusValue("border-radius", "10px 20px", ["10px", "20px", "10px", "20px"]);
    testBorderRadiusValue("-webkit-border-radius", "10px 20px", ["10px 20px", "10px 20px", "10px 20px", "10px 20px"]);
    testBorderRadiusValue("border-radius", "10px 20px 30px", ["10px", "20px", "30px", "20px"]);
    testBorderRadiusValue("border-radius", "10px 20px 30px 40px", ["10px", "20px", "30px", "40px"]);
    testBorderRadiusValue("border-radius", "10px 20px 30px 40px 50px", ["0px", "0px", "0px", "0px"]);
    testBorderRadiusValue("border-radius", "10px 20px 30px 40px / 15px", ["10px 15px", "20px 15px", "30px 15px", "40px 15px"]);
    testBorderRadiusValue("border-radius", "10px 20px 30px 40px / 15px 25px", ["10px 15px", "20px 25px", "30px 15px", "40px 25px"]);
    testBorderRadiusValue("border-radius", "10px 20px 30px 40px / 15px 25px 35px", ["10px 15px", "20px 25px", "30px 35px", "40px 25px"]);
    testBorderRadiusValue("border-radius", "10px 20px 30px 40px / 15px 25px 35px 45px", ["10px 15px", "20px 25px", "30px 35px", "40px 45px"]);
    testBorderRadiusValue("border-radius", "10px 20px 30px 40px / 15px 25px 35px 45px 55px", ["0px", "0px", "0px", "0px"]);
    testBorderRadiusValue("border-radius", "10px 20px 30px 40px / 15px 25px 35px 45px /", ["0px", "0px", "0px", "0px"]);
    testBorderRadiusValue("border-radius", "10px 20px 30px 40px / / 25px 35px 45px", ["0px", "0px", "0px", "0px"]);
    testBorderRadiusValue("border-radius", "/ 10px 20px 30px 40px", ["0px", "0px", "0px", "0px"]);
    testBorderRadiusValue("border-radius", "10px / 20px 30px 40px", ["10px 20px", "10px 30px", "10px 40px", "10px 30px"]);
    testBorderRadiusValue("border-radius", "10%", ["10%", "10%", "10%", "10%"]);
    testBorderRadiusValue("border-radius", "10% 20%", ["10%", "20%", "10%", "20%"]);
    testBorderRadiusValue("-webkit-border-radius", "10% 20%", ["10% 20%", "10% 20%", "10% 20%", "10% 20%"]);
    testBorderRadiusValue("border-radius", "10% 20% 30%", ["10%", "20%", "30%", "20%"]);
    testBorderRadiusValue("border-radius", "10% 20% 30% 40%", ["10%", "20%", "30%", "40%"]);
    testBorderRadiusValue("border-radius", "10% 20% 30% 40% 50%", ["0px", "0px", "0px", "0px"]);
    testBorderRadiusValue("border-radius", "10% 20% 30% 40% / 15%", ["10% 15%", "20% 15%", "30% 15%", "40% 15%"]);
    testBorderRadiusValue("border-radius", "10% 20% 30% 40% / 15% 25%", ["10% 15%", "20% 25%", "30% 15%", "40% 25%"]);
    testBorderRadiusValue("border-radius", "10% 20% 30% 40% / 15% 25% 35%", ["10% 15%", "20% 25%", "30% 35%", "40% 25%"]);
    testBorderRadiusValue("border-radius", "10% 20% 30% 40% / 15% 25% 35% 45%", ["10% 15%", "20% 25%", "30% 35%", "40% 45%"]);
    testBorderRadiusValue("border-radius", "10% 20% 30% 40% / 15% 25% 35% 45% 55%", ["0px", "0px", "0px", "0px"]);
    testBorderRadiusValue("border-radius", "10% 20% 30% 40% / 15% 25% 35% 45% /", ["0px", "0px", "0px", "0px"]);
    testBorderRadiusValue("border-radius", "10% 20% 30% 40% / / 25% 35% 45%", ["0px", "0px", "0px", "0px"]);
    testBorderRadiusValue("border-radius", "/ 10% 20% 30% 40%", ["0px", "0px", "0px", "0px"]);
    testBorderRadiusValue("border-radius", "10% / 20% 30% 40%", ["10% 20%", "10% 30%", "10% 40%", "10% 30%"]);
    testBorderRadiusValue("border-radius", "10% 20px", ["10%", "20px", "10%", "20px"]);
</script>