<!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="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 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>
