blob: a07ac294deeaf72c316a9177fe8422ebc24b70e4 [file] [log] [blame]
(async function(testRunner) {
var {page, session, dp} = await testRunner.startBlank(`Tests timestamps in multiple input domain methods.`);
await session.evaluate(`
var logs = [];
function log(text) {
logs.push(text);
}
var expectedOffsets = [];
var receivedTimestamps = [];
var resolve;
var verifyTimestampsPromise = new Promise(f => resolve = f);
function logEvent(event) {
log('-----Event-----');
log('type: ' + event.type);
receivedTimestamps.push(event.timeStamp);
if (receivedTimestamps.length === expectedOffsets.length)
verifyTimestamps();
}
function verifyTimestamps() {
log('-----Verify-----');
log('Received ' + receivedTimestamps.length + ' timestamps');
// Event.timeStamp values are in milliseconds
var receivedOffsets = receivedTimestamps.map(t => t - receivedTimestamps[0]);
for (var i = 0; i < receivedOffsets.length; ++i) {
if (isNear(receivedOffsets[i], expectedOffsets[i]))
log('timeStamps offsets is as expected.');
else
log('timeStamp offset is expected ' + expectedOffsets[i] + ' but it is:' + receivedOffsets[i]);
}
function isNear(a, b) {
var epsilon = 5;
return Math.abs(b - a) < epsilon;
}
resolve(logs.join('\\n'));
}
window.addEventListener('keydown', logEvent);
window.addEventListener('mousedown', logEvent);
window.addEventListener('touchstart', logEvent);
`);
// We send epoch timestamp but expect to receive high-res timestamps
var baseEpochTimestamp = Date.now() / 1000; // in seconds
var offsets = [0, 5, 10, 15];
var sentTimestamps = offsets.map(offset => baseEpochTimestamp + offset);
var offsetsMs = offsets.map(offset => 1000 * offset);
await session.evaluate(`
expectedOffsets = [${offsetsMs.join(', ')}];
`);
function dumpError(message) {
if (message.error)
testRunner.fail(message.error.message);
}
dumpError(await dp.Input.dispatchKeyEvent({
type: 'rawKeyDown',
timestamp: sentTimestamps[0]
}));
dumpError(await dp.Input.dispatchKeyEvent({
type: 'rawKeyDown',
timestamp: sentTimestamps[1]
}));
dumpError(await dp.Input.dispatchMouseEvent({
type: 'mousePressed',
timestamp: sentTimestamps[2],
button: 'left',
clickCount: 1,
x: 100,
y: 200
}));
dumpError(await dp.Input.dispatchMouseEvent({
type: 'mousePressed',
timestamp: sentTimestamps[3],
button: 'left',
clickCount: 1,
x: 100,
y: 200
}));
testRunner.log(await session.evaluateAsync('verifyTimestampsPromise'));
testRunner.completeTest();
})