diff --git a/package-lock.json b/package-lock.json index f3cb058627..aea1f56eb4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,19 +25,19 @@ } }, "@babel/core": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.4.tgz", - "integrity": "sha512-5deljj5HlqRXN+5oJTY7Zs37iH3z3b++KjiKtIsJy1NrjOOVSEaJHEetLBhyu0aQOSNNZ/0IuEAan9GzRuDXHg==", + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", + "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.4", + "@babel/generator": "^7.11.6", "@babel/helper-module-transforms": "^7.11.0", "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.4", + "@babel/parser": "^7.11.5", "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.0", - "@babel/types": "^7.11.0", + "@babel/traverse": "^7.11.5", + "@babel/types": "^7.11.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -48,32 +48,21 @@ "source-map": "^0.5.0" }, "dependencies": { - "@babel/generator": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.4.tgz", - "integrity": "sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, "@babel/parser": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.4.tgz", - "integrity": "sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", + "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", "dev": true } } }, "@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", + "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", "dev": true, "requires": { - "@babel/types": "^7.11.0", + "@babel/types": "^7.11.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -147,12 +136,11 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", - "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz", + "integrity": "sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==", "dev": true, "requires": { - "@babel/traverse": "^7.10.4", "@babel/types": "^7.10.4" } }, @@ -243,15 +231,14 @@ } }, "@babel/helper-remap-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", - "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz", + "integrity": "sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-wrap-function": "^7.10.4", "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", "@babel/types": "^7.10.4" } }, @@ -918,9 +905,9 @@ } }, "@babel/preset-env": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", - "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.5.tgz", + "integrity": "sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==", "dev": true, "requires": { "@babel/compat-data": "^7.11.0", @@ -985,7 +972,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.10.4", "@babel/plugin-transform-unicode-regex": "^7.10.4", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.11.0", + "@babel/types": "^7.11.5", "browserslist": "^4.12.0", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", @@ -994,9 +981,9 @@ } }, "@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1037,26 +1024,34 @@ } }, "@babel/traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", - "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", + "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", + "@babel/generator": "^7.11.5", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.0", - "@babel/types": "^7.11.0", + "@babel/parser": "^7.11.5", + "@babel/types": "^7.11.5", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/parser": { + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", + "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", + "dev": true + } } }, "@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", + "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -1136,9 +1131,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -1173,13 +1168,14 @@ } }, "@playwright/test-runner": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@playwright/test-runner/-/test-runner-0.2.10.tgz", - "integrity": "sha512-kOM8m+4/Crjjc01tC9avvMC/2GIMR46jpZrkNIpsBmbn3PkmLXNCyl0rT+2vqmHVaWDTAK6xxjN7JE3Xra3YSQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@playwright/test-runner/-/test-runner-0.3.5.tgz", + "integrity": "sha512-G/X9fjqr4ZOyZojQpKAlid7KC8Bw+S834KxSD9nQSqLaN8QFpebFr9xqVhEs/G82RP8DRzxlp8vi5CqLhGrU0w==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/core": "^7.11.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/preset-env": "^7.11.0", "@babel/preset-typescript": "^7.10.4", "colors": "^1.4.0", @@ -1196,14 +1192,6 @@ "stack-utils": "^2.0.2", "terminal-link": "^2.1.1", "text-diff": "^1.0.1" - }, - "dependencies": { - "commander": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.1.0.tgz", - "integrity": "sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==", - "dev": true - } } }, "@sindresorhus/is": { @@ -2206,15 +2194,15 @@ } }, "browserslist": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", - "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", + "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001111", - "electron-to-chromium": "^1.3.523", + "caniuse-lite": "^1.0.30001125", + "electron-to-chromium": "^1.3.564", "escalade": "^3.0.2", - "node-releases": "^1.1.60" + "node-releases": "^1.1.61" } }, "buffer": { @@ -2344,9 +2332,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001113", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001113.tgz", - "integrity": "sha512-qMvjHiKH21zzM/VDZr6oosO6Ri3U0V2tC015jRXjOecwQCJtsU5zklTNTk31jQbIOP8gha0h1ccM/g0ECP+4BA==", + "version": "1.0.30001125", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001125.tgz", + "integrity": "sha512-9f+r7BW8Qli917mU3j0fUaTweT3f3vnX/Lcs+1C73V+RADmFme+Ih0Br8vONQi3X0lseOe6ZHfsZLCA8MSjxUA==", "dev": true }, "caseless": { @@ -2527,6 +2515,12 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.1.0.tgz", + "integrity": "sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==", + "dev": true + }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -3056,9 +3050,9 @@ } }, "electron-to-chromium": { - "version": "1.3.530", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.530.tgz", - "integrity": "sha512-jnKBqvkXyxo6Tr245YyghzSMjmrA+uzQn+rwLjd3n+Y3sad0eWPzAXfa2lDwSikQu0I5reYacZjmQjCRH9VQdg==", + "version": "1.3.564", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.564.tgz", + "integrity": "sha512-fNaYN3EtKQWLQsrKXui8mzcryJXuA0LbCLoizeX6oayG2emBaS5MauKjCPAvc29NEY4FpLHIUWiP+Y0Bfrs5dg==", "dev": true }, "elliptic": { @@ -4776,9 +4770,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -4846,9 +4840,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -4914,9 +4908,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -5482,9 +5476,9 @@ "dev": true }, "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", + "version": "1.1.61", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.61.tgz", + "integrity": "sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==", "dev": true }, "node-stream-zip": { @@ -7086,9 +7080,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" diff --git a/package.json b/package.json index f425d60f49..b1eeb42ad0 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "ws": "^7.3.1" }, "devDependencies": { - "@playwright/test-runner": "^0.2.10", + "@playwright/test-runner": "^0.3.5", "@types/debug": "^4.1.5", "@types/extract-zip": "^1.6.2", "@types/mime": "^2.0.3", diff --git a/test/browsertype-connect.spec.ts b/test/browsertype-connect.spec.ts index b3c2446bd4..ff9668ad60 100644 --- a/test/browsertype-connect.spec.ts +++ b/test/browsertype-connect.spec.ts @@ -15,9 +15,10 @@ * limitations under the License. */ -import { it, expect, describe, options } from './playwright.fixtures'; +import { options } from './playwright.fixtures'; import utils from './utils'; -import './remoteServer.fixture'; +import { serverFixtures } from './remoteServer.fixture'; +const { it, expect, describe } = serverFixtures; describe('connect', suite => { suite.skip(options.WIRE); diff --git a/test/chromium/oopif.spec.ts b/test/chromium/oopif.spec.ts index 48311d1e45..83f7a5fc57 100644 --- a/test/chromium/oopif.spec.ts +++ b/test/chromium/oopif.spec.ts @@ -14,8 +14,8 @@ * limitations under the License. */ -import { options } from '../playwright.fixtures'; -import { it, expect, describe, registerWorkerFixture } from '@playwright/test-runner'; +import { options, playwrightFixtures } from '../playwright.fixtures'; +const { it, expect, describe, registerWorkerFixture } = playwrightFixtures; registerWorkerFixture('browser', async ({browserType, defaultBrowserOptions}, test) => { const browser = await browserType.launch({ diff --git a/test/chromium/tracing.spec.ts b/test/chromium/tracing.spec.ts index f22d00a5b2..b1429be850 100644 --- a/test/chromium/tracing.spec.ts +++ b/test/chromium/tracing.spec.ts @@ -14,18 +14,17 @@ * limitations under the License. */ -import { options } from '../playwright.fixtures'; -import { it, expect, describe, registerFixture } from '@playwright/test-runner'; - +import { options, playwrightFixtures } from '../playwright.fixtures'; import fs from 'fs'; import path from 'path'; import type { ChromiumBrowser } from '../..'; -declare global { - interface TestState { - outputTraceFile: string; - } -} +type TestState = { + outputTraceFile: string; +}; +const fixtures = playwrightFixtures.extend<{}, TestState>(); +const { it, expect, describe, registerFixture } = fixtures; + registerFixture('outputTraceFile', async ({tmpDir}, test) => { const outputTraceFile = path.join(tmpDir, `trace.json`); diff --git a/test/download.spec.ts b/test/download.spec.ts index 23ebd0df61..d635c86d17 100644 --- a/test/download.spec.ts +++ b/test/download.spec.ts @@ -15,8 +15,8 @@ */ import { options } from './playwright.fixtures'; -import { it, expect, beforeEach } from '@playwright/test-runner'; -import './remoteServer.fixture'; +import { serverFixtures } from './remoteServer.fixture'; +const { it, expect, beforeEach } = serverFixtures; import fs from 'fs'; import path from 'path'; diff --git a/test/downloads-path.spec.ts b/test/downloads-path.spec.ts index 058bc75827..32166c2ebf 100644 --- a/test/downloads-path.spec.ts +++ b/test/downloads-path.spec.ts @@ -14,8 +14,7 @@ * limitations under the License. */ -import { it, expect, registerFixture } from '@playwright/test-runner'; -import './playwright.fixtures'; +import { playwrightFixtures } from './playwright.fixtures'; import path from 'path'; import fs from 'fs'; @@ -23,12 +22,12 @@ import os from 'os'; import {mkdtempAsync, removeFolderAsync} from './utils'; import type { Browser, BrowserContext } from '..'; -declare global { - interface TestState { - downloadsBrowser: Browser; - persistentDownloadsContext: BrowserContext; - } -} +type TestState = { + downloadsBrowser: Browser; + persistentDownloadsContext: BrowserContext; +}; +const fixtures = playwrightFixtures.extend<{}, TestState>(); +const { it, expect, registerFixture } = fixtures; registerFixture('downloadsBrowser', async ({server, browserType, defaultBrowserOptions, tmpDir}, test) => { server.setRoute('/download', (req, res) => { diff --git a/test/electron/electron-app.spec.ts b/test/electron/electron-app.spec.ts index 1472338a2b..0bee4a4f04 100644 --- a/test/electron/electron-app.spec.ts +++ b/test/electron/electron-app.spec.ts @@ -14,8 +14,9 @@ * limitations under the License. */ -import { it, expect, describe, options } from '../playwright.fixtures'; -import './electron.fixture'; +import { options } from '../playwright.fixtures'; +import { electronFixtures } from './electron.fixture'; +const { it, expect, describe } = electronFixtures; import path from 'path'; const electronName = process.platform === 'win32' ? 'electron.cmd' : 'electron'; diff --git a/test/electron/electron-window.spec.ts b/test/electron/electron-window.spec.ts index 9605533d5d..244bdf8f9d 100644 --- a/test/electron/electron-window.spec.ts +++ b/test/electron/electron-window.spec.ts @@ -14,8 +14,9 @@ * limitations under the License. */ -import { it, expect, describe, options } from '../playwright.fixtures'; -import './electron.fixture'; +import { options } from '../playwright.fixtures'; +import { electronFixtures } from './electron.fixture'; +const { it, expect, describe } = electronFixtures; describe('electron window', suite => { suite.skip(!options.CHROMIUM); diff --git a/test/electron/electron.fixture.ts b/test/electron/electron.fixture.ts index 6a4c4e8046..d1f04b26bf 100644 --- a/test/electron/electron.fixture.ts +++ b/test/electron/electron.fixture.ts @@ -14,19 +14,19 @@ * limitations under the License. */ -import '../playwright.fixtures'; -import { registerFixture } from '@playwright/test-runner'; +import { playwrightFixtures } from '../playwright.fixtures'; import type {ElectronApplication, ElectronLauncher, ElectronPage} from '../../electron-types'; import path from 'path'; const electronName = process.platform === 'win32' ? 'electron.cmd' : 'electron'; -declare global { - interface TestState { - application: ElectronApplication; - window: ElectronPage; - } -} +type TestState = { + application: ElectronApplication; + window: ElectronPage; +}; + +export const electronFixtures = playwrightFixtures.extend<{}, TestState>(); +const { registerFixture } = electronFixtures; declare module '../../index' { const electron: ElectronLauncher; diff --git a/test/fixtures.spec.ts b/test/fixtures.spec.ts index 1e20458055..d7c057b74d 100644 --- a/test/fixtures.spec.ts +++ b/test/fixtures.spec.ts @@ -15,19 +15,19 @@ * limitations under the License. */ -import { it, expect, describe, options } from './playwright.fixtures'; -import './remoteServer.fixture'; -import { registerFixture } from '@playwright/test-runner'; - +import { options } from './playwright.fixtures'; +import { serverFixtures } from './remoteServer.fixture'; import { execSync } from 'child_process'; import path from 'path'; +import { RemoteServer } from './remoteServer.fixture'; -declare global { - interface TestState { - connectedRemoteServer: TestState['remoteServer']; - stallingConnectedRemoteServer: TestState['stallingRemoteServer']; - } -} +export type FixturesFixtures = { + connectedRemoteServer: RemoteServer; + stallingConnectedRemoteServer: RemoteServer; +}; + +const fixturesFixtures = serverFixtures.extend<{}, FixturesFixtures>(); +const { it, describe, expect, registerFixture } = fixturesFixtures; registerFixture('connectedRemoteServer', async ({browserType, remoteServer, server}, test) => { const browser = await browserType.connect({ wsEndpoint: remoteServer.wsEndpoint() }); diff --git a/test/playwright.fixtures.ts b/test/playwright.fixtures.ts index 285bd51a3f..d229d3e547 100644 --- a/test/playwright.fixtures.ts +++ b/test/playwright.fixtures.ts @@ -23,14 +23,49 @@ import { TestServer } from '../utils/testserver'; import { Connection } from '../lib/client/connection'; import { Transport } from '../lib/protocol/transport'; import { installCoverageHooks } from './coverage'; -import { parameters, registerFixture, registerWorkerFixture } from '@playwright/test-runner'; import { mkdtempAsync, removeFolderAsync } from './utils'; -export { it, fit, xit, describe, fdescribe, xdescribe, expect } from '@playwright/test-runner'; +import { fixtures as baseFixtures } from '@playwright/test-runner'; + +export type PlaywrightWorkerFixtures = { + asset: (path: string) => string; + defaultBrowserOptions: LaunchOptions; + golden: (path: string) => string; + playwright: typeof import('../index'); + browserName: string; + browserType: BrowserType; + browser: Browser; + httpService: {server: TestServer, httpsServer: TestServer} + toImpl: (rpcObject: any) => any; +}; + +export type PlaywrightFixtures = { + context: BrowserContext; + server: TestServer; + page: Page; + httpsServer: TestServer; + browserServer: BrowserServer; + launchPersistent: (options?: Parameters['launchPersistentContext']>[1]) => Promise<{context: BrowserContext, page: Page}>; +}; + +const fixtures = baseFixtures.extend(); +const { registerFixture, registerWorkerFixture } = fixtures; +export const playwrightFixtures = fixtures; +export const it = fixtures.it; +export const fit = fixtures.fit; +export const xit = fixtures.xit; +export const describe = fixtures.describe; +export const fdescribe = fixtures.fdescribe; +export const xdescribe = fixtures.xdescribe; +export const beforeEach = fixtures.beforeEach; +export const afterEach = fixtures.afterEach; +export const beforeAll = fixtures.beforeAll; +export const afterAll = fixtures.afterAll; +export const expect = fixtures.expect; export const options = { - CHROMIUM: parameters.browserName === 'chromium', - FIREFOX: parameters.browserName === 'firefox', - WEBKIT: parameters.browserName === 'webkit', + CHROMIUM: fixtures.parameters.browserName === 'chromium', + FIREFOX: fixtures.parameters.browserName === 'firefox', + WEBKIT: fixtures.parameters.browserName === 'webkit', HEADLESS: !!valueFromEnv('HEADLESS', true), WIRE: !!process.env.PWWIRE, SLOW_MO: valueFromEnv('SLOW_MO', 0), @@ -38,28 +73,6 @@ export const options = { TRACING: valueFromEnv('TRACING', false) && !process.env.PWWIRE, }; -declare global { - interface WorkerState { - asset: (path: string) => string; - defaultBrowserOptions: LaunchOptions; - golden: (path: string) => string; - playwright: typeof import('../index'); - browserName: string; - browserType: BrowserType; - browser: Browser; - httpService: {server: TestServer, httpsServer: TestServer} - toImpl: (rpcObject: any) => any; - } - interface TestState { - context: BrowserContext; - server: TestServer; - page: Page; - httpsServer: TestServer; - browserServer: BrowserServer; - launchPersistent: (options?: Parameters['launchPersistentContext']>[1]) => Promise<{context: BrowserContext, page: Page}>; - } -} - declare global { const MAC: boolean; const LINUX: boolean; @@ -70,11 +83,11 @@ global['MAC'] = platform === 'darwin'; global['LINUX'] = platform === 'linux'; global['WIN'] = platform === 'win32'; -registerWorkerFixture('httpService', async ({}, test) => { +registerWorkerFixture('httpService', async ({parallelIndex}, test) => { const assetsPath = path.join(__dirname, 'assets'); const cachedPath = path.join(__dirname, 'assets', 'cached'); - const port = 8907 + parameters.parallelIndex * 2; + const port = 8907 + parallelIndex * 2; const server = await TestServer.create(assetsPath, port); server.enableHTTPCache(cachedPath); @@ -150,7 +163,7 @@ registerWorkerFixture('playwright', async ({browserName}, test) => { async function teardownCoverage() { uninstall(); - const coveragePath = path.join(__dirname, 'coverage-report', parameters.parallelIndex + '.json'); + const coveragePath = path.join(__dirname, 'coverage-report', fixtures.parameters.parallelIndex + '.json'); const coverageJSON = [...coverage.keys()].filter(key => coverage.get(key)); await fs.promises.mkdir(path.dirname(coveragePath), { recursive: true }); await fs.promises.writeFile(coveragePath, JSON.stringify(coverageJSON, undefined, 2), 'utf8'); diff --git a/test/proxy.spec.ts b/test/proxy.spec.ts index 634d74ebbb..00adce923a 100644 --- a/test/proxy.spec.ts +++ b/test/proxy.spec.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { parameters } from '@playwright/test-runner'; import { it, expect, options } from './playwright.fixtures'; import socks from 'socksv5'; @@ -122,7 +121,7 @@ it('should exclude patterns', test => { it('should use socks proxy', test => { test.flaky(MAC && options.WEBKIT, 'Intermittent page.goto: The network connection was lost error on bots'); -}, async ({ browserType, defaultBrowserOptions }) => { +}, async ({ browserType, defaultBrowserOptions, parallelIndex }) => { const server = socks.createServer((info, accept, deny) => { let socket; if ((socket = accept(true))) { @@ -139,7 +138,7 @@ it('should use socks proxy', test => { ].join('\r\n')); } }); - const socksPort = 9107 + parameters.parallelIndex * 2; + const socksPort = 9107 + parallelIndex * 2; server.listen(socksPort, 'localhost'); server.useAuth(socks.auth.None()); diff --git a/test/remoteServer.fixture.ts b/test/remoteServer.fixture.ts index 327a3a7eea..d79784ca1a 100644 --- a/test/remoteServer.fixture.ts +++ b/test/remoteServer.fixture.ts @@ -14,22 +14,22 @@ * limitations under the License. */ -import { registerFixture } from '@playwright/test-runner'; +import { playwrightFixtures } from './playwright.fixtures'; import path from 'path'; import { spawn } from 'child_process'; import type { BrowserType, Browser, LaunchOptions } from '..'; -declare global { - interface TestState { - remoteServer: RemoteServer; - stallingRemoteServer: RemoteServer; - } -} +type ServerFixtures = { + remoteServer: RemoteServer; + stallingRemoteServer: RemoteServer; +}; +export const serverFixtures = playwrightFixtures.extend<{}, ServerFixtures>(); +const { registerFixture } = serverFixtures; const playwrightPath = path.join(__dirname, '..'); -class RemoteServer { +export class RemoteServer { _output: Map; _outputCallback: Map; _browserType: BrowserType; diff --git a/test/screencast.spec.ts b/test/screencast.spec.ts index b5d96b0db7..a9d09ebde8 100644 --- a/test/screencast.spec.ts +++ b/test/screencast.spec.ts @@ -14,19 +14,18 @@ * limitations under the License. */ -import { options } from './playwright.fixtures'; -import { it, expect, describe, registerFixture } from '@playwright/test-runner'; +import { options, playwrightFixtures } from './playwright.fixtures'; import type { Page } from '..'; import fs from 'fs'; import path from 'path'; import { TestServer } from '../utils/testserver'; -declare global { - interface TestState { - videoPlayer: VideoPlayer; - } -} +type TestState = { + videoPlayer: VideoPlayer; +}; +const fixtures = playwrightFixtures.extend<{}, TestState>(); +const { it, expect, describe, registerFixture } = fixtures; registerFixture('videoPlayer', async ({playwright, context, server}, test) => { // WebKit on Mac & Windows cannot replay webm/vp8 video, is unrelyable diff --git a/test/utils.js b/test/utils.js index 6ff2371469..e40fed3757 100644 --- a/test/utils.js +++ b/test/utils.js @@ -20,7 +20,8 @@ const path = require('path'); const util = require('util'); const os = require('os'); const removeFolder = require('rimraf'); -const { expect } = require('@playwright/test-runner'); +const { fixtures } = require('@playwright/test-runner'); +const { expect } = fixtures; const {FlakinessDashboard} = require('../utils/flakiness-dashboard'); const PROJECT_ROOT = fs.existsSync(path.join(__dirname, '..', 'package.json')) ? path.join(__dirname, '..') : path.join(__dirname, '..', '..'); diff --git a/utils/doclint/check_public_api/test/test.js b/utils/doclint/check_public_api/test/test.js index 754cb26560..2b38668163 100644 --- a/utils/doclint/check_public_api/test/test.js +++ b/utils/doclint/check_public_api/test/test.js @@ -20,7 +20,8 @@ const checkPublicAPI = require('..'); const Source = require('../../Source'); const mdBuilder = require('../MDBuilder'); const jsBuilder = require('../JSBuilder'); -const { registerWorkerFixture, describe, it, expect } = require('@playwright/test-runner'); +const { fixtures } = require('@playwright/test-runner'); +const { registerWorkerFixture, describe, it, expect } = fixtures; registerWorkerFixture('page', async({}, test) => { const browser = await playwright.chromium.launch(); diff --git a/utils/doclint/preprocessor/test.js b/utils/doclint/preprocessor/test.js index 4febd4e8f7..95bc1a9ce8 100644 --- a/utils/doclint/preprocessor/test.js +++ b/utils/doclint/preprocessor/test.js @@ -16,7 +16,8 @@ const {runCommands} = require('.'); const Source = require('../Source'); -const { describe, it, expect } = require('@playwright/test-runner'); +const { fixtures } = require('@playwright/test-runner'); +const { describe, it, expect } = fixtures; describe('runCommands', function() { const OPTIONS_REL = {