tor-browser

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

test_AsyncQueue.js (2437B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 "use strict";
      6 
      7 const { setTimeout } = ChromeUtils.importESModule(
      8  "resource://gre/modules/Timer.sys.mjs"
      9 );
     10 
     11 const { AsyncQueue } = ChromeUtils.importESModule(
     12  "chrome://remote/content/shared/AsyncQueue.sys.mjs"
     13 );
     14 
     15 function sleep(delay = 100) {
     16  // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
     17  return new Promise(resolve => setTimeout(resolve, delay));
     18 }
     19 
     20 add_task(async function test_enqueueSyncTask() {
     21  let value = "";
     22 
     23  const queue = new AsyncQueue();
     24  await Promise.all([
     25    queue.enqueue(() => (value += "foo")),
     26    queue.enqueue(() => (value += "bar")),
     27  ]);
     28 
     29  equal(value, "foobar", "Tasks run in the correct order");
     30 });
     31 
     32 add_task(async function test_enqueueAsyncTask() {
     33  let value = "";
     34 
     35  const queue = new AsyncQueue();
     36  await Promise.all([
     37    queue.enqueue(async () => {
     38      await sleep(100);
     39      value += "foo";
     40    }),
     41    queue.enqueue(async () => {
     42      await sleep(10);
     43      value += "bar";
     44    }),
     45  ]);
     46 
     47  equal(value, "foobar", "Tasks run in the correct order");
     48 });
     49 
     50 add_task(async function test_enqueueAsyncTask() {
     51  let value = "";
     52 
     53  const queue = new AsyncQueue();
     54  const promises = Promise.all([
     55    queue.enqueue(async () => {
     56      await sleep(100);
     57      value += "foo";
     58    }),
     59    queue.enqueue(async () => {
     60      await sleep(10);
     61      value += "bar";
     62    }),
     63  ]);
     64 
     65  const promise = queue.enqueue(async () => (value += "42"));
     66 
     67  await promise;
     68  await promises;
     69 
     70  equal(value, "foobar42", "Tasks run in the correct order");
     71 });
     72 
     73 add_task(async function test_returnValue() {
     74  const queue = new AsyncQueue();
     75  const results = await Promise.all([
     76    queue.enqueue(() => "foo"),
     77    queue.enqueue(() => 42),
     78  ]);
     79 
     80  equal(results[0], "foo", "First task returned correct value");
     81  equal(results[1], 42, "Second task returned correct value");
     82 });
     83 
     84 add_task(async function test_enqueueErroneousTasks() {
     85  const queue = new AsyncQueue();
     86 
     87  await Assert.rejects(
     88    queue.enqueue(() => {
     89      throw new Error("invalid");
     90    }),
     91    /Error: invalid/,
     92    "Expected error was returned"
     93  );
     94 
     95  await Assert.rejects(
     96    queue.enqueue(async () => {
     97      throw new Error("invalid");
     98    }),
     99    /Error: invalid/,
    100    "Expected error was returned"
    101  );
    102 });