test_midi_device_connect_disconnect.html (1933B)
1 <html> 2 <head> 3 <title>WebMIDI Listener Test</title> 4 <script src="/tests/SimpleTest/SimpleTest.js"></script> 5 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 6 <script type="application/javascript" src="MIDITestUtils.js"></script> 7 </head> 8 9 <body onload="runTests()"> 10 <script class="testbody" type="application/javascript"> 11 SimpleTest.waitForExplicitFinish(); 12 13 async function runTests() { 14 await MIDITestUtils.permissionSetup(true); 15 let output; 16 17 let midi_access; 18 try { 19 midi_access = await navigator.requestMIDIAccess({ "sysex": false }); 20 ok(true, "MIDI Access Request successful"); 21 } catch (e) { 22 ok(false, "MIDI Access Request failed!"); 23 SimpleTest.finish(); 24 return; 25 } 26 is(midi_access.sysexEnabled, false, "Sysex should be false"); 27 output = midi_access.outputs.get(await MIDITestUtils.outputInfo.id); 28 let statePromiseRes; 29 let statePromise = new Promise((res) => { statePromiseRes = res; }); 30 await output.open(); 31 let stateChangeHandler = (event) => { 32 if (event.port == output) { 33 return; 34 } 35 statePromiseRes(event.port); 36 }; 37 midi_access.addEventListener("statechange", stateChangeHandler); 38 // Send command to connect new port. 39 output.send([0x90, 0x01, 0x00]); 40 let p = await statePromise; 41 is(p.state, "connected", "Device " + p.name + " connected"); 42 43 // Rebuild our promise, we'll need to await another one. 44 statePromise = new Promise((res) => { statePromiseRes = res; }); 45 output.send([0x90, 0x02, 0x00]); 46 p = await statePromise; 47 is(p.state, "disconnected", "Device " + p.name + " disconnected"); 48 midi_access.removeEventListener("statechange", stateChangeHandler); 49 SimpleTest.finish(); 50 } 51 </script> 52 </body> 53 </html>