<!DOCTYPE html>
<html>
 <head>
  <title>CSS Test: CSSOM StyleSheet Initial Values</title>
  <link rel="author" title="Bear Travis" href="mailto:betravis@adobe.com">
  <link rel="help" href="http://www.w3.org/TR/cssom-1/#css-style-sheets">
  <meta name="flags" content="dom">
  <meta name="assert" content="StyleSheet and CSSStyleSheet objects have the properties specified in their interfaces">
  <script src="/resources/testharness.js" type="text/javascript"></script>
  <script src="/resources/testharnessreport.js" type="text/javascript"></script>
  <style id="styleElement" type="text/css" media="all" title="internal style sheet" disabled="disabled">
    @import url('support/a-green.css');
    * { margin: 0; padding: 0; }
  </style>
  <link id="linkElement" rel="stylesheet" href="support/b-green.css">
 </head>
 <body>
  <noscript>Test not run - javascript required.</noscript>
  <div id="log"></div>
  <script type="text/javascript">
    var styleElement = document.getElementById("styleElement");
    var linkElement = document.getElementById("linkElement");

    var styleSheet;
    var linkSheet;
    test(function() {
        assert_idl_attribute(styleElement, "sheet");
        assert_readonly(styleElement, "sheet");
        styleSheet = styleElement.sheet;
        assert_true(styleSheet instanceof CSSStyleSheet);
        assert_idl_attribute(linkElement, "sheet");
        linkSheet = linkElement.sheet;
        assert_true(linkSheet instanceof CSSStyleSheet);
    }, "sheet_property",
    { help: "http://www.w3.org/TR/cssom-1/#the-linkstyle-interface",
      assert: [ "styleElement.sheet exists", "styleElement.sheet is a CSSStyleSheet",
                "linkElement.sheet exists", "linkElement.sheet is a CSSStyleSheet"] });

    test(function () {
      var style = document.createElement("style");
      document.querySelector("head").appendChild(style);
      var sheet1 = style.sheet;
      assert_equals(sheet1.cssRules.length, 0);
      style.appendChild(document.createTextNode("a { color: green; }"));
      assert_equals(style.sheet.cssRules.length, 1);
    }, "sheet_property_updates",
    { help: "https://www.w3.org/TR/cssom-1/#the-linkstyle-interface",
      assert: "The sheet property on LinkStyle should always return the current associated style sheet." });

    test(function() {
        assert_idl_attribute(styleSheet, "ownerRule");
        assert_idl_attribute(styleSheet, "cssRules");
        assert_inherits(styleSheet, "insertRule");
        assert_inherits(styleSheet, "deleteRule");

        assert_readonly(styleSheet, "ownerRule");
        assert_readonly(styleSheet, "cssRules");
    }, "CSSStyleSheet_properties",
    { assert: [ "ownerRule, cssRules, insertRule and deleteRule properties exist on CSSStyleSheet",
                "ownerRule, cssRules are read only"] });

    var importSheet;
    test(function() {
        assert_equals(styleSheet.ownerRule, null);
        assert_true(styleSheet.cssRules.length > 0);
        assert_true(styleSheet.cssRules.item(0) instanceof CSSImportRule);
        importSheet = styleSheet.cssRules.item(0).styleSheet;
    }, "CSSStyleSheet_property_values",
    { help: [ "http://www.w3.org/TR/cssom-1/#css-style-sheets",
              "http://www.w3.org/TR/cssom-1/#cssimportrule" ],
      assert: "CSSStyleSheet initial property values are correct" });

    test(function() {
        assert_idl_attribute(styleSheet, "type");
        assert_idl_attribute(styleSheet, "disabled");
        assert_idl_attribute(styleSheet, "ownerNode");
        assert_idl_attribute(styleSheet, "parentStyleSheet");
        assert_idl_attribute(styleSheet, "href");
        assert_idl_attribute(styleSheet, "title");
        assert_idl_attribute(styleSheet, "media");

        assert_readonly(styleSheet, "type");
        assert_readonly(styleSheet, "ownerNode");
        assert_readonly(styleSheet, "parentStyleSheet");
        assert_readonly(styleSheet, "href");
        assert_readonly(styleSheet, "title");
    }, "StyleSheet_properties",
    { assert: [ "type, disabled, ownerNode, parentStyleSheet, href, title, and media properties exist on StyleSheet",
                "type, ownerNode, parentStyleSheet, href, and title properties are read only" ] });

    test(function() {
        assert_equals(styleSheet.type, "text/css");
        assert_equals(styleSheet.disabled, false);

        assert_equals(styleSheet.ownerNode, styleElement);
        assert_equals(linkSheet.ownerNode, linkElement);
        assert_equals(importSheet.ownerNode, null);

        assert_equals(styleSheet.href, null);
        assert_regexp_match(linkSheet.href, /support\/b-green.css$/);
        assert_regexp_match(importSheet.href, /support\/a-green.css$/);

        assert_equals(styleSheet.parentStyleSheet, null);
        assert_equals(linkSheet.parentStyleSheet, null);
        assert_equals(importSheet.parentStyleSheet, styleSheet);

        assert_equals(styleSheet.title, "internal style sheet");
        assert_equals(styleSheet.media.item(0), "all");
    }, "StyleSheet_property_values",
    { assert: "StyleSheet initial property values are correct" });
  </script>
 </body>
</html>
