<!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-notation">
        <meta name="assert" content="An inset's arguments may be in calc() values.">
        <meta name="flags" content="ahem 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>
