blob: 0734af9a84e24d6908944fcf8ebff2d855d13b47 [file] [log] [blame]
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script type="module">
import {PortState} from '/gen/media/midi/midi_service.mojom.m.js';
import {MockMIDIService} from './resources/mock-midiservice.js';
import {setMidiPermission} from './resources/permissions-helper.js';
const mock = new MockMIDIService();
async_test(t => {
let noteOn = [ 0x90, 0x45, 0x7f ];
t.step(() => {
setMidiPermission({}, 'granted').then(() => {
return navigator.requestMIDIAccess();
}).then(a => {
let started = false;
let receivedMessages = 0;
let receiveMessage = e => {
t.step(() => {
assert_array_equals(
e.data, noteOn, 'received message should be noteOn');
});
if (++receivedMessages != 2)
return;
t.done();
};
a.onstatechange = e => {
// Wait until three outputs and three inputs appear.
if (a.inputs.size != 3 || a.outputs.size != 3 || started)
return;
started = true;
// Set an event handler respectively for newly connected ports.
const inputs = a.inputs.values();
inputs.next();
inputs.next().value.onmidimessage = receiveMessage;
inputs.next().value.onmidimessage = receiveMessage;
// Send a message respectively, and see if it is loopbacked.
const outputs = a.outputs.values();
outputs.next();
outputs.next().value.send(noteOn);
outputs.next().value.send(noteOn);
};
mock.addInputPort(PortState.CONNECTED);
mock.addOutputPort(PortState.CONNECTED);
mock.addInputPort(PortState.OPENED);
mock.addOutputPort(PortState.OPENED);
}).catch(e => assert_unreached(e));
});
}, "Test if newly connected ports work correctly");
</script>