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 });