<html>
<head>
    <script>
        function canFind(target, specimen)
        {
            getSelection().empty();
            document.body.innerHTML = specimen;
            document.execCommand("FindString", false, target);
            var result = getSelection().rangeCount != 0;
            getSelection().empty();
            return result;
        }

        var messages = "";

        function testTestStyle(isExpectedToFind, style, outerStyle)
        {
            var markup = "<div style='" + style + "'>word</div>";
            var styleMessage = "styled with " + style;

            if (outerStyle) {
                markup = "<div style='" + outerStyle + "'>" + markup + "</div>";
                styleMessage += " inside an element styled with " + outerStyle;
            }

            if (canFind("word", markup) == isExpectedToFind)
                return;

            if (isExpectedToFind)
                messages += " Could not find";
            else
                messages += " Found";
            messages += " a word " + styleMessage + ".";
        }

        function testNonHiddenTextStyle(style, outerStyle)
        {
            testTestStyle(true, style, outerStyle);
        }

        function testHiddenTextStyle(style, outerStyle)
        {
            testTestStyle(false, style, outerStyle);
        }

        function runTests()
        {
            if (window.testRunner)
                testRunner.dumpAsText();

            testNonHiddenTextStyle("");

            testHiddenTextStyle("display:none");
            testHiddenTextStyle("visibility:hidden");

            testNonHiddenTextStyle("height:0");

            testHiddenTextStyle("height:0; overflow:hidden");
            testHiddenTextStyle("height:0; overflow:scroll");
            testHiddenTextStyle("height:0; overflow:auto");

            testHiddenTextStyle("width:0; overflow:hidden");
            testHiddenTextStyle("width:0; overflow:scroll");
            testHiddenTextStyle("width:0; overflow:auto");

            testHiddenTextStyle("height:0; overflow-x:hidden");
            testHiddenTextStyle("height:0; overflow-x:scroll");
            testHiddenTextStyle("height:0; overflow-x:auto");

            testHiddenTextStyle("width:0; overflow-x:hidden");
            testHiddenTextStyle("width:0; overflow-x:scroll");
            testHiddenTextStyle("width:0; overflow-x:auto");

            testHiddenTextStyle("height:0; overflow-y:hidden");
            testHiddenTextStyle("height:0; overflow-y:scroll");
            testHiddenTextStyle("height:0; overflow-y:auto");

            testHiddenTextStyle("width:0; overflow-y:hidden");
            testHiddenTextStyle("width:0; overflow-y:scroll");
            testHiddenTextStyle("width:0; overflow-y:auto");

            testHiddenTextStyle("position: relative", "height:0; overflow:hidden");
            testHiddenTextStyle("position: relative", "height:0; overflow:scroll");
            testHiddenTextStyle("position: relative", "height:0; overflow:auto");

            testNonHiddenTextStyle("position: absolute", "height:0; overflow:hidden");
            testNonHiddenTextStyle("position: absolute", "height:0; overflow:scroll");
            testNonHiddenTextStyle("position: absolute", "height:0; overflow:auto");

            testNonHiddenTextStyle("position: fixed", "height:0; overflow:hidden");
            testNonHiddenTextStyle("position: fixed", "height:0; overflow:scroll");
            testNonHiddenTextStyle("position: fixed", "height:0; overflow:auto");

            if (messages === "")
                messages = "SUCCESS: Found all the strings we expected to, and none we did not expect to.";
            else
                messages = "FAILURE:" + messages;

            document.body.innerHTML = messages;
        }
    </script>
</head>
<body onload="runTests()"></body>
</html>
