<!doctype html>
<title>Selectors: CSSOM of case-sensitivity attribute selector</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
function new_sheet(use_media) {
  var style = document.getElementsByTagName('style')[0];
  if (style)
    style.parentNode.removeChild(style);
  style = document.createElement('style');
  document.head.appendChild(style);
  if (use_media) {
    style.textContent = '@media all {}';
    return style.sheet.cssRules[0];
  }
  return style.sheet;
}

var tests = [
  // test input, expected serialization
  ['[foo="bar"] /* sanity check */', '[foo="bar"]'],
  ['[foo="bar" i]', '[foo="bar" i]'],
  ['[foo="bar" /**/ i]', '[foo="bar" i]'],
  ['[foo="bar"/**/i]', '[foo="bar" i]'],
]

tests.forEach(function(arr) {
  var input = arr[0];
  var expected = arr[1];
  ["", " in @media"].forEach(function(use_media) {
    test(function() {
      var sheet = new_sheet(use_media);
      sheet.insertRule(input + ' {}', 0);
      assert_equals(sheet.cssRules.length, 1);
    }, input + ' insertRule' + use_media);

    test(function() {
      var sheet = new_sheet(use_media);
      sheet.insertRule(input + ' {}', 0);
      assert_equals(sheet.cssRules[0].cssText.substr(0, expected.length), expected);
    }, input + ' getting CSSRule#cssText' + use_media);

    test(function() {
      var sheet = new_sheet(use_media);
      sheet.insertRule('before_set {}', 0);
      sheet.cssRules[0].cssText = input + ' {}';
      assert_equals(sheet.cssRules[0].cssText.substr(0, expected.length), expected);
    }, input + ' setting CSSRule#cssText' + use_media);

    test(function() {
      var sheet = new_sheet(use_media);
      sheet.insertRule(input + ' {}', 0);
      assert_equals(sheet.cssRules[0].selectorText, expected);
    }, input + ' getting CSSStyleRule#selectorText' + use_media);

    test(function() {
      var sheet = new_sheet(use_media);
      sheet.insertRule('foobar {}', 0);
      sheet.cssRules[0].selectorText = input;
      assert_equals(sheet.cssRules[0].selectorText, expected);
    }, input + ' setting CSSStyleRule#selectorText' + use_media);
  });
});
</script>
