<!DOCTYPE html>
<html>
    <head>
        <title>Shape Outside Inset 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 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 inset_calc_tests = [];
            ParsingUtils.calcTestValues.forEach(function(value) {
                testCase = ['inset('+ value[0] +')',
                            'inset('+ value[1] +')'];
                if(Object.prototype.toString.call( value[2] ) === '[object Array]' && value[2].length == 2) {
                    testCase.push([ 'inset('+ value[2][0] +')', 'inset('+ value[2][1] +')' ]);
                } else {
                    testCase.push('inset('+ value[2] +')');
                }
                inset_calc_tests.push(testCase);
            });
            ParsingUtils.calcTestValues.forEach(function(value) {
                testCase = ['inset('+ value[0] +' '+ value[0] +')',
                            'inset('+ value[1] +')'];
                if(Object.prototype.toString.call( value[2] ) === '[object Array]' && value[2].length == 2) {
                    testCase.push([ 'inset('+ value[2][0] +')', 'inset('+ value[2][1] +')' ]);
                } else {
                    testCase.push('inset('+ value[2] +')');
                }
                inset_calc_tests.push(testCase);
            });
            generate_tests(ParsingUtils.testInlineStyle, ParsingUtils.buildCalcTests(inset_calc_tests, 'value'));
            generate_tests(ParsingUtils.testComputedStyle, ParsingUtils.buildCalcTests(inset_calc_tests, 'computed'));
        </script>
    </body>
</html>
