<!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="help" href="http://www.w3.org/TR/cssom-1/#the-medialist-interface">
  <meta name="flags" content="dom">
  <meta name="assert" content="MediaList object has appendMedium method and it functions properly.">
  <script src="/resources/testharness.js" type="text/javascript"></script>
  <script src="/resources/testharnessreport.js" type="text/javascript"></script>

  <script id="metadata_cache">/*
  {
    "appendMedium_correctly_appends_medium_to_empty_MediaList": { "assert": "MediaList.appendMedium correctly adds medium to empty MediaList." },
    "appendMedium_correctly_appends_medium_to_nonempty_MediaList": { "assert": "MediaList.appendMedium correctly adds medium to a MediaList that already has a medium." }
  }
*/</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();

      media_list.appendMedium("all");

      assert_equals(media_list.length, 1);
      assert_equals(media_list.item(0), "all");
      assert_equals(media_list.mediaText, "all");
    }, "appendMedium_correctly_appends_medium_to_empty_MediaList",
    { assert: "MediaList.appendMedium correctly adds medium to empty MediaList." });

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

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

      // The ordering of array items should be different from that of the mediaText element.
      // "all" should be appended after "screen" in the array, but "mediaText" should be
      // "all, screen" due to lexicographical sorting.
      assert_equals(media_list.length, 2);
      assert_equals(media_list.item(0), "screen");
      assert_equals(media_list.item(1), "all");
      assert_equals(media_list.mediaText, "all, screen");
    }, "appendMedium_correctly_appends_medium_to_nonempty_MediaList",
    { assert: "MediaList.appendMedium correctly adds medium to a MediaList that already has a medium." });

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