Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: slim down test utils #1701

Merged
merged 1 commit into from
Apr 8, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions test/chromium/session.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
* limitations under the License.
*/

const { waitEvent } = require('../utils');

/**
* @type {ChromiumTestSuite}
*/
Expand Down Expand Up @@ -49,7 +47,7 @@ module.exports.describe = function({FFOX, CHROMIUM, WEBKIT}) {
await page.coverage.stopJSCoverage();
// generate a script in page and wait for the event.
const [event] = await Promise.all([
waitEvent(client, 'Debugger.scriptParsed'),
new Promise(f => client.on('Debugger.scriptParsed', f)),
page.evaluate('//# sourceURL=foo.js')
]);
// expect events to be dispatched.
Expand Down
10 changes: 7 additions & 3 deletions test/frame.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,11 @@ module.exports.describe = function({FFOX, CHROMIUM, WEBKIT}) {
// validate framenavigated events
const navigatedFrames = [];
page.on('framenavigated', frame => navigatedFrames.push(frame));
await utils.navigateFrame(page, 'frame1', './empty.html');
await page.evaluate(() => {
const frame = document.getElementById('frame1');
frame.src = './empty.html';
return new Promise(x => frame.onload = x);
});
expect(navigatedFrames.length).toBe(1);
expect(navigatedFrames[0].url()).toBe(server.EMPTY_PAGE);

Expand All @@ -127,7 +131,7 @@ module.exports.describe = function({FFOX, CHROMIUM, WEBKIT}) {
await page.goto(server.EMPTY_PAGE);
await Promise.all([
page.goto(server.EMPTY_PAGE + '#foo'),
utils.waitEvent(page, 'framenavigated')
page.waitForEvent('framenavigated')
]);
expect(page.url()).toBe(server.EMPTY_PAGE + '#foo');
});
Expand Down Expand Up @@ -223,7 +227,7 @@ module.exports.describe = function({FFOX, CHROMIUM, WEBKIT}) {
});
expect(frame1.isDetached()).toBe(true);
const [frame2] = await Promise.all([
utils.waitEvent(page, 'frameattached'),
page.waitForEvent('frameattached'),
page.evaluate(() => document.body.appendChild(window.frame)),
]);
expect(frame2.isDetached()).toBe(false);
Expand Down
2 changes: 1 addition & 1 deletion test/interception.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ module.exports.describe = function({defaultBrowserOptions, playwright, FFOX, CHR
await page.route('**/*', async r => route = r);
page.$eval('iframe', (frame, url) => frame.src = url, server.EMPTY_PAGE),
// Wait for request interception.
await utils.waitEvent(page, 'request');
await page.waitForEvent('request');
// Delete frame to cause request to be canceled.
await page.$eval('iframe', frame => frame.remove());
let error = null;
Expand Down
2 changes: 1 addition & 1 deletion test/launcher.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ module.exports.describe = function({defaultBrowserOptions, playwright, browserTy
it('should fire close event', async () => {
const browserServer = await browserType.launchServer(defaultBrowserOptions);
await Promise.all([
utils.waitEvent(browserServer, 'close'),
new Promise(f => browserServer.on('close', f)),
browserServer.close(),
]);
});
Expand Down
6 changes: 3 additions & 3 deletions test/multiclient.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ module.exports.describe = function({defaultBrowserOptions, browserType, FFOX, CH
remoteBrowser2.on('disconnected', () => ++disconnectedRemote2);

await Promise.all([
utils.waitEvent(remoteBrowser2, 'disconnected'),
new Promise(f => remoteBrowser2.on('disconnected', f)),
remoteBrowser2.close(),
]);

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

await Promise.all([
utils.waitEvent(remoteBrowser1, 'disconnected'),
utils.waitEvent(originalBrowser, 'disconnected'),
new Promise(f => remoteBrowser1.on('disconnected', f)),
new Promise(f => originalBrowser.on('disconnected', f)),
browserServer.close(),
]);

Expand Down
20 changes: 9 additions & 11 deletions test/page.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
*/

const path = require('path');
const utils = require('./utils');
const {waitEvent} = utils;
const vm = require('vm');

/**
Expand Down Expand Up @@ -48,7 +46,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
// fire.
await newPage.click('body');
const pageClosingPromise = newPage.close({ runBeforeUnload: true });
const dialog = await waitEvent(newPage, 'dialog');
const dialog = await newPage.waitForEvent('dialog');
expect(dialog.type()).toBe('beforeunload');
expect(dialog.defaultValue()).toBe('');
if (CHROMIUM)
Expand Down Expand Up @@ -93,7 +91,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
it('should fire when expected', async({page, server}) => {
await Promise.all([
page.goto('about:blank'),
utils.waitEvent(page, 'load'),
page.waitForEvent('load'),
]);
});
});
Expand Down Expand Up @@ -121,7 +119,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
page._delegate._session.send('Page.crash', {}).catch(e => {});
else if (FFOX)
page._delegate._session.send('Page.crash', {}).catch(e => {});
await waitEvent(page, 'error');
await new Promise(f => page.on('error', f));
expect(error.message).toBe('Page crashed!');
});
});
Expand Down Expand Up @@ -152,7 +150,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
page.once('console', m => message = m);
await Promise.all([
page.evaluate(() => console.log('hello', 5, {foo: 'bar'})),
waitEvent(page, 'console')
page.waitForEvent('console')
]);
expect(message.text()).toEqual('hello 5 JSHandle@object');
expect(message.type()).toEqual('log');
Expand Down Expand Up @@ -191,14 +189,14 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
page.once('console', msg => message = msg);
await Promise.all([
page.evaluate(() => console.error(window)),
waitEvent(page, 'console')
page.waitForEvent('console')
]);
expect(message.text()).toBe('JSHandle@object');
});
it('should trigger correct Log', async({page, server}) => {
await page.goto('about:blank');
const [message] = await Promise.all([
waitEvent(page, 'console'),
page.waitForEvent('console'),
page.evaluate(async url => fetch(url).catch(e => {}), server.EMPTY_PAGE)
]);
expect(message.text()).toContain('Access-Control-Allow-Origin');
Expand All @@ -207,7 +205,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
it('should have location for console API calls', async({page, server}) => {
await page.goto(server.EMPTY_PAGE);
const [message] = await Promise.all([
waitEvent(page, 'console'),
page.waitForEvent('console'),
page.goto(server.PREFIX + '/consolelog.html'),
]);
expect(message.text()).toBe('yellow');
Expand Down Expand Up @@ -248,7 +246,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
describe('Page.Events.DOMContentLoaded', function() {
it('should fire when expected', async({page, server}) => {
const navigatedPromise = page.goto('about:blank');
await waitEvent(page, 'domcontentloaded');
await page.waitForEvent('domcontentloaded');
await navigatedPromise;
});
});
Expand Down Expand Up @@ -494,7 +492,7 @@ module.exports.describe = function({playwright, FFOX, CHROMIUM, WEBKIT}) {
page.once('pageerror', e => error = e);
await Promise.all([
page.goto(server.PREFIX + '/error.html'),
waitEvent(page, 'pageerror')
new Promise(f => page.on('pageerror', f))
]);
expect(error.message).toContain('Fancy');
});
Expand Down
74 changes: 6 additions & 68 deletions test/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,22 +64,6 @@ function traceAPICoverage(apiCoverage, events, className, classType) {
}

const utils = module.exports = {
promisify: function (nodeFunction) {
function promisified(...args) {
return new Promise((resolve, reject) => {
function callback(err, ...result) {
if (err)
return reject(err);
if (result.length === 1)
return resolve(result[0]);
return resolve(result);
}
nodeFunction.call(null, ...args, callback);
});
}
return promisified;
},

recordAPICoverage: function(api, events, ignoredMethodsArray = []) {
const coverage = new Map();
const ignoredMethods = new Set(ignoredMethodsArray);
Expand Down Expand Up @@ -117,55 +101,25 @@ const utils = module.exports = {
* @return {!Playwright.Frame}
*/
attachFrame: async function(page, frameId, url) {
const frames = new Set(page.frames());
const handle = await page.evaluateHandle(attachFrame, { frameId, url });
try {
return await handle.asElement().contentFrame();
} catch(e) {
// we might not support contentFrame, but this can still work ok.
for (const frame of page.frames()) {
if (!frames.has(frame))
return frame;
}
}
return null;

async function attachFrame({ frameId, url }) {
const handle = await page.evaluateHandle(async ({ frameId, url }) => {
const frame = document.createElement('iframe');
frame.src = url;
frame.id = frameId;
document.body.appendChild(frame);
await new Promise(x => frame.onload = x);
return frame;
}
}, { frameId, url });
return handle.asElement().contentFrame();
},

/**
* @param {!Page} page
* @param {string} frameId
*/
detachFrame: async function(page, frameId) {
await page.evaluate(detachFrame, frameId);

function detachFrame(frameId) {
const frame = document.getElementById(frameId);
frame.remove();
}
},

/**
* @param {!Page} page
* @param {string} frameId
* @param {string} url
*/
navigateFrame: async function(page, frameId, url) {
await page.evaluate(navigateFrame, { frameId, url });

function navigateFrame({ frameId, url }) {
const frame = document.getElementById(frameId);
frame.src = url;
return new Promise(x => frame.onload = x);
}
await page.evaluate(frameId => {
document.getElementById(frameId).remove();
}, frameId);
},

/**
Expand All @@ -190,22 +144,6 @@ const utils = module.exports = {
return result;
},

/**
* @param {!EventEmitter} emitter
* @param {string} eventName
* @return {!Promise<!Object>}
*/
waitEvent: function(emitter, eventName, predicate = () => true) {
return new Promise(fulfill => {
emitter.on(eventName, function listener(event) {
if (!predicate(event))
return;
emitter.removeListener(eventName, listener);
fulfill(event);
});
});
},

initializeFlakinessDashboardIfNeeded: async function(testRunner) {
// Generate testIDs for all tests and verify they don't clash.
// This will add |test.testId| for every test.
Expand Down
5 changes: 1 addition & 4 deletions test/workers.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@
* limitations under the License.
*/

const utils = require('./utils');
const { waitEvent } = utils;

/**
* @type {PageTestSuite}
*/
Expand Down Expand Up @@ -49,7 +46,7 @@ module.exports.describe = function({FFOX, CHROMIUM, WEBKIT, LINUX}) {
});
it('should report console logs', async function({page}) {
const [message] = await Promise.all([
waitEvent(page, 'console'),
page.waitForEvent('console'),
page.evaluate(() => new Worker(URL.createObjectURL(new Blob(['console.log(1)'], {type: 'application/javascript'})))),
]);
expect(message.text()).toBe('1');
Expand Down