| OLD | NEW |
| (Empty) |
| 1 <!DOCTYPE html> | |
| 2 <html> | |
| 3 <head> | |
| 4 <script src="../resources/js-test.js"></script> | |
| 5 </head> | |
| 6 <body> | |
| 7 <script> | |
| 8 | |
| 9 description("Test if various kinds of MIDI messages can be validated."); | |
| 10 | |
| 11 shouldBeDefined("testRunner.setMIDISysexPermission"); | |
| 12 shouldBeDefined("navigator.requestMIDIAccess"); | |
| 13 | |
| 14 window.jsTestIsAsync = true; | |
| 15 | |
| 16 testRunner.setMIDISysexPermission(true); | |
| 17 | |
| 18 navigator.requestMIDIAccess({sysex: true}).then(function (a) { | |
| 19 output = a.outputs.values().next().value; | |
| 20 | |
| 21 // Note on(off). | |
| 22 output.send([0xff, 0x90, 0x00, 0x00, 0x90, 0x07, 0x00]); | |
| 23 | |
| 24 // Running status is not allowed in Web MIDI API. | |
| 25 shouldThrow('output.send([0x00, 0x01])'); | |
| 26 | |
| 27 // Unexpected End of Sysex. | |
| 28 shouldThrow('output.send([0xf7])'); | |
| 29 | |
| 30 // Unexpected reserved status bytes. | |
| 31 shouldThrow('output.send([0xf4])'); | |
| 32 shouldThrow('output.send([0xf5])'); | |
| 33 shouldThrow('output.send([0xf9])'); | |
| 34 shouldThrow('output.send([0xfd])'); | |
| 35 | |
| 36 // Incomplete channel messages. | |
| 37 shouldThrow('output.send([0x80])'); | |
| 38 shouldThrow('output.send([0x80, 0x00])'); | |
| 39 shouldThrow('output.send([0x90])'); | |
| 40 shouldThrow('output.send([0x90, 0x00])'); | |
| 41 shouldThrow('output.send([0xa0])'); | |
| 42 shouldThrow('output.send([0xa0, 0x00])'); | |
| 43 shouldThrow('output.send([0xb0])'); | |
| 44 shouldThrow('output.send([0xb0, 0x00])'); | |
| 45 shouldThrow('output.send([0xc0])'); | |
| 46 shouldThrow('output.send([0xd0])'); | |
| 47 shouldThrow('output.send([0xe0])'); | |
| 48 shouldThrow('output.send([0xe0, 0x00])'); | |
| 49 | |
| 50 // Incomplete system messages. | |
| 51 shouldThrow('output.send([0xf1])'); | |
| 52 shouldThrow('output.send([0xf2])'); | |
| 53 shouldThrow('output.send([0xf2, 0x00])'); | |
| 54 shouldThrow('output.send([0xf3])'); | |
| 55 | |
| 56 // Invalid data bytes. | |
| 57 shouldThrow('output.send([0x80, 0x80, 0x00])'); | |
| 58 shouldThrow('output.send([0x80, 0x00, 0x80])'); | |
| 59 | |
| 60 // Complete messages. | |
| 61 output.send([0x80, 0x00, 0x00]); | |
| 62 output.send([0x90, 0x00, 0x00]); | |
| 63 output.send([0xa0, 0x00, 0x00]); | |
| 64 output.send([0xb0, 0x00, 0x00]); | |
| 65 output.send([0xc0, 0x00]); | |
| 66 output.send([0xd0, 0x00]); | |
| 67 output.send([0xe0, 0x00, 0x00]); | |
| 68 | |
| 69 // Real-Time messages. | |
| 70 output.send([0xf8]); | |
| 71 output.send([0xfa]); | |
| 72 output.send([0xfb]); | |
| 73 output.send([0xfc]); | |
| 74 output.send([0xfe]); | |
| 75 output.send([0xff]); | |
| 76 | |
| 77 // Valid messages with Real-Time messages. | |
| 78 output.send([0x90, 0xff, 0xff, 0x00, 0xff, 0x01, 0xff, 0x80, 0xff, 0x00, 0xf
f, 0xff, 0x00, 0xff, 0xff]); | |
| 79 | |
| 80 // Sysex messages. | |
| 81 output.send([0xf0, 0x00, 0x01, 0x02, 0x03, 0xf7]); | |
| 82 output.send([0xf0, 0xf8, 0xf7, 0xff]); | |
| 83 shouldThrow('output.send([0xf0, 0x80, 0xf7])'); | |
| 84 shouldThrow('output.send([0xf0, 0xf0, 0xf7])'); | |
| 85 shouldThrow('output.send([0xf0, 0xff, 0xf7, 0xf7])'); | |
| 86 | |
| 87 // Reserved status bytes. | |
| 88 shouldThrow('output.send([0xf4, 0x80, 0x00, 0x00])'); | |
| 89 shouldThrow('output.send([0x80, 0xf4, 0x00, 0x00])'); | |
| 90 shouldThrow('output.send([0x80, 0x00, 0xf4, 0x00])'); | |
| 91 shouldThrow('output.send([0x80, 0x00, 0x00, 0xf4])'); | |
| 92 shouldThrow('output.send([0xf0, 0xff, 0xf4, 0xf7])'); | |
| 93 | |
| 94 // Invalid timestamps. | |
| 95 shouldThrow('output.send([], NaN)'); | |
| 96 shouldThrow('output.send([], Infinity)'); | |
| 97 shouldThrow('output.send(new Uint8Array(), NaN)'); | |
| 98 shouldThrow('output.send(new Uint8Array(), Infinity)'); | |
| 99 | |
| 100 finishJSTest(); | |
| 101 }, function () { | |
| 102 testFailed("requestMIDIAccess() return an error."); | |
| 103 }); | |
| 104 | |
| 105 </script> | |
| 106 </body> | |
| 107 </html> | |
| OLD | NEW |