<html>
<head>
    <script language='javascript'>
    function runTest()
    {
        if (window.layoutTestController)
            layoutTestController.dumpAsText();
        var sheets = document.styleSheets;
        if (sheets.length == 11) {
            for (i = 0; i < sheets.length; i++) {
                if (sheets[i].cssRules.length != 1
                    || sheets[i].cssRules[0].type != CSSRule.STYLE_RULE
                    || sheets[i].cssRules[0].style.getPropertyCSSValue("background-image") == null) {
                    return;
                }
            }
            document.getElementById('result').innerHTML = 'SUCCESS';
        }
    }
    </script>
    <link media="all" href="resources/background_image.css" rel="stylesheet">
    <link media="aural" href="resources/background_image.css" rel="stylesheet">
    <link media="braille" href="resources/background_image.css" rel="stylesheet">
    <link media="embossed" href="resources/background_image.css" rel="stylesheet">
    <link media="handheld" href="resources/background_image.css" rel="stylesheet">
    <link media="print" href="resources/background_image.css" rel="stylesheet">
    <link media="projection" href="resources/background_image.css" rel="stylesheet">
    <link media="screen" href="resources/background_image.css" rel="stylesheet">
    <link media="tty" href="resources/background_image.css" rel="stylesheet">
    <link media="tv" href="resources/background_image.css" rel="stylesheet">
    <link media="invalid" href="resources/background_image.css" rel="stylesheet">
</head>
<body onload="runTest()">
<p>Test that the styleSheet collection contains all sheets referenced through the &lt;link&gt; elements. See bug #22429.</p>
<div id="result">FAILURE</div>
</body>
</html>
