<!DOCTYPE html>
<html>
    <head>
        <title>Shape Margin - inherit</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="The shape-margin value is not inherited and can be assigned the 'inherit' value.">
        <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">

            function setUpTest(parentValue, childValue) {
                var outer = document.createElement("div");
                var inner = document.createElement("div");
                outer.appendChild(inner);

                outer.style.setProperty("shape-outside", "content-box");
                outer.style.setProperty("shape-margin", parentValue);
                inner.style.setProperty("shape-outside", "circle()");
                inner.style.setProperty("shape-margin", childValue);

                document.body.appendChild(outer);

                var inline = inner.style.getPropertyValue("shape-margin");
                var style = getComputedStyle(inner);
                var computed = style.getPropertyValue("shape-margin");
                document.body.removeChild(outer);

                return [inline, computed];
            }

            test(function() {
                var results = setUpTest("10px", "inherit");
                assert_equals(results[0], "inherit");
                assert_equals(results[1], "10px");
            }, "shape-margin can be assigned 'inherit' value");

            test(function() {
                var results = setUpTest("5px", null);
                assert_equals(results[0], null);
                assert_equals(results[1], "0px");
            }, "shape-margin is not inherited and defaults to 0px");

            test(function() {
                var results = setUpTest("15px", "10px");
                assert_equals(results[0], "10px");
                assert_equals(results[1], "10px");
            }, "shape-margin is not inherited");

        </script>
    </body>
</html>
