| OLD | NEW |
| (Empty) | |
| 1 <!DOCTYPE html> |
| 2 <script src="../resources/testharness.js"></script> |
| 3 <script src="../resources/testharnessreport.js"></script> |
| 4 <script src="../http/tests/resources/permissions-helper.js"></script> |
| 5 <script> |
| 6 async_test(t => { |
| 7 var sysexHeader = [ 0xf0, 0x00, 0x02, 0x0d, 0x7f ]; |
| 8 var sysexFooter = [ 0xf7 ]; |
| 9 var sysexPayloadToAddInputAsConnected = [ 0x00, 0x00 ]; |
| 10 var sysexPayloadToAddOutputAsConnected = [ 0x00, 0x01 ]; |
| 11 var sysexPayloadToAddInputAsOpened = [ 0x00, 0x02 ]; |
| 12 var sysexPayloadToAddOutputAsOpened = [ 0x00, 0x03 ]; |
| 13 var noteOn = [ 0x90, 0x45, 0x7f ]; |
| 14 |
| 15 function createSysex(payload) { |
| 16 return sysexHeader.concat(payload).concat(sysexFooter); |
| 17 } |
| 18 |
| 19 t.step(() => { |
| 20 Promise.all([ |
| 21 PermissionsHelper.setPermission('midi', 'granted'), |
| 22 PermissionsHelper.setPermission('midi-sysex', 'granted') |
| 23 ]).then(() => { |
| 24 return navigator.requestMIDIAccess({sysex : true}); |
| 25 }).then(a => { |
| 26 var started = false; |
| 27 var receivedMessages = 0; |
| 28 var receiveMessage = e => { |
| 29 t.step(() => { |
| 30 assert_array_equals( |
| 31 e.data, noteOn, 'received message should be noteOn'); |
| 32 }); |
| 33 if (++receivedMessages != 2) |
| 34 return; |
| 35 t.done(); |
| 36 }; |
| 37 |
| 38 a.onstatechange = e => { |
| 39 // Wait until three outputs and three inputs appear. |
| 40 if (a.inputs.size != 3 || a.outputs.size != 3 || started) |
| 41 return; |
| 42 started = true; |
| 43 |
| 44 // Set an event handler respectively for newly connected ports. |
| 45 var inputs = a.inputs.values(); |
| 46 inputs.next(); |
| 47 inputs.next().value.onmidimessage = receiveMessage; |
| 48 inputs.next().value.onmidimessage = receiveMessage; |
| 49 |
| 50 // Send a message respectively, and see if it is loopbacked. |
| 51 var outputs = a.outputs.values(); |
| 52 outputs.next(); |
| 53 outputs.next().value.send(noteOn); |
| 54 outputs.next().value.send(noteOn); |
| 55 }; |
| 56 |
| 57 output = a.outputs.values().next().value; |
| 58 |
| 59 // Send sysex messages to request dynamically adding mock devices. |
| 60 output.send(createSysex(sysexPayloadToAddInputAsConnected)); |
| 61 output.send(createSysex(sysexPayloadToAddOutputAsConnected)); |
| 62 output.send(createSysex(sysexPayloadToAddInputAsOpened)); |
| 63 output.send(createSysex(sysexPayloadToAddOutputAsOpened)); |
| 64 }).catch(e => assert_unreached(e)); |
| 65 }); |
| 66 }, "Test if newly connected ports work correctly"); |
| 67 </script> |
| OLD | NEW |