Skip to content

Commit f97d68c

Browse files
authored
test: convert functions to async & eliminate duplicates (electron#37316)
test: convert functions to async Co-authored-by: Milan Burda <[email protected]>
1 parent 969665e commit f97d68c

24 files changed

+225
-343
lines changed

spec/api-app-spec.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { promisify } from 'util';
99
import { app, BrowserWindow, Menu, session, net as electronNet } from 'electron/main';
1010
import { emittedOnce } from './lib/events-helpers';
1111
import { closeWindow, closeAllWindows } from './lib/window-helpers';
12-
import { ifdescribe, ifit, waitUntil } from './lib/spec-helpers';
12+
import { ifdescribe, ifit, listen, waitUntil } from './lib/spec-helpers';
1313
import split = require('split')
1414

1515
const fixturesPath = path.resolve(__dirname, 'fixtures');
@@ -33,7 +33,7 @@ describe('app module', () => {
3333
let secureUrl: string;
3434
const certPath = path.join(fixturesPath, 'certificates');
3535

36-
before((done) => {
36+
before(async () => {
3737
const options = {
3838
key: fs.readFileSync(path.join(certPath, 'server.key')),
3939
cert: fs.readFileSync(path.join(certPath, 'server.pem')),
@@ -55,11 +55,7 @@ describe('app module', () => {
5555
}
5656
});
5757

58-
server.listen(0, '127.0.0.1', () => {
59-
const port = (server.address() as net.AddressInfo).port;
60-
secureUrl = `https://127.0.0.1:${port}`;
61-
done();
62-
});
58+
secureUrl = (await listen(server)).url;
6359
});
6460

6561
after(done => {
@@ -1937,18 +1933,17 @@ describe('default behavior', () => {
19371933
let server: http.Server;
19381934
let serverUrl: string;
19391935

1940-
before((done) => {
1936+
before(async () => {
19411937
server = http.createServer((request, response) => {
19421938
if (request.headers.authorization) {
19431939
return response.end('ok');
19441940
}
19451941
response
19461942
.writeHead(401, { 'WWW-Authenticate': 'Basic realm="Foo"' })
19471943
.end();
1948-
}).listen(0, '127.0.0.1', () => {
1949-
serverUrl = 'http://127.0.0.1:' + (server.address() as net.AddressInfo).port;
1950-
done();
19511944
});
1945+
1946+
serverUrl = (await listen(server)).url;
19521947
});
19531948

19541949
it('should emit a login event on app when a WebContents hits a 401', async () => {

spec/api-browser-window-spec.ts

Lines changed: 27 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@ import * as fs from 'fs';
55
import * as qs from 'querystring';
66
import * as http from 'http';
77
import * as os from 'os';
8-
import { AddressInfo } from 'net';
98
import { app, BrowserWindow, BrowserView, dialog, ipcMain, OnBeforeSendHeadersListenerDetails, protocol, screen, webContents, session, WebContents } from 'electron/main';
109

1110
import { emittedOnce, emittedUntil, emittedNTimes } from './lib/events-helpers';
12-
import { ifit, ifdescribe, defer, delay } from './lib/spec-helpers';
11+
import { ifit, ifdescribe, defer, delay, listen } from './lib/spec-helpers';
1312
import { closeWindow, closeAllWindows } from './lib/window-helpers';
1413
import { areColorsSimilar, captureScreen, HexColors, getPixelColor } from './lib/screen-helpers';
1514

@@ -153,7 +152,7 @@ describe('BrowserWindow module', () => {
153152
let server: http.Server;
154153
let url: string;
155154

156-
before((done) => {
155+
before(async () => {
157156
server = http.createServer((request, response) => {
158157
switch (request.url) {
159158
case '/net-error':
@@ -175,10 +174,9 @@ describe('BrowserWindow module', () => {
175174
default:
176175
throw new Error(`unsupported endpoint: ${request.url}`);
177176
}
178-
}).listen(0, '127.0.0.1', () => {
179-
url = 'http://127.0.0.1:' + (server.address() as AddressInfo).port;
180-
done();
181177
});
178+
179+
url = (await listen(server)).url;
182180
});
183181

184182
after(() => {
@@ -297,7 +295,7 @@ describe('BrowserWindow module', () => {
297295
let server: http.Server;
298296
let url: string;
299297
let postData = null as any;
300-
before((done) => {
298+
before(async () => {
301299
const filePath = path.join(fixtures, 'pages', 'a.html');
302300
const fileStats = fs.statSync(filePath);
303301
postData = [
@@ -340,10 +338,8 @@ describe('BrowserWindow module', () => {
340338
}
341339
setTimeout(respond, req.url && req.url.includes('slow') ? 200 : 0);
342340
});
343-
server.listen(0, '127.0.0.1', () => {
344-
url = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
345-
done();
346-
});
341+
342+
url = (await listen(server)).url;
347343
});
348344

349345
after(() => {
@@ -486,30 +482,26 @@ describe('BrowserWindow module', () => {
486482
describe('will-navigate event', () => {
487483
let server: http.Server;
488484
let url: string;
489-
before((done) => {
485+
before(async () => {
490486
server = http.createServer((req, res) => {
491487
if (req.url === '/navigate-top') {
492488
res.end('<a target=_top href="/">navigate _top</a>');
493489
} else {
494490
res.end('');
495491
}
496492
});
497-
server.listen(0, '127.0.0.1', () => {
498-
url = `http://127.0.0.1:${(server.address() as AddressInfo).port}/`;
499-
done();
500-
});
493+
url = (await listen(server)).url;
501494
});
502495

503496
after(() => {
504497
server.close();
505498
});
506499

507-
it('allows the window to be closed from the event listener', (done) => {
508-
w.webContents.once('will-navigate', () => {
509-
w.close();
510-
done();
511-
});
500+
it('allows the window to be closed from the event listener', async () => {
501+
const event = emittedOnce(w.webContents, 'will-navigate');
512502
w.loadFile(path.join(fixtures, 'pages', 'will-navigate.html'));
503+
await event;
504+
w.close();
513505
});
514506

515507
it('can be prevented', (done) => {
@@ -541,7 +533,7 @@ describe('BrowserWindow module', () => {
541533
resolve(url);
542534
});
543535
});
544-
expect(navigatedTo).to.equal(url);
536+
expect(navigatedTo).to.equal(url + '/');
545537
expect(w.webContents.getURL()).to.match(/^file:/);
546538
});
547539

@@ -554,12 +546,12 @@ describe('BrowserWindow module', () => {
554546
resolve(url);
555547
});
556548
});
557-
expect(navigatedTo).to.equal(url);
549+
expect(navigatedTo).to.equal(url + '/');
558550
expect(w.webContents.getURL()).to.equal('about:blank');
559551
});
560552

561553
it('is triggered when a cross-origin iframe navigates _top', async () => {
562-
await w.loadURL(`data:text/html,<iframe src="http://127.0.0.1:${(server.address() as AddressInfo).port}/navigate-top"></iframe>`);
554+
await w.loadURL(`data:text/html,<iframe src="${url}/navigate-top"></iframe>`);
563555
await delay(1000);
564556
w.webContents.debugger.attach('1.1');
565557
const targets = await w.webContents.debugger.sendCommand('Target.getTargets');
@@ -594,7 +586,7 @@ describe('BrowserWindow module', () => {
594586
describe('will-redirect event', () => {
595587
let server: http.Server;
596588
let url: string;
597-
before((done) => {
589+
before(async () => {
598590
server = http.createServer((req, res) => {
599591
if (req.url === '/302') {
600592
res.setHeader('Location', '/200');
@@ -606,10 +598,7 @@ describe('BrowserWindow module', () => {
606598
res.end();
607599
}
608600
});
609-
server.listen(0, '127.0.0.1', () => {
610-
url = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
611-
done();
612-
});
601+
url = (await listen(server)).url;
613602
});
614603

615604
after(() => {
@@ -643,12 +632,11 @@ describe('BrowserWindow module', () => {
643632
expect(stopCalled).to.equal(false, 'should not have called did-stop-loading first');
644633
});
645634

646-
it('allows the window to be closed from the event listener', (done) => {
647-
w.webContents.once('will-redirect', () => {
648-
w.close();
649-
done();
650-
});
635+
it('allows the window to be closed from the event listener', async () => {
636+
const event = emittedOnce(w.webContents, 'will-redirect');
651637
w.loadURL(`${url}/302`);
638+
await event;
639+
w.close();
652640
});
653641

654642
it('can be prevented', (done) => {
@@ -1914,9 +1902,7 @@ describe('BrowserWindow module', () => {
19141902
res.end();
19151903
});
19161904
server.on('connection', () => { connections++; });
1917-
1918-
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', () => resolve()));
1919-
url = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
1905+
url = (await listen(server)).url;
19201906
});
19211907
afterEach(async () => {
19221908
server.close();
@@ -2944,7 +2930,7 @@ describe('BrowserWindow module', () => {
29442930
let server: http.Server;
29452931
let serverUrl: string;
29462932

2947-
before((done) => {
2933+
before(async () => {
29482934
server = http.createServer((request, response) => {
29492935
switch (request.url) {
29502936
case '/cross-site':
@@ -2953,10 +2939,8 @@ describe('BrowserWindow module', () => {
29532939
default:
29542940
throw new Error(`unsupported endpoint: ${request.url}`);
29552941
}
2956-
}).listen(0, '127.0.0.1', () => {
2957-
serverUrl = 'http://127.0.0.1:' + (server.address() as AddressInfo).port;
2958-
done();
29592942
});
2943+
serverUrl = (await listen(server)).url;
29602944
});
29612945

29622946
after(() => {
@@ -4475,13 +4459,11 @@ describe('BrowserWindow module', () => {
44754459
let server: http.Server;
44764460
let serverUrl: string;
44774461

4478-
before((done) => {
4462+
before(async () => {
44794463
server = http.createServer((request, response) => {
44804464
response.end();
4481-
}).listen(0, '127.0.0.1', () => {
4482-
serverUrl = 'http://127.0.0.1:' + (server.address() as AddressInfo).port;
4483-
done();
44844465
});
4466+
serverUrl = (await listen(server)).url;
44854467
});
44864468

44874469
after(() => {

spec/api-context-bridge-spec.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,22 @@ import * as cp from 'child_process';
99

1010
import { closeWindow } from './lib/window-helpers';
1111
import { emittedOnce } from './lib/events-helpers';
12-
import { AddressInfo } from 'net';
12+
import { listen } from './lib/spec-helpers';
1313

1414
const fixturesPath = path.resolve(__dirname, 'fixtures', 'api', 'context-bridge');
1515

1616
describe('contextBridge', () => {
1717
let w: BrowserWindow;
1818
let dir: string;
1919
let server: http.Server;
20+
let serverUrl: string;
2021

2122
before(async () => {
2223
server = http.createServer((req, res) => {
2324
res.setHeader('Content-Type', 'text/html');
2425
res.end('');
2526
});
26-
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
27+
serverUrl = (await listen(server)).url;
2728
});
2829

2930
after(async () => {
@@ -95,7 +96,7 @@ describe('contextBridge', () => {
9596
additionalArguments: ['--unsafely-expose-electron-internals-for-testing']
9697
}
9798
});
98-
await w.loadURL(`http://127.0.0.1:${(server.address() as AddressInfo).port}`);
99+
await w.loadURL(serverUrl);
99100
};
100101

101102
const callWithBindings = (fn: Function, worldId: number = 0) =>

spec/api-crash-reporter-spec.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ import * as childProcess from 'child_process';
33
import * as http from 'http';
44
import * as Busboy from 'busboy';
55
import * as path from 'path';
6-
import { ifdescribe, ifit, defer, startRemoteControlApp, delay, repeatedly } from './lib/spec-helpers';
6+
import { ifdescribe, ifit, defer, startRemoteControlApp, delay, repeatedly, listen } from './lib/spec-helpers';
77
import { app } from 'electron/main';
88
import { crashReporter } from 'electron/common';
9-
import { AddressInfo } from 'net';
109
import { EventEmitter } from 'events';
1110
import * as fs from 'fs';
1211
import * as uuid from 'uuid';
@@ -89,11 +88,7 @@ const startServer = async () => {
8988
req.pipe(busboy);
9089
});
9190

92-
await new Promise<void>(resolve => {
93-
server.listen(0, '127.0.0.1', () => { resolve(); });
94-
});
95-
96-
const port = (server.address() as AddressInfo).port;
91+
const { port } = await listen(server);
9792

9893
defer(() => { server.close(); });
9994

spec/api-debugger-spec.ts

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { expect } from 'chai';
22
import * as http from 'http';
33
import * as path from 'path';
4-
import { AddressInfo } from 'net';
54
import { BrowserWindow } from 'electron/main';
65
import { closeAllWindows } from './lib/window-helpers';
76
import { emittedOnce, emittedUntil } from './lib/events-helpers';
7+
import { listen } from './lib/spec-helpers';
88

99
describe('debugger module', () => {
1010
const fixtures = path.resolve(__dirname, 'fixtures');
@@ -138,9 +138,9 @@ describe('debugger module', () => {
138138
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
139139
res.end('\u0024');
140140
});
141-
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
142141

143-
w.loadURL(`http://127.0.0.1:${(server.address() as AddressInfo).port}`);
142+
const { url } = await listen(server);
143+
w.loadURL(url);
144144
// If we do this synchronously, it's fast enough to attach and enable
145145
// network capture before the load. If we do it before the loadURL, for
146146
// some reason network capture doesn't get enabled soon enough and we get
@@ -155,30 +155,29 @@ describe('debugger module', () => {
155155
expect(body).to.equal('\u0024');
156156
});
157157

158-
it('does not crash for invalid unicode characters in message', (done) => {
159-
try {
160-
w.webContents.debugger.attach();
161-
} catch (err) {
162-
done(`unexpected error : ${err}`);
163-
}
158+
it('does not crash for invalid unicode characters in message', async () => {
159+
w.webContents.debugger.attach();
164160

165-
w.webContents.debugger.on('message', (event, method) => {
166-
// loadingFinished indicates that page has been loaded and it did not
167-
// crash because of invalid UTF-8 data
168-
if (method === 'Network.loadingFinished') {
169-
done();
170-
}
161+
const loadingFinished = new Promise<void>(resolve => {
162+
w.webContents.debugger.on('message', (event, method) => {
163+
// loadingFinished indicates that page has been loaded and it did not
164+
// crash because of invalid UTF-8 data
165+
if (method === 'Network.loadingFinished') {
166+
resolve();
167+
}
168+
});
171169
});
172170

173171
server = http.createServer((req, res) => {
174172
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
175173
res.end('\uFFFF');
176174
});
177175

178-
server.listen(0, '127.0.0.1', () => {
179-
w.webContents.debugger.sendCommand('Network.enable');
180-
w.loadURL(`http://127.0.0.1:${(server.address() as AddressInfo).port}`);
181-
});
176+
const { url } = await listen(server);
177+
w.webContents.debugger.sendCommand('Network.enable');
178+
w.loadURL(url);
179+
180+
await loadingFinished;
182181
});
183182

184183
it('uses empty sessionId by default', async () => {

0 commit comments

Comments
 (0)