<!DOCTYPE html>

<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script type="text/javascript">
'use strict';

const testCases = {
    'mousedown': () => eventSender.mouseDown(),
    'keydown': () => eventSender.keyDown('x'),
    'touchstart': () => {
        eventSender.addTouchPoint(1, 1);
        eventSender.touchStart();
    },
    'click': () => eventSender.gestureTap(1, 1),
    'contextmenu': () => eventSender.contextClick(),
    'wheel': () => eventSender.mouseScrollBy(0, -50),
};

for (let eventName in testCases)
    createTest(eventName, testCases[eventName]);

function createTest(eventName, dispatchEventFn) {
    async_test(function(t) {
        document.addEventListener(eventName, t.step_func(function(e) {
            const platformTimestamp = eventSender.lastEventTimestamp(); // in seconds
            const expectedUnclampedTimestamp = internals.monotonicTimeToZeroBasedDocumentTime(platformTimestamp) * 1000; // in milliseconds
            // Time clamping logic in Blink can introduce at most 2*100us of
            // difference. Use 0.200001 instead of 0.2 to deal with floating
            // point comparison issues.
            assert_approx_equals(e.timeStamp, expectedUnclampedTimestamp, 0.200001);
            t.done();
        }));
        dispatchEventFn();
    }, "Event timestamp should be equal to the timestamp provided by the platform for " + eventName);
}
</script>
