<!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>
        <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
    </head>
    <body>
        <div id="log"></div>
        <script type="text/javascript">
        setup({explicit_done: true});
        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);
        ParsingUtils.setupFonts();
        document.fonts.ready.then(()=> {
            generate_tests( ParsingUtils.testShapeMarginComputedStyle,
                            ParsingUtils.buildTestCases(shape_margin_valid_unit_tests, "computed"), true);
            ParsingUtils.restoreFonts();
            done();
        });
        </script>
    </body>
</html>
