<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style type="text/css">
</style>
</head>
<body>
<p id="description"></p>
<p><a href="https://bugs.webkit.org/show_bug.cgi?id=53341">Bug 53341</a></p>
<div id="test-container">
    <div id="target" onMouseDown="style.cursor='progress';event.preventDefault();" onMouseMove="style.cursor='pointer';" onMouseUp="style.cursor='help';" style="cursor:pointer;">Play with mouse on this element. Cursors change on events - mousemove: pointer(hand), mousedown: progress, mouseup: help.</div>
</div>
<br/>
<div id="console"></div>
<script>
var CURSOR_UPDATE_DELAY = 50;

description("Test that mouse cursors are changed correctly on mouse events.");

if (!window.eventSender) {
    testFailed('This test requires DumpRenderTree');
}

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
    window.jsTestIsAsync = true;
}

function runTest(prepare, next) {
    prepare();
    setTimeout(function() {
        debug('Cursor Info: ' + window.internals.getCurrentCursorInfo());
        debug('');
        next();
    }, CURSOR_UPDATE_DELAY);
}

function testsDone() {
    // This text is redundant with the test output - hide it
    document.getElementById('test-container').style.display = 'none';
    finishJSTest();
}

// Can't do anything useful here without eventSender
if (window.eventSender) {
    var target = document.getElementById('target');
    eventSender.dragMode = false;
    var tests = [
        function() {
            debug('Mouse move');
            eventSender.mouseMoveTo(target.offsetLeft + 3, target.offsetTop + 3);
        }, function() {
            debug('Mouse down');
            eventSender.mouseDown();
        }, function() {
            debug('Mouse hold down, move');
            eventSender.mouseMoveTo(target.offsetLeft + 13, target.offsetTop + 3);
        }, function() {
            debug('Mouse up');
            eventSender.mouseUp();
        }
    ];

    var i = 0;
    function nextTest() {
        if (i < tests.length) {
            runTest(tests[i++], nextTest);
        } else {
            testsDone();
        }
    }
    nextTest();
}

</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
