<!DOCTYPE html>
<html>
    <body>
        <script src="../../resources/js-test-pre.js"></script>
        <div id="testDiv"></div>
        <script>
            description("Tests parsing and re-serializing of various valid and invalid calc expressions.");

            var element = document.getElementById("testDiv");
            
            function testProperty(propertyName)
            {
                function testExpression(expression, specifiedValue, computedValue)
                {
                    debug('');
                    element.style[propertyName] = '999px';

                    evalAndLog(`element.style["${propertyName}"] = "${expression}"`);
                    shouldBeEqualToString(`element.style['${propertyName}']`, `${specifiedValue}`);
                    shouldBeEqualToString(`getComputedStyle(element).getPropertyValue('${propertyName}')`, `${computedValue}`);
                }
                
                function testValue(expression, computedValue)
                {
                    debug('');
                    element.style[propertyName] = '999px';
                    evalAndLog(`element.style["${propertyName}"] = "${expression}"`);
                    var value = Math.round(getComputedStyle(element).getPropertyValue(propertyName).slice(0,-2));
                    shouldBe(`${value}`, computedValue);
                }

                // Valid expressions.
                testExpression('calc(100px)', 'calc(100px)', '100px');
                testExpression('max(100px + 200px)', 'max(300px)', '300px');
                testExpression('max(100px , 200px)', 'max(200px)', '200px');
                testExpression('max(100px,200px)', 'max(200px)', '200px');
                testExpression('clamp(100px,123px,200px)', 'clamp(100px, 123px, 200px)', '123px');
                testExpression('clamp(100px,300px,200px)', 'clamp(100px, 300px, 200px)', '200px');
                testExpression('clamp(200px,300px,100px)', 'clamp(200px, 300px, 100px)', '200px');
                testExpression('clamp((50px + 50px),40px,200px)', 'clamp(100px, 40px, 200px)', '100px');
                testExpression('clamp(50px + 50px,40px,200px)', 'clamp(100px, 40px, 200px)', '100px');
                testExpression('min(100px,0%)', 'min(100px, 0%)', propertyName == 'width' ? '0px' : "min(100px, 0%)");
                testExpression('max(100px,0%)', 'max(100px, 0%)', propertyName == 'width' ? '100px' : "max(100px, 0%)");
                testExpression('clamp(100px,0%,1%)', 'clamp(100px, 0%, 1%)', propertyName == 'width' ? '100px' : "clamp(100px, 0%, 1%)");
                testExpression('calc(100px * pow(2, pow(2, 2)))', 'calc(1600px)', '1600px');
                testExpression('calc(1px * pow(2, 3))', 'calc(8px)', '8px')
                testExpression('calc(100px * sqrt(100))', 'calc(1000px)', '1000px');
                testExpression('calc(1px * sqrt(999))', 'calc(31.606961258558215px)', propertyName == 'width' ? '31.59375px' : '31.606962203979492px');
                testExpression('calc(1px * pow(2, sqrt(100))', 'calc(1024px)', '1024px');
                testExpression('hypot(4px, 5px, 7px, 9px)', 'hypot(13.076696830622021px)', propertyName == 'width' ? '13.0625px' : '13.076696395874023px');
                testExpression('hypot(3px, 4px)', 'hypot(5px)', '5px');
                testExpression('calc(100px * hypot(3, 4))', 'calc(500px)', '500px');
                testExpression('hypot(-5px)', 'hypot(5px)', '5px');
                testExpression('calc(1px * hypot(-5))', 'calc(5px)', '5px');
                testExpression('calc(1px * hypot(10000))', 'calc(10000px)', '10000px');
                testExpression('calc(2px * sqrt(100000000))', 'calc(20000px)', '20000px');
                testExpression('calc(3px * pow(200, 4))', 'calc(4800000000px)', '33554428px');
                testValue('calc(sin(90deg) * 100px)', '100');
                testValue('calc(sin(45deg  +  45deg ) * 100px)', '100');
                testValue('calc(cos( 0 ) * 100px)', '100');
                testValue('calc(cos( 30deg - 30deg ) * 100px)', '100');
                testValue('calc(tan(45deg)*100px)', '100');
                testValue('calc(tan(30deg + 15deg) * 100px)', '100');
                testValue('calc(sin(pi/2) * 100px)', '100');
                testValue('calc(cos(e - e) * 100px)', '100');

                // Non-parsing expressions.
                testExpression('calc(100px, 200px)', '999px', '999px');
                testExpression('calc(100px  200px)', '999px', '999px');
                testExpression('calc(100px ( 200px)', '999px', '999px');
                testExpression('min(100px 200px)', '999px', '999px');
                testExpression('max(100px 200px)', '999px', '999px');
                testExpression('max(100px,, 200px)', '999px', '999px');
                testExpression('max(100px, , 200px)', '999px', '999px');
                testExpression('max(100px, 200px,)', '999px', '999px');
                testExpression('clamp(200px,300px)', '999px', '999px');
                testExpression('clamp(200px,300px,)', '999px', '999px');
                testExpression('clamp(200px,,300px)', '999px', '999px');
                testExpression('clamp((),,300px)', '999px', '999px');
                testExpression('clamp(1px,2px,2px,4px)', '999px', '999px');
                testExpression('calc(1px * pow(1))', '999px', '999px');
                testExpression('calc(1px * pow(2px, 3px))', '999px', '999px');
                testExpression('calc(sqrt(100px)', '999px', '999px');
                testExpression('hypot(2px, 40%)', '999px', '999px');
                testExpression('hypot(2px, 3)', '999px', '999px');
                testExpression('hypot(3, ,4)', '999px', '999px');
                testExpression('calc(1px * pow(2 3))', '999px', '999px');
                testExpression('hypot()', '999px', '999px');
                testExpression('calc(pow(2))', '999px', '999px');
                testExpression('pow())', '999px', '999px', '999px'); 
                testExpression('calc(sqrt())', '999px', '999px');
                testExpression('calc(sqrt(100, 200))', '999px', '999px');
                testExpression('calc(sin(90px) * 100px)', '999px', '999px');
                testExpression('calc(sin(30deg + 1.0471967rad, 0) * 100px)', '999px', '999px');
                testExpression('calc(cos( 0 ,) * 100px)', '999px', '999px');
                testExpression('calc(cos( () 30deg - 0.523599rad ) * 100px)', '999px', '999px');
                testExpression('calc(tan(45deg ) ) * 100px)', '999px', '999px');
                testExpression('calc(tan(30deg, + 0.261799rad) * 100px)', '999px', '999px');
                testExpression('calc(sin(piiii/4) * 100px)', '999px', '999px');
                testExpression('calc(sin(e e/4) * 100px)', '999px', '999px');
                testExpression('calc(sin() * 100px)', '999px', '999px');
            }

            testProperty("width");
            testProperty("min-width");
        </script>
        <script src="../../resources/js-test-post.js"></script>
    </body>
</html>
