diff --git a/package-lock.json b/package-lock.json index 2247e3f..b95c0a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1109,9 +1109,9 @@ } }, "@playwright/test-runner": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@playwright/test-runner/-/test-runner-0.3.5.tgz", - "integrity": "sha512-G/X9fjqr4ZOyZojQpKAlid7KC8Bw+S834KxSD9nQSqLaN8QFpebFr9xqVhEs/G82RP8DRzxlp8vi5CqLhGrU0w==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@playwright/test-runner/-/test-runner-0.3.7.tgz", + "integrity": "sha512-byTkevqSyaDPl8As4E4ZW2zKO2hocm4xnZPKdJB6/cqdN4KfjR1HS7NweZ+I50FACVRdXkFZlimJpYRfLsyRfg==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", @@ -2340,9 +2340,9 @@ } }, "electron-to-chromium": { - "version": "1.3.564", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.564.tgz", - "integrity": "sha512-fNaYN3EtKQWLQsrKXui8mzcryJXuA0LbCLoizeX6oayG2emBaS5MauKjCPAvc29NEY4FpLHIUWiP+Y0Bfrs5dg==", + "version": "1.3.565", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.565.tgz", + "integrity": "sha512-me5dGlHFd8Q7mKhqbWRLIYnKjw4i0fO6hmW0JBxa7tM87fBfNEjWokRnDF7V+Qme/9IYpwhfMn+soWs40tXWqg==", "dev": true }, "elliptic": { diff --git a/package.json b/package.json index 3fdc211..b9d2b9f 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "playwright": "~1.4.0" }, "devDependencies": { - "@playwright/test-runner": "^0.3.4", + "@playwright/test-runner": "^0.3.7", "ts-loader": "^8.0.3", "typescript": "^4.0.2", "webpack": "^4.44.1", diff --git a/test/playwright.fixtures.ts b/test/playwright.fixtures.ts index 909976b..352f0fb 100644 --- a/test/playwright.fixtures.ts +++ b/test/playwright.fixtures.ts @@ -22,9 +22,12 @@ import { fixtures as baseFixtures } from '@playwright/test-runner'; import { ScriptController } from '../lib/scriptController'; import { Page } from 'playwright'; +type Parameters = { + browserName: string; +} + type WorkerFixtures = { browserType: playwright.BrowserType; - browserName: string; browser: playwright.Browser; httpServer: httpServer; }; @@ -36,39 +39,46 @@ type TestFixtures = { runCLI: (args: string[]) => CLIMock; }; -export const fixtures = baseFixtures.extend(); +export const fixtures = baseFixtures + .declareParameters() + .declareWorkerFixtures() + .declareTestFixtures(); interface httpServer { setHandler: (handler: http.RequestListener) => void PREFIX: string } -export function isChromium() { - return baseFixtures.parameters.browserName === 'chromium'; +export function isChromium(browserName: string): boolean; +export function isChromium(parameters: { browserName: string }): boolean; +export function isChromium(parameters: string | { browserName: string }) { + return (typeof parameters === 'string' ? parameters : parameters.browserName) === 'chromium'; } -export function isFirefox() { - return baseFixtures.parameters.browserName === 'firefox'; +export function isFirefox(browserName: string): boolean; +export function isFirefox(parameters: { browserName: string }): boolean; +export function isFirefox(parameters: string | { browserName: string }) { + return (typeof parameters === 'string' ? parameters : parameters.browserName) === 'firefox'; } -export function isWebKit() { - return baseFixtures.parameters.browserName === 'webkit'; +export function isWebKit(browserName: string): boolean; +export function isWebKit(parameters: { browserName: string }): boolean; +export function isWebKit(parameters: string | { browserName: string }) { + return (typeof parameters === 'string' ? parameters : parameters.browserName) === 'webkit'; } export function isMac() { return process.platform === 'darwin'; } -fixtures.registerWorkerFixture('browserType', async ({ browserName }, test) => { +fixtures.defineParameter('browserName', 'Browser type', 'chromium'); + +fixtures.defineWorkerFixture('browserType', async ({ browserName }, test) => { const browserType = playwright[browserName]; await test(browserType); }); -fixtures.registerWorkerFixture('browserName', async ({ }, test) => { - await test(process.env.BROWSER || 'chromium'); -}); - -fixtures.registerWorkerFixture('browser', async ({ browserType }, test) => { +fixtures.defineWorkerFixture('browser', async ({ browserType }, test) => { const browser = await browserType.launch({ headless: !process.env.HEADFUL }); @@ -76,7 +86,7 @@ fixtures.registerWorkerFixture('browser', async ({ browserType }, test) => { await browser.close(); }); -fixtures.registerWorkerFixture('httpServer', async ({parallelIndex}, runTest) => { +fixtures.defineWorkerFixture('httpServer', async ({parallelIndex}, runTest) => { let handler = (req: http.IncomingMessage, res: http.ServerResponse) => res.end() const port = 8907 + parallelIndex * 2; const server = http.createServer((req: http.IncomingMessage, res: http.ServerResponse)=> handler(req, res)).listen(port); @@ -87,7 +97,7 @@ fixtures.registerWorkerFixture('httpServer', async ({parallelIndex}, runTest) => server.close() }) -fixtures.registerFixture('contextWrapper', async ({ browser }, runTest, info) => { +fixtures.defineTestFixture('contextWrapper', async ({ browser }, runTest, info) => { const context = await browser.newContext(); const output = new WritableBuffer(); new ScriptController('chromium', {}, {}, context, output, true); @@ -95,7 +105,7 @@ fixtures.registerFixture('contextWrapper', async ({ browser }, runTest, info) => await context.close(); }); -fixtures.registerFixture('recorder', async ({ contextWrapper }, runTest) => { +fixtures.defineTestFixture('recorder', async ({ contextWrapper }, runTest) => { const page = await contextWrapper.context.newPage(); if (process.env.PWCONSOLE) page.on('console', console.log); @@ -103,7 +113,7 @@ fixtures.registerFixture('recorder', async ({ contextWrapper }, runTest) => { await page.close(); }); -fixtures.registerFixture('page', async ({ recorder }, runTest) => { +fixtures.defineTestFixture('page', async ({ recorder }, runTest) => { await runTest(recorder.page); }); @@ -219,7 +229,7 @@ class Recorder { } } -fixtures.registerFixture('runCLI', async ({ }, runTest, info) => { +fixtures.defineTestFixture('runCLI', async ({ }, runTest, info) => { let cli: CLIMock const cliFactory = (args: string[]) => { cli = new CLIMock(args); diff --git a/test/recorder.spec.ts b/test/recorder.spec.ts index fe8510e..793cd64 100644 --- a/test/recorder.spec.ts +++ b/test/recorder.spec.ts @@ -458,9 +458,9 @@ it('should handle history.postData', async ({ page, recorder, httpServer }) => { } }); -it('should record open in a new tab with url', test => { - test.fixme(isWebKit(), 'Ctrl+click does not open in new tab on WebKit'); -}, async ({ page, recorder }) => { +it('should record open in a new tab with url', (test, parameters) => { + test.fixme(isWebKit(parameters), 'Ctrl+click does not open in new tab on WebKit'); +}, async ({ page, recorder, browserName }) => { await recorder.setContentAndWait(`link`); const selector = await recorder.hoverOverElement('a'); @@ -468,12 +468,12 @@ it('should record open in a new tab with url', test => { await page.click('a', { modifiers: [ isMac() ? 'Meta' : 'Control'] }); await recorder.waitForOutput('page1'); - if (isChromium()) { + if (isChromium(browserName)) { expect(recorder.output()).toContain(` // Open new page const page1 = await context.newPage(); page1.load('about:blank?foo');`); - } else if (isFirefox()) { + } else if (isFirefox(browserName)) { expect(recorder.output()).toContain(` // Click text="link" const [page1] = await Promise.all([ @@ -485,8 +485,8 @@ it('should record open in a new tab with url', test => { } }); -it('should not clash pages', test => { - test.fixme(isFirefox(), 'Times out on Firefox, maybe the focus issue') +it('should not clash pages', (test, parameters) => { + test.fixme(isFirefox(parameters), 'Times out on Firefox, maybe the focus issue') }, async ({ page, recorder }) => { const [popup1] = await Promise.all([ page.context().waitForEvent('page'), diff --git a/test/setup.ts b/test/setup.ts index 03a2688..2805655 100644 --- a/test/setup.ts +++ b/test/setup.ts @@ -14,8 +14,6 @@ * limitations under the License. */ -declare const matrix: (m: any) => void; - -matrix({ - 'browserName': process.env.BROWSER ? [process.env.BROWSER] : ['chromium', 'webkit', 'firefox'], -}); +(global as any).setParameterValues( + 'browserName', + process.env.BROWSER ? [process.env.BROWSER] : ['chromium', 'webkit', 'firefox']);