'use strict';

function query_is_css_parseable(query) {
  const style = document.createElement('style');
  style.type = 'text/css';
  document.head.appendChild(style);

  const sheet = style.sheet;
  try {
    sheet.insertRule("@media " + query + "{}", 0);
    return sheet.cssRules.length == 1 &&
        sheet.cssRules[0].media.mediaText != "not all";
  } finally {
    while (sheet.cssRules.length)
      sheet.deleteRule(0);
    style.remove();
  }
}

function query_should_be_css_parseable(query) {
  test(() => {
    assert_true(query_is_css_parseable(query));
  }, "Should be parseable in a CSS stylesheet: '" + query + "'");
}

function query_should_not_be_css_parseable(query) {
  test(() => {
    assert_false(query_is_css_parseable(query));
  }, "Should not be parseable in a CSS stylesheet: '" + query + "'");
}

function query_is_js_parseable(query) {
  // We cannot rely on whether a given feature is on or off, so only check the
  // 'media' member of the result.
  const match = window.matchMedia(query);
  return match.media == query;
}

function query_should_be_js_parseable(query) {
  test(() => {
    assert_true(query_is_js_parseable(query));
  }, "Should be parseable in JS: '" + query + "'");
}

function query_should_not_be_js_parseable(query) {
  test(() => {
    assert_false(query_is_js_parseable(query));
  }, "Should not be parseable in JS: '" + query + "'");
}
