From 2ec9e6daa20353901813d313c39fc4a0391bb731 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Tue, 3 Mar 2020 15:02:06 -0800 Subject: [PATCH] test: cleanup some test files (#1195) --- test/chromium/headful.spec.js | 103 ------------------------ test/chromium/launcher.spec.js | 73 ++++++++++++----- test/chromium/oopif.spec.js | 29 ++++++- test/navigation.spec.js | 25 ++++-- test/{features => }/permissions.spec.js | 0 test/playwright.spec.js | 8 +- test/webkit/provisional.spec.js | 42 ---------- 7 files changed, 106 insertions(+), 174 deletions(-) delete mode 100644 test/chromium/headful.spec.js rename test/{features => }/permissions.spec.js (100%) delete mode 100644 test/webkit/provisional.spec.js diff --git a/test/chromium/headful.spec.js b/test/chromium/headful.spec.js deleted file mode 100644 index 4c1ee58d97..0000000000 --- a/test/chromium/headful.spec.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Copyright 2018 Google Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -const path = require('path'); -const os = require('os'); -const fs = require('fs'); -const util = require('util'); -const { makeUserDataDir, removeUserDataDir } = require('../utils'); - -const rmAsync = util.promisify(require('rimraf')); -const mkdtempAsync = util.promisify(fs.mkdtemp); - -const TMP_FOLDER = path.join(os.tmpdir(), 'pw_tmp_folder-'); - -/** - * @type {TestSuite} - */ -module.exports.describe = function({testRunner, expect, playwright, defaultBrowserOptions, FFOX, CHROMIUM, WEBKIT, WIN}) { - const {describe, xdescribe, fdescribe} = testRunner; - const {it, fit, xit, dit} = testRunner; - const {beforeAll, beforeEach, afterAll, afterEach} = testRunner; - - const headfulOptions = Object.assign({}, defaultBrowserOptions, { - headless: false - }); - const headlessOptions = Object.assign({}, defaultBrowserOptions, { - headless: true - }); - const extensionPath = path.join(__dirname, '..', 'assets', 'simple-extension'); - const extensionOptions = Object.assign({}, defaultBrowserOptions, { - headless: false, - args: [ - `--disable-extensions-except=${extensionPath}`, - `--load-extension=${extensionPath}`, - ], - }); - - describe('ChromiumHeadful', function() { - it('Context.backgroundPages should return a background pages', async() => { - const userDataDir = await makeUserDataDir(); - const context = await playwright.launchPersistent(userDataDir, extensionOptions); - const backgroundPages = await context.backgroundPages(); - let backgroundPage = backgroundPages.length - ? backgroundPages[0] - : await new Promise(fulfill => context.once('backgroundpage', async event => fulfill(await event.page()))); - expect(backgroundPage).toBeTruthy(); - expect(await context.backgroundPages()).toContain(backgroundPage); - expect(await context.pages()).not.toContain(backgroundPage); - await removeUserDataDir(userDataDir); - }); - // TODO: Support OOOPIF. @see https://github.com/GoogleChrome/puppeteer/issues/2548 - it.fail(true)('OOPIF: should report google.com frame', async({server}) => { - // https://google.com is isolated by default in Chromium embedder. - const browser = await playwright.launch(headfulOptions); - const page = await browser.newPage(); - await page.goto(server.EMPTY_PAGE); - await page.interception.enable(); - page.on('request', r => page.interception.fulfill(r, {body: 'YO, GOOGLE.COM'})); - await page.evaluate(() => { - const frame = document.createElement('iframe'); - frame.setAttribute('src', 'https://google.com/'); - document.body.appendChild(frame); - return new Promise(x => frame.onload = x); - }); - await page.waitForSelector('iframe[src="https://google.com/"]'); - const urls = page.frames().map(frame => frame.url()).sort(); - expect(urls).toEqual([ - server.EMPTY_PAGE, - 'https://google.com/' - ]); - await browser.close(); - }); - it('should open devtools when "devtools: true" option is given', async({server}) => { - const browser = await playwright.launch(Object.assign({devtools: true}, headfulOptions)); - const context = await browser.newContext(); - const browserSession = await browser.createBrowserSession(); - await browserSession.send('Target.setDiscoverTargets', { discover: true }); - const devtoolsPagePromise = new Promise(fulfill => browserSession.on('Target.targetCreated', async ({targetInfo}) => { - if (targetInfo.type === 'other' && targetInfo.url.includes('devtools://')) - fulfill(); - })); - await Promise.all([ - devtoolsPagePromise, - context.newPage() - ]); - await browser.close(); - }); - }); -}; - diff --git a/test/chromium/launcher.spec.js b/test/chromium/launcher.spec.js index eea2821e0c..bc75ec5dab 100644 --- a/test/chromium/launcher.spec.js +++ b/test/chromium/launcher.spec.js @@ -22,6 +22,7 @@ const readFileAsync = util.promisify(fs.readFile); const rmAsync = util.promisify(require('rimraf')); const mkdtempAsync = util.promisify(fs.mkdtemp); const statAsync = util.promisify(fs.stat); +const { makeUserDataDir, removeUserDataDir } = require('../utils'); const TMP_FOLDER = path.join(os.tmpdir(), 'pw_tmp_folder-'); @@ -33,24 +34,60 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p const {it, fit, xit, dit} = testRunner; const {beforeAll, beforeEach, afterAll, afterEach} = testRunner; - describe('CrPlaywright', function() { - describe('Playwright.launch webSocket option', function() { - it('should support the remote-debugging-port argument', async() => { - const options = Object.assign({}, defaultBrowserOptions); - const browserServer = await playwright.launchServer({ ...options, port: 0 }); - const browser = await playwright.connect({ wsEndpoint: browserServer.wsEndpoint() }); - expect(browserServer.wsEndpoint()).not.toBe(null); - const page = await browser.newPage(); - expect(await page.evaluate('11 * 11')).toBe(121); - await page.close(); - await browserServer.close(); - }); - it('should throw with remote-debugging-pipe argument and webSocket', async() => { - const options = Object.assign({}, defaultBrowserOptions); - options.args = ['--remote-debugging-pipe'].concat(options.args || []); - const error = await playwright.launchServer(options).catch(e => e); - expect(error.message).toContain('Playwright manages remote debugging connection itself'); - }); + const headfulOptions = Object.assign({}, defaultBrowserOptions, { + headless: false + }); + const extensionPath = path.join(__dirname, '..', 'assets', 'simple-extension'); + const extensionOptions = Object.assign({}, defaultBrowserOptions, { + headless: false, + args: [ + `--disable-extensions-except=${extensionPath}`, + `--load-extension=${extensionPath}`, + ], + }); + + describe('launcher', function() { + it('should throw with remote-debugging-pipe argument', async() => { + const options = Object.assign({}, defaultBrowserOptions); + options.args = ['--remote-debugging-pipe'].concat(options.args || []); + const error = await playwright.launchServer(options).catch(e => e); + expect(error.message).toContain('Playwright manages remote debugging connection itself'); + }); + it('should throw with remote-debugging-port argument', async() => { + const options = Object.assign({}, defaultBrowserOptions); + options.args = ['--remote-debugging-port=9222'].concat(options.args || []); + const error = await playwright.launchServer(options).catch(e => e); + expect(error.message).toContain('Playwright manages remote debugging connection itself'); + }); + it('should open devtools when "devtools: true" option is given', async({server}) => { + const browser = await playwright.launch(Object.assign({devtools: true}, headfulOptions)); + const context = await browser.newContext(); + const browserSession = await browser.createBrowserSession(); + await browserSession.send('Target.setDiscoverTargets', { discover: true }); + const devtoolsPagePromise = new Promise(fulfill => browserSession.on('Target.targetCreated', async ({targetInfo}) => { + if (targetInfo.type === 'other' && targetInfo.url.includes('devtools://')) + fulfill(); + })); + await Promise.all([ + devtoolsPagePromise, + context.newPage() + ]); + await browser.close(); + }); + }); + + describe('extensions', () => { + it('should return background pages', async() => { + const userDataDir = await makeUserDataDir(); + const context = await playwright.launchPersistent(userDataDir, extensionOptions); + const backgroundPages = await context.backgroundPages(); + let backgroundPage = backgroundPages.length + ? backgroundPages[0] + : await new Promise(fulfill => context.once('backgroundpage', async event => fulfill(await event.page()))); + expect(backgroundPage).toBeTruthy(); + expect(await context.backgroundPages()).toContain(backgroundPage); + expect(await context.pages()).not.toContain(backgroundPage); + await removeUserDataDir(userDataDir); }); }); diff --git a/test/chromium/oopif.spec.js b/test/chromium/oopif.spec.js index 9c42253a05..da01a9fd7b 100644 --- a/test/chromium/oopif.spec.js +++ b/test/chromium/oopif.spec.js @@ -22,6 +22,10 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p const {it, fit, xit, dit} = testRunner; const {beforeAll, beforeEach, afterAll, afterEach} = testRunner; + const headfulOptions = Object.assign({}, defaultBrowserOptions, { + headless: false + }); + describe('OOPIF', function() { beforeAll(async function(state) { state.browser = await playwright.launch(Object.assign({}, defaultBrowserOptions, { @@ -54,7 +58,7 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p expect(page.frames().length).toBe(2); }); it('should load oopif iframes with subresources and request interception', async function({browser, page, server, context}) { - await page.route('*', request => request.continue()); + await page.route('**/*', request => request.continue()); const browserSession = await browser.createBrowserSession(); await browserSession.send('Target.setDiscoverTargets', { discover: true }); const oopifs = []; @@ -66,5 +70,28 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p expect(oopifs.length).toBe(1); await browserSession.detach(); }); + it.fail(true)('should report google.com frame with headful', async({server}) => { + // TODO: Support OOOPIF. @see https://github.com/GoogleChrome/puppeteer/issues/2548 + // https://google.com is isolated by default in Chromium embedder. + const browser = await playwright.launch(headfulOptions); + const page = await browser.newPage(); + await page.goto(server.EMPTY_PAGE); + await page.route('**/*', request => { + request.fulfill({body: 'YO, GOOGLE.COM'}); + }); + await page.evaluate(() => { + const frame = document.createElement('iframe'); + frame.setAttribute('src', 'https://google.com/'); + document.body.appendChild(frame); + return new Promise(x => frame.onload = x); + }); + await page.waitForSelector('iframe[src="https://google.com/"]'); + const urls = page.frames().map(frame => frame.url()).sort(); + expect(urls).toEqual([ + server.EMPTY_PAGE, + 'https://google.com/' + ]); + await browser.close(); + }); }); }; \ No newline at end of file diff --git a/test/navigation.spec.js b/test/navigation.spec.js index b54b45e1f9..c8e3a9d423 100644 --- a/test/navigation.spec.js +++ b/test/navigation.spec.js @@ -392,6 +392,21 @@ module.exports.describe = function({testRunner, expect, playwright, MAC, WIN, FF const error = await failed; expect(error.message).toBeTruthy(); }); + it('extraHttpHeaders should be pushed to provisional page', async({page, server}) => { + await page.goto(server.EMPTY_PAGE); + const pagePath = '/one-style.html'; + server.setRoute(pagePath, async (req, res) => { + page.setExtraHTTPHeaders({ foo: 'bar' }); + server.serveFile(req, res, pagePath); + }); + const [htmlReq, cssReq] = await Promise.all([ + server.waitForRequest(pagePath), + server.waitForRequest('/one-style.css'), + page.goto(server.CROSS_PROCESS_PREFIX + pagePath) + ]); + expect(htmlReq.headers['foo']).toBe(undefined); + expect(cssReq.headers['foo']).toBe('bar'); + }); describe('network idle', function() { it('should navigate to empty page with networkidle0', async({page, server}) => { @@ -404,11 +419,11 @@ module.exports.describe = function({testRunner, expect, playwright, MAC, WIN, FF }); /** - * @param {import('../src/frames').Frame} frame - * @param {TestServer} server - * @param {'networkidle0'|'networkidle2'} signal - * @param {() => Promise} action - * @param {boolean} isSetContent + * @param {import('../src/frames').Frame} frame + * @param {TestServer} server + * @param {'networkidle0'|'networkidle2'} signal + * @param {() => Promise} action + * @param {boolean} isSetContent */ async function networkIdleTest(frame, server, signal, action, isSetContent) { const finishResponse = response => { diff --git a/test/features/permissions.spec.js b/test/permissions.spec.js similarity index 100% rename from test/features/permissions.spec.js rename to test/permissions.spec.js diff --git a/test/playwright.spec.js b/test/playwright.spec.js index 94e684e685..cc5ac30273 100644 --- a/test/playwright.spec.js +++ b/test/playwright.spec.js @@ -181,6 +181,9 @@ module.exports.describe = ({testRunner, product, playwrightPath}) => { testRunner.loadTests(require('./workers.spec.js'), testOptions); testRunner.loadTests(require('./capabilities.spec.js'), testOptions); }); + describe('[Permissions]', () => { + testRunner.loadTests(require('./permissions.spec.js'), testOptions); + }); describe.skip(!CHROMIUM)('[Chromium]', () => { testRunner.loadTests(require('./chromium/chromium.spec.js'), testOptions); @@ -188,10 +191,6 @@ module.exports.describe = ({testRunner, product, playwrightPath}) => { testRunner.loadTests(require('./chromium/pdf.spec.js'), testOptions); testRunner.loadTests(require('./chromium/session.spec.js'), testOptions); }); - - describe('[Permissions]', () => { - testRunner.loadTests(require('./features/permissions.spec.js'), testOptions); - }); }); // Browser-level tests that are given a browser. @@ -214,7 +213,6 @@ module.exports.describe = ({testRunner, product, playwrightPath}) => { describe.skip(!CHROMIUM)('[Chromium]', () => { testRunner.loadTests(require('./chromium/launcher.spec.js'), testOptions); - testRunner.loadTests(require('./chromium/headful.spec.js'), testOptions); testRunner.loadTests(require('./chromium/oopif.spec.js'), testOptions); testRunner.loadTests(require('./chromium/tracing.spec.js'), testOptions); }); diff --git a/test/webkit/provisional.spec.js b/test/webkit/provisional.spec.js deleted file mode 100644 index df89747112..0000000000 --- a/test/webkit/provisional.spec.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright (c) Microsoft Corporation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @type {PageTestSuite} - */ -module.exports.describe = function ({ testRunner, expect }) { - const {describe, xdescribe, fdescribe} = testRunner; - const {it, fit, xit, dit} = testRunner; - const {beforeAll, beforeEach, afterAll, afterEach} = testRunner; - - describe('provisional page', function() { - it('extraHttpHeaders should be pushed to provisional page', async({page, server}) => { - await page.goto(server.EMPTY_PAGE); - const pagePath = '/one-style.html'; - server.setRoute(pagePath, async (req, res) => { - await page.setExtraHTTPHeaders({ foo: 'bar' }); - server.serveFile(req, res, pagePath); - }); - const [htmlReq, cssReq] = await Promise.all([ - server.waitForRequest(pagePath), - server.waitForRequest('/one-style.css'), - page.goto(server.CROSS_PROCESS_PREFIX + pagePath) - ]); - expect(htmlReq.headers['foo']).toBe(undefined); - expect(cssReq.headers['foo']).toBe('bar'); - }); - }); -};