/* eslint-env mozilla/frame-script */
var MIDITestUtils = {
  permissionSetup: (allow) => {
    let permPromiseRes;
    let permPromise = new Promise((res, rej) => { permPromiseRes = res; });
    SpecialPowers.pushPrefEnv({"set": [["dom.webmidi.enabled", true],
                                       ["midi.testing", true],
                                       ["midi.prompt.testing", true],
                                       ["media.navigator.permission.disabled", allow]]},
                              () => {
                                permPromiseRes();
                              });
    return permPromise;
  },
  // This list needs to stay synced with the ports in
  // dom/midi/TestMIDIPlatformService.
  inputInfo: {
    id: "b744eebe-f7d8-499b-872b-958f63c8f522",
    name: "Test Control MIDI Device Input Port",
    manufacturer: "Test Manufacturer",
    version: "1.0.0"
  },
  outputInfo: {
    id: "ab8e7fe8-c4de-436a-a960-30898a7c9a3d",
    name: "Test Control MIDI Device Output Port",
    manufacturer: "Test Manufacturer",
    version: "1.0.0"
  },
  stateTestInputInfo: {
    id: "a9329677-8588-4460-a091-9d4a7f629a48",
    name: "Test State MIDI Device Input Port",
    manufacturer: "Test Manufacturer",
    version: "1.0.0"
  },
  stateTestOutputInfo: {
    id: "478fa225-b5fc-4fa6-a543-d32d9cb651e7",
    name: "Test State MIDI Device Output Port",
    manufacturer: "Test Manufacturer",
    version: "1.0.0"
  },
  alwaysClosedTestOutputInfo: {
    id: "f87d0c76-3c68-49a9-a44f-700f1125c07a",
    name: "Always Closed MIDI Device Output Port",
    manufacturer: "Test Manufacturer",
    version: "1.0.0"
  },
  checkPacket: (expected, actual) => {
    if (expected.length != actual.length) {
      ok(false, "Packet " + expected + " length not same as packet " + actual);
    }
    for (var i = 0; i < expected.length; ++i) {
      is(expected[i], actual[i], "Packet value " + expected[i] + " matches.");
    }
  }
};

