<!DOCTYPE html>
<html>
    <head>
        <title>Shape Margin Valid Values - Length Units</title>
        <link rel="author" title="Adobe" href="http://html.adobe.com/">
        <link rel="author" title="Rebecca Hauck" href="mailto:rhauck@adobe.com">
        <link rel="help" href="http://www.w3.org/TR/css-shapes-1/#shape-margin-property">
        <meta name="assert" content="shape-margin values may be in any length unit">
        <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 shape_margin_valid_unit_tests = [];
        ParsingUtils.validUnits.forEach(function(unit) {
            test = "10"+unit;
            testCase = new Object();
            // actual & expected_inline should be the same
            // expected_computed will get converted to the px value in the test framework
            testCase["actual"] = test;
            testCase["expected_inline"] = test;
            testCase["expected_computed"] = test;
            shape_margin_valid_unit_tests.push(testCase);
        });
        generate_tests( ParsingUtils.testShapeMarginInlineStyle,
                        ParsingUtils.buildTestCases(shape_margin_valid_unit_tests, "inline"), true);
        generate_tests( ParsingUtils.testShapeMarginComputedStyle,
                        ParsingUtils.buildTestCases(shape_margin_valid_unit_tests, "computed"), true);
        </script>
    </body>
</html>
