<html>
    <head>
        <style>
            div {
                width: 200px;
                height: 200px;
                background-color: red;
            }

            div div {
                position: absolute;
                left: -1000px;
                background-color: green;
            }

            div:hover div {
                left: auto;
            }
        </style>
        <script>
            function log(msg) {
                var console = document.getElementById('console');
                var newNode = document.createElement('li');
                newNode.innerText = msg;
                console.appendChild(newNode);
            }
            var testedHoverState = false;
            function testHoverState() {
                if (testedHoverState)
                    return;
                testedHoverState = true;
                var innerElem = document.getElementById('innerElem');
                var calculatedStyle = window.getComputedStyle(innerElem);
    
                if (calculatedStyle.getPropertyValue('left') == "auto")
                    log("PASSED: Calculated style of inner element is correct");
                else
                    log("FAILED: Calculated style of inner element is wrong, should be 'left: auto'");
            }
        
            function runTest() {
                if (!window.testRunner) 
                    return;
                testRunner.dumpAsText();
                var targetElem = document.getElementById('targetElem');
                eventSender.mouseMoveTo(targetElem.offsetLeft + targetElem.offsetWidth / 2, 
                                        targetElem.offsetTop + targetElem.offsetHeight / 2);
            }
        </script>
    </head>
    <body onload="runTest()">
        This tests that a style that affects child elements when hovering 
        over a parent element correctly recalculates the child style.  To 
        test manually move the mouse over the red square, it should become 
        green.
        <div id="targetElem" onmousemove="testHoverState()"><div id="innerElem"></div></div>
        <ul id="console"></ul>
    <body>
</html>
