From e11c0c0cbb177fbf4fd208f181b99ba5f6109f9e Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Wed, 17 Jul 2024 09:00:47 +0200 Subject: [PATCH] fix(connect): annotate internal api calls correctly (#31715) --- .../playwright-core/src/client/browserType.ts | 4 +- .../playwright-core/src/client/connection.ts | 2 + .../playwright.reuse.browser.spec.ts | 51 +++++++++++++++++++ 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/packages/playwright-core/src/client/browserType.ts b/packages/playwright-core/src/client/browserType.ts index 97d82de92d..9df049a641 100644 --- a/packages/playwright-core/src/client/browserType.ts +++ b/packages/playwright-core/src/client/browserType.ts @@ -155,7 +155,7 @@ export class BrowserType extends ChannelOwner imple connection.close(reason || closeError); }; pipe.on('closed', params => onPipeClosed(params.reason)); - connection.onmessage = message => pipe.send({ message }).catch(() => onPipeClosed()); + connection.onmessage = message => this._wrapApiCall(() => pipe.send({ message }).catch(() => onPipeClosed()), /* isInternal */ true); pipe.on('message', ({ message }) => { try { @@ -181,7 +181,7 @@ export class BrowserType extends ChannelOwner imple this._didLaunchBrowser(browser, {}, logger); browser._shouldCloseConnectionOnClose = true; browser._connectHeaders = connectHeaders; - browser.on(Events.Browser.Disconnected, closePipe); + browser.on(Events.Browser.Disconnected, () => this._wrapApiCall(() => closePipe(), /* isInternal */ true)); return browser; }, deadline); if (!result.timedOut) { diff --git a/packages/playwright-core/src/client/connection.ts b/packages/playwright-core/src/client/connection.ts index 294b5d9f6e..953fc279e9 100644 --- a/packages/playwright-core/src/client/connection.ts +++ b/packages/playwright-core/src/client/connection.ts @@ -194,6 +194,8 @@ export class Connection extends EventEmitter { } close(cause?: string) { + if (this._closedError) + return; this._closedError = new TargetClosedError(cause); for (const callback of this._callbacks.values()) callback.reject(this._closedError); diff --git a/tests/playwright-test/playwright.reuse.browser.spec.ts b/tests/playwright-test/playwright.reuse.browser.spec.ts index ecada652a4..bccce95b3e 100644 --- a/tests/playwright-test/playwright.reuse.browser.spec.ts +++ b/tests/playwright-test/playwright.reuse.browser.spec.ts @@ -98,3 +98,54 @@ test('should reuse browser with special characters in the launch options', async expect(guid2).toBe(guid1); expect(workerIndex2).not.toBe(workerIndex1); }); + +test('should produce correct test steps', async ({ runInlineTest, runServer }) => { + const server = await runServer(); + const result = await runInlineTest({ + 'reporter.ts': ` + class Reporter { + onStepBegin(test, result, step) { + console.log('%% onStepBegin ' + step.title); + } + onStepEnd(test, result, step) { + console.log('%% onStepEnd ' + step.title); + } + } + module.exports = Reporter; + `, + 'src/a.test.ts': ` + import { test, expect } from '@playwright/test'; + test('a', async ({ page }) => { + await page.goto('about:blank'); + await page.evaluate(() => console.log('hello')); + }); + `, + }, { reporter: './reporter.ts,list' }, { PW_TEST_REUSE_CONTEXT: '1', PW_TEST_CONNECT_WS_ENDPOINT: server.wsEndpoint() }); + + expect(result.exitCode).toBe(0); + expect(result.passed).toBe(1); + expect(result.outputLines).toEqual([ + 'onStepBegin Before Hooks', + 'onStepBegin fixture: browser', + 'onStepBegin browserType.connect', + 'onStepEnd browserType.connect', + 'onStepEnd fixture: browser', + 'onStepBegin fixture: context', + 'onStepEnd fixture: context', + 'onStepBegin fixture: page', + 'onStepBegin browserContext.newPage', + 'onStepEnd browserContext.newPage', + 'onStepEnd fixture: page', + 'onStepEnd Before Hooks', + 'onStepBegin page.goto(about:blank)', + 'onStepEnd page.goto(about:blank)', + 'onStepBegin page.evaluate', + 'onStepEnd page.evaluate', + 'onStepBegin After Hooks', + 'onStepBegin fixture: page', + 'onStepEnd fixture: page', + 'onStepBegin fixture: context', + 'onStepEnd fixture: context', + 'onStepEnd After Hooks' + ]); +}); \ No newline at end of file