head.js (2138B)
1 "use strict"; 2 3 /* exported createHttpServer, promiseConsoleOutput, assertPersistentListeners */ 4 5 const { AppConstants } = ChromeUtils.importESModule( 6 "resource://gre/modules/AppConstants.sys.mjs" 7 ); 8 9 // eslint-disable-next-line no-unused-vars 10 ChromeUtils.defineESModuleGetters(this, { 11 Extension: "resource://gre/modules/Extension.sys.mjs", 12 ExtensionData: "resource://gre/modules/Extension.sys.mjs", 13 ExtensionTestUtils: 14 "resource://testing-common/ExtensionXPCShellUtils.sys.mjs", 15 FileUtils: "resource://gre/modules/FileUtils.sys.mjs", 16 HttpServer: "resource://testing-common/httpd.sys.mjs", 17 NetUtil: "resource://gre/modules/NetUtil.sys.mjs", 18 Schemas: "resource://gre/modules/Schemas.sys.mjs", 19 TestUtils: "resource://testing-common/TestUtils.sys.mjs", 20 }); 21 22 ExtensionTestUtils.init(this); 23 24 // Persistent Listener test functionality 25 const { assertPersistentListeners } = ExtensionTestUtils.testAssertions; 26 27 /** 28 * Creates a new HttpServer for testing, and begins listening on the 29 * specified port. Automatically shuts down the server when the test 30 * unit ends. 31 * 32 * @param {integer} [port] 33 * The port to listen on. If omitted, listen on a random 34 * port. The latter is the preferred behavior. 35 * 36 * @returns {HttpServer} 37 */ 38 function createHttpServer(port = -1) { 39 let server = new HttpServer(); 40 server.start(port); 41 42 registerCleanupFunction(() => { 43 return new Promise(resolve => { 44 server.stop(resolve); 45 }); 46 }); 47 48 return server; 49 } 50 51 var promiseConsoleOutput = async function (task) { 52 const DONE = `=== console listener ${Math.random()} done ===`; 53 54 let listener; 55 let messages = []; 56 let awaitListener = new Promise(resolve => { 57 listener = msg => { 58 if (msg == DONE) { 59 resolve(); 60 } else { 61 void (msg instanceof Ci.nsIConsoleMessage); 62 messages.push(msg); 63 } 64 }; 65 }); 66 67 Services.console.registerListener(listener); 68 try { 69 let result = await task(); 70 71 Services.console.logStringMessage(DONE); 72 await awaitListener; 73 74 return { messages, result }; 75 } finally { 76 Services.console.unregisterListener(listener); 77 } 78 };