<!DOCTYPE html><!-- webkit-test-runner [ internal:MouseEventsSimulationEnabled=true ] -->
<html>
<head>
<meta charset=utf-8>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/testharnessreport.js"></script>
<script src="../../../../pointerevents/utils.js"></script>
<script>

'use strict';

target_test((target, test) => {
    const eventTracker = new EventTracker(target, ["mousedown", "mousemove", "mouseup"]);

    const one = ui.finger();
    const two = ui.finger();
    const three = ui.finger();
    ui.sequence([
        // Touch "one" will yield a "mousedown" event since it's the first touch to begin.
        one.begin({ x: 10, y: 10 }),
        // Touch "two" will not yield mouse events since there was already a touch
        // yielding mouse events when it began.
        two.begin({ x: 50, y: 50 }),
        two.move({ x: 70, y: 70 }),
        // Touch "one" will not yield a "mousemove" since there are currently more than one single active touch.
        one.move({ x: 30, y: 30 }),
        // Touch "one" will yield a "mouseup" since there is now just one active touch.
        one.end(),
        two.move({ x: 50, y: 50 }),
        two.end(),
        // Touch "three" will yield mouse events since it's the first touch to begin
        // since the last touch to yield mouse events ("one") ended.
        three.begin({ x: 20, y: 20 }),
        three.move({ x: 40, y: 40 }),
        three.end()
    ]).then(() => {
        eventTracker.assertMatchesEvents([
            // Events dispatched for touch "one".
            { type: "mousedown", x: 10, y: 10 },
            { type: "mouseup", x: 30, y: 30 },
            // Events dispatched for touch "three".
            { type: "mousedown", x: 20, y: 20 },
            { type: "mousemove", x: 40, y: 40 },
            { type: "mouseup", x: 40, y: 40 }
        ]);
        test.done();
    });
}, "Mouse events are dispatched as touches start, move and end on the digitizer, with at most one touch at a time dispatching mouse events.");

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