<!DOCTYPE html>
<html>
<head>
  <title>CSS Test: CSSOM MediaList Interfaces</title>
  <link rel="author" title="Chapman Shoop" href="mailto:chapman.shoop@gmail.com">
  <link rel="reviewer" title="Ms2ger" href="mailto:ms2ger@gmail.com"> <!--  2012-06-17  -->
  <link rel="help" href="https://drafts.csswg.org/cssom/#the-medialist-interface">
  <meta name="flags" content="dom">
  <meta name="assert" content="MediaList object has deleteMedium method and it functions properly.">
  <script src="/resources/testharness.js" type="text/javascript"></script>
  <script src="/resources/testharnessreport.js" type="text/javascript"></script>
</head>

<body>
  <noscript>Test not run - javascript required.</noscript>
  <div id="log"></div>

  <script type="text/javascript">
    function setup() {
      // Clean out any old style element
      var old_style_el = document.getElementById('test_style');
      if (old_style_el) {
        document.head.removeChild(old_style_el);
      }

      // Create a fresh style element and return its media attribute
      var style_el = document.createElement('style');
      style_el.setAttribute('id', 'test_style');
      document.head.appendChild(style_el);
      return style_el.sheet.media;
    }
  </script>

  <script type="text/javascript">

    test(function() {
      media_list = setup();
      assert_throws(new TypeError, function() { media_list.deleteMedium(); });
    }, "deleteMedium_called_without_argument",
    { assert: "MediaList.deleteMedium called without argument throws error." });

    test(function() {
      media_list = setup();

      media_list.appendMedium("screen");
      media_list.appendMedium("all");

      media_list.deleteMedium("screen");

      assert_equals(media_list.length, 1);
      assert_equals(media_list.item(0), "all");
      assert_equals(media_list.mediaText, "all");
    }, "deleteMedium_removes_correct_medium",
    { assert: "MediaList.deleteMedium removes correct medium and updates corresponding properties." });

    test(function() {
      media_list = setup();

      media_list.appendMedium("all");

      assert_throws("NotFoundError", () => media_list.deleteMedium("screen"));

      assert_equals(media_list.length, 1);
      assert_equals(media_list.item(0), "all");
      assert_equals(media_list.mediaText, "all");
    }, "deleteMedium_no_matching_medium_to_remove",
    { assert: "MediaList.deleteMedium doesn't modify MediaList when medium is not found." });

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