<!DOCTYPE html>
<body>
<script src="../../resources/js-test.js"></script>
<style>
body {
    margin: 0;
    padding: 0;
    -webkit-user-select: none;
}

#container {
    padding: 40px;
}

#inner1, #inner2 {
    height: 40px;
}

#button1 {
    padding-top: 4px;
}
#button1:active {
    padding-top: 40px;
}
</style>
<div id="container">
<div id="inner1"></div>
<div id="inner2"></div>
</div>
<button id="button1"><span id="button-span">Click me</span></button>
<input id="input1" value="A quick brown fox jumps over the lazy dog. A quick brown fox jumps over the lazy dog.">
<!-- Avoid to create a console element before the above elements -->
<div id="console"></div>
<script>
description('Check if any mousedown-mouseup pairs in one element dispatch click events.');
if (window.eventSender)
    debug('This test needs to run in a test environment.');

var container = document.getElementById('container');
var containerRect = container.getBoundingClientRect();
var inner1 = document.getElementById('inner1');
var inner1Rect = inner1.getBoundingClientRect();
var inner2 = document.getElementById('inner2');
var inner2Rect = inner2.getBoundingClientRect();
var x = (containerRect.left + containerRect.right) / 2;
var inContainer = (containerRect.top + inner1Rect.top) / 2;
var inInner1 = (inner1Rect.top + inner1Rect.bottom) / 2;
var inInner2 = (inner2Rect.top + inner2Rect.bottom) / 2;

var lastClickTarget = null;
document.addEventListener('click', function(event) {
    lastClickTarget = event.target;
}, false);

debug('Very normal click on container:');
eventSender.mouseMoveTo(x, inContainer);
eventSender.mouseDown();
eventSender.mouseUp();
shouldBe('lastClickTarget', 'container');
lastClickTarget = null;

debug('Move inside container:');
eventSender.mouseMoveTo(x, inContainer);
eventSender.mouseDown();
eventSender.mouseMoveTo(x + 10, inContainer);
eventSender.mouseUp();
shouldBe('lastClickTarget', 'container');
lastClickTarget = null;

debug('Move from container to a child:');
eventSender.mouseMoveTo(x, inContainer);
eventSender.mouseDown();
eventSender.mouseMoveTo(x, inInner1);
eventSender.mouseUp();
shouldBe('lastClickTarget', 'container');
lastClickTarget = null;

debug('Move from a child to container:');
eventSender.mouseMoveTo(x, inInner1);
eventSender.mouseDown();
eventSender.mouseMoveTo(x, inContainer);
eventSender.mouseUp();
shouldBe('lastClickTarget', 'container');
lastClickTarget = null;

debug('Move from a child to another child:');
eventSender.mouseMoveTo(x, inInner1);
eventSender.mouseDown();
eventSender.mouseMoveTo(x, inInner2);
eventSender.mouseUp();
shouldBe('lastClickTarget', 'container');
lastClickTarget = null;

debug('Move out from a child:');
eventSender.mouseMoveTo(x, inInner1);
eventSender.mouseDown();
eventSender.mouseMoveTo(x, containerRect.bottom + 10);
eventSender.mouseUp();
shouldBe('lastClickTarget', 'document.body');
lastClickTarget = null;

debug('Removing a child element in the light DOM during a click:');
eventSender.mouseMoveTo(x, inInner2);
eventSender.mouseDown();
inner2.remove();
eventSender.mouseUp();
shouldBeNull('lastClickTarget');
lastClickTarget = null;

debug('Click on escaping button content:');
var button1 = document.getElementById("button1");
var spanRect = document.getElementById('button-span').getBoundingClientRect();
eventSender.mouseMoveTo((spanRect.left + spanRect.right) / 2, spanRect.top + 1);
eventSender.mouseDown();
eventSender.mouseUp();
shouldBe('lastClickTarget', 'button1');
lastClickTarget = null;

debug('Click on disappearing INPUT value:');
var input1 = document.getElementById('input1');
input1.addEventListener('focus', function() { input1.value = ""; }, false);
var inputRect = input1.getBoundingClientRect();
eventSender.mouseMoveTo(inputRect.left + 8, (inputRect.top + inputRect.bottom) / 2);
eventSender.mouseDown();
eventSender.mouseUp();
shouldBe('lastClickTarget', 'input1');
lastClickTarget = null;

debug('Mousedown on a form control, and mouseup on an element outside:');
eventSender.mouseMoveTo(inputRect.left + 8, (inputRect.top + inputRect.bottom) / 2);
eventSender.mouseDown();
eventSender.mouseMoveTo((spanRect.left + spanRect.right) / 2, spanRect.top + 1);
eventSender.mouseUp();
shouldBeNull('lastClickTarget');
lastClickTarget = null;

container.remove();
button1.remove();
input1.remove();

</script>
</body>
