<!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">

    // MediaList.deleteMedium called without argument throws error.
    test(function() {
      media_list = setup();
      assert_throws_js(TypeError, function() { media_list.deleteMedium(); });
    }, "deleteMedium_called_without_argument");

    // MediaList.deleteMedium removes correct medium and updates corresponding properties.
    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");

    // MediaList.deleteMedium doesn't modify MediaList when medium is not found.
    test(function() {
      media_list = setup();

      media_list.appendMedium("all");

      assert_throws_dom("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");

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