<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>CSSOM - MediaList interface</title>
    <link rel="help" href="https://drafts.csswg.org/cssom/#the-medialist-interface">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <style>
        @media screen and (min-width: 480px), print, projection {}
    </style>

    <script>
    test(function () {
        var media = document.styleSheets[0].cssRules[0].media;
        assert_equals(media.length, 3, "MediaList length attribute");
        assert_equals(media.mediaText, "screen and (min-width: 480px), print, projection", "MediaList mediaText attribute");
        assert_equals(media.toString(), "screen and (min-width: 480px), print, projection", "MediaList toString method");
        assert_equals(media[0], "screen and (min-width: 480px)", "MediaList indexed getter");
        assert_equals(media[1], "print", "MediaList indexed getter");
        assert_equals(media[2], "projection", "MediaList indexed getter");
        assert_equals(media[3], undefined, "MediaList indexed getter with out of range");
        assert_equals(media.item(0), "screen and (min-width: 480px)", "MediaList item method");
        assert_equals(media.item(3), null, "MediaList item method");

        media.deleteMedium("print");
        assert_equals(media.length, 2, "MediaList length attribute after delete method");
        assert_equals(media.mediaText, "screen and (min-width: 480px), projection", "MediaList mediaText attribute after delete method");
        assert_equals(media.toString(), "screen and (min-width: 480px), projection", "MediaList toString method after delete method");
        assert_equals(media[1], "projection", "MediaList indexed getter after delete method");
        assert_equals(media[2], undefined, "MediaList indexed getter with out of range after delete method");
        assert_equals(media.item(1), "projection", "MediaList indexed getter after delete method");
        assert_equals(media.item(2), null, "MediaList item method after delete method");

        media.appendMedium("speech");
        assert_equals(media.length, 3, "MediaList length attribute after append method");
        assert_equals(media.mediaText, "screen and (min-width: 480px), projection, speech", "MediaList mediaText attribute after append method");
        assert_equals(media.toString(), "screen and (min-width: 480px), projection, speech", "MediaList toString method after append method");
        assert_equals(media[1], "projection", "MediaList indexed getter after append method");
        assert_equals(media[2], "speech", "MediaList indexed getter after append method");
        assert_equals(media[3], undefined, "MediaList indexed getter with out of range after append method");
        assert_equals(media.item(2), "speech", "MediaList item method after append method");
        assert_equals(media.item(3), null, "MediaList item method after append method");

        media.mediaText = null;
        assert_equals(media.mediaText, "", "MediaList mediaText attribute should be empty string in case of null");
        assert_equals(media.toString(), "", "MediaList toString method should be empty string in case of null");

        var rule = document.styleSheets[0].cssRules[0];
        rule.media = "speech";
        assert_equals(rule.media.mediaText, "speech", "MediaList mediaText attribute should be updated");
    });
    </script>
</head>
</html>
