<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<style>
    @media screen and (min-width: 480px) {
        body { background-color: lightgreen; }
    }
    @media {
        body { background-color: red; }
    }
    @supports (width: 0) {
        s { width: 0; }
    }
</style>
<p>Test for @media CSSOM <a href="http://crbug.com/651792">bug 651792</a>.</p>
<script>
    test(function(){
        assert_equals(Object.getPrototypeOf(CSSMediaRule.prototype), CSSConditionRule.prototype);
        assert_equals(Object.getPrototypeOf(CSSSupportsRule.prototype), CSSConditionRule.prototype);
    }, "CSSConditionRule protype chain.");

    var rules = document.styleSheets[0].cssRules;
    test(function(){
        assert_equals(CSSRule.STYLE_RULE,1);
        assert_equals(CSSRule.MEDIA_RULE,4);
        assert_equals(rules.length, 3);
        assert_equals(rules[0].type, 4);
        assert_equals(rules[0].cssRules.length, 1);
        assert_equals(rules[0].cssRules[0].type, 1);
        assert_equals(rules[0].media.mediaText, "screen and (min-width: 480px)");
        assert_equals(rules[0].conditionText, "screen and (min-width: 480px)");
        assert_equals(rules[0].media.mediaText,rules[0].conditionText);
        assert_equals(rules[0].cssText,
                          "@media screen and (min-width: 480px) {\n" +
                          "  body { background-color: lightgreen; }\n" +
                          "}");
    }, "@media inherited from CSSConditionRule.");

    test(function(){
        assert_equals(rules.length, 3);
        assert_equals(rules[1].type, 4);
        assert_equals(rules[1].cssRules.length, 1);
        assert_equals(rules[1].cssRules[0].type, 1);
        assert_equals(rules[1].media.mediaText, "");
        assert_equals(rules[1].conditionText, "");
        assert_equals(rules[1].media.mediaText,rules[1].conditionText);
        assert_equals(rules[1].cssText,
                          "@media  {\n" +
                          "  body { background-color: red; }\n" +
                          "}");
    }, "@media inherited from CSSConditionRule, empty media.");

    test(function(){
        assert_equals(rules.length, 3);
        assert_equals(rules[2].cssRules.length, 1);
        assert_equals(rules[2].conditionText, "(width: 0)");
        assert_equals(rules[2].cssText,
                          "@supports (width: 0) {\n" +
                          "  s { width: 0px; }\n" +
                          "}");
    }, "@supports inherited from CSSConditionRule.");
</script>
