<!DOCTYPE html>
<html>
<head>
    <title>CSSOM -  Extensions to the Document Interface: Stylesheet header load order</title>
    <link rel="author" title="Jesse Bounds" href="mailto:jesse@codeforamerica.org">
    <link rel="help" href="http://www.w3.org/TR/cssom-1/#extensions-to-the-document-interface">
    <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-stylesheetlist-interface">
    <link rel="help" href="http://www.w3.org/TR/cssom-1/#css-style-sheet-collections">
    <style title="aaa" type="text/css">
      H1 {border-width: 1; border: solid; text-align: center}
    </style>
    <link title="zebra" rel="stylesheet" href="zebra.css" type="text/css">
    <link title="kilo" rel="stylesheet" href="kilo.css"  type="text/css">
    <link title="alpha" rel="stylesheet" href="alpha.css" type="text/css">
    <link title="zebra" rel="stylesheet" href="/directory01/zebra.css" type="text/css">
    <meta name="flags" content="dom">
    <meta name="assert" content="Document's style sheets created from HTTP Link headers are first in list and loaded in header order">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
</head>
<body>
    <div id="log"></div>
    <script>

      // Get the Document's styleSheets attribute
      var styleSheets = document.styleSheets;

      // Verify that the styleSheets list length is 5
      test(function() {
        assert_equals(styleSheets.length, 5, "styleSheets.length is incorrect:");
      }, "styleSheets.length must be 5");

      // Verify that titles of loaded sheets are as expected (in the correct order)
      test(function() {
        assert_equals(styleSheets.item(0).title, "aaa", "title for item 1 is incorrect:");
      }, "styleSheets item 0 title must be aaa");
      // Verify that titles of loaded sheets are as expected (in the correct order)
      test(function() {
        assert_equals(styleSheets.item(1).title, "zebra", "title for item 1 is incorrect:");
      }, "styleSheets item 1 title must be zebra");
      // Verify that titles of loaded sheets are as expected (in the correct order)
      test(function() {
        assert_equals(styleSheets.item(2).title, "kilo", "title for item 1 is incorrect:");
      }, "styleSheets item 0 title must be kilo");
      // Verify that titles of loaded sheets are as expected (in the correct order)
      test(function() {
        assert_equals(styleSheets.item(3).title, "alpha", "title for item 1 is incorrect:");
      }, "styleSheets item 0 title must be alpha");
      // Verify that titles of loaded sheets are as expected (in the correct order)
      test(function() {
        assert_equals(styleSheets.item(4).title, "zebra", "title for item 1 is incorrect:");
      }, "styleSheets item 0 title must be zebra");

    </script>
</body>
</html>
