<html>
    <head>
        <link rel="stylesheet" href="../js/resources/js-test-style.css">
        <script src="../../resources/js-test-pre.js"></script>
        <script>
            var givenScrollTop = 2;
            var givenScrollLeft = 0;
            var expectedScrollTop = 0;
            var expectedScrollLeft = 0;
            var pixelsPerWheelTick = 40;
            var event;
            var div;

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

            function dispatchWheelEvent()
            {
                var overflowElement = document.getElementById("overflow");
                if (overflowElement)
                    overflowElement.addEventListener("mousewheel", mousewheelHandler, false);

                if (window.eventSender) {
                    eventSender.mouseMoveTo(100, 110);
                    eventSender.continuousMouseScrollBy(-window.givenScrollLeft, -window.givenScrollTop, true);
                }

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

            function checkOffsets()
            {
                div = document.getElementById("overflow");
                shouldBe("div.scrollTop", "window.expectedScrollTop");
                shouldBe("div.scrollLeft", "window.expectedScrollLeft");

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

            function mousewheelHandler(e)
            {
                event = e;
                shouldBe("event.wheelDeltaY", "window.givenScrollTop*-3");
                shouldBe("event.wheelDeltaX", "0");

                if (e.wheelDeltaY)
                    shouldBe("event.wheelDelta", "window.givenScrollTop*-3");
                else
                    shouldBe("event.wheelDelta", "0");
            }
        </script>
    </head>

    <body style="margin:0" onload="setTimeout('dispatchWheelEvent();', 100)">
        <div id="overflow" style="border:2px solid black;overflow:auto;white-space:nowrap;height:200px;width:200px;">
        <div style="height:185px;width:600px;">
          <div style="border:0px;background-color:red;height:181px;width:300px;display:inline-block;"></div>
          <div style="border:0px;background-color:green;height:181px;width:300px;display:inline-block;"></div>
        </div>
        </div>
        <div id="console"></div>
    </body>
</html>
