| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| </head> |
| <body> |
| <script type="module"> |
| import {MockMIDIService} from './resources/mock-midiservice.js'; |
| import {setMidiPermission} from './resources/permissions-helper.js'; |
| |
| const mock = new MockMIDIService(); |
| // See https://www.midi.org/specifications/item/table-1-summary-of-midi-message |
| const systemMessages = (function(messages) { |
| // Prepare various combinations of messages from input message array. |
| let combinations = []; |
| for (let i = 0; i < messages.length; ++i) { |
| combinations.push(messages[i]); |
| for (let j = 0; j < messages.length; ++j) { |
| combinations.push(messages[i].concat(messages[j])); |
| for (let k = 0; k < messages.length; ++k) { |
| combinations.push(messages[i].concat(messages[j], messages[k])); |
| } |
| } |
| } |
| return combinations; |
| })([[0xf1, 0x00], |
| [0xf2, 0x00, 0x00], |
| [0xf3, 0x00], |
| [0xf6]]); |
| |
| const reservedSystemMessages = [[0xf4], [0xf5]]; |
| const systemExclusiveMessages = [[0xf0, 0xf7], [0xf0, 0x00, 0xf7]]; |
| |
| promise_test(async _ => { |
| await setMidiPermission({}, 'granted'); |
| const access = await navigator.requestMIDIAccess(); |
| const output = access.outputs.values().next().value; |
| |
| for (const message of systemMessages) { |
| output.send(message); |
| } |
| |
| for (const message of reservedSystemMessages) { |
| assert_throws_js(TypeError, () => output.send(message)); |
| } |
| |
| for (const message of systemExclusiveMessages) { |
| assert_throws_dom('InvalidAccessError', () => output.send(message)); |
| } |
| }, 'various types of system messages can be validated'); |
| |
| </script> |
| </body> |
| </html> |