<html>
    <head>
        <script src="../../resources/js-test-pre.js"></script>
        <script>
            var givenScrollTop = 2;
            var givenScrollLeft = 0;
            var expectedScrollTop = 0;
            var expectedScrollLeft = 0;
            var event;
            var div;

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

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

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

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

            function checkOffsets()
            {
                shouldBe("document.body.scrollTop", "window.expectedScrollTop");
                shouldBe("document.body.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 style="height:200px;width:2400px">
          <div style="background-color:red;height:200px;width:1200px;position:relative;left:0px;top:0px"></div>
          <div style="background-color:green;height:200px;width:1200px;position:relative;left:1200px;top:-200px"></div>
        </div>
        <div style="height:200px;width:2400px">
          <div style="background-color:blue;height:200px;width:1200px;position:relative;left:0px;top:0px"></div>
          <div style="background-color:yellow;height:200px;width:1200px;position:relative;left:1200px;top:-200px"></div>
        </div>
        <div id="console"></div>
    </body>
</html>
