| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../resources/js-test.js"></script> |
| <script src="../http/tests/resources/permissions-helper.js"></script> |
| </head> |
| <body> |
| <script> |
| |
| description("Test if midimessage event handler work."); |
| |
| shouldBeDefined("navigator.requestMIDIAccess"); |
| |
| window.jsTestIsAsync = true; |
| |
| testData = [ |
| // Complete messages. |
| [0x80, 0x00, 0x00], |
| [0x90, 0x00, 0x00], |
| [0xa0, 0x00, 0x00], |
| [0xb0, 0x00, 0x00], |
| [0xc0, 0x00], |
| [0xd0, 0x00], |
| [0xe0, 0x00, 0x00], |
| |
| // Real-Time messages. |
| [0xf8], |
| [0xfa], |
| [0xfb], |
| [0xfc], |
| [0xfe], |
| [0xff], |
| |
| // Sysex messages. |
| [0xf0, 0x00, 0x01, 0x02, 0x03, 0xf7], |
| [0xf0, 0xf8, 0xf7], |
| ]; |
| |
| receiveCount = 0; |
| |
| function verifyData(e) { |
| debug("receiving data " + receiveCount + ": " + e.data); |
| expected = testData[receiveCount]; |
| actual = e.data; |
| shouldBe("actual", "expected"); |
| midiMessageEvent = e; |
| shouldBeTrue("midiMessageEvent.receivedTime !== undefined"); |
| receiveCount++; |
| if (receiveCount == testData.length) |
| e.target.resolve(); |
| } |
| |
| function test(useAddEventListener) { |
| return new Promise(function(resolve, reject) { |
| debug("running test with useAddEventListener = " + useAddEventListener); |
| navigator.requestMIDIAccess({sysex: true}).then(function (a) { |
| receiveCount = 0; |
| var input = a.inputs.values().next().value; |
| input.resolve = resolve; |
| input.reject = reject; |
| if (useAddEventListener) { |
| input.addEventListener('midimessage', verifyData); |
| } else { |
| input.onmidimessage = verifyData; |
| } |
| var output = a.outputs.values().next().value; |
| for (var i = 0; i < testData.length; ++i) |
| output.send(testData[i]); |
| }, function () { |
| testFailed("requestMIDIAccess() return an error."); |
| reject(); |
| }); |
| }); |
| } |
| |
| Promise.all([PermissionsHelper.setPermission('midi', 'granted'), |
| PermissionsHelper.setPermission('midi-sysex', 'granted')]).then(function() { |
| test(false).then(test.bind(null, true)).then(finishJSTest, finishJSTest); |
| }); |
| |
| </script> |
| </body> |
| </html> |