<!DOCTYPE html>
<html>
<head>
<style>

.scroll {
    height: 100px;
    overflow: auto;
}

.filler {
    height: 200px;
}

</style>
</head>
<body>
<p>Ensure that simulated click on label elements uses the original mouse coordinates.</p>
<input type="checkbox" id="target" onclick="validateEventProperties(event)">
<label for="target" onclick="storeEvent(event)">Click Me</label>

<div class="scroll">
    <div class="filler"></div>
    <input type="radio" id="target2" onclick="validateEventProperties(event)">
    <label for="target2" onclick="storeEvent(event)">Click Me</label>
</div>

<pre id="out"></pre>
<script>

if (window.testRunner)
    testRunner.dumpAsText();

function clickOn(element)
{
    if (!window.eventSender)
        return;
    var rect = element.getBoundingClientRect();
    var x = rect.left + rect.width / 2;
    var y = rect.top + rect.height / 2;
    eventSender.mouseMoveTo(x, y);
    eventSender.mouseDown();
    eventSender.mouseUp();
}

function print(s)
{
    document.getElementById('out').textContent += s + '\n';
}

var realClickEvent, simulatedEvent;

function storeEvent(event)
{
    realClickEvent = event;
}

function validateEventProperty(name)
{
    if (realClickEvent[name] === simulatedEvent[name])
        print('PASS: event.' + name + ' is same for both real and simulated event.');
    else
        print('FAIL: event.' + name + ' is ' + simulatedEvent[name] + ', expected ' + realClickEvent[name]);
}

function validateEventProperties(event)
{
    simulatedEvent = event;

    validateEventProperty('clientX');
    validateEventProperty('clientY');
    validateEventProperty('layerX');
    validateEventProperty('layerY');
    validateEventProperty('pageX');
    validateEventProperty('pageY');
    validateEventProperty('screenX');
    validateEventProperty('screenY');
    validateEventProperty('x');
    validateEventProperty('y');
}

clickOn(document.querySelector('label'));

print('');
document.querySelector('.scroll').scrollTop = 999;
clickOn(document.querySelector('.scroll label'));

</script>
</body>
</html>
