tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_midi_device_explicit_open_close.html (4107B)


      1 <html>
      2  <head>
      3    <title>WebMIDI Device Open/Close Test</title>
      4    <script src="/tests/SimpleTest/SimpleTest.js"></script>
      5    <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      6    <script type="application/javascript" src="MIDITestUtils.js"></script>
      7  </head>
      8 
      9  <body onload="runTests()">
     10    <script class="testbody" type="application/javascript">
     11     SimpleTest.waitForExplicitFinish();
     12 
     13     async function runTests() {
     14       await MIDITestUtils.permissionSetup(true);
     15 
     16       let access;
     17       try {
     18         access = await navigator.requestMIDIAccess({ "sysex": false })
     19       } catch (e) {
     20         ok(false, "MIDI Access Request Failed!");
     21         SimpleTest.finish();
     22       }
     23 
     24       ok(true, "MIDI Access Request successful");
     25       let input = access.inputs.get(await MIDITestUtils.inputInfo.id);
     26       let portEventRes;
     27       let accessEventRes;
     28       let portEventPromise = new Promise((resolve) => { portEventRes = resolve; });
     29       let accessEventPromise = new Promise((resolve) => { accessEventRes = resolve; });
     30       let shouldClose = false;
     31       let checkPort = (event) => {
     32         ok(input === event.port, "input port object and event port object are same object");
     33         ok(true, "port connection event fired");
     34         ok(event.port.connection === (!shouldClose ? "open" : "closed"), "connection registered correctly");
     35       };
     36       let inputEventHandler = (event) => {
     37         checkPort(event);
     38         portEventRes();
     39       };
     40       let accessEventHandler = (event) => {
     41         checkPort(event);
     42         accessEventRes();
     43       };
     44       input.addEventListener("statechange", inputEventHandler);
     45       access.addEventListener("statechange", accessEventHandler);
     46       await input.open();
     47       ok(true, "connection successful");
     48       ok(input.connection === "open", "connection registered as open");
     49       await Promise.all([portEventPromise, accessEventPromise]);
     50       input.removeEventListener("statechange", inputEventHandler);
     51       access.removeEventListener("statechange", accessEventHandler);
     52       ok(true, "MIDI Port Open Test finished.");
     53       ok(true, "Testing open failure");
     54       let out_access;
     55       try {
     56         out_access = await navigator.requestMIDIAccess({ "sysex": false });
     57       } catch (e) {
     58         ok(false, "MIDI Access Request Failed!");
     59         SimpleTest.finish();
     60       }
     61       let outputEventHandler = (event) => {
     62         ok(output_opened === event.port, "output port object and event port object are same object");
     63         ok(true, "access connection event fired");
     64         ok(event.port.connection === "closed", "connection registered as closed");
     65       };
     66       out_access.addEventListener("statechange", outputEventHandler);
     67       let output_opened = out_access.outputs.get(await MIDITestUtils.alwaysClosedTestOutputInfo.id);
     68       try {
     69         await output_opened.open();
     70         ok(false, "Should've failed to open port!");
     71       } catch(err) {
     72         is(err.name, "InvalidAccessError", "error name " + err.name + " should be InvalidAccessError");
     73         ok(output_opened.connection == "closed", "connection registered as closed");
     74         ok(true, "Port not opened, test succeeded");
     75       } finally {
     76         out_access.removeEventListener("statechange", outputEventHandler);
     77       }
     78       ok(true, "Starting MIDI port closing test");
     79       portEventPromise = new Promise((resolve) => { portEventRes = resolve; });
     80       accessEventPromise = new Promise((resolve) => { accessEventRes = resolve; });
     81       input.addEventListener("statechange", inputEventHandler);
     82       access.addEventListener("statechange", accessEventHandler);
     83       shouldClose = true;
     84       await input.close();
     85       ok(input.connection === "closed", "connection registered as closed");
     86       await Promise.all([portEventPromise, accessEventPromise]);
     87       input.removeEventListener("statechange", inputEventHandler);
     88       access.removeEventListener("statechange", accessEventHandler);
     89       SimpleTest.finish();
     90     }
     91    </script>
     92  </body>
     93 </html>