<!DOCTYPE html>
<html>
<head>
<style>
span { border-color: lime ! important; }
div { border-color: orange; }
div#id2 { border-color: yellow; }
</style>
<script src="../../../resources/js-test-pre.js"></script>
<script src="../../dom/shadow/resources/polyfill.js"></script>
</head>
<body>
<div>
  <style scoped>
      div { border-color: green ! important; }
      div { border-color: red; }
      div#id2 {border-color: purple; }
  </style>
  <div>
    <style scoped>
        div { border-color: blue; }
    </style>
    <div id="id1"></div>
  </div>
  <div>
    <style scoped>
        div#id2 { border-color: blue; }
    </style>
    <div id="id2"></div>
  </div>
  <div>
    <style scoped>
        div { border-color: blue; }
    </style>
    <div id="id3" style="border-color: red;"></div>
  </div>
  <div>
    <style scoped>
      div { border-color: blue !important; }
    </style>
    <div id="id4"></div>
  </div>
  <div id="host1">Shadow Host</div>
</div>
<div>
  <style scoped>
      span#id5 { border-color: blue; }
  </style>
  <span id="id5"></span>
</div>
<div>
  <style scoped>
      span { border-color: blue !important; }
  </style>
  <span id="id6"></span>
</div>
<div>
  <style scoped>
      div { border-color: red;}
  </style>
  <div id="host2">Shadow Host</div>
</div>
</body>
<script>
description("Test that rules in an inner scoped stylesheet don't override !important rules declared in an outer scoped stylesheet.");

var target1 = document.getElementById("id1");
debug("Case1: The target element has any matched important rule declared in an outer scoped stylesheet, and the element also has any matched normal rule declared in an inner scoped stylesheet.");
shouldBe('getComputedStyle(target1).borderColor', '"rgb(0, 128, 0)"');

debug("Case2: The target element has any matched important rule declared in an outer scoped stylesheet, and the element also has a matched normal ID rule declared in an inner scoped stylesheet.");
var target2 = document.getElementById("id2");
shouldBe('getComputedStyle(target2).borderColor', '"rgb(0, 128, 0)"');

debug("Case3: The target element has any matched important rule declared in an outer scoped stylesheet, and the element also has matched normal rules declared in an inner scoped stylesheet and in a STYLE attribute.");
var target3 = document.getElementById("id3");
shouldBe('getComputedStyle(target3).borderColor', '"rgb(0, 128, 0)"');

debug("Case4: The target element has matched important rules. One is declared in an outer scoped stylesheet and the other is declared in an inner scoped stylesheet.");
var target4 = document.getElementById("id4");
shouldBe('getComputedStyle(target4).borderColor', '"rgb(0, 0, 255)"');

debug("Case5: The target element has any matched important rule declared in an author stylesheet, and the element also has matched normal rules declared in an inner scoped stylesheet.");
var target5 = document.getElementById("id5");
shouldBe('getComputedStyle(target5).borderColor', '"rgb(0, 255, 0)"');

debug("Case6: The target element has matched important rules. One is declared in an author stylesheet (not scoped) and the other is declared in a scoped stylesheet.");
var target6 = document.getElementById("id6");
shouldBe('getComputedStyle(target6).borderColor', '"rgb(0, 0, 255)"');

debug("Case7: The target element has any matched important rule declared in an outer scoped stylesheet. The element is in a shadow dom tree whose shadow root has apply-author-styles true. The shadow dom tree has any other normal rules which match the element.");
var host1 = document.getElementById("host1");
var shadowRoot1 = host1.webkitCreateShadowRoot();
shadowRoot1.applyAuthorStyles = true;
shadowRoot1.innerHTML = '<style>div#shadow1 { color: blue; }</style><div id="shadow1"></div>';
var target7 = shadowRoot1.getElementById("shadow1");
shouldBe('getComputedStyle(target7).borderColor', '"rgb(0, 128, 0)"');

debug("Case8: The target element in a shadow dom tree has any matched important rule declared in an outer scoped stylesheet in an enclosing shadow dom tree. The target element's shadow root has apply-author-styles true.");
var host2 = document.getElementById("host2");
var shadowRoot2 = host2.webkitCreateShadowRoot();
shadowRoot2.applyAuthorStyles = false;
shadowRoot2.innerHTML = '<style>div { border-color: green !important; }</style><div id="shadow2"></div>';

var hostInShadowTree2 = shadowRoot2.getElementById("shadow2");
var shadowRoot3 = hostInShadowTree2.webkitCreateShadowRoot();
shadowRoot3.applyAuthorStyles = true;
shadowRoot3.innerHTML = '<style>div#shadow3 { border-color: blue; }</style><div id="shadow3"></div>';
var target8 = shadowRoot3.getElementById("shadow3");
shouldBe('getComputedStyle(target8).borderColor', '"rgb(0, 128, 0)"');

debug("Case8': The target element is in a shadow dom tree. An enclosing shadow dom tree has some stylesheet which declares an important rule. The target element's shadow root has apply-author-styles false.");
shadowRoot3.applyAuthorStyles = false;
shouldBe('getComputedStyle(target8).borderColor', '"rgb(0, 0, 255)"');

</script>
<script src="../../../resources/js-test-post.js"></script>
</html>
