<!doctype html>
<title>adoptedStyleSheets should stay when adopting to/from template document</title>
<link rel="author" title="Rakina Zata Amni" href="mailto:rakina@chromium.org">
<link rel="help" href="https://wicg.github.io/construct-stylesheets/">
<script src = '/resources/testharness.js'></script>
<script src = '/resources/testharnessreport.js'></script>
<body>
<div id="host"></div>
<template id='template'>
  <template id='nested_template'></template>
</template>
</body>
<script>
test(function() {
  let sheet = new CSSStyleSheet();
  sheet.replaceSync("div { color: red }");

  let host = document.getElementById("host");
  let root = host.attachShadow({ mode: "open" });
  root.adoptedStyleSheets = [sheet];
  assert_equals(root.adoptedStyleSheets.length, 1);
  assert_equals(root.adoptedStyleSheets[0], sheet);

  // adoptedStyleSheets is not cleared when adopted into a <template>.
  const template = document.getElementById("template");
  template.content.appendChild(host);
  assert_equals(root.adoptedStyleSheets.length, 1);
  assert_equals(root.adoptedStyleSheets[0], sheet);

  // adoptedStyleSheets is not cleared when adopted back in the main document.
  document.body.appendChild(host);
  assert_equals(root.adoptedStyleSheets.length, 1);
  assert_equals(root.adoptedStyleSheets[0], sheet);

  // adoptedStyleSheets is not cleared when adopted into a nested <template>.
  const nested_template = template.content.firstElementChild;
  nested_template.content.appendChild(host);
  assert_equals(root.adoptedStyleSheets.length, 1);
  assert_equals(root.adoptedStyleSheets[0], sheet);

  // adoptedStyleSheets is cleared when adopted into an <iframe>.
  const iframe = document.createElement("iframe");
  document.body.appendChild(iframe);
  iframe.contentDocument.body.appendChild(host);
  assert_equals(root.adoptedStyleSheets.length, 0);
}, "adoptedStyleSheets won'te be cleared when adopting into/from <template>s");
</script>
