From 96629304ff8dbb0f54e5e32908b0900ffb64a219 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Wed, 16 Sep 2020 21:36:36 -0700 Subject: [PATCH] test: make platform a parameter (#3910) --- test/browsercontext-cookies.spec.ts | 4 +- test/browsercontext-page-event.spec.ts | 4 +- test/capabilities.spec.ts | 4 +- test/chromium/launcher.spec.ts | 2 +- test/defaultbrowsercontext-2.spec.ts | 2 +- test/dialog.spec.ts | 2 +- test/elementhandle-owner-frame.spec.ts | 2 +- test/elementhandle-screenshot.spec.ts | 2 +- ...ementhandle-wait-for-element-state.spec.ts | 2 +- test/fixtures.spec.ts | 12 ++--- test/focus.spec.ts | 2 +- test/headful.spec.ts | 2 +- test/keyboard.spec.ts | 18 ++++---- test/mouse.spec.ts | 6 +-- test/network-request.spec.ts | 2 +- test/page-event-crash.spec.ts | 4 +- test/page-event-network.spec.ts | 6 +-- test/page-goto.spec.ts | 4 +- test/page-history.spec.ts | 2 +- test/page-screenshot.spec.ts | 2 +- test/permissions.spec.ts | 2 +- test/playwright.fixtures.ts | 44 +++++++++++++------ test/proxy.spec.ts | 2 +- test/screencast.spec.ts | 2 +- 24 files changed, 75 insertions(+), 59 deletions(-) diff --git a/test/browsercontext-cookies.spec.ts b/test/browsercontext-cookies.spec.ts index 5daf4f49b0..6a9af49348 100644 --- a/test/browsercontext-cookies.spec.ts +++ b/test/browsercontext-cookies.spec.ts @@ -74,7 +74,7 @@ it('should properly report httpOnly cookie', async ({context, page, server}) => }); it('should properly report "Strict" sameSite cookie', (test, parameters) => { - test.fail(options.WEBKIT(parameters) && WIN); + test.fail(options.WEBKIT(parameters) && options.WIN(parameters)); }, async ({context, page, server}) => { server.setRoute('/empty.html', (req, res) => { res.setHeader('Set-Cookie', 'name=value;SameSite=Strict'); @@ -87,7 +87,7 @@ it('should properly report "Strict" sameSite cookie', (test, parameters) => { }); it('should properly report "Lax" sameSite cookie', (test, parameters) => { - test.fail(options.WEBKIT(parameters) && WIN); + test.fail(options.WEBKIT(parameters) && options.WIN(parameters)); }, async ({context, page, server}) => { server.setRoute('/empty.html', (req, res) => { res.setHeader('Set-Cookie', 'name=value;SameSite=Lax'); diff --git a/test/browsercontext-page-event.spec.ts b/test/browsercontext-page-event.spec.ts index edf4fd13e6..0ba24c8a72 100644 --- a/test/browsercontext-page-event.spec.ts +++ b/test/browsercontext-page-event.spec.ts @@ -175,14 +175,14 @@ it('should work with Shift-clicking', (test, parameters) => { it('should work with Ctrl-clicking', (test, parameters) => { test.fixme(options.WEBKIT(parameters), 'Ctrl+Click does not open a new tab.'); test.fixme(options.FIREFOX(parameters), 'Reports an opener in this case.'); -}, async ({browser, server}) => { +}, async ({browser, server, isMac}) => { const context = await browser.newContext(); const page = await context.newPage(); await page.goto(server.EMPTY_PAGE); await page.setContent('yo'); const [popup] = await Promise.all([ context.waitForEvent('page'), - page.click('a', { modifiers: [ MAC ? 'Meta' : 'Control'] }), + page.click('a', { modifiers: [ isMac ? 'Meta' : 'Control'] }), ]); expect(await popup.opener()).toBe(null); await context.close(); diff --git a/test/capabilities.spec.ts b/test/capabilities.spec.ts index c97d1e70af..1271ef5850 100644 --- a/test/capabilities.spec.ts +++ b/test/capabilities.spec.ts @@ -18,7 +18,7 @@ import url from 'url'; import { it, expect, options } from './playwright.fixtures'; it('Web Assembly should work', (test, parameters) => { - test.fail(options.WEBKIT(parameters) && WIN); + test.fail(options.WEBKIT(parameters) && options.WIN(parameters)); }, async function({page, server}) { await page.goto(server.PREFIX + '/wasm/table2.html'); expect(await page.evaluate('loadTable()')).toBe('42, 83'); @@ -51,7 +51,7 @@ it('should respect CSP', async ({page, server}) => { }); it('should play video', (test, parameters) => { - test.fixme(options.WEBKIT(parameters) && (WIN || LINUX)); + test.fixme(options.WEBKIT(parameters) && (options.WIN(parameters) || options.LINUX(parameters))); }, async ({page, asset, isWebKit}) => { // TODO: the test passes on Windows locally but fails on GitHub Action bot, // apparently due to a Media Pack issue in the Windows Server. diff --git a/test/chromium/launcher.spec.ts b/test/chromium/launcher.spec.ts index b8c9455a78..1e55925c34 100644 --- a/test/chromium/launcher.spec.ts +++ b/test/chromium/launcher.spec.ts @@ -39,7 +39,7 @@ it('should not throw with remote-debugging-port argument', (test, parameters) => }); it('should open devtools when "devtools: true" option is given', (test, parameters) => { - test.skip(!options.CHROMIUM(parameters) || options.WIRE || WIN); + test.skip(!options.CHROMIUM(parameters) || options.WIRE || options.WIN(parameters)); }, async ({browserType, defaultBrowserOptions}) => { let devtoolsCallback; const devtoolsPromise = new Promise(f => devtoolsCallback = f); diff --git a/test/defaultbrowsercontext-2.spec.ts b/test/defaultbrowsercontext-2.spec.ts index 6c0cfa0408..8005e1fe37 100644 --- a/test/defaultbrowsercontext-2.spec.ts +++ b/test/defaultbrowsercontext-2.spec.ts @@ -69,7 +69,7 @@ it('should support ignoreHTTPSErrors option', async ({httpsServer, launchPersist }); it('should support extraHTTPHeaders option', (test, parameters) => { - test.flaky(options.FIREFOX(parameters) && !options.HEADLESS && LINUX, 'Intermittent timeout on bots'); + test.flaky(options.FIREFOX(parameters) && !options.HEADLESS && options.LINUX(parameters), 'Intermittent timeout on bots'); }, async ({server, launchPersistent}) => { const {page} = await launchPersistent({extraHTTPHeaders: { foo: 'bar' }}); const [request] = await Promise.all([ diff --git a/test/dialog.spec.ts b/test/dialog.spec.ts index c773cf1fec..7e064e8477 100644 --- a/test/dialog.spec.ts +++ b/test/dialog.spec.ts @@ -63,7 +63,7 @@ it('should dismiss the confirm prompt', async ({page}) => { }); it('should be able to close context with open alert', (test, parameters) => { - test.fixme(options.WEBKIT(parameters) && MAC); + test.fixme(options.WEBKIT(parameters) && options.MAC(parameters)); }, async ({browser}) => { const context = await browser.newContext(); const page = await context.newPage(); diff --git a/test/elementhandle-owner-frame.spec.ts b/test/elementhandle-owner-frame.spec.ts index d7389a2210..f07f3ffd05 100644 --- a/test/elementhandle-owner-frame.spec.ts +++ b/test/elementhandle-owner-frame.spec.ts @@ -35,7 +35,7 @@ it('should work for cross-process iframes', async ({ page, server }) => { }); it('should work for document', (test, parameters) => { - test.flaky(WIN && options.WEBKIT(parameters)); + test.flaky(options.WIN(parameters) && options.WEBKIT(parameters)); }, async ({ page, server }) => { await page.goto(server.EMPTY_PAGE); await utils.attachFrame(page, 'frame1', server.EMPTY_PAGE); diff --git a/test/elementhandle-screenshot.spec.ts b/test/elementhandle-screenshot.spec.ts index 2c44bc2b22..f29324c22a 100644 --- a/test/elementhandle-screenshot.spec.ts +++ b/test/elementhandle-screenshot.spec.ts @@ -363,7 +363,7 @@ describe('element screenshot', (suite, parameters) => { }); it('should wait for element to stop moving', (test, parameters) => { - test.flaky(options.WEBKIT(parameters) && !options.HEADLESS && LINUX); + test.flaky(options.WEBKIT(parameters) && !options.HEADLESS && options.LINUX(parameters)); }, async ({ page, server, golden }) => { await page.setViewportSize({ width: 500, height: 500 }); await page.goto(server.PREFIX + '/grid.html'); diff --git a/test/elementhandle-wait-for-element-state.spec.ts b/test/elementhandle-wait-for-element-state.spec.ts index 1011fdb1ee..d7259e6201 100644 --- a/test/elementhandle-wait-for-element-state.spec.ts +++ b/test/elementhandle-wait-for-element-state.spec.ts @@ -115,7 +115,7 @@ it('should wait for disabled button', async ({page}) => { }); it('should wait for stable position', (test, parameters) => { - test.fixme(options.FIREFOX(parameters) && LINUX); + test.fixme(options.FIREFOX(parameters) && options.LINUX(parameters)); }, async ({page, server}) => { await page.goto(server.PREFIX + '/input/button.html'); const button = await page.$('button'); diff --git a/test/fixtures.spec.ts b/test/fixtures.spec.ts index 745a355825..b61f27e294 100644 --- a/test/fixtures.spec.ts +++ b/test/fixtures.spec.ts @@ -45,20 +45,20 @@ defineTestFixture('stallingConnectedRemoteServer', async ({browserType, stalling await browser.close(); }); -it('should close the browser when the node process closes', (test, parameters) => { +it('should close the browser when the node process closes', test => { test.slow(); -}, async ({connectedRemoteServer}) => { - if (WIN) +}, async ({connectedRemoteServer, isWindows}) => { + if (isWindows) execSync(`taskkill /pid ${connectedRemoteServer.child().pid} /T /F`); else process.kill(connectedRemoteServer.child().pid); - expect(await connectedRemoteServer.childExitCode()).toBe(WIN ? 1 : 0); + expect(await connectedRemoteServer.childExitCode()).toBe(isWindows ? 1 : 0); // We might not get browser exitCode in time when killing the parent node process, // so we don't check it here. }); -describe('fixtures', suite => { - suite.skip(WIN || !options.HEADLESS); +describe('fixtures', (suite, parameters) => { + suite.skip(options.WIN(parameters) || !options.HEADLESS); suite.slow(); }, () => { // Cannot reliably send signals on Windows. diff --git a/test/focus.spec.ts b/test/focus.spec.ts index 8fc24f1998..5d8a232c58 100644 --- a/test/focus.spec.ts +++ b/test/focus.spec.ts @@ -79,7 +79,7 @@ it('should traverse focus in all directions', async function({page}) { }); it('should traverse only form elements', (test, parameters) => { - test.skip(!MAC || !options.WEBKIT(parameters), + test.skip(!options.MAC(parameters) || !options.WEBKIT(parameters), 'Chromium and WebKit both have settings for tab traversing all links, but it is only on by default in WebKit.'); }, async function({page}) { await page.setContent(` diff --git a/test/headful.spec.ts b/test/headful.spec.ts index 89355bdf0a..0180f28c13 100644 --- a/test/headful.spec.ts +++ b/test/headful.spec.ts @@ -27,7 +27,7 @@ it('should have default url when launching browser', async ({browserType, defaul }); it('headless should be able to read cookies written by headful', (test, parameters) => { - test.fail(WIN && options.CHROMIUM(parameters)); + test.fail(options.WIN(parameters) && options.CHROMIUM(parameters)); test.flaky(options.FIREFOX(parameters)); test.slow(); }, async ({browserType, defaultBrowserOptions, server}) => { diff --git a/test/keyboard.spec.ts b/test/keyboard.spec.ts index 25cfc2df78..cd537fa099 100644 --- a/test/keyboard.spec.ts +++ b/test/keyboard.spec.ts @@ -84,7 +84,7 @@ it('insertText should only emit input event', async ({page, server}) => { }); it('should report shiftKey', (test, parameters) => { - test.fail(options.FIREFOX(parameters) && MAC); + test.fail(options.FIREFOX(parameters) && options.MAC(parameters)); }, async ({page, server}) => { await page.goto(server.PREFIX + '/input/keyboard.html'); const keyboard = page.keyboard; @@ -312,11 +312,11 @@ it('should type emoji into an iframe', async ({page, server}) => { expect(await frame.$eval('textarea', textarea => textarea.value)).toBe('👹 Tokyo street Japan 🇯🇵'); }); -it('should handle selectAll', async ({page, server}) => { +it('should handle selectAll', async ({page, server, isMac}) => { await page.goto(server.PREFIX + '/input/textarea.html'); const textarea = await page.$('textarea'); await textarea.type('some text'); - const modifier = MAC ? 'Meta' : 'Control'; + const modifier = isMac ? 'Meta' : 'Control'; await page.keyboard.down(modifier); await page.keyboard.press('a'); await page.keyboard.up(modifier); @@ -324,7 +324,7 @@ it('should handle selectAll', async ({page, server}) => { expect(await page.$eval('textarea', textarea => textarea.value)).toBe(''); }); -it('should be able to prevent selectAll', async ({page, server}) => { +it('should be able to prevent selectAll', async ({page, server, isMac}) => { await page.goto(server.PREFIX + '/input/textarea.html'); const textarea = await page.$('textarea'); await textarea.type('some text'); @@ -334,7 +334,7 @@ it('should be able to prevent selectAll', async ({page, server}) => { event.preventDefault(); }, false); }); - const modifier = MAC ? 'Meta' : 'Control'; + const modifier = isMac ? 'Meta' : 'Control'; await page.keyboard.down(modifier); await page.keyboard.press('a'); await page.keyboard.up(modifier); @@ -343,7 +343,7 @@ it('should be able to prevent selectAll', async ({page, server}) => { }); it('should support MacOS shortcuts', (test, parameters) => { - test.skip(!MAC); + test.skip(!options.MAC(parameters)); }, async ({page, server}) => { await page.goto(server.PREFIX + '/input/textarea.html'); const textarea = await page.$('textarea'); @@ -354,11 +354,11 @@ it('should support MacOS shortcuts', (test, parameters) => { expect(await page.$eval('textarea', textarea => textarea.value)).toBe('some '); }); -it('should press the meta key', async ({page, isFirefox}) => { +it('should press the meta key', async ({page, isFirefox, isMac}) => { const lastEvent = await captureLastKeydown(page); await page.keyboard.press('Meta'); const {key, code, metaKey} = await lastEvent.jsonValue(); - if (isFirefox && !MAC) + if (isFirefox && !isMac) expect(key).toBe('OS'); else expect(key).toBe('Meta'); @@ -368,7 +368,7 @@ it('should press the meta key', async ({page, isFirefox}) => { else expect(code).toBe('MetaLeft'); - if (isFirefox && !MAC) + if (isFirefox && !isMac) expect(metaKey).toBe(false); else expect(metaKey).toBe(true); diff --git a/test/mouse.spec.ts b/test/mouse.spec.ts index 1af09d3b75..a221f58b41 100644 --- a/test/mouse.spec.ts +++ b/test/mouse.spec.ts @@ -28,7 +28,7 @@ function dimensions() { } it('should click the document', (test, parameters) => { - test.flaky(options.FIREFOX(parameters) && WIN, 'Occasionally times out on options.FIREFOX on Windows: https://github.com/microsoft/playwright/pull/1911/checks?check_run_id=607149016'); + test.flaky(options.FIREFOX(parameters) && options.WIN(parameters), 'Occasionally times out on options.FIREFOX on Windows: https://github.com/microsoft/playwright/pull/1911/checks?check_run_id=607149016'); }, async ({page, server}) => { await page.evaluate(() => { window['clickPromise'] = new Promise(resolve => { @@ -123,12 +123,12 @@ it('should trigger hover state with removed window.Node', async ({page, server}) expect(await page.evaluate(() => document.querySelector('button:hover').id)).toBe('button-6'); }); -it('should set modifier keys on click', async ({page, server, isFirefox}) => { +it('should set modifier keys on click', async ({page, server, isFirefox, isMac}) => { await page.goto(server.PREFIX + '/input/scrollable.html'); await page.evaluate(() => document.querySelector('#button-3').addEventListener('mousedown', e => window['lastEvent'] = e, true)); const modifiers = {'Shift': 'shiftKey', 'Control': 'ctrlKey', 'Alt': 'altKey', 'Meta': 'metaKey'}; // In Firefox, the Meta modifier only exists on Mac - if (isFirefox && !MAC) + if (isFirefox && !isMac) delete modifiers['Meta']; for (const modifier in modifiers) { await page.keyboard.down(modifier); diff --git a/test/network-request.spec.ts b/test/network-request.spec.ts index a2f9133ede..0f3068000c 100644 --- a/test/network-request.spec.ts +++ b/test/network-request.spec.ts @@ -56,7 +56,7 @@ it('should return headers', async ({page, server, isChromium, isFirefox, isWebKi }); it('should get the same headers as the server', (test, parameters) => { - test.fail(options.CHROMIUM(parameters) || options.WEBKIT(parameters)); + test.fail(options.CHROMIUM(parameters) || options.WEBKIT(parameters), 'Provisional headers differ from those in network stack'); }, async ({page, server}) => { await page.goto(server.PREFIX + '/empty.html'); let serverRequest; diff --git a/test/page-event-crash.spec.ts b/test/page-event-crash.spec.ts index ebe42aeb3b..bb41b8b297 100644 --- a/test/page-event-crash.spec.ts +++ b/test/page-event-crash.spec.ts @@ -28,7 +28,7 @@ function crash(page, toImpl, browserName) { describe('', (suite, parameters) => { suite.fixme(options.WIRE); - suite.flaky(options.FIREFOX(parameters) && WIN); + suite.flaky(options.FIREFOX(parameters) && options.WIN(parameters)); }, () => { it('should emit crash event when page crashes', async ({page, browserName, toImpl}) => { await page.setContent(`
This page should crash
`); @@ -65,7 +65,7 @@ describe('', (suite, parameters) => { it('should be able to close context when page crashes', (test, parameters) => { test.fixme(options.WIRE); - test.flaky(options.FIREFOX(parameters) && WIN); + test.flaky(options.FIREFOX(parameters) && options.WIN(parameters)); }, async ({page, browserName, toImpl}) => { await page.setContent(`
This page should crash
`); crash(page, toImpl, browserName); diff --git a/test/page-event-network.spec.ts b/test/page-event-network.spec.ts index 65b04525b7..9aad1658f9 100644 --- a/test/page-event-network.spec.ts +++ b/test/page-event-network.spec.ts @@ -41,7 +41,7 @@ it('Page.Events.Response', async ({page, server}) => { expect(responses[0].request()).toBeTruthy(); }); -it('Page.Events.RequestFailed', async ({page, server, isChromium, isWebKit}) => { +it('Page.Events.RequestFailed', async ({page, server, isChromium, isWebKit, isMac, isWindows}) => { server.setRoute('/one-style.css', (req, res) => { res.setHeader('Content-Type', 'text/css'); res.connection.destroy(); @@ -56,9 +56,9 @@ it('Page.Events.RequestFailed', async ({page, server, isChromium, isWebKit}) => if (isChromium) { expect(failedRequests[0].failure().errorText).toBe('net::ERR_EMPTY_RESPONSE'); } else if (isWebKit) { - if (MAC) + if (isMac) expect(failedRequests[0].failure().errorText).toBe('The network connection was lost.'); - else if (WIN) + else if (isWindows) expect(failedRequests[0].failure().errorText).toBe('Server returned nothing (no headers, no data)'); else expect(failedRequests[0].failure().errorText).toBe('Message Corrupt'); diff --git a/test/page-goto.spec.ts b/test/page-goto.spec.ts index ab4ccf3ad3..83e8d1637d 100644 --- a/test/page-goto.spec.ts +++ b/test/page-goto.spec.ts @@ -210,12 +210,12 @@ it('should throw if networkidle2 is passed as an option', async ({page, server}) expect(error.message).toContain(`waitUntil: expected one of (load|domcontentloaded|networkidle)`); }); -it('should fail when main resources failed to load', async ({page, isChromium, isWebKit}) => { +it('should fail when main resources failed to load', async ({page, isChromium, isWebKit, isWindows}) => { let error = null; await page.goto('http://localhost:44123/non-existing-url').catch(e => error = e); if (isChromium) expect(error.message).toContain('net::ERR_CONNECTION_REFUSED'); - else if (isWebKit && WIN) + else if (isWebKit && isWindows) expect(error.message).toContain(`Couldn\'t connect to server`); else if (isWebKit) expect(error.message).toContain('Could not connect'); diff --git a/test/page-history.spec.ts b/test/page-history.spec.ts index 2b3ecc5028..db4ee444f4 100644 --- a/test/page-history.spec.ts +++ b/test/page-history.spec.ts @@ -53,7 +53,7 @@ it('page.goBack should work with HistoryAPI', async ({page, server}) => { }); it('page.goBack should work for file urls', (test, parameters) => { - test.fail(options.WEBKIT(parameters) && MAC); + test.fail(options.WEBKIT(parameters) && options.MAC(parameters)); }, async ({page, server, asset}) => { // WebKit embedder fails to go back/forward to the file url. const url1 = url.pathToFileURL(asset('empty.html')).href; diff --git a/test/page-screenshot.spec.ts b/test/page-screenshot.spec.ts index 80ad73c111..ded991cd53 100644 --- a/test/page-screenshot.spec.ts +++ b/test/page-screenshot.spec.ts @@ -219,7 +219,7 @@ describe('page screenshot', (suite, parameters) => { it('should work for webgl', (test, parameters) => { test.fixme(options.FIREFOX(parameters)); - test.fixme(options.WEBKIT(parameters) && LINUX); + test.fixme(options.WEBKIT(parameters) && options.LINUX(parameters)); }, async ({page, server, golden}) => { await page.setViewportSize({width: 640, height: 480}); await page.goto(server.PREFIX + '/screenshots/webgl.html'); diff --git a/test/permissions.spec.ts b/test/permissions.spec.ts index efb1dcd9af..3cd4bd5ab5 100644 --- a/test/permissions.spec.ts +++ b/test/permissions.spec.ts @@ -104,7 +104,7 @@ describe('permissions', (suite, parameters) => { it('should trigger permission onchange', (test, parameters) => { test.fail(options.WEBKIT(parameters)); test.fail(options.CHROMIUM(parameters) && !options.HEADLESS); - test.flaky(options.FIREFOX(parameters) && LINUX); + test.flaky(options.FIREFOX(parameters) && options.LINUX(parameters)); }, async ({page, server, context}) => { // TODO: flaky // - Linux: https://github.com/microsoft/playwright/pull/1790/checks?check_run_id=587327883 diff --git a/test/playwright.fixtures.ts b/test/playwright.fixtures.ts index 8dc5434398..92413cdc3e 100644 --- a/test/playwright.fixtures.ts +++ b/test/playwright.fixtures.ts @@ -25,8 +25,10 @@ import { Transport } from '../lib/protocol/transport'; import { installCoverageHooks } from './coverage'; import { mkdtempAsync, removeFolderAsync } from './utils'; import { fixtures as baseFixtures } from '@playwright/test-runner'; +import assert from 'assert'; type PlaywrightParameters = { + platform: 'win32' | 'linux' | 'darwin' browserName: string; }; @@ -43,6 +45,9 @@ type PlaywrightWorkerFixtures = { isChromium: boolean; isFirefox: boolean; isWebKit: boolean; + isWindows: boolean; + isMac: boolean; + isLinux: boolean; }; type PlaywrightFixtures = { @@ -74,9 +79,12 @@ export const afterAll = fixtures.afterAll; export const expect = fixtures.expect; export const options = { - CHROMIUM: parameters => parameters.browserName === 'chromium', - FIREFOX: parameters => parameters.browserName === 'firefox', - WEBKIT: parameters => parameters.browserName === 'webkit', + CHROMIUM: (parameters: PlaywrightParameters) => parameters.browserName === 'chromium', + FIREFOX: (parameters: PlaywrightParameters) => parameters.browserName === 'firefox', + WEBKIT: (parameters: PlaywrightParameters) => parameters.browserName === 'webkit', + MAC: (parameters: PlaywrightParameters) => parameters.platform === 'darwin', + LINUX: (parameters: PlaywrightParameters) => parameters.platform === 'linux', + WIN: (parameters: PlaywrightParameters) => parameters.platform === 'win32', HEADLESS: !!valueFromEnv('HEADLESS', true), WIRE: !!process.env.PWWIRE, SLOW_MO: valueFromEnv('SLOW_MO', 0), @@ -84,16 +92,6 @@ export const options = { TRACING: valueFromEnv('TRACING', false) && !process.env.PWWIRE, }; -declare global { - const MAC: boolean; - const LINUX: boolean; - const WIN: boolean; -} -const platform = os.platform(); -global['MAC'] = platform === 'darwin'; -global['LINUX'] = platform === 'linux'; -global['WIN'] = platform === 'win32'; - defineWorkerFixture('httpService', async ({parallelIndex}, test) => { const assetsPath = path.join(__dirname, 'assets'); const cachedPath = path.join(__dirname, 'assets', 'cached'); @@ -136,7 +134,8 @@ defineWorkerFixture('defaultBrowserOptions', async ({browserName}, test) => { }); }); -defineWorkerFixture('playwright', async ({browserName, parallelIndex}, test) => { +defineWorkerFixture('playwright', async ({browserName, parallelIndex, platform}, test) => { + assert(platform); // Depend on platform to generate all tests. const {coverage, uninstall} = installCoverageHooks(browserName); if (options.WIRE) { require('../lib/utils/utils').setUnderTest(); @@ -192,10 +191,15 @@ defineWorkerFixture('browserType', async ({playwright, browserName}, test) => { defineParameter('browserName', 'Browser type name', ''); +defineParameter('platform', 'Operating system', process.platform as ('win32' | 'linux' | 'darwin')); + generateParametrizedTests( 'browserName', process.env.BROWSER ? [process.env.BROWSER] : ['chromium', 'webkit', 'firefox']); +generateParametrizedTests( + 'platform', + process.env.PWTESTREPORT ? ['win32', 'darwin', 'linux'] : [process.platform as ('win32' | 'linux' | 'darwin')]); defineWorkerFixture('isChromium', async ({browserName}, test) => { await test(browserName === 'chromium'); @@ -209,6 +213,18 @@ defineWorkerFixture('isWebKit', async ({browserName}, test) => { await test(browserName === 'webkit'); }); +defineWorkerFixture('isWindows', async ({platform}, test) => { + await test(platform === 'win32'); +}); + +defineWorkerFixture('isMac', async ({platform}, test) => { + await test(platform === 'darwin'); +}); + +defineWorkerFixture('isLinux', async ({platform}, test) => { + await test(platform === 'linux'); +}); + defineWorkerFixture('browser', async ({browserType, defaultBrowserOptions}, test) => { const browser = await browserType.launch(defaultBrowserOptions); await test(browser); diff --git a/test/proxy.spec.ts b/test/proxy.spec.ts index 686470be39..be413b5a4b 100644 --- a/test/proxy.spec.ts +++ b/test/proxy.spec.ts @@ -120,7 +120,7 @@ it('should exclude patterns', (test, parameters) => { }); it('should use socks proxy', (test, parameters) => { - test.flaky(MAC && options.WEBKIT(parameters), 'Intermittent page.goto: The network connection was lost error on bots'); + test.flaky(options.MAC(parameters) && options.WEBKIT(parameters), 'Intermittent page.goto: The network connection was lost error on bots'); }, async ({ browserType, defaultBrowserOptions, parallelIndex }) => { const server = socks.createServer((info, accept, deny) => { let socket; diff --git a/test/screencast.spec.ts b/test/screencast.spec.ts index e3281a7610..0407ce1ee7 100644 --- a/test/screencast.spec.ts +++ b/test/screencast.spec.ts @@ -249,7 +249,7 @@ describe('screencast', suite => { }); it('should capture css transformation', (test, parameters) => { - test.fail(options.WEBKIT(parameters) && WIN, 'Does not work on WebKit Windows'); + test.fail(options.WEBKIT(parameters) && options.WIN(parameters), 'Does not work on WebKit Windows'); }, async ({browser, server, videoPlayer, videoFile}) => { const size = {width: 320, height: 240}; // Set viewport equal to screencast frame size to avoid scaling.