Bug 1945965 – remove new tab April Fools logo. r=home-newtab-reviewers,reemhamz
[gecko.git] / dom / midi / tests / test_midi_device_connect_disconnect.html
blob020c16cebd2dcceeff3e50fc4b0d8cd5082f8d02
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>
9 <body onload="runTests()">
10 <script class="testbody" type="application/javascript">
11 SimpleTest.waitForExplicitFinish();
13 async function runTests() {
14 await MIDITestUtils.permissionSetup(true);
15 let output;
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;
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;
35 statePromiseRes(event.port);
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");
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();
51 </script>
52 </body>
53 </html>