<!DOCTYPE html><metacharset="utf-8"><title>TestDriver actions: event order</title><scriptsrc="/resources/testharness.js"></script><scriptsrc="/resources/testharnessreport.js"></script><scriptsrc="/resources/testdriver.js"></script><scriptsrc="/resources/testdriver-actions.js"></script><scriptsrc="/resources/testdriver-vendor.js"></script><buttonid="a">Button a</button><buttonid="b">Button b</button><inputid="text-input"><script>// Pointer 1 is added before Pointer 2 so it comes first in the list of sources// Therefore its actions happen firstletevents=[];promise_test(()=>{Array.prototype.forEach.call(document.getElementsByTagName("button"),(x)=>x.addEventListener("mousedown",()=>{events.push(x.id)}));letbutton_a=document.getElementById("a");letbutton_b=document.getElementById("b");returnnewtest_driver.Actions().addPointer("pointer1").addPointer("pointer2").pointerMove(0,0,{origin:button_a,sourceName:"pointer1"}).pointerMove(0,0,{origin:button_b,sourceName:"pointer2"}).pointerDown({sourceName:"pointer2"}).pointerDown({sourceName:"pointer1"}).pointerUp({sourceName:"pointer2"}).pointerUp({sourceName:"pointer1"}).send().then(()=>assert_array_equals(events,["a","b"]));});// This test uses a large number of keyboard sources to force race conditions// in implementations which incorrectly dispatch events. Despite belonging to// the same "tick," each action's initial event should be dispatched in series.promise_test(()=>{constinput=document.getElementById("text-input");constactions=newtest_driver.Actions();constcode_for_a="a".charCodeAt(0);constkeys=Array.from(Array(26)).map((_,index)=>({sourceName:"keyboard"+index,code:String.fromCharCode(code_for_a+index)}));keys.forEach(({sourceName})=>actions.addKeyboard(sourceName));keys.forEach(({code,sourceName})=>actions.keyDown(code,{sourceName}));keys.forEach(({code,sourceName})=>actions.keyUp(code,{sourceName}));returntest_driver.click(input).then(()=>actions.send()).then(()=>{assert_equals(input.value,"abcdefghijklmnopqrstuvwxyz");});},"indivisible actions on the same track dispatch events in series");</script>