<!DOCTYPE html>
<html>
<head>
    <title>CSS Test: CSSOM StyleSheet insertRule with namespace and omitted second argument</title>
    <link rel="author" title="Sendil Kumar N" href="mailto:sendilkumarn.opensource@gmail.com">
    <link rel="help" href="https://drafts.csswg.org/cssom/">
    <link rel="help" href="http://www.w3.org/TR/cssom-1/#the-cssrule-interface">
    <meta name="flags" content="dom">
    <script src="/resources/testharness.js" type="text/javascript"></script>
    <script src="/resources/testharnessreport.js" type="text/javascript"></script>
    <style id="styleElement">
        @namespace svg url(http://servo);
        @namespace url(http://servo1);
        @namespace svg url("http://servo2");
    </style>
</head>
<body>
<div id="log"></div>
<script type="text/javascript">
    var sheet = document.getElementById("styleElement").sheet;
    test(function() {
        assert_equals(sheet.cssRules.length, 3);
        assert_throws("HierarchyRequestError", function() { sheet.insertRule("p { color: green; }"); });
        assert_equals(sheet.cssRules.length, 3);
    }, "insertRule with namespace and omitted index argument");

    test(function() {
        assert_equals(sheet.cssRules.length, 3);
        assert_throws("HierarchyRequestError", function() { sheet.insertRule("p { color: yellow; }", undefined); });
        assert_equals(sheet.cssRules.length, 3);
    }, "insertRule with namespace and undefined index argument");

    test(function() {
        assert_equals(sheet.cssRules.length, 3);
        sheet.insertRule("@import url(\"support/a-green.css\");");
        assert_equals(sheet.cssRules.length, 4);
    }, "insertRule with namespace and omitted index argument should insert import");
</script>
</body>
</html>
