<!DOCTYPE html>
<html>
    <head>
        <title>Shape Outside Polygon args - calc() values</title>
        <link rel="author" title="Adobe" href="http://html.adobe.com/">
        <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com">
        <link rel="reviewer" title="Alan Stearns" href="mailto:stearns@adobe.com"> <!--  2014-03-04  -->
        <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#funcdef-polygon">
        <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-outside-property">
        <link rel="help" href="http://www.w3.org/TR/css3-values/#calc">
        <meta name="assert" content="A polygon's arguments may be in calc() values.">
        <meta name="flags" content="dom">
        <script src="../../../../resources/testharness.js"></script>
        <script src="../../../../resources/testharnessreport.js"></script>
        <script src="support/parsing-utils.js"></script>
    </head>
    <body>
        <div id="log"></div>
        <script type="text/javascript">
            var polygon_calc_tests = [];
            ParsingUtils.calcTestValues.forEach(function(value) {
                testCase = ['polygon('+ value[0] +' '+ value[0] +')',
                            'polygon('+ value[1] +' '+ value[1] +')'];
                if(Object.prototype.toString.call( value[2] ) === '[object Array]' && value[2].length == 2) {
                    testCase.push([
                                    'polygon('+ value[2][0] +' '+ value[2][0] +')',
                                    'polygon('+ value[2][1] +' '+ value[2][1] +')'
                                 ]);
                } else {
                    testCase.push('polygon('+ value[2] +' '+ value[2] +')');
                }
                polygon_calc_tests.push(testCase);
            });
            ParsingUtils.calcTestValues.forEach(function(value) {
                testCase = ['polygon(evenodd, '+ value[0] +' '+ value[0] +', '+ value[0] +' '+ value[0] +')',
                            'polygon(evenodd, '+ value[1] +' '+ value[1] +', '+ value[1] +' '+ value[1] +')'];
                if(Object.prototype.toString.call( value[2] ) === '[object Array]' && value[2].length == 2) {
                    testCase.push([
                                    'polygon(evenodd, '+ value[2][0] +' '+ value[2][0] +', '+ value[2][0] +' '+ value[2][0] +')',
                                    'polygon(evenodd, '+ value[2][1] +' '+ value[2][1] +', '+ value[2][1] +' '+ value[2][1] +')'
                                 ]);
                } else {
                    testCase.push('polygon(evenodd, '+ value[2] +' '+ value[2] +', '+ value[2] +' '+ value[2] +')');
                }
                polygon_calc_tests.push(testCase);
            });
            generate_tests(ParsingUtils.testInlineStyle, ParsingUtils.buildCalcTests(polygon_calc_tests, 'inline'));
            generate_tests(ParsingUtils.testComputedStyle, ParsingUtils.buildCalcTests(polygon_calc_tests, 'computed'));
        </script>
    </body>
</html>
