@lvce-editor/test-with-playwright-worker 20.1.0 → 21.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/workerMain.js +91 -8
  2. package/package.json +1 -1
@@ -1,11 +1,58 @@
1
- import { join, basename } from 'node:path';
2
- import { readdir } from 'node:fs/promises';
3
- import { expect, firefox, chromium } from '@playwright/test';
1
+ import { join, dirname, basename } from 'node:path';
2
+ import { readFile, writeFile, readdir } from 'node:fs/promises';
4
3
  import { pathToFileURL } from 'node:url';
5
4
  import net from 'node:net';
6
5
  import os from 'node:os';
7
6
  import { fork, spawn } from 'node:child_process';
8
7
  import { createInterface } from 'node:readline';
8
+ import { createRequire } from 'node:module';
9
+
10
+ const require$1 = createRequire(import.meta.url);
11
+ const before = ` _onWebSocketOpened(event) {
12
+ const request2 = this._webSocketRequests.get(event.requestId);
13
+ assert(request2);
14
+ const response2 = this._webSocketResponses.get(event.requestId);
15
+ assert(response2);
16
+ this._webSocketRequests.delete(event.requestId);
17
+ this._webSocketResponses.delete(event.requestId);
18
+ this._page.frameManager.onWebSocketRequest(webSocketId(event.frameId, event.wsid), request2.headers);
19
+ this._page.frameManager.onWebSocketResponse(webSocketId(event.frameId, event.wsid), response2.status, response2.statusText, response2.headers);
20
+ }`;
21
+ const after = ` _onWebSocketOpened(event) {
22
+ const request2 = this._webSocketRequests.get(event.requestId);
23
+ const response2 = this._webSocketResponses.get(event.requestId);
24
+ if (!request2 || !response2) {
25
+ this._webSocketRequests.delete(event.requestId);
26
+ this._webSocketResponses.delete(event.requestId);
27
+ return;
28
+ }
29
+ this._webSocketRequests.delete(event.requestId);
30
+ this._webSocketResponses.delete(event.requestId);
31
+ this._page.frameManager.onWebSocketRequest(webSocketId(event.frameId, event.wsid), request2.headers);
32
+ this._page.frameManager.onWebSocketResponse(webSocketId(event.frameId, event.wsid), response2.status, response2.statusText, response2.headers);
33
+ }`;
34
+ const patchCoreBundleContent = content => {
35
+ if (content.includes(after)) {
36
+ return content;
37
+ }
38
+ if (!content.includes(before)) {
39
+ throw new Error('Could not patch Playwright Firefox worker WebSocket handler');
40
+ }
41
+ return content.split(before).join(after);
42
+ };
43
+ const getCoreBundlePath = () => {
44
+ const packageJsonPath = require$1.resolve('playwright-core/package.json');
45
+ return join(dirname(packageJsonPath), 'lib', 'coreBundle.js');
46
+ };
47
+ const patchPlaywrightFirefoxWorkerWebSocket = async () => {
48
+ const file = getCoreBundlePath();
49
+ const content = await readFile(file, 'utf8');
50
+ const patched = patchCoreBundleContent(content);
51
+ if (patched === content) {
52
+ return;
53
+ }
54
+ await writeFile(file, patched);
55
+ };
9
56
 
10
57
  const normalizeLine = line => {
11
58
  if (line.startsWith('Error: ')) {
@@ -957,6 +1004,9 @@ const runElectronTest = async ({
957
1004
  status: Skip$1
958
1005
  };
959
1006
  }
1007
+ const {
1008
+ expect
1009
+ } = await import('@playwright/test');
960
1010
  await withTimeout(testModule.test({
961
1011
  electronApp,
962
1012
  expect,
@@ -1104,6 +1154,9 @@ const runTest = async ({
1104
1154
  }) => {
1105
1155
  const start = performance.now();
1106
1156
  try {
1157
+ const {
1158
+ expect
1159
+ } = await import('@playwright/test');
1107
1160
  const url = getUrlFromTestFile(test, port, traceFocus);
1108
1161
  await page.goto(url, {
1109
1162
  waitUntil: 'networkidle'
@@ -1367,15 +1420,33 @@ const getServerPath = async serverPath => {
1367
1420
 
1368
1421
  /**
1369
1422
  *
1370
- * @param {{browser:'chromium'|'firefox', signal:AbortSignal, headless:boolean}} options
1423
+ * @param {{browser:'chromium'|'firefox'|'webkit', signal:AbortSignal, headless:boolean}} options
1371
1424
  * @returns
1372
1425
  */
1426
+ const getLauncher = async browser => {
1427
+ const {
1428
+ chromium,
1429
+ firefox,
1430
+ webkit
1431
+ } = await import('@playwright/test');
1432
+ switch (browser) {
1433
+ case 'chromium':
1434
+ return chromium;
1435
+ case 'firefox':
1436
+ return firefox;
1437
+ case 'webkit':
1438
+ return webkit;
1439
+ }
1440
+ };
1373
1441
  const startBrowser = async ({
1374
1442
  browser,
1375
1443
  headless,
1376
1444
  signal
1377
1445
  }) => {
1378
- const launcher = browser === 'firefox' ? firefox : chromium;
1446
+ if (browser === 'firefox') {
1447
+ await patchPlaywrightFirefoxWorkerWebSocket();
1448
+ }
1449
+ const launcher = await getLauncher(browser);
1379
1450
  const browserInstance = await launcher.launch({
1380
1451
  headless
1381
1452
  });
@@ -1431,7 +1502,7 @@ const startServer = async ({
1431
1502
 
1432
1503
  /**
1433
1504
  *
1434
- * @param {{browser:'chromium'|'firefox', signal:AbortSignal, headless: boolean, onlyExtension:string, testPath:string}} options
1505
+ * @param {{browser:'chromium'|'firefox'|'webkit', signal:AbortSignal, headless: boolean, onlyExtension:string, testPath:string}} options
1435
1506
  * @returns
1436
1507
  */
1437
1508
  const setupTests = async ({
@@ -1619,6 +1690,9 @@ const startElectron = async ({
1619
1690
  let browser;
1620
1691
  try {
1621
1692
  const endpoint = await waitForDevtoolsEndpoint(child);
1693
+ const {
1694
+ chromium
1695
+ } = await import('@playwright/test');
1622
1696
  browser = await chromium.connectOverCDP(endpoint);
1623
1697
  const page = await getFirstPage(browser);
1624
1698
  return createElectronLaunch({
@@ -1661,7 +1735,7 @@ const tearDownTests = async ({
1661
1735
  * @param {string} extensionPath
1662
1736
  * @param {string} testPath
1663
1737
  * @param {string} cwd
1664
- * @param {'chromium'|'firefox'} browser
1738
+ * @param {'chromium'|'firefox'|'webkit'} browser
1665
1739
  * @param {boolean} headless
1666
1740
  * @param {number} timeout
1667
1741
  * @param {string} serverPath
@@ -1779,4 +1853,13 @@ const main = async () => {
1779
1853
  set(Cli, rpc);
1780
1854
  };
1781
1855
 
1782
- main();
1856
+ const Main$1 = {
1857
+ __proto__: null,
1858
+ main
1859
+ };
1860
+
1861
+ if (process.argv.includes('--browser=firefox')) {
1862
+ await patchPlaywrightFirefoxWorkerWebSocket();
1863
+ }
1864
+ const Main = await Promise.resolve().then(function () { return Main$1; });
1865
+ await Main.main();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/test-with-playwright-worker",
3
- "version": "20.1.0",
3
+ "version": "21.0.0",
4
4
  "description": "Worker package for test-with-playwright",
5
5
  "repository": {
6
6
  "type": "git",