<html dir=rtl>
    <head>
        <script src="../../resources/js-test-pre.js"></script>
        <script>

            function log(str)
            {
                var li = document.createElement("li");
                li.appendChild(document.createTextNode(str));
                var console = document.getElementById("console");
                console.appendChild(li);
            }
            

            if (window.testRunner) {
                testRunner.waitUntilDone();
            }

            function dispatchWheelEvent()
            {
               window.addEventListener("mousewheel", mousewheelHandler, false);

               window.scrollTo(-100, 100);
               if (window.eventSender) {
                    eventSender.mouseMoveTo(100, 100);
                    eventSender.continuousMouseScrollBy(-10, 0);
                    eventSender.continuousMouseScrollBy(30, 0);
                    eventSender.continuousMouseScrollBy(0, -10);
                    eventSender.continuousMouseScrollBy(0, 30);
                }

                setTimeout('checkOffsets();', 100);
            }

            function checkOffsets()
            {
                log("window.scrollX: " + window.scrollX);
                log("window.scrollY: " + window.scrollY);

                if (window.testRunner)
                    window.testRunner.notifyDone();
            }

            function mousewheelHandler(e)
            {
            }
        </script>
    </head>

    <body style="margin:0" onload="setTimeout('dispatchWheelEvent();', 100)">

        <div id="div" style="whitespace:nowrap; width: 4000px; height: 1000px; border: 1px solid red;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</div>
        <div id="console"></div>
    </body>
</html>
