test: use node helpers for events.once and setTimeout promise (#37374)

This commit is contained in:
Jeremy Rose 2023-02-23 15:53:53 -08:00 committed by GitHub
parent 46c8b9c728
commit a3e3efe4c4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
47 changed files with 932 additions and 927 deletions

View file

@ -1,8 +1,7 @@
import { EventEmitter } from 'events';
import { EventEmitter, once } from 'events';
import { expect } from 'chai';
import { BrowserWindow, ipcMain, IpcMainInvokeEvent, MessageChannelMain, WebContents } from 'electron/main';
import { closeAllWindows } from './lib/window-helpers';
import { emittedOnce } from './lib/events-helpers';
import { defer, listen } from './lib/spec-helpers';
import * as path from 'path';
import * as http from 'http';
@ -120,7 +119,7 @@ describe('ipc module', () => {
/* never resolve */
}));
w.webContents.executeJavaScript(`(${rendererInvoke})()`);
const [, { error }] = await emittedOnce(ipcMain, 'result');
const [, { error }] = await once(ipcMain, 'result');
expect(error).to.match(/reply was never sent/);
});
});
@ -208,7 +207,7 @@ describe('ipc module', () => {
it('can send a port to the main process', async () => {
const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } });
w.loadURL('about:blank');
const p = emittedOnce(ipcMain, 'port');
const p = once(ipcMain, 'port');
await w.webContents.executeJavaScript(`(${function () {
const channel = new MessageChannel();
require('electron').ipcRenderer.postMessage('port', 'hi', [channel.port1]);
@ -225,7 +224,7 @@ describe('ipc module', () => {
it('can sent a message without a transfer', async () => {
const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } });
w.loadURL('about:blank');
const p = emittedOnce(ipcMain, 'port');
const p = once(ipcMain, 'port');
await w.webContents.executeJavaScript(`(${function () {
require('electron').ipcRenderer.postMessage('port', 'hi');
}})()`);
@ -238,7 +237,7 @@ describe('ipc module', () => {
it('can communicate between main and renderer', async () => {
const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } });
w.loadURL('about:blank');
const p = emittedOnce(ipcMain, 'port');
const p = once(ipcMain, 'port');
await w.webContents.executeJavaScript(`(${function () {
const channel = new MessageChannel();
(channel.port2 as any).onmessage = (ev: any) => {
@ -252,7 +251,7 @@ describe('ipc module', () => {
const [port] = ev.ports;
port.start();
port.postMessage(42);
const [ev2] = await emittedOnce(port, 'message');
const [ev2] = await once(port, 'message');
expect(ev2.data).to.equal(84);
});
@ -267,11 +266,11 @@ describe('ipc module', () => {
require('electron').ipcRenderer.postMessage('port', '', [channel1.port1]);
}
w.webContents.executeJavaScript(`(${fn})()`);
const [{ ports: [port1] }] = await emittedOnce(ipcMain, 'port');
const [{ ports: [port1] }] = await once(ipcMain, 'port');
port1.start();
const [{ ports: [port2] }] = await emittedOnce(port1, 'message');
const [{ ports: [port2] }] = await once(port1, 'message');
port2.start();
const [{ data }] = await emittedOnce(port2, 'message');
const [{ data }] = await once(port2, 'message');
expect(data).to.equal('matryoshka');
});
@ -287,14 +286,14 @@ describe('ipc module', () => {
};
require('electron').ipcRenderer.postMessage('port', '', [channel.port1]);
}})()`);
const [{ ports: [port] }] = await emittedOnce(ipcMain, 'port');
const [{ ports: [port] }] = await once(ipcMain, 'port');
await w2.webContents.executeJavaScript(`(${function () {
require('electron').ipcRenderer.on('port', ({ ports: [port] }: any) => {
port.postMessage('a message');
});
}})()`);
w2.webContents.postMessage('port', '', [port]);
const [, data] = await emittedOnce(ipcMain, 'message received');
const [, data] = await once(ipcMain, 'message received');
expect(data).to.equal('a message');
});
@ -316,7 +315,7 @@ describe('ipc module', () => {
const { port1, port2 } = new MessageChannelMain();
w.webContents.postMessage('port', null, [port2]);
port1.close();
await emittedOnce(ipcMain, 'closed');
await once(ipcMain, 'closed');
});
it('is emitted when the other end of a port is garbage-collected', async () => {
@ -360,7 +359,7 @@ describe('ipc module', () => {
const { port1, port2 } = new MessageChannelMain();
port2.postMessage('hello');
port1.start();
const [ev] = await emittedOnce(port1, 'message');
const [ev] = await once(port1, 'message');
expect(ev.data).to.equal('hello');
});
@ -379,7 +378,7 @@ describe('ipc module', () => {
const { port1, port2 } = new MessageChannelMain();
port1.postMessage('hello');
w.webContents.postMessage('port', null, [port2]);
await emittedOnce(ipcMain, 'done');
await once(ipcMain, 'done');
});
it('can be passed over another channel', async () => {
@ -400,7 +399,7 @@ describe('ipc module', () => {
port1.postMessage(null, [port4]);
port3.postMessage('hello');
w.webContents.postMessage('port', null, [port2]);
const [, message] = await emittedOnce(ipcMain, 'done');
const [, message] = await once(ipcMain, 'done');
expect(message).to.equal('hello');
});
@ -481,7 +480,7 @@ describe('ipc module', () => {
});
}})()`);
postMessage(w.webContents)('foo', { some: 'message' });
const [, msg] = await emittedOnce(ipcMain, 'bar');
const [, msg] = await once(ipcMain, 'bar');
expect(msg).to.deep.equal({ some: 'message' });
});
@ -575,7 +574,7 @@ describe('ipc module', () => {
const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } });
w.loadURL('about:blank');
w.webContents.executeJavaScript('require(\'electron\').ipcRenderer.send(\'test\', 42)');
const [, num] = await emittedOnce(w.webContents.ipc, 'test');
const [, num] = await once(w.webContents.ipc, 'test');
expect(num).to.equal(42);
});
@ -593,7 +592,7 @@ describe('ipc module', () => {
const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } });
w.loadURL('about:blank');
w.webContents.executeJavaScript('require(\'electron\').ipcRenderer.postMessage(\'test\', null, [(new MessageChannel).port1])');
const [event] = await emittedOnce(w.webContents.ipc, 'test');
const [event] = await once(w.webContents.ipc, 'test');
expect(event.ports.length).to.equal(1);
});
@ -651,7 +650,7 @@ describe('ipc module', () => {
// Preloads don't run in about:blank windows, and file:// urls can't be loaded in iframes, so use a blank http page.
await w.loadURL(`data:text/html,<iframe src="http://localhost:${port}"></iframe>`);
w.webContents.mainFrame.frames[0].executeJavaScript('ipc.send(\'test\', 42)');
const [, arg] = await emittedOnce(w.webContents.ipc, 'test');
const [, arg] = await once(w.webContents.ipc, 'test');
expect(arg).to.equal(42);
});
});
@ -662,7 +661,7 @@ describe('ipc module', () => {
const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } });
w.loadURL('about:blank');
w.webContents.executeJavaScript('require(\'electron\').ipcRenderer.send(\'test\', 42)');
const [, arg] = await emittedOnce(w.webContents.mainFrame.ipc, 'test');
const [, arg] = await once(w.webContents.mainFrame.ipc, 'test');
expect(arg).to.equal(42);
});
@ -680,7 +679,7 @@ describe('ipc module', () => {
const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } });
w.loadURL('about:blank');
w.webContents.executeJavaScript('require(\'electron\').ipcRenderer.postMessage(\'test\', null, [(new MessageChannel).port1])');
const [event] = await emittedOnce(w.webContents.mainFrame.ipc, 'test');
const [event] = await once(w.webContents.mainFrame.ipc, 'test');
expect(event.ports.length).to.equal(1);
});
@ -752,7 +751,7 @@ describe('ipc module', () => {
await w.loadURL(`data:text/html,<iframe src="http://localhost:${port}"></iframe>`);
w.webContents.mainFrame.frames[0].executeJavaScript('ipc.send(\'test\', 42)');
w.webContents.mainFrame.ipc.on('test', () => { throw new Error('should not be called'); });
const [, arg] = await emittedOnce(w.webContents.mainFrame.frames[0].ipc, 'test');
const [, arg] = await once(w.webContents.mainFrame.frames[0].ipc, 'test');
expect(arg).to.equal(42);
});
});