<!DOCTYPE html>
<meta charset=utf-8>
<title>CSSOM StyleRule selectorText property setter with namespaces</title>
<link rel="help" href="https://drafts.csswg.org/cssom-1/#dom-cssstylerule-selectortext">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>

<style type="text/css" id="styleElement">
@namespace url(http://www.w3.org/1999/xhtml);
@namespace svg url(http://www.w3.org/2000/svg);

svg|*.style0 { background-color: rgb(0, 0, 255) !important; }
svg|*.style1 { background-color: rgb(255, 0, 255); }
</style>

<span>
  <p></p>

  <svg height="30" width="200" id="container" class="style1" lang="zh-CN" language segment="42 43">
    <text x="0" y="15">SVG text</text>
  </svg>
</span>

<script>
  var styleSheet = document.getElementById("styleElement").sheet;
  var rule = styleSheet.cssRules[2];

  var divContainerStyle = getComputedStyle(document.getElementById("container"));

  const originalStyleSelector = "svg|*.style0";

  var assertColors = function(selectorMatches) {
    assert_equals(divContainerStyle.getPropertyValue('background-color'), selectorMatches ? "rgb(0, 0, 255)" : "rgb(255, 0, 255)")
  };

  [
    {selector: ".style1", isMatch: false, },
    {selector: "svg|*.style1  ", isMatch: true, normalizedSelector: "svg|*.style1"},
    {selector: "*|*.style1  ", isMatch: true, normalizedSelector: "*|*.style1"},
    {selector: " *.style1  ", isMatch: false, normalizedSelector: ".style1"},
    {selector: "p", isMatch: false},
  ].forEach(function(testCase) {
    test(function() {
      // Check if starting with the default value.
      assert_equals(rule.selectorText, originalStyleSelector);

      this.add_cleanup(function() { rule.selectorText = originalStyleSelector; });

      assertColors(false);

      rule.selectorText = testCase.selector;

      var expectedSelector = testCase.normalizedSelector ? testCase.normalizedSelector : testCase.selector;

      assert_equals(rule.selectorText, expectedSelector);

      assertColors(testCase.isMatch);
    }, "CSSStyleRule: selectorText value: |" + testCase.selector + "| isMatch: " + testCase.isMatch);
  });
</script>
