From 1f607c2a4bd462732939eae5bde1194ace563193 Mon Sep 17 00:00:00 2001 From: Aleksei Kuzmin Date: Wed, 20 May 2020 02:44:37 +0200 Subject: [PATCH] test: call "expect()" on a correct call stack --- spec-main/api-app-spec.ts | 60 ++++++++++++---------------- spec-main/api-browser-window-spec.ts | 21 +++++----- spec-main/api-ipc-spec.ts | 4 +- 3 files changed, 36 insertions(+), 49 deletions(-) diff --git a/spec-main/api-app-spec.ts b/spec-main/api-app-spec.ts index 803d66f8be2b8..a3ffe1be27215 100644 --- a/spec-main/api-app-spec.ts +++ b/spec-main/api-app-spec.ts @@ -8,7 +8,7 @@ import * as path from 'path'; import { app, BrowserWindow, Menu, session } from 'electron/main'; import { emittedOnce } from './events-helpers'; import { closeWindow, closeAllWindows } from './window-helpers'; -import { ifdescribe } from './spec-helpers'; +import { ifdescribe, ifit } from './spec-helpers'; import split = require('split') const features = process.electronBinding('features'); @@ -376,47 +376,38 @@ describe('app module', () => { afterEach(() => closeWindow(w).then(() => { w = null as any; })); - it('should emit browser-window-focus event when window is focused', (done) => { - app.once('browser-window-focus', (e, window) => { - expect(w.id).to.equal(window.id); - done(); - }); + it('should emit browser-window-focus event when window is focused', async () => { + const emitted = emittedOnce(app, 'browser-window-focus'); w = new BrowserWindow({ show: false }); w.emit('focus'); + const [, window] = await emitted; + expect(window.id).to.equal(w.id); }); - it('should emit browser-window-blur event when window is blured', (done) => { - app.once('browser-window-blur', (e, window) => { - expect(w.id).to.equal(window.id); - done(); - }); + it('should emit browser-window-blur event when window is blured', async () => { + const emitted = emittedOnce(app, 'browser-window-blur'); w = new BrowserWindow({ show: false }); w.emit('blur'); + const [, window] = await emitted; + expect(window.id).to.equal(w.id); }); - it('should emit browser-window-created event when window is created', (done) => { - app.once('browser-window-created', (e, window) => { - setImmediate(() => { - expect(w.id).to.equal(window.id); - done(); - }); - }); + it('should emit browser-window-created event when window is created', async () => { + const emitted = emittedOnce(app, 'browser-window-created'); w = new BrowserWindow({ show: false }); + const [, window] = await emitted; + expect(window.id).to.equal(w.id); }); - it('should emit web-contents-created event when a webContents is created', (done) => { - app.once('web-contents-created', (e, webContents) => { - setImmediate(() => { - expect(w.webContents.id).to.equal(webContents.id); - done(); - }); - }); + it('should emit web-contents-created event when a webContents is created', async () => { + const emitted = emittedOnce(app, 'web-contents-created'); w = new BrowserWindow({ show: false }); + const [, webContents] = await emitted; + expect(webContents.id).to.equal(w.webContents.id); }); - it('should emit renderer-process-crashed event when renderer crashes', async function () { - // FIXME: re-enable this test on win32. - if (process.platform === 'win32') { return this.skip(); } + // FIXME: re-enable this test on win32. + ifit(process.platform !== 'win32')('should emit renderer-process-crashed event when renderer crashes', async () => { w = new BrowserWindow({ show: false, webPreferences: { @@ -425,16 +416,15 @@ describe('app module', () => { }); await w.loadURL('about:blank'); - const promise = emittedOnce(app, 'renderer-process-crashed'); + const emitted = emittedOnce(app, 'renderer-process-crashed'); w.webContents.executeJavaScript('process.crash()'); - const [, webContents] = await promise; + const [, webContents] = await emitted; expect(webContents).to.equal(w.webContents); }); - it('should emit render-process-gone event when renderer crashes', async function () { - // FIXME: re-enable this test on win32. - if (process.platform === 'win32') { return this.skip(); } + // FIXME: re-enable this test on win32. + ifit(process.platform !== 'win32')('should emit render-process-gone event when renderer crashes', async () => { w = new BrowserWindow({ show: false, webPreferences: { @@ -443,10 +433,10 @@ describe('app module', () => { }); await w.loadURL('about:blank'); - const promise = emittedOnce(app, 'render-process-gone'); + const emitted = emittedOnce(app, 'render-process-gone'); w.webContents.executeJavaScript('process.crash()'); - const [, webContents, details] = await promise; + const [, webContents, details] = await emitted; expect(webContents).to.equal(w.webContents); expect(details.reason).to.be.oneOf(['crashed', 'abnormal-exit']); }); diff --git a/spec-main/api-browser-window-spec.ts b/spec-main/api-browser-window-spec.ts index 51bb459210122..5f08fbb8c690e 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -866,19 +866,18 @@ describe('BrowserWindow module', () => { }); describe('BrowserWindow.setContentSize(width, height)', () => { - it('sets the content size', (done) => { + it('sets the content size', async () => { // NB. The CI server has a very small screen. Attempting to size the window // larger than the screen will limit the window's size to the screen and // cause the test to fail. const size = [456, 567]; w.setContentSize(size[0], size[1]); - setImmediate(() => { - const after = w.getContentSize(); - expect(after).to.deep.equal(size); - done(); - }); + await new Promise(setImmediate); + const after = w.getContentSize(); + expect(after).to.deep.equal(size); }); - it('works for a frameless window', (done) => { + + it('works for a frameless window', async () => { w.destroy(); w = new BrowserWindow({ show: false, @@ -888,11 +887,9 @@ describe('BrowserWindow module', () => { }); const size = [456, 567]; w.setContentSize(size[0], size[1]); - setImmediate(() => { - const after = w.getContentSize(); - expect(after).to.deep.equal(size); - done(); - }); + await new Promise(setImmediate); + const after = w.getContentSize(); + expect(after).to.deep.equal(size); }); }); diff --git a/spec-main/api-ipc-spec.ts b/spec-main/api-ipc-spec.ts index 0c3eea166f326..651fe6d7b12d6 100644 --- a/spec-main/api-ipc-spec.ts +++ b/spec-main/api-ipc-spec.ts @@ -44,7 +44,7 @@ describe('ipc module', () => { it('receives a response from an asynchronous handler', async () => { ipcMain.handleOnce('test', async (e: IpcMainInvokeEvent, arg: number) => { expect(arg).to.equal(123); - await new Promise(resolve => setImmediate(resolve)); + await new Promise(setImmediate); return 3; }); const done = new Promise(resolve => ipcMain.once('result', (e, arg) => { @@ -69,7 +69,7 @@ describe('ipc module', () => { it('receives an error from an asynchronous handler', async () => { ipcMain.handleOnce('test', async () => { - await new Promise(resolve => setImmediate(resolve)); + await new Promise(setImmediate); throw new Error('some error'); }); const done = new Promise(resolve => ipcMain.once('result', (e, arg) => {