<!DOCTYPE html>
<html>
  <head>
    <title>CSS Backgrounds and Borders Test: background shorthand - background-color 'red'</title>
    <link rel="author" title="Intel" href="http://www.intel.com" />
    <link rel="help" href="http://www.w3.org/TR/css3-background/#the-background" />
    <meta name="flags" content="dom" />
    <meta name="assert" content="Check that given a valid declaration, for each layer the shorthand 'backgound' first sets the corresponding layer of each of 'background-image', 'background-position', 'background-size', 'background-repeat', 'background-origin', 'background-clip' and 'background-attachment' to that property's initial value, then assigns any explicit values specified for this layer in the declaration, and finally 'background-color' is set to the specified color, if any, else set to its initial value" />
    <style>
        #test {
            background: red;
        }
    </style>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
    <div id="log"></div>
    <div id="test"></div>
    <script>
        var cs = getComputedStyle(document.getElementById("test"), null);

        test(function() {
            assert_equals(cs.getPropertyValue("background-image"),
                "none", "background initial value for background-image");
        }, "background_specified_color_image");

        test(function() {
            assert_equals(cs.getPropertyValue("background-position"),
                "0% 0%", "background initial value for background-position");
        }, "background_specified_color_position");

        test(function() {
            assert_equals(cs.getPropertyValue("background-size"),
                "auto", "background initial value for background-size");
        }, "background_specified_color_size");

        test(function() {
            assert_equals(cs.getPropertyValue("background-repeat"),
                "repeat", "background initial value for background-repeat");
        }, "background_specified_color_repeat");

        test(function() {
            assert_equals(cs.getPropertyValue("background-attachment"),
                "scroll", "background initial value for background-attachment");
        }, "background_specified_color_attachment");

        test(function() {
            assert_equals(cs.getPropertyValue("background-origin"),
                "padding-box", "background initial value for background-origin");
        }, "background_specified_color_origin");

        test(function() {
            assert_equals(cs.getPropertyValue("background-clip"),
                "border-box", "background initial value for background-clip");
        }, "background_specified_color_clip");

        test(function() {
            assert_equals(cs.getPropertyValue("background-color"),
                "rgb(255, 0, 0)", "background specified value for background-color");
        }, "background_specified_color_color");
    </script>
  </body>
</html>
