<!doctype html>
<style type="text/css">@media screen { }</style>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<div id=log></div>
<script>
var rules = document.styleSheets[0].cssRules;
var mediaList = rules.item(0).media;

// - appendMedium()

test(function () {
    mediaList.mediaText = "screen";
    mediaList.appendMedium("tv, screen");
    assert_equals(mediaList.mediaText, "screen");
    // CSSOM 4.1: Parsing media query returns none as
    // there are more than one; terminate steps.
}, "Add 'tv, screen' to 'screen'");

test(function () {
    mediaList.mediaText = "screen";
    mediaList.appendMedium("tv");
    assert_equals(mediaList.mediaText, "screen, tv");
    // The valid media query is appended.
}, "Add 'tv' to 'screen'");

test(function () {
    mediaList.mediaText = "screen, tv";
    mediaList.appendMedium("tv");
    assert_equals(mediaList.mediaText, "screen, tv");
    // CSSOM says to ignore if it exists, terminate steps.
}, "Add 'tv' to 'screen, tv'");

test(function () {
    mediaList.mediaText = "screen, tv";
    mediaList.appendMedium("screen");
    assert_equals(mediaList.mediaText, "screen, tv");
    // CSSOM says to ignore if it exists, where as
    // CSS 2.1 says to remove existing and then add
    // it to the end.
    // http://dev.w3.org/csswg/cssom/#dom-medialist-appendmedium
    // http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/stylesheets.html
}, "Add 'screen' to 'screen, tv'");

test(function () {
    mediaList.mediaText = "screen, tv";
    mediaList.appendMedium(" ");
    // Ignored; terminate steps.
    assert_equals(mediaList.mediaText, "screen, tv");
}, "Add ' ' to 'screen, tv'");

test(function () {
    mediaList.mediaText = "screen, tv";
    mediaList.appendMedium("");
    // Ignored; terminate steps.
    assert_equals(mediaList.mediaText, "screen, tv");
}, "Add '' to 'screen, tv'");

test(function () {
    mediaList.mediaText = "screen, tv";
    mediaList.appendMedium(",");
    assert_equals(mediaList.mediaText, "screen, tv");
    // CSSOM 4.1: Parsing media query returns none as
    // there are more than one; terminate steps.
}, "Add ',' to 'screen, tv'");

test(function () {
    mediaList.mediaText = "screen, tv";
    mediaList.appendMedium("&invalid");
    assert_equals(mediaList.mediaText, "screen, tv, not all");
    // Ignored; terminate steps.
}, "Add '&invalid' to 'screen, tv'");

test(function () {
    mediaList.mediaText = "screen, tv";
    mediaList.appendMedium("not all");
    assert_equals(mediaList.mediaText, "screen, tv, not all");
}, "Add 'not all' to 'screen, tv'");

test(function () {
    mediaList.mediaText = "screen, tv";
    mediaList.appendMedium("#?:/");
    assert_equals(mediaList.mediaText, "screen, tv, not all");
    // Ignored; terminate steps.
}, "Add '#?:/' to 'screen, tv'");

// - deleteMedium()

test(function () {
    mediaList.mediaText = "screen, tv, not all";
    mediaList.deleteMedium("&invalid");
    // Ignored; terminate steps.
    assert_equals(mediaList.mediaText, "screen, tv");
}, "Remove '&invalid' from 'screen, tv, not all'");

test(function () {
    mediaList.mediaText = "screen, tv";
    assert_throws("NOT_FOUND_ERR",
        function () { mediaList.deleteMedium("not all"); }
    );
    // Not found; throw NotFoundError.
}, "Remove 'not all' from 'screen, tv'");

test(function () {
    mediaList.mediaText = "screen, tv";
    assert_throws("NOT_FOUND_ERR",
        function () { mediaList.deleteMedium("cow"); }
    );
    // Not found; throw NotFoundError.
}, "Remove 'cow' from 'screen, tv'");

test(function () {
    mediaList.mediaText = "screen, tv, not all";
    mediaList.deleteMedium("not all");
    assert_equals(mediaList.mediaText, "screen, tv");
    // Remove any media query from the collection of media queries
    // for which comparing the media query returns true.
}, "Remove 'not all' from 'screen, tv, not all'");

test(function () {
    mediaList.mediaText = "screen, tv";
    mediaList.deleteMedium("tv");
    assert_equals(mediaList.mediaText, "screen");
    // Remove any media query from the collection of media queries
    // for which comparing the media query returns true.
}, "Remove 'tv' from 'screen, tv'");

test(function () {
    mediaList.mediaText = "not all, not all, tv, not all";
    mediaList.deleteMedium("not all");
    assert_equals(mediaList.mediaText, "tv");
    // Remove any media query from the collection of media queries
    // for which comparing the media query returns true.
}, "Remove 'not all' from 'not all, not all, tv, not all'");

test(function () {
    mediaList.mediaText = "not all, not all, tv, not all";
    mediaList.deleteMedium("tv");
    assert_equals(mediaList.mediaText, "not all, not all, not all");
    // Remove any media query from the collection of media queries
    // for which comparing the media query returns true.
}, "Remove 'tv' from 'not all, not all, tv, not all'");

test(function () {
    mediaList.mediaText = "tv, print, screen";
    mediaList.deleteMedium("tv, print");
    assert_equals(mediaList.mediaText, "tv, print, screen");
    // CSSOM 4.1: Parsing media query returns none as
    // there are more than one; terminate steps.
}, "Remove 'tv, print' from 'screen, tv, screen'");

test(function () {
    mediaList.mediaText = "screen, tv, not all";
    mediaList.deleteMedium("#?:/");
    // Ignored; terminate steps.
    assert_equals(mediaList.mediaText, "screen, tv");
}, "Remove '#?:/' from 'screen, tv, not all'");
</script>
