<!DOCTYPE html>
<html>
    <head>
        <title>Shape Outside Inset round 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-inset">
        <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="An inset's radial component 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 fullInset = '10px 10px 10px 10px';
            var serializedInset = "10px";

            var inset_round_calc_tests = [];
            ParsingUtils.calcTestValues.forEach(function(value) {
                testCase = ['inset('+ fullInset +' round '+ value[0] +')',
                            'inset('+ serializedInset +' round '+ value[1] +')'];
                // array check
                if(Object.prototype.toString.call( value[2] ) === '[object Array]' && value[2].length == 2) {
                    testCase.push([
                                    'inset('+ serializedInset +' round '+ value[2][0] +')',
                                    'inset('+ serializedInset +' round '+ value[2][1] +')'
                                 ]);
                } else {
                    testCase.push('inset('+ serializedInset +' round '+ value[2] +')');
                }
                inset_round_calc_tests.push(testCase);
            });
            ParsingUtils.calcTestValues.forEach(function(value) {
                testCase = ['inset('+ fullInset +' round '+ value[0] +' '+  value[0] +')',
                            'inset('+ serializedInset +' round '+ value[1] +')'];
                if(Object.prototype.toString.call( value[2] ) === '[object Array]' && value[2].length == 2) {
                    testCase.push([
                                    'inset('+ serializedInset +' round '+ value[2][0] +')',
                                    'inset('+ serializedInset +' round '+ value[2][1] +')'
                                 ]);
                } else {
                    testCase.push('inset('+ serializedInset +' round '+ value[2] +')');
                }
                inset_round_calc_tests.push(testCase);
            });
            generate_tests(ParsingUtils.testInlineStyle, ParsingUtils.buildCalcTests(inset_round_calc_tests, 'inline'));
            generate_tests(ParsingUtils.testComputedStyle, ParsingUtils.buildCalcTests(inset_round_calc_tests, 'computed'));
        </script>
    </body>
</html>
