<!DOCTYPE html>
<html>
 <head>
  <title>CSS Test: CSSOM Media Query List Serialization</title>
  <link rel="author" title="Ben Sheldon" href="mailto:ben@codeforamerica.org">
  <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">
  <link rel="help" href="http://www.w3.org/TR/cssom-1/#serializing-media-queries">
  <link rel="help" href="http://www.w3.org/TR/cssom-1/#serialize-a-media-query-list">
  <meta name="flags" content="dom">
  <meta name="assert" content="MediaLists are serialized according to the specification">
  <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">

    var styleElement;
    var styleSheet;
    var mediaList;

    // Setup
    function setup() {
      styleElement = document.getElementById("styleElement");

      if (styleElement) {
        // teardown
        document.getElementsByTagName("head")[0].removeChild(styleElement);
        styleElement = undefined;
        styleSheet = undefined;
        mediaList = undefined;
      }

      styleElement = document.createElement("style");
      styleElement.id = "styleElement";
      styleElement.type = "text/css";
      styleElement.media = "all";
      document.getElementsByTagName("head")[0].appendChild(styleElement);
      styleSheet = styleElement.sheet;
      mediaList = styleSheet.media;
    }

    // MediaList.mediaText equals the 'media' value of the initial 'style' element.
    test(function() {
        setup();

        assert_equals(mediaList.mediaText, "all");

    }, "mediatest_medialist_serialize_element");

    // To serialize a comma-separated list concatenate all items of the list in list order while separating them by \",\" (U+002C), followed by a space (U+0020).
    test(function() {
      setup();

      mediaList.appendMedium('screen');
      assert_equals(mediaList.mediaText, "all, screen");

    }, "mediatest_medialist_serialize_comma");

    // If the media query list is empty return the empty string.
    test(function() {
      setup();

      mediaList.deleteMedium('all');
      assert_equals(mediaList.mediaText, "");

    }, "mediatest_medialist_serialize_empty");

    // Each media query should be sorted in the same order as they appear in the list of media queries.
    test(function() {
      setup();

      mediaList.appendMedium('screen');
      mediaList.appendMedium('print');
      assert_equals(mediaList.mediaText, "all, screen, print");

    }, "mediatest_medialist_serialize_order");

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