<!DOCTYPE html>
<html>
<head>
    <script src="../../resources/js-test-pre.js"></script>
    <script>
        window.jsTestIsAsync = true;

        function initEventHandlers(element) {
            element.addEventListener('mousedown', handleEvent);
            element.addEventListener('mouseup', handleEvent);
            element.addEventListener('click', handleEvent);
        }

        window.events = [];
        function handleEvent(e) {
            window.events.push(e);
        }

        function finish() {
            shouldBe("events.length", "4");
            shouldBeEqualToString("events[0].type", "mousedown");
            shouldBeEqualToString("events[0].target.id", "scrollme");
            shouldBe("events[0].which", "1");
            shouldBeEqualToString("events[1].type", "mouseup");
            shouldBeEqualToString("events[1].target.id", "scrollme");
            shouldBe("events[1].which", "1");
            shouldBeEqualToString("events[2].type", "mousedown");
            shouldBeEqualToString("events[2].target.id", "scrollme");
            shouldBe("events[2].which", "2");
            shouldBeEqualToString("events[3].type", "mouseup");
            shouldBeEqualToString("events[3].target.id", "scrollme");
            shouldBe("events[3].which", "2");
            finishJSTest();
        }

        window.onload = function () {
            var d = document.querySelector('#scrollme');
            initEventHandlers(d);

            if (window.eventSender) {
                eventSender.mouseMoveTo(d.offsetLeft + d.offsetWidth - 4, d.offsetTop + 4);
                eventSender.mouseDown();
                eventSender.mouseUp();
                eventSender.mouseDown(1);
                eventSender.mouseUp(1);
                finish();
            } else
                debug('This test requires eventSender. Click the scrollbar to play manually.');
        };
    </script>
    <script src="../../resources/js-test-post.js"></script>
    <style>
        #scrollme {
            width: 100px;
            height: 100px;
            overflow: auto;
        }
        #scrollme p {
            height: 1000px;
        }
    </style>
</head>
<body>
    <div id="scrollme"><p>This is a scrollable div.</p></div>
    <pre id="console"></pre>
</body>
</html>
