<head>
<script src="../../js/resources/js-test-pre.js"></script>
<script>
var nrmouseclicks = 0; // small hack to distinguish between clicks
var ev;
function mouseev(event) {
    if (nrmouseclicks == 0) {
        shouldBe("event.clientX", "50");
        shouldBe("event.clientY", "50");
        shouldBe("event.pageX", "50");
        shouldBe("event.pageY", "50");
        shouldBe("event.layerX", "50");
        shouldBe("event.layerY", "50");
        shouldBe("event.offsetX", "42");
        shouldBe("event.offsetY", "42");
        nrmouseclicks++;
    } else if (nrmouseclicks == 1) {
        shouldBe("event.clientX", "50");
        shouldBe("event.clientY", "50");
        shouldBe("event.pageX", "50");
        shouldBe("event.pageY", "550");
        shouldBe("event.layerX", "50");
        shouldBe("event.layerY", "550");
        shouldBe("event.offsetX", "42");
        shouldBe("event.offsetY", "542");
        nrmouseclicks++;
    } else if (nrmouseclicks == 2) {
        shouldBe("event.clientX", "50");
        shouldBe("event.clientY", "50");
        shouldBe("event.pageX", "550");
        shouldBe("event.pageY", "50");
        shouldBe("event.layerX", "550");
        shouldBe("event.layerY", "50");
        shouldBe("event.offsetX", "542");
        shouldBe("event.offsetY", "42");
        nrmouseclicks++;

        // test initMouseEvent
        window.scrollTo(500, 500);
        ev = document.createEvent("MouseEvent");
        ev.initMouseEvent("mousedown", true, true, document.defaultView, 1, 50, 50, 50, 50, false, false, false, false, 0, document);
        var child = document.getElementById('target');
        child.dispatchEvent(ev);
    } else {
        shouldBe("ev.clientX", "50");
        shouldBe("ev.clientY", "50");
        shouldBe("ev.pageX", "550");
        shouldBe("ev.pageY", "550");
        shouldBe("ev.layerX", "550");
        shouldBe("ev.layerY", "550");
        shouldBe("ev.offsetX", "542");
        shouldBe("ev.offsetY", "542");
    }
}
function test() {
    if (window.layoutTestController) {
        layoutTestController.dumpAsText();
        // test a normal mouse to
        eventSender.mouseMoveTo(50, 50);
        eventSender.mouseDown();
        eventSender.mouseUp();

        // now scroll a bit down and verify that clientY does not change
        window.scrollTo(0, 500);
        eventSender.mouseDown();
        eventSender.mouseUp();

        // now scroll a bit to the right and verify that clientX does not change
        window.scrollTo(500, 0);
        eventSender.mouseDown();
        eventSender.mouseUp();
    }
}
</script>
</head>
<body onload="test()">
<div id="target" style="background: red; width:2000px; height: 2000px" onmousedown="mouseev(event)">
</div>
<div id="console"></div>
</body>
