Skip to content

Commit af01d15

Browse files
authored
test: slim down test utils (#1701)
1 parent d21e2c9 commit af01d15

File tree

8 files changed

+29
-94
lines changed

8 files changed

+29
-94
lines changed

test/chromium/session.spec.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
* limitations under the License.
1515
*/
1616

17-
const { waitEvent } = require('../utils');
18-
1917
/**
2018
* @type {ChromiumTestSuite}
2119
*/
@@ -49,7 +47,7 @@ module.exports.describe = function({FFOX, CHROMIUM, WEBKIT}) {
4947
await page.coverage.stopJSCoverage();
5048
// generate a script in page and wait for the event.
5149
const [event] = await Promise.all([
52-
waitEvent(client, 'Debugger.scriptParsed'),
50+
new Promise(f => client.on('Debugger.scriptParsed', f)),
5351
page.evaluate('//# sourceURL=foo.js')
5452
]);
5553
// expect events to be dispatched.

test/frame.spec.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,11 @@ module.exports.describe = function({FFOX, CHROMIUM, WEBKIT}) {
112112
// validate framenavigated events
113113
const navigatedFrames = [];
114114
page.on('framenavigated', frame => navigatedFrames.push(frame));
115-
await utils.navigateFrame(page, 'frame1', './empty.html');
115+
await page.evaluate(() => {
116+
const frame = document.getElementById('frame1');
117+
frame.src = './empty.html';
118+
return new Promise(x => frame.onload = x);
119+
});
116120
expect(navigatedFrames.length).toBe(1);
117121
expect(navigatedFrames[0].url()).toBe(server.EMPTY_PAGE);
118122

@@ -127,7 +131,7 @@ module.exports.describe = function({FFOX, CHROMIUM, WEBKIT}) {
127131
await page.goto(server.EMPTY_PAGE);
128132
await Promise.all([
129133
page.goto(server.EMPTY_PAGE + '#foo'),
130-
utils.waitEvent(page, 'framenavigated')
134+
page.waitForEvent('framenavigated')
131135
]);
132136
expect(page.url()).toBe(server.EMPTY_PAGE + '#foo');
133137
});
@@ -223,7 +227,7 @@ module.exports.describe = function({FFOX, CHROMIUM, WEBKIT}) {
223227
});
224228
expect(frame1.isDetached()).toBe(true);
225229
const [frame2] = await Promise.all([
226-
utils.waitEvent(page, 'frameattached'),
230+
page.waitForEvent('frameattached'),
227231
page.evaluate(() => document.body.appendChild(window.frame)),
228232
]);
229233
expect(frame2.isDetached()).toBe(false);

test/interception.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ module.exports.describe = function({defaultBrowserOptions, playwright, FFOX, CHR
323323
await page.route('**/*', async r => route = r);
324324
page.$eval('iframe', (frame, url) => frame.src = url, server.EMPTY_PAGE),
325325
// Wait for request interception.
326-
await utils.waitEvent(page, 'request');
326+
await page.waitForEvent('request');
327327
// Delete frame to cause request to be canceled.
328328
await page.$eval('iframe', frame => frame.remove());
329329
let error = null;

test/launcher.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ module.exports.describe = function({defaultBrowserOptions, playwright, browserTy
9191
it('should fire close event', async () => {
9292
const browserServer = await browserType.launchServer(defaultBrowserOptions);
9393
await Promise.all([
94-
utils.waitEvent(browserServer, 'close'),
94+
new Promise(f => browserServer.on('close', f)),
9595
browserServer.close(),
9696
]);
9797
});

test/multiclient.spec.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ module.exports.describe = function({defaultBrowserOptions, browserType, FFOX, CH
6161
remoteBrowser2.on('disconnected', () => ++disconnectedRemote2);
6262

6363
await Promise.all([
64-
utils.waitEvent(remoteBrowser2, 'disconnected'),
64+
new Promise(f => remoteBrowser2.on('disconnected', f)),
6565
remoteBrowser2.close(),
6666
]);
6767

@@ -70,8 +70,8 @@ module.exports.describe = function({defaultBrowserOptions, browserType, FFOX, CH
7070
expect(disconnectedRemote2).toBe(1);
7171

7272
await Promise.all([
73-
utils.waitEvent(remoteBrowser1, 'disconnected'),
74-
utils.waitEvent(originalBrowser, 'disconnected'),
73+
new Promise(f => remoteBrowser1.on('disconnected', f)),
74+
new Promise(f => originalBrowser.on('disconnected', f)),
7575
browserServer.close(),
7676
]);
7777

test/page.spec.js

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
*/
1717

1818
const path = require('path');
19-
const utils = require('./utils');
20-
const {waitEvent} = utils;
2119
const vm = require('vm');
2220

2321
/**
@@ -48,7 +46,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
4846
// fire.
4947
await newPage.click('body');
5048
const pageClosingPromise = newPage.close({ runBeforeUnload: true });
51-
const dialog = await waitEvent(newPage, 'dialog');
49+
const dialog = await newPage.waitForEvent('dialog');
5250
expect(dialog.type()).toBe('beforeunload');
5351
expect(dialog.defaultValue()).toBe('');
5452
if (CHROMIUM)
@@ -93,7 +91,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
9391
it('should fire when expected', async({page, server}) => {
9492
await Promise.all([
9593
page.goto('about:blank'),
96-
utils.waitEvent(page, 'load'),
94+
page.waitForEvent('load'),
9795
]);
9896
});
9997
});
@@ -121,7 +119,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
121119
page._delegate._session.send('Page.crash', {}).catch(e => {});
122120
else if (FFOX)
123121
page._delegate._session.send('Page.crash', {}).catch(e => {});
124-
await waitEvent(page, 'error');
122+
await new Promise(f => page.on('error', f));
125123
expect(error.message).toBe('Page crashed!');
126124
});
127125
});
@@ -152,7 +150,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
152150
page.once('console', m => message = m);
153151
await Promise.all([
154152
page.evaluate(() => console.log('hello', 5, {foo: 'bar'})),
155-
waitEvent(page, 'console')
153+
page.waitForEvent('console')
156154
]);
157155
expect(message.text()).toEqual('hello 5 JSHandle@object');
158156
expect(message.type()).toEqual('log');
@@ -191,14 +189,14 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
191189
page.once('console', msg => message = msg);
192190
await Promise.all([
193191
page.evaluate(() => console.error(window)),
194-
waitEvent(page, 'console')
192+
page.waitForEvent('console')
195193
]);
196194
expect(message.text()).toBe('JSHandle@object');
197195
});
198196
it('should trigger correct Log', async({page, server}) => {
199197
await page.goto('about:blank');
200198
const [message] = await Promise.all([
201-
waitEvent(page, 'console'),
199+
page.waitForEvent('console'),
202200
page.evaluate(async url => fetch(url).catch(e => {}), server.EMPTY_PAGE)
203201
]);
204202
expect(message.text()).toContain('Access-Control-Allow-Origin');
@@ -207,7 +205,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
207205
it('should have location for console API calls', async({page, server}) => {
208206
await page.goto(server.EMPTY_PAGE);
209207
const [message] = await Promise.all([
210-
waitEvent(page, 'console'),
208+
page.waitForEvent('console'),
211209
page.goto(server.PREFIX + '/consolelog.html'),
212210
]);
213211
expect(message.text()).toBe('yellow');
@@ -248,7 +246,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
248246
describe('Page.Events.DOMContentLoaded', function() {
249247
it('should fire when expected', async({page, server}) => {
250248
const navigatedPromise = page.goto('about:blank');
251-
await waitEvent(page, 'domcontentloaded');
249+
await page.waitForEvent('domcontentloaded');
252250
await navigatedPromise;
253251
});
254252
});
@@ -494,7 +492,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
494492
page.once('pageerror', e => error = e);
495493
await Promise.all([
496494
page.goto(server.PREFIX + '/error.html'),
497-
waitEvent(page, 'pageerror')
495+
new Promise(f => page.on('pageerror', f))
498496
]);
499497
expect(error.message).toContain('Fancy');
500498
});

test/utils.js

Lines changed: 6 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -64,22 +64,6 @@ function traceAPICoverage(apiCoverage, events, className, classType) {
6464
}
6565

6666
const utils = module.exports = {
67-
promisify: function (nodeFunction) {
68-
function promisified(...args) {
69-
return new Promise((resolve, reject) => {
70-
function callback(err, ...result) {
71-
if (err)
72-
return reject(err);
73-
if (result.length === 1)
74-
return resolve(result[0]);
75-
return resolve(result);
76-
}
77-
nodeFunction.call(null, ...args, callback);
78-
});
79-
}
80-
return promisified;
81-
},
82-
8367
recordAPICoverage: function(api, events, ignoredMethodsArray = []) {
8468
const coverage = new Map();
8569
const ignoredMethods = new Set(ignoredMethodsArray);
@@ -117,55 +101,25 @@ const utils = module.exports = {
117101
* @return {!Playwright.Frame}
118102
*/
119103
attachFrame: async function(page, frameId, url) {
120-
const frames = new Set(page.frames());
121-
const handle = await page.evaluateHandle(attachFrame, { frameId, url });
122-
try {
123-
return await handle.asElement().contentFrame();
124-
} catch(e) {
125-
// we might not support contentFrame, but this can still work ok.
126-
for (const frame of page.frames()) {
127-
if (!frames.has(frame))
128-
return frame;
129-
}
130-
}
131-
return null;
132-
133-
async function attachFrame({ frameId, url }) {
104+
const handle = await page.evaluateHandle(async ({ frameId, url }) => {
134105
const frame = document.createElement('iframe');
135106
frame.src = url;
136107
frame.id = frameId;
137108
document.body.appendChild(frame);
138109
await new Promise(x => frame.onload = x);
139110
return frame;
140-
}
111+
}, { frameId, url });
112+
return handle.asElement().contentFrame();
141113
},
142114

143115
/**
144116
* @param {!Page} page
145117
* @param {string} frameId
146118
*/
147119
detachFrame: async function(page, frameId) {
148-
await page.evaluate(detachFrame, frameId);
149-
150-
function detachFrame(frameId) {
151-
const frame = document.getElementById(frameId);
152-
frame.remove();
153-
}
154-
},
155-
156-
/**
157-
* @param {!Page} page
158-
* @param {string} frameId
159-
* @param {string} url
160-
*/
161-
navigateFrame: async function(page, frameId, url) {
162-
await page.evaluate(navigateFrame, { frameId, url });
163-
164-
function navigateFrame({ frameId, url }) {
165-
const frame = document.getElementById(frameId);
166-
frame.src = url;
167-
return new Promise(x => frame.onload = x);
168-
}
120+
await page.evaluate(frameId => {
121+
document.getElementById(frameId).remove();
122+
}, frameId);
169123
},
170124

171125
/**
@@ -190,22 +144,6 @@ const utils = module.exports = {
190144
return result;
191145
},
192146

193-
/**
194-
* @param {!EventEmitter} emitter
195-
* @param {string} eventName
196-
* @return {!Promise<!Object>}
197-
*/
198-
waitEvent: function(emitter, eventName, predicate = () => true) {
199-
return new Promise(fulfill => {
200-
emitter.on(eventName, function listener(event) {
201-
if (!predicate(event))
202-
return;
203-
emitter.removeListener(eventName, listener);
204-
fulfill(event);
205-
});
206-
});
207-
},
208-
209147
initializeFlakinessDashboardIfNeeded: async function(testRunner) {
210148
// Generate testIDs for all tests and verify they don't clash.
211149
// This will add |test.testId| for every test.

test/workers.spec.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
* limitations under the License.
1616
*/
1717

18-
const utils = require('./utils');
19-
const { waitEvent } = utils;
20-
2118
/**
2219
* @type {PageTestSuite}
2320
*/
@@ -49,7 +46,7 @@ module.exports.describe = function({FFOX, CHROMIUM, WEBKIT, LINUX}) {
4946
});
5047
it('should report console logs', async function({page}) {
5148
const [message] = await Promise.all([
52-
waitEvent(page, 'console'),
49+
page.waitForEvent('console'),
5350
page.evaluate(() => new Worker(URL.createObjectURL(new Blob(['console.log(1)'], {type: 'application/javascript'})))),
5451
]);
5552
expect(message.text()).toBe('1');

0 commit comments

Comments
 (0)