blob: 3b2423179b5f4f25d178fbdb43e65c822f31c605 [file] [log] [blame]
<!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>