@lvce-editor/test-with-playwright-worker 22.40.2 → 22.40.4

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 +42 -21
  2. package/package.json +1 -1
@@ -1768,12 +1768,13 @@ const getUrlFromTestFile = (absolutePath, port, traceFocus, traceRendererWorker)
1768
1768
  }
1769
1769
  return url.href;
1770
1770
  };
1771
- const navigateToTest = async (page, url) => {
1771
+ const navigateToTest = async (page, url, browser) => {
1772
1772
  await page.goto(url, {
1773
- waitUntil: 'domcontentloaded'
1773
+ waitUntil: browser === 'webkit' ? 'commit' : 'domcontentloaded'
1774
1774
  });
1775
1775
  };
1776
1776
  const runTest = async ({
1777
+ browser,
1777
1778
  page,
1778
1779
  port,
1779
1780
  svgScreenshotOptions,
@@ -1789,7 +1790,7 @@ const runTest = async ({
1789
1790
  expect
1790
1791
  } = await import('@playwright/test');
1791
1792
  const url = getUrlFromTestFile(test, port, traceFocus ?? false, traceRendererWorker ?? false);
1792
- await navigateToTest(page, url);
1793
+ await navigateToTest(page, url, browser);
1793
1794
  const testOverlay = page.locator('#TestOverlay');
1794
1795
  await expect(testOverlay).toBeVisible({
1795
1796
  timeout
@@ -1861,6 +1862,7 @@ const getResultCounts$1 = status => {
1861
1862
  * @param {{testSrc:string, tests:string[], filter?: string, headless:boolean, page: import('@playwright/test').Page, port:number, timeout:number, onResult:any, onFinalResult:any}} param0
1862
1863
  */
1863
1864
  const runTests = async ({
1865
+ browser = 'chromium',
1864
1866
  filter,
1865
1867
  headless,
1866
1868
  onFinalResult,
@@ -1882,6 +1884,7 @@ const runTests = async ({
1882
1884
  const filteredTests = filter ? tests.filter(test => test.includes(filter)) : tests;
1883
1885
  for (const test of filteredTests) {
1884
1886
  const result = await runTest({
1887
+ browser,
1885
1888
  page,
1886
1889
  port,
1887
1890
  test,
@@ -2041,6 +2044,7 @@ const readTestResultsText = async (page, timeout) => {
2041
2044
  return text;
2042
2045
  };
2043
2046
  const runTestsWithReusedPage = async ({
2047
+ browser,
2044
2048
  filter,
2045
2049
  onFinalResult,
2046
2050
  onResult,
@@ -2056,7 +2060,7 @@ const runTestsWithReusedPage = async ({
2056
2060
  const url = getAllTestsUrl(port, filter, traceFocus ?? false, rendererWorkerTraceDirectory !== undefined);
2057
2061
  await page.goto(url, {
2058
2062
  timeout,
2059
- waitUntil: 'domcontentloaded'
2063
+ waitUntil: browser === 'webkit' ? 'commit' : 'domcontentloaded'
2060
2064
  });
2061
2065
  const text = await readTestResultsText(page, timeout);
2062
2066
  results = parseTestResults(text);
@@ -2166,7 +2170,8 @@ const startWorkerJavascriptCoverage = async (page, targetScript) => {
2166
2170
  const command = new Promise((resolve, reject) => {
2167
2171
  pendingCommands.set(id, {
2168
2172
  reject,
2169
- resolve
2173
+ resolve,
2174
+ sessionId
2170
2175
  });
2171
2176
  });
2172
2177
  void session.send('Target.sendMessageToTarget', {
@@ -2197,12 +2202,14 @@ const startWorkerJavascriptCoverage = async (page, targetScript) => {
2197
2202
  callCount: true,
2198
2203
  detailed: true
2199
2204
  });
2200
- const timer = setInterval(() => {
2201
- trackPromise(pendingEntries, readTargetCoverage(sendToTarget, sessionId, entries), error => {
2202
- recordCollectionError(error);
2203
- });
2204
- }, 50);
2205
- timers.set(sessionId, timer);
2205
+ if (!stopped && sessions.has(sessionId)) {
2206
+ const timer = setInterval(() => {
2207
+ trackPromise(pendingEntries, readTargetCoverage(sendToTarget, sessionId, entries), error => {
2208
+ recordCollectionError(error);
2209
+ });
2210
+ }, 50);
2211
+ timers.set(sessionId, timer);
2212
+ }
2206
2213
  }
2207
2214
  await sendToTarget(sessionId, 'Runtime.runIfWaitingForDebugger');
2208
2215
  if (matches) {
@@ -2212,6 +2219,10 @@ const startWorkerJavascriptCoverage = async (page, targetScript) => {
2212
2219
  const onAttached = target => {
2213
2220
  trackPromise(tasks, handleAttachedTarget(target), async error => {
2214
2221
  recordCollectionError(error);
2222
+ const message = error instanceof Error ? error.message : String(error);
2223
+ if (message.includes('No session with given id') || message.includes('Target closed')) {
2224
+ return;
2225
+ }
2215
2226
  try {
2216
2227
  await sendToTarget(target.sessionId, 'Runtime.runIfWaitingForDebugger');
2217
2228
  } catch {
@@ -2222,8 +2233,12 @@ const startWorkerJavascriptCoverage = async (page, targetScript) => {
2222
2233
  const onDetached = ({
2223
2234
  sessionId
2224
2235
  }) => {
2225
- if (!sessions.has(sessionId)) {
2226
- return;
2236
+ for (const [id, pending] of pendingCommands) {
2237
+ if (pending.sessionId !== sessionId) {
2238
+ continue;
2239
+ }
2240
+ pendingCommands.delete(id);
2241
+ pending.reject(new Error('Target closed'));
2227
2242
  }
2228
2243
  sessions.delete(sessionId);
2229
2244
  const timer = timers.get(sessionId);
@@ -2247,17 +2262,11 @@ const startWorkerJavascriptCoverage = async (page, targetScript) => {
2247
2262
  }
2248
2263
  stopped = true;
2249
2264
  session.off('Target.attachedToTarget', onAttached);
2250
- session.off('Target.detachedFromTarget', onDetached);
2251
2265
  try {
2252
2266
  for (const timer of timers.values()) {
2253
2267
  clearInterval(timer);
2254
2268
  }
2255
2269
  timers.clear();
2256
- await session.send('Target.setAutoAttach', {
2257
- autoAttach: false,
2258
- flatten: false,
2259
- waitForDebuggerOnStart: false
2260
- });
2261
2270
  while (tasks.size > 0) {
2262
2271
  await Promise.all(tasks);
2263
2272
  }
@@ -2293,8 +2302,18 @@ const startWorkerJavascriptCoverage = async (page, targetScript) => {
2293
2302
  }
2294
2303
  return result;
2295
2304
  } finally {
2296
- session.off('Target.receivedMessageFromTarget', onReceivedMessage);
2297
- await session.detach();
2305
+ try {
2306
+ // Disabling auto-attach detaches worker sessions, so finish all coverage commands first.
2307
+ await session.send('Target.setAutoAttach', {
2308
+ autoAttach: false,
2309
+ flatten: false,
2310
+ waitForDebuggerOnStart: false
2311
+ });
2312
+ } finally {
2313
+ session.off('Target.detachedFromTarget', onDetached);
2314
+ session.off('Target.receivedMessageFromTarget', onReceivedMessage);
2315
+ await session.detach();
2316
+ }
2298
2317
  }
2299
2318
  }
2300
2319
  };
@@ -3016,6 +3035,7 @@ const runAllTests = async (extensionPath, testPath, cwd, browser, headless, time
3016
3035
  page,
3017
3036
  run: async () => {
3018
3037
  await runTestsWithReusedPage({
3038
+ browser,
3019
3039
  ...filterOption,
3020
3040
  onFinalResult,
3021
3041
  onResult,
@@ -3038,6 +3058,7 @@ const runAllTests = async (extensionPath, testPath, cwd, browser, headless, time
3038
3058
  page,
3039
3059
  run: async () => {
3040
3060
  await runTests({
3061
+ browser,
3041
3062
  ...filterOption,
3042
3063
  headless,
3043
3064
  onFinalResult,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/test-with-playwright-worker",
3
- "version": "22.40.2",
3
+ "version": "22.40.4",
4
4
  "description": "Worker package for test-with-playwright",
5
5
  "repository": {
6
6
  "type": "git",