From 7040340d61d65f573313f449aebd6481d720460a Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Mon, 1 Jul 2024 12:19:04 +0200 Subject: [PATCH 001/498] test: adjust upload folder expectation for msedge (#31454) --- tests/page/page-set-input-files.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/page/page-set-input-files.spec.ts b/tests/page/page-set-input-files.spec.ts index 22ce7151cd..76a53fa571 100644 --- a/tests/page/page-set-input-files.spec.ts +++ b/tests/page/page-set-input-files.spec.ts @@ -16,7 +16,7 @@ */ import { test as it, expect } from './pageTest'; -import { attachFrame, chromiumVersionLessThan } from '../config/utils'; +import { attachFrame } from '../config/utils'; import path from 'path'; import fs from 'fs'; @@ -37,7 +37,7 @@ it('should upload the file', async ({ page, server, asset }) => { }, input)).toBe('contents of the file'); }); -it('should upload a folder', async ({ page, server, browserName, headless, browserVersion, isAndroid }) => { +it('should upload a folder', async ({ page, server, browserName, headless, browserMajorVersion, isAndroid }) => { it.skip(isAndroid); it.skip(os.platform() === 'darwin' && parseInt(os.release().split('.')[0], 10) <= 21, 'WebKit on macOS-12 is frozen'); @@ -54,7 +54,7 @@ it('should upload a folder', async ({ page, server, browserName, headless, brows await input.setInputFiles(dir); expect(new Set(await page.evaluate(e => [...e.files].map(f => f.webkitRelativePath), input))).toEqual(new Set([ // https://issues.chromium.org/issues/345393164 - ...((browserName === 'chromium' && headless && !process.env.PLAYWRIGHT_CHROMIUM_USE_HEADLESS_NEW && chromiumVersionLessThan(browserVersion, '127.0.6533.0')) ? [] : ['file-upload-test/sub-dir/really.txt']), + ...((browserName === 'chromium' && headless && !process.env.PLAYWRIGHT_CHROMIUM_USE_HEADLESS_NEW && browserMajorVersion < 127) ? [] : ['file-upload-test/sub-dir/really.txt']), 'file-upload-test/file1.txt', 'file-upload-test/file2', ])); From 2136b96df1d99e121de24dd369a2e484be87b422 Mon Sep 17 00:00:00 2001 From: Playwright Service <89237858+playwrightmachine@users.noreply.github.com> Date: Mon, 1 Jul 2024 07:14:32 -0700 Subject: [PATCH 002/498] feat(webkit): roll to r2041 (#31502) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- packages/playwright-core/browsers.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/playwright-core/browsers.json b/packages/playwright-core/browsers.json index c6278b1777..8dff6bf676 100644 --- a/packages/playwright-core/browsers.json +++ b/packages/playwright-core/browsers.json @@ -27,7 +27,7 @@ }, { "name": "webkit", - "revision": "2040", + "revision": "2041", "installByDefault": true, "revisionOverrides": { "mac10.14": "1446", From d1e76d9a9287af90e523b94eb5e5020be2ac88fc Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Mon, 1 Jul 2024 18:32:23 +0200 Subject: [PATCH 003/498] docs(release-notes): fix .NET snippets (#31496) --- docs/src/release-notes-csharp.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/src/release-notes-csharp.md b/docs/src/release-notes-csharp.md index 97b0c9cd50..9172478402 100644 --- a/docs/src/release-notes-csharp.md +++ b/docs/src/release-notes-csharp.md @@ -17,9 +17,9 @@ Utilizing the new [Clock] API allows to manipulate and control time within tests ```csharp // Initialize clock with some time before the test time and let the page load naturally. // `Date.now` will progress as the timers fire. -await Page.Clock.InstallAsync(new +await Page.Clock.InstallAsync(new() { - Time = new DateTime(2024, 2, 2, 8, 0, 0) + TimeDate = new DateTime(2024, 2, 2, 8, 0, 0) }); await Page.GotoAsync("http://localhost:3333"); @@ -28,11 +28,11 @@ await Page.GotoAsync("http://localhost:3333"); await Page.Clock.PauseAtAsync(new DateTime(2024, 2, 2, 10, 0, 0)); // Assert the page state. -await Expect(Page.GetByTestId("current-time")).ToHaveText("2/2/2024, 10:00:00 AM"); +await Expect(Page.GetByTestId("current-time")).ToHaveTextAsync("2/2/2024, 10:00:00 AM"); // Close the laptop lid again and open it at 10:30am. await Page.Clock.FastForwardAsync("30:00"); -await Expect(Page.GetByTestId("current-time")).ToHaveText("2/2/2024, 10:30:00 AM"); +await Expect(Page.GetByTestId("current-time")).ToHaveTextAsync("2/2/2024, 10:30:00 AM"); ``` See [the clock guide](./clock.md) for more details. From b349a7364525169f7932837fd2cc0f732059f43e Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Mon, 1 Jul 2024 18:51:59 +0200 Subject: [PATCH 004/498] fix(ct): export package.json (#31504) --- packages/playwright-ct-react/package.json | 3 ++- packages/playwright-ct-react17/package.json | 3 ++- packages/playwright-ct-solid/package.json | 3 ++- packages/playwright-ct-svelte/package.json | 3 ++- packages/playwright-ct-vue/package.json | 3 ++- packages/playwright-ct-vue2/package.json | 3 ++- 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/playwright-ct-react/package.json b/packages/playwright-ct-react/package.json index 01426b8b15..295af3f34a 100644 --- a/packages/playwright-ct-react/package.json +++ b/packages/playwright-ct-react/package.json @@ -26,7 +26,8 @@ "./hooks": { "types": "./hooks.d.ts", "default": "./hooks.mjs" - } + }, + "./package.json": "./package.json" }, "dependencies": { "@playwright/experimental-ct-core": "1.46.0-next", diff --git a/packages/playwright-ct-react17/package.json b/packages/playwright-ct-react17/package.json index ca94174e73..8d0fee1168 100644 --- a/packages/playwright-ct-react17/package.json +++ b/packages/playwright-ct-react17/package.json @@ -26,7 +26,8 @@ "./hooks": { "types": "./hooks.d.ts", "default": "./hooks.mjs" - } + }, + "./package.json": "./package.json" }, "dependencies": { "@playwright/experimental-ct-core": "1.46.0-next", diff --git a/packages/playwright-ct-solid/package.json b/packages/playwright-ct-solid/package.json index 07b34f44a4..ed46930149 100644 --- a/packages/playwright-ct-solid/package.json +++ b/packages/playwright-ct-solid/package.json @@ -26,7 +26,8 @@ "./hooks": { "types": "./hooks.d.ts", "default": "./hooks.mjs" - } + }, + "./package.json": "./package.json" }, "dependencies": { "@playwright/experimental-ct-core": "1.46.0-next", diff --git a/packages/playwright-ct-svelte/package.json b/packages/playwright-ct-svelte/package.json index 3a52fc70a5..2b35018c03 100644 --- a/packages/playwright-ct-svelte/package.json +++ b/packages/playwright-ct-svelte/package.json @@ -26,7 +26,8 @@ "./hooks": { "types": "./hooks.d.ts", "default": "./hooks.mjs" - } + }, + "./package.json": "./package.json" }, "dependencies": { "@playwright/experimental-ct-core": "1.46.0-next", diff --git a/packages/playwright-ct-vue/package.json b/packages/playwright-ct-vue/package.json index 66be15de8e..fdda54207a 100644 --- a/packages/playwright-ct-vue/package.json +++ b/packages/playwright-ct-vue/package.json @@ -26,7 +26,8 @@ "./hooks": { "types": "./hooks.d.ts", "default": "./hooks.mjs" - } + }, + "./package.json": "./package.json" }, "dependencies": { "@playwright/experimental-ct-core": "1.46.0-next", diff --git a/packages/playwright-ct-vue2/package.json b/packages/playwright-ct-vue2/package.json index 74d48c8b41..70981c4f9b 100644 --- a/packages/playwright-ct-vue2/package.json +++ b/packages/playwright-ct-vue2/package.json @@ -26,7 +26,8 @@ "./hooks": { "types": "./hooks.d.ts", "default": "./hooks.mjs" - } + }, + "./package.json": "./package.json" }, "dependencies": { "@playwright/experimental-ct-core": "1.46.0-next", From 9a3e0967e69dc10110e4c4363ca8f7ef20bbbf5c Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Mon, 1 Jul 2024 19:19:38 +0200 Subject: [PATCH 005/498] fix(electron): tracing with @playwright/test (#31437) --- packages/playwright/src/index.ts | 2 +- .../playwright-electron-should-work.spec.ts | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/packages/playwright/src/index.ts b/packages/playwright/src/index.ts index a258cbcad5..79184cc135 100644 --- a/packages/playwright/src/index.ts +++ b/packages/playwright/src/index.ts @@ -609,7 +609,7 @@ class ArtifactsRecorder { if ((tracing as any)[this._startedCollectingArtifacts]) return; (tracing as any)[this._startedCollectingArtifacts] = true; - if (this._testInfo._tracing.traceOptions()) + if (this._testInfo._tracing.traceOptions() && (tracing as any)[kTracingStarted]) await tracing.stopChunk({ path: this._testInfo._tracing.generateNextTraceRecordingPath() }); } } diff --git a/tests/installation/playwright-electron-should-work.spec.ts b/tests/installation/playwright-electron-should-work.spec.ts index 4de28e8b54..5c6ced0948 100755 --- a/tests/installation/playwright-electron-should-work.spec.ts +++ b/tests/installation/playwright-electron-should-work.spec.ts @@ -15,6 +15,7 @@ */ import { test } from './npmTest'; import fs from 'fs'; +import { expect } from 'packages/playwright-test'; import path from 'path'; test('electron should work', async ({ exec, tsc, writeFiles }) => { @@ -39,3 +40,46 @@ test('electron should work with special characters in path', async ({ exec, tmpW cwd: path.join(folderName) }); }); + +test('should work when wrapped inside @playwright/test and trace is enabled', async ({ exec, tmpWorkspace, writeFiles }) => { + await exec('npm i -D @playwright/test electron@31'); + await writeFiles({ + 'electron-with-tracing.spec.ts': ` + import { test, expect, _electron } from '@playwright/test'; + + test('should work', async ({ trace }) => { + const electronApp = await _electron.launch({ args: [${JSON.stringify(path.join(__dirname, '../electron/electron-window-app.js'))}] }); + + const window = await electronApp.firstWindow(); + if (trace) + await window.context().tracing.start({ screenshots: true, snapshots: true }); + + await window.goto('data:text/html,Playwright

Playwright

'); + await expect(window).toHaveTitle(/Playwright/); + await expect(window.getByRole('heading')).toHaveText('Playwright'); + + const path = test.info().outputPath('electron-trace.zip'); + if (trace) { + await window.context().tracing.stop({ path }); + test.info().attachments.push({ name: 'trace', path, contentType: 'application/zip' }); + } + await electronApp.close(); + }); + `, + }); + const jsonOutputName = test.info().outputPath('report.json'); + await exec('npx playwright test --trace=on --reporter=json electron-with-tracing.spec.ts', { + env: { PLAYWRIGHT_JSON_OUTPUT_NAME: jsonOutputName } + }); + const traces = [ + // our actual trace. + path.join(tmpWorkspace, 'test-results', 'electron-with-tracing-should-work', 'electron-trace.zip'), + // contains the expect() calls + path.join(tmpWorkspace, 'test-results', 'electron-with-tracing-should-work', 'trace.zip'), + ]; + for (const trace of traces) + expect(fs.existsSync(trace)).toBe(true); + const report = JSON.parse(fs.readFileSync(jsonOutputName, 'utf-8')); + expect(new Set(['trace'])).toEqual(new Set(report.suites[0].specs[0].tests[0].results[0].attachments.map(a => a.name))); + expect(new Set(traces.map(p => fs.realpathSync(p)))).toEqual(new Set(report.suites[0].specs[0].tests[0].results[0].attachments.map(a => a.path))); +}); From 1f92376508a3ee3d28e4f68353b6a1a87b2ac372 Mon Sep 17 00:00:00 2001 From: KeisukeYamashita <19yamashita15@gmail.com> Date: Mon, 1 Jul 2024 19:44:17 +0200 Subject: [PATCH 006/498] docs(ci): added Drone CI docs for Node.js (#31499) --- docs/src/ci.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/src/ci.md b/docs/src/ci.md index 2556cbf241..b62f2ca980 100644 --- a/docs/src/ci.md +++ b/docs/src/ci.md @@ -601,6 +601,23 @@ steps: - 'CI=true' ``` +### Drone +* langs: js + +To run Playwright tests on Drone, use our public Docker image ([see Dockerfile](./docker.md)). + +```yml +kind: pipeline +name: default +type: docker + +steps: + - name: test + image: mcr.microsoft.com/playwright:v%%VERSION%%-jammy + commands: + - npx playwright test +``` + ## Caching browsers Caching browser binaries is not recommended, since the amount of time it takes to restore the cache is comparable to the time it takes to download the binaries. Especially under Linux, [operating system dependencies](./browsers.md#install-system-dependencies) need to be installed, which are not cacheable. From f62121548a98ff16e3685e4174ba3cc4bfd2a6f6 Mon Sep 17 00:00:00 2001 From: Noah Mayerhofer Date: Mon, 1 Jul 2024 20:57:16 +0200 Subject: [PATCH 007/498] docs(ci): typo (#31508) --- docs/src/ci.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/ci.md b/docs/src/ci.md index b62f2ca980..69a59a70dc 100644 --- a/docs/src/ci.md +++ b/docs/src/ci.md @@ -650,7 +650,7 @@ By default, Playwright launches browsers in headless mode. See in our [Running t On Linux agents, headed execution requires [Xvfb](https://en.wikipedia.org/wiki/Xvfb) to be installed. Our [Docker image](./docker.md) and GitHub Action have Xvfb pre-installed. To run browsers in headed mode with Xvfb, add `xvfb-run` before the actual command. ```bash js -xvfb-run npx playwrght test +xvfb-run npx playwright test ``` ```bash python xvfb-run pytest From 9dc7e400849e26226a14084524e53900d7a08661 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Mon, 1 Jul 2024 22:00:03 +0200 Subject: [PATCH 008/498] chore(electron): don't swallow close errors (#31509) --- packages/playwright-core/src/client/electron.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/playwright-core/src/client/electron.ts b/packages/playwright-core/src/client/electron.ts index a9e90b77f2..fcabfa494f 100644 --- a/packages/playwright-core/src/client/electron.ts +++ b/packages/playwright-core/src/client/electron.ts @@ -29,7 +29,7 @@ import type { Page } from './page'; import { ConsoleMessage } from './consoleMessage'; import type { Env, WaitForEventOptions, Headers, BrowserContextOptions } from './types'; import { Waiter } from './waiter'; -import { TargetClosedError } from './errors'; +import { TargetClosedError, isTargetClosedError } from './errors'; type ElectronOptions = Omit & { env?: Env, @@ -116,7 +116,13 @@ export class ElectronApplication extends ChannelOwner {}); + try { + await this._context.close(); + } catch (e) { + if (isTargetClosedError(e)) + return; + throw e; + } } async waitForEvent(event: string, optionsOrPredicate: WaitForEventOptions = {}): Promise { From 262586a46a5429e263c225fd6566e9a10a6ec90c Mon Sep 17 00:00:00 2001 From: ryanrosello-og <50574915+ryanrosello-og@users.noreply.github.com> Date: Wed, 3 Jul 2024 00:09:39 +0800 Subject: [PATCH 009/498] feat(trace-viewer) add copy to clipboard on the Source > Stacktrace tab (#31394) --- .../trace-viewer/src/ui/copyToClipboard.tsx | 7 ++++--- packages/trace-viewer/src/ui/sourceTab.css | 10 ++++++++++ packages/trace-viewer/src/ui/sourceTab.tsx | 18 +++++++++++++++++- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/packages/trace-viewer/src/ui/copyToClipboard.tsx b/packages/trace-viewer/src/ui/copyToClipboard.tsx index 96de5f3822..2c5d21aa0d 100644 --- a/packages/trace-viewer/src/ui/copyToClipboard.tsx +++ b/packages/trace-viewer/src/ui/copyToClipboard.tsx @@ -18,7 +18,8 @@ import * as React from 'react'; export const CopyToClipboard: React.FunctionComponent<{ value: string, -}> = ({ value }) => { + description?: string, +}> = ({ value, description }) => { const [iconClassName, setIconClassName] = React.useState('codicon-clippy'); const handleCopy = React.useCallback(() => { @@ -32,5 +33,5 @@ export const CopyToClipboard: React.FunctionComponent<{ }); }, [value]); - return ; -}; + return ; +}; \ No newline at end of file diff --git a/packages/trace-viewer/src/ui/sourceTab.css b/packages/trace-viewer/src/ui/sourceTab.css index 17e66460f4..e4e43d80b6 100644 --- a/packages/trace-viewer/src/ui/sourceTab.css +++ b/packages/trace-viewer/src/ui/sourceTab.css @@ -31,3 +31,13 @@ box-shadow: var(--vscode-scrollbar-shadow) 0 6px 6px -6px; z-index: 10; } + +.source-tab-file-name .copy-icon.codicon { + display: block; + cursor: pointer; +} + +.source-copy-to-clipboard { + display: block; + padding-left: 4px; +} \ No newline at end of file diff --git a/packages/trace-viewer/src/ui/sourceTab.tsx b/packages/trace-viewer/src/ui/sourceTab.tsx index a3acad64a2..f8952849cb 100644 --- a/packages/trace-viewer/src/ui/sourceTab.tsx +++ b/packages/trace-viewer/src/ui/sourceTab.tsx @@ -23,6 +23,7 @@ import { CodeMirrorWrapper } from '@web/components/codeMirrorWrapper'; import type { SourceHighlight } from '@web/components/codeMirrorWrapper'; import type { SourceLocation, SourceModel } from './modelUtil'; import type { StackFrame } from '@protocol/channels'; +import { CopyToClipboard } from './copyToClipboard'; export const SourceTab: React.FunctionComponent<{ stack: StackFrame[] | undefined, @@ -82,7 +83,14 @@ export const SourceTab: React.FunctionComponent<{ return
- {fileName &&
{fileName}
} + {fileName && ( +
+ {fileName} + + + +
+ )}
@@ -100,3 +108,11 @@ export async function calculateSha1(text: string): Promise { } return hexCodes.join(''); } + +function getFileName(fullPath?: string, lineNum?: number): string { + if (!fullPath) + return ''; + const pathSep = fullPath?.includes('/') ? '/' : '\\'; + const fileName = fullPath?.split(pathSep).pop() ?? ''; + return lineNum ? `${fileName}:${lineNum}` : fileName; +} From 9caf3b5f72f3313fb700d32741e7cfddefc2e8dc Mon Sep 17 00:00:00 2001 From: Nicolas Le Cam Date: Tue, 2 Jul 2024 18:10:42 +0200 Subject: [PATCH 010/498] chore: Remove obsolete Chromium enabled features (#31513) --- packages/playwright-core/src/server/chromium/chromiumSwitches.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/playwright-core/src/server/chromium/chromiumSwitches.ts b/packages/playwright-core/src/server/chromium/chromiumSwitches.ts index 17d894fa03..7247f8c8a5 100644 --- a/packages/playwright-core/src/server/chromium/chromiumSwitches.ts +++ b/packages/playwright-core/src/server/chromium/chromiumSwitches.ts @@ -20,7 +20,6 @@ export const chromiumSwitches = [ '--disable-field-trial-config', // https://source.chromium.org/chromium/chromium/src/+/main:testing/variations/README.md '--disable-background-networking', - '--enable-features=NetworkService,NetworkServiceInProcess', '--disable-background-timer-throttling', '--disable-backgrounding-occluded-windows', '--disable-back-forward-cache', // Avoids surprises like main request not being intercepted during page.goBack(). From a62260a9f2a194f8fdea80266531aa41b2061fa5 Mon Sep 17 00:00:00 2001 From: Joe-Hendley <95080839+Joe-Hendley@users.noreply.github.com> Date: Wed, 3 Jul 2024 00:45:16 +0100 Subject: [PATCH 011/498] feat(html report): linkify test annotations (#31521) --- .../html-reporter/src/testCaseView.spec.tsx | 39 +++++++++++++++++++ packages/html-reporter/src/testCaseView.tsx | 34 +++++++++++++--- 2 files changed, 68 insertions(+), 5 deletions(-) diff --git a/packages/html-reporter/src/testCaseView.spec.tsx b/packages/html-reporter/src/testCaseView.spec.tsx index 28fe8247f5..c306843107 100644 --- a/packages/html-reporter/src/testCaseView.spec.tsx +++ b/packages/html-reporter/src/testCaseView.spec.tsx @@ -74,3 +74,42 @@ test('should render test case', async ({ mount }) => { await expect(component.getByText('test.spec.ts:42')).toBeVisible(); await expect(component.getByText('My test')).toBeVisible(); }); + +const linkRenderingTestCase: TestCase = { + testId: 'testid', + title: 'My test', + path: [], + projectName: 'chromium', + location: { file: 'test.spec.ts', line: 42, column: 0 }, + annotations: [ + { type: 'more info', description: 'read https://playwright.dev/docs/intro and https://playwright.dev/docs/api/class-playwright' }, + { type: 'related issues', description: 'https://github.com/microsoft/playwright/issues/23180, https://github.com/microsoft/playwright/issues/23181' }, + + ], + tags: [], + outcome: 'expected', + duration: 10, + ok: true, + results: [result] +}; + +test('should correctly render links in annotations', async ({ mount }) => { + const component = await mount(); + // const container = await(component.getByText('Annotations')); + + const firstLink = await component.getByText('https://playwright.dev/docs/intro').first(); + await expect(firstLink).toBeVisible(); + await expect(firstLink).toHaveAttribute('href', 'https://playwright.dev/docs/intro'); + + const secondLink = await component.getByText('https://playwright.dev/docs/api/class-playwright').first(); + await expect(secondLink).toBeVisible(); + await expect(secondLink).toHaveAttribute('href', 'https://playwright.dev/docs/api/class-playwright'); + + const thirdLink = await component.getByText('https://github.com/microsoft/playwright/issues/23180').first(); + await expect(thirdLink).toBeVisible(); + await expect(thirdLink).toHaveAttribute('href', 'https://github.com/microsoft/playwright/issues/23180'); + + const fourthLink = await component.getByText('https://github.com/microsoft/playwright/issues/23181').first(); + await expect(fourthLink).toBeVisible(); + await expect(fourthLink).toHaveAttribute('href', 'https://github.com/microsoft/playwright/issues/23181'); +}); \ No newline at end of file diff --git a/packages/html-reporter/src/testCaseView.tsx b/packages/html-reporter/src/testCaseView.tsx index eecbdac9f5..66555598f2 100644 --- a/packages/html-reporter/src/testCaseView.tsx +++ b/packages/html-reporter/src/testCaseView.tsx @@ -65,11 +65,35 @@ export const TestCaseView: React.FC<{ }; function renderAnnotationDescription(description: string) { - try { - if (['http:', 'https:'].includes(new URL(description).protocol)) - return {description}; - } catch {} - return description; + const CONTROL_CODES = '\\u0000-\\u0020\\u007f-\\u009f'; + const WEB_LINK_REGEX = new RegExp('(?:[a-zA-Z][a-zA-Z0-9+.-]{2,}:\\/\\/|www\\.)[^\\s' + CONTROL_CODES + '"]{2,}[^\\s' + CONTROL_CODES + '"\')}\\],:;.!?]', 'ug'); + + const result = []; + let currentIndex = 0; + let match; + + while ((match = WEB_LINK_REGEX.exec(description)) !== null) { + const stringBeforeMatch = description.substring(currentIndex, match.index); + if (stringBeforeMatch) + result.push(stringBeforeMatch); + + const value = match[0]; + result.push(renderLink(value)); + currentIndex = match.index + value.length; + } + const stringAfterMatches = description.substring(currentIndex); + if (stringAfterMatches) + result.push(stringAfterMatches); + + return result; +} + +function renderLink(text: string) { + let link = text; + if (link.startsWith('www.')) + link = 'https://' + link; + + return {text}; } function TestCaseAnnotationView({ annotation: { type, description } }: { annotation: TestCaseAnnotation }) { From 1e55a084bc0ce65dbd8026ff3e265fdd9dfc60e1 Mon Sep 17 00:00:00 2001 From: Vitaliy Potapov Date: Wed, 3 Jul 2024 03:46:24 +0400 Subject: [PATCH 012/498] feat(html-reporter): hide annotations started with "_" (#31489) Fixes: https://github.com/microsoft/playwright/issues/30179 --- docs/src/test-annotations-js.md | 2 +- packages/html-reporter/src/testCaseView.spec.tsx | 2 ++ packages/html-reporter/src/testCaseView.tsx | 8 ++++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/src/test-annotations-js.md b/docs/src/test-annotations-js.md index 68bdd79848..5fc2f78955 100644 --- a/docs/src/test-annotations-js.md +++ b/docs/src/test-annotations-js.md @@ -159,7 +159,7 @@ You can also filter tests in the configuration file via [`property: TestConfig.g ## Annotate tests -If you would like to annotate your tests with something more substantial than a tag, you can do that when declaring a test. Annotations have a `type` and a `description` for more context, and will be visible in the test report. +If you would like to annotate your tests with something more substantial than a tag, you can do that when declaring a test. Annotations have a `type` and a `description` for more context and available in reporter API. Playwright's built-in HTML reporter shows all annotations, except those where `type` starts with `_` symbol. For example, to annotate a test with an issue url: diff --git a/packages/html-reporter/src/testCaseView.spec.tsx b/packages/html-reporter/src/testCaseView.spec.tsx index c306843107..3bde6e8a83 100644 --- a/packages/html-reporter/src/testCaseView.spec.tsx +++ b/packages/html-reporter/src/testCaseView.spec.tsx @@ -54,6 +54,7 @@ const testCase: TestCase = { annotations: [ { type: 'annotation', description: 'Annotation text' }, { type: 'annotation', description: 'Another annotation text' }, + { type: '_annotation', description: 'Hidden annotation' }, ], tags: [], outcome: 'expected', @@ -65,6 +66,7 @@ const testCase: TestCase = { test('should render test case', async ({ mount }) => { const component = await mount(); await expect(component.getByText('Annotation text', { exact: false }).first()).toBeVisible(); + await expect(component.getByText('Hidden annotation')).toBeHidden(); await component.getByText('Annotations').click(); await expect(component.getByText('Annotation text')).not.toBeVisible(); await expect(component.getByText('Outer step')).toBeVisible(); diff --git a/packages/html-reporter/src/testCaseView.tsx b/packages/html-reporter/src/testCaseView.tsx index 66555598f2..507ddf4ffb 100644 --- a/packages/html-reporter/src/testCaseView.tsx +++ b/packages/html-reporter/src/testCaseView.tsx @@ -40,6 +40,10 @@ export const TestCaseView: React.FC<{ return test.tags; }, [test]); + const visibleAnnotations = React.useMemo(() => { + return test?.annotations?.filter(annotation => !annotation.type.startsWith('_')) || []; + }, [test?.annotations]); + return
{test &&
{test.path.join(' › ')}
} {test &&
{test?.title}
} @@ -52,8 +56,8 @@ export const TestCaseView: React.FC<{ {test && !!test.projectName && } {labels && }
} - {test && !!test.annotations.length && - {test?.annotations.map(annotation => )} + {!!visibleAnnotations.length && + {visibleAnnotations.map(annotation => )} } {test && ({ From 5bdced9c9bb2e7e57b0f1b63254ba52da252a6f1 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Wed, 3 Jul 2024 09:40:37 +0200 Subject: [PATCH 013/498] chore: bump @types/node and chokidar (#31527) --- package-lock.json | 8 +++---- package.json | 2 +- packages/playwright/ThirdPartyNotices.txt | 6 ++--- .../bundles/utils/package-lock.json | 23 ++++++++----------- .../playwright/bundles/utils/package.json | 2 +- 5 files changed, 19 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index b63578e29e..87d30f0d5d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@types/babel__core": "^7.20.2", "@types/codemirror": "^5.60.7", "@types/formidable": "^2.0.4", - "@types/node": "^18.15.3", + "@types/node": "^18.19.39", "@types/react": "^18.0.12", "@types/react-dom": "^18.0.5", "@types/resize-observer-browser": "^0.1.7", @@ -1851,9 +1851,9 @@ } }, "node_modules/@types/node": { - "version": "18.19.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.8.tgz", - "integrity": "sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg==", + "version": "18.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", + "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", "devOptional": true, "dependencies": { "undici-types": "~5.26.4" diff --git a/package.json b/package.json index 6caf9c748d..4b3b9439ca 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "@types/babel__core": "^7.20.2", "@types/codemirror": "^5.60.7", "@types/formidable": "^2.0.4", - "@types/node": "^18.15.3", + "@types/node": "^18.19.39", "@types/react": "^18.0.12", "@types/react-dom": "^18.0.5", "@types/resize-observer-browser": "^0.1.7", diff --git a/packages/playwright/ThirdPartyNotices.txt b/packages/playwright/ThirdPartyNotices.txt index d77271ad73..21bb223549 100644 --- a/packages/playwright/ThirdPartyNotices.txt +++ b/packages/playwright/ThirdPartyNotices.txt @@ -96,7 +96,7 @@ This project incorporates components from the projects listed below. The origina - caniuse-lite@1.0.30001579 (https://github.com/browserslist/caniuse-lite) - chalk@2.4.2 (https://github.com/chalk/chalk) - chalk@4.1.2 (https://github.com/chalk/chalk) -- chokidar@3.5.3 (https://github.com/paulmillr/chokidar) +- chokidar@3.6.0 (https://github.com/paulmillr/chokidar) - ci-info@3.8.0 (https://github.com/watson/ci-info) - codemirror-shadow-1@0.0.1 (https://github.com/codemirror/CodeMirror) - color-convert@1.9.3 (https://github.com/Qix-/color-convert) @@ -3076,7 +3076,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ========================================= END OF chalk@4.1.2 AND INFORMATION -%% chokidar@3.5.3 NOTICES AND INFORMATION BEGIN HERE +%% chokidar@3.6.0 NOTICES AND INFORMATION BEGIN HERE ========================================= The MIT License (MIT) @@ -3100,7 +3100,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF chokidar@3.5.3 AND INFORMATION +END OF chokidar@3.6.0 AND INFORMATION %% ci-info@3.8.0 NOTICES AND INFORMATION BEGIN HERE ========================================= diff --git a/packages/playwright/bundles/utils/package-lock.json b/packages/playwright/bundles/utils/package-lock.json index 9cc1d09041..fcf9f972fe 100644 --- a/packages/playwright/bundles/utils/package-lock.json +++ b/packages/playwright/bundles/utils/package-lock.json @@ -8,7 +8,7 @@ "name": "utils-bundle", "version": "0.0.1", "dependencies": { - "chokidar": "3.5.3", + "chokidar": "3.6.0", "enquirer": "2.3.6", "json5": "2.2.3", "pirates": "4.0.4", @@ -89,15 +89,9 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -110,6 +104,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -343,9 +340,9 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", diff --git a/packages/playwright/bundles/utils/package.json b/packages/playwright/bundles/utils/package.json index d660138349..69477909c5 100644 --- a/packages/playwright/bundles/utils/package.json +++ b/packages/playwright/bundles/utils/package.json @@ -9,7 +9,7 @@ "generate-license": "node ../../../../utils/generate_third_party_notice.js" }, "dependencies": { - "chokidar": "3.5.3", + "chokidar": "3.6.0", "enquirer": "2.3.6", "json5": "2.2.3", "pirates": "4.0.4", From bfbd5f6f2f147e52017369eeadab1346833549fa Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Wed, 3 Jul 2024 09:40:50 +0200 Subject: [PATCH 014/498] test: snapshot with all: unset in StyleSheet (#31514) --- tests/library/snapshotter.spec.ts | 6 ++-- tests/library/trace-viewer.spec.ts | 45 +++++++++++++++++++++--------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/tests/library/snapshotter.spec.ts b/tests/library/snapshotter.spec.ts index b0866a5d3f..b6c45b9252 100644 --- a/tests/library/snapshotter.spec.ts +++ b/tests/library/snapshotter.spec.ts @@ -249,12 +249,10 @@ it.describe('snapshots', () => { }); it('empty adopted style sheets should not prevent node refs', async ({ page, toImpl, snapshotter, browserName }) => { - it.skip(browserName !== 'chromium', 'Constructed stylesheets are only in Chromium.'); - await page.setContent(''); await page.evaluate(() => { const sheet = new CSSStyleSheet(); - (document as any).adoptedStyleSheets = [sheet]; + document.adoptedStyleSheets = [sheet]; const sheet2 = new CSSStyleSheet(); for (const element of [document.createElement('div'), document.createElement('span')]) { @@ -262,7 +260,7 @@ it.describe('snapshots', () => { mode: 'open' }); root.append('foo'); - (root as any).adoptedStyleSheets = [sheet2]; + root.adoptedStyleSheets = [sheet2]; document.body.appendChild(element); } }); diff --git a/tests/library/trace-viewer.spec.ts b/tests/library/trace-viewer.spec.ts index 69864380d8..dc9e9facaf 100644 --- a/tests/library/trace-viewer.spec.ts +++ b/tests/library/trace-viewer.spec.ts @@ -347,14 +347,12 @@ test('should capture data-url svg iframe', async ({ page, server, runAndTrace }) }); test('should contain adopted style sheets', async ({ page, runAndTrace, browserName }) => { - test.skip(browserName !== 'chromium', 'Constructed stylesheets are only in Chromium.'); - const traceViewer = await runAndTrace(async () => { await page.setContent(''); await page.evaluate(() => { const sheet = new CSSStyleSheet(); sheet.addRule('button', 'color: red'); - (document as any).adoptedStyleSheets = [sheet]; + document.adoptedStyleSheets = [sheet]; const sheet2 = new CSSStyleSheet(); sheet2.addRule(':host', 'color: blue'); @@ -364,7 +362,7 @@ test('should contain adopted style sheets', async ({ page, runAndTrace, browserN mode: 'open' }); root.append('foo'); - (root as any).adoptedStyleSheets = [sheet2]; + root.adoptedStyleSheets = [sheet2]; document.body.appendChild(element); } }); @@ -377,22 +375,20 @@ test('should contain adopted style sheets', async ({ page, runAndTrace, browserN }); test('should work with adopted style sheets and replace/replaceSync', async ({ page, runAndTrace, browserName }) => { - test.skip(browserName !== 'chromium', 'Constructed stylesheets are only in Chromium.'); - const traceViewer = await runAndTrace(async () => { await page.setContent(''); await page.evaluate(() => { const sheet = new CSSStyleSheet(); sheet.addRule('button', 'color: red'); - (document as any).adoptedStyleSheets = [sheet]; + document.adoptedStyleSheets = [sheet]; }); await page.evaluate(() => { - const [sheet] = (document as any).adoptedStyleSheets; + const [sheet] = document.adoptedStyleSheets; sheet.replaceSync(`button { color: blue }`); }); - await page.evaluate(() => { - const [sheet] = (document as any).adoptedStyleSheets; - sheet.replace(`button { color: #0F0 }`); + await page.evaluate(async () => { + const [sheet] = document.adoptedStyleSheets; + await sheet.replace(`button { color: #0F0 }`); }); }); @@ -410,7 +406,30 @@ test('should work with adopted style sheets and replace/replaceSync', async ({ p } }); -test('should restore scroll positions', async ({ page, runAndTrace, browserName }) => { +test('should work with adopted style sheets and all: unset', async ({ page, runAndTrace, browserName }) => { + test.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/31500' }); + test.fixme(browserName === 'chromium', 'https://issues.chromium.org/u/1/issues/41416124'); + + const traceViewer = await runAndTrace(async () => { + await page.setContent(''); + await page.evaluate(() => { + const stylesheet = new CSSStyleSheet(); + // 'all: unset' is the problem here. + stylesheet.replaceSync('button { all: unset; border-radius: 24px; background-color: deepskyblue; color: black; padding: 5px }'); + document.adoptedStyleSheets = [stylesheet]; + }); + await page.getByRole('button').click(); + }); + { + const frame = await traceViewer.snapshotFrame('page.evaluate', 0); + await expect(frame.locator('button')).toHaveCSS('border-radius', '24px'); + await expect(frame.locator('button')).toHaveCSS('background-color', 'rgb(0, 191, 255)'); + await expect(frame.locator('button')).toHaveCSS('color', 'rgb(0, 0, 0)'); + await expect(frame.locator('button')).toHaveCSS('padding', '5px'); + } +}); + +test('should restore scroll positions', async ({ page, runAndTrace }) => { const traceViewer = await runAndTrace(async () => { await page.setContent(` + `); + await page.evaluate(() => { }); + }); + { + const frame = await traceViewer.snapshotFrame('page.evaluate', 0); + await expect(frame.getByTestId('green-element')).toHaveCSS('color', /* green */'rgb(0, 128, 0)'); + await expect(frame.getByTestId('red-element')).toHaveCSS('color', /* red */'rgb(255, 0, 0)'); + } +}); + test('should restore scroll positions', async ({ page, runAndTrace }) => { const traceViewer = await runAndTrace(async () => { await page.setContent(` From de39d227f7a3a602c7b94a54f51e77b55557266d Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Mon, 15 Jul 2024 12:20:22 -0700 Subject: [PATCH 066/498] chore: linkify urls in attachments body (#31673) Reference: https://github.com/microsoft/playwright/issues/31284 --- packages/html-reporter/src/labelUtils.tsx | 23 --------- packages/html-reporter/src/links.tsx | 5 +- packages/html-reporter/src/renderUtils.tsx | 47 ++++++++++++++++++ .../html-reporter/src/testCaseView.spec.tsx | 49 +++++++++++++++++-- packages/html-reporter/src/testCaseView.tsx | 38 ++------------ packages/html-reporter/src/testFileView.tsx | 3 +- packages/html-reporter/src/testFilesView.tsx | 2 +- packages/html-reporter/src/testResultView.tsx | 2 +- .../src/{uiUtils.ts => utils.ts} | 9 ++++ 9 files changed, 111 insertions(+), 67 deletions(-) delete mode 100644 packages/html-reporter/src/labelUtils.tsx create mode 100644 packages/html-reporter/src/renderUtils.tsx rename packages/html-reporter/src/{uiUtils.ts => utils.ts} (79%) diff --git a/packages/html-reporter/src/labelUtils.tsx b/packages/html-reporter/src/labelUtils.tsx deleted file mode 100644 index 014ec77d59..0000000000 --- a/packages/html-reporter/src/labelUtils.tsx +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (c) Microsoft Corporation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// hash string to integer in range [0, 6] for color index, to get same color for same tag -export function hashStringToInt(str: string) { - let hash = 0; - for (let i = 0; i < str.length; i++) - hash = str.charCodeAt(i) + ((hash << 8) - hash); - return Math.abs(hash % 6); -} diff --git a/packages/html-reporter/src/links.tsx b/packages/html-reporter/src/links.tsx index cededa0dbc..4ddaf20a91 100644 --- a/packages/html-reporter/src/links.tsx +++ b/packages/html-reporter/src/links.tsx @@ -20,6 +20,7 @@ import * as icons from './icons'; import { TreeItem } from './treeItem'; import { CopyToClipboard } from './copyToClipboard'; import './links.css'; +import { linkifyText } from './renderUtils'; export function navigate(href: string) { window.history.pushState({}, '', href); @@ -77,9 +78,9 @@ export const AttachmentLink: React.FunctionComponent<{ return {attachment.contentType === kMissingContentType ? icons.warning() : icons.attachment()} {attachment.path && {linkName || attachment.name}} - {attachment.body && {attachment.name}} + {attachment.body && {linkifyText(attachment.name)}}
} loadChildren={attachment.body ? () => { - return [
{attachment.body}
]; + return [
{linkifyText(attachment.body!)}
]; } : undefined} depth={0} style={{ lineHeight: '32px' }}>; }; diff --git a/packages/html-reporter/src/renderUtils.tsx b/packages/html-reporter/src/renderUtils.tsx new file mode 100644 index 0000000000..e8d92dc609 --- /dev/null +++ b/packages/html-reporter/src/renderUtils.tsx @@ -0,0 +1,47 @@ +/** + * Copyright (c) Microsoft Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export function linkifyText(description: string) { + const CONTROL_CODES = '\\u0000-\\u0020\\u007f-\\u009f'; + const WEB_LINK_REGEX = new RegExp('(?:[a-zA-Z][a-zA-Z0-9+.-]{2,}:\\/\\/|www\\.)[^\\s' + CONTROL_CODES + '"]{2,}[^\\s' + CONTROL_CODES + '"\')}\\],:;.!?]', 'ug'); + + const result = []; + let currentIndex = 0; + let match; + + while ((match = WEB_LINK_REGEX.exec(description)) !== null) { + const stringBeforeMatch = description.substring(currentIndex, match.index); + if (stringBeforeMatch) + result.push(stringBeforeMatch); + + const value = match[0]; + result.push(renderLink(value)); + currentIndex = match.index + value.length; + } + const stringAfterMatches = description.substring(currentIndex); + if (stringAfterMatches) + result.push(stringAfterMatches); + + return result; +} + +function renderLink(text: string) { + let link = text; + if (link.startsWith('www.')) + link = 'https://' + link; + + return {text}; +} diff --git a/packages/html-reporter/src/testCaseView.spec.tsx b/packages/html-reporter/src/testCaseView.spec.tsx index 3bde6e8a83..d73407582d 100644 --- a/packages/html-reporter/src/testCaseView.spec.tsx +++ b/packages/html-reporter/src/testCaseView.spec.tsx @@ -77,7 +77,7 @@ test('should render test case', async ({ mount }) => { await expect(component.getByText('My test')).toBeVisible(); }); -const linkRenderingTestCase: TestCase = { +const annotationLinkRenderingTestCase: TestCase = { testId: 'testid', title: 'My test', path: [], @@ -96,8 +96,7 @@ const linkRenderingTestCase: TestCase = { }; test('should correctly render links in annotations', async ({ mount }) => { - const component = await mount(); - // const container = await(component.getByText('Annotations')); + const component = await mount(); const firstLink = await component.getByText('https://playwright.dev/docs/intro').first(); await expect(firstLink).toBeVisible(); @@ -114,4 +113,48 @@ test('should correctly render links in annotations', async ({ mount }) => { const fourthLink = await component.getByText('https://github.com/microsoft/playwright/issues/23181').first(); await expect(fourthLink).toBeVisible(); await expect(fourthLink).toHaveAttribute('href', 'https://github.com/microsoft/playwright/issues/23181'); +}); + +const resultWithAttachment: TestResult = { + retry: 0, + startTime: new Date(0).toUTCString(), + duration: 100, + errors: [], + steps: [{ + title: 'Outer step', + startTime: new Date(100).toUTCString(), + duration: 10, + location: { file: 'test.spec.ts', line: 62, column: 0 }, + count: 1, + steps: [], + }], + attachments: [{ + name: 'first attachment', + body: 'The body with https://playwright.dev/docs/intro link and https://github.com/microsoft/playwright/issues/31284.', + contentType: 'text/plain' + }], + status: 'passed', +}; + +const attachmentLinkRenderingTestCase: TestCase = { + testId: 'testid', + title: 'My test', + path: [], + projectName: 'chromium', + location: { file: 'test.spec.ts', line: 42, column: 0 }, + tags: [], + outcome: 'expected', + duration: 10, + ok: true, + annotations: [], + results: [resultWithAttachment] +}; + +test('should correctly render links in attachments', async ({ mount }) => { + const component = await mount(); + await component.getByText('first attachment').click(); + const body = await component.getByText('The body with https://playwright.dev/docs/intro link'); + await expect(body).toBeVisible(); + await expect(body.locator('a').filter({ hasText: 'playwright.dev' })).toHaveAttribute('href', 'https://playwright.dev/docs/intro'); + await expect(body.locator('a').filter({ hasText: 'github.com' })).toHaveAttribute('href', 'https://github.com/microsoft/playwright/issues/31284'); }); \ No newline at end of file diff --git a/packages/html-reporter/src/testCaseView.tsx b/packages/html-reporter/src/testCaseView.tsx index 507ddf4ffb..f4d76653cf 100644 --- a/packages/html-reporter/src/testCaseView.tsx +++ b/packages/html-reporter/src/testCaseView.tsx @@ -23,8 +23,8 @@ import { ProjectLink } from './links'; import { statusIcon } from './statusIcon'; import './testCaseView.css'; import { TestResultView } from './testResultView'; -import { hashStringToInt } from './labelUtils'; -import { msToString } from './uiUtils'; +import { linkifyText } from './renderUtils'; +import { hashStringToInt, msToString } from './utils'; export const TestCaseView: React.FC<{ projectNames: string[], @@ -68,43 +68,11 @@ export const TestCaseView: React.FC<{ ; }; -function renderAnnotationDescription(description: string) { - const CONTROL_CODES = '\\u0000-\\u0020\\u007f-\\u009f'; - const WEB_LINK_REGEX = new RegExp('(?:[a-zA-Z][a-zA-Z0-9+.-]{2,}:\\/\\/|www\\.)[^\\s' + CONTROL_CODES + '"]{2,}[^\\s' + CONTROL_CODES + '"\')}\\],:;.!?]', 'ug'); - - const result = []; - let currentIndex = 0; - let match; - - while ((match = WEB_LINK_REGEX.exec(description)) !== null) { - const stringBeforeMatch = description.substring(currentIndex, match.index); - if (stringBeforeMatch) - result.push(stringBeforeMatch); - - const value = match[0]; - result.push(renderLink(value)); - currentIndex = match.index + value.length; - } - const stringAfterMatches = description.substring(currentIndex); - if (stringAfterMatches) - result.push(stringAfterMatches); - - return result; -} - -function renderLink(text: string) { - let link = text; - if (link.startsWith('www.')) - link = 'https://' + link; - - return {text}; -} - function TestCaseAnnotationView({ annotation: { type, description } }: { annotation: TestCaseAnnotation }) { return (
{type} - {description && : {renderAnnotationDescription(description)}} + {description && : {linkifyText(description)}}
); } diff --git a/packages/html-reporter/src/testFileView.tsx b/packages/html-reporter/src/testFileView.tsx index 8e478f95d7..a5f9a7a358 100644 --- a/packages/html-reporter/src/testFileView.tsx +++ b/packages/html-reporter/src/testFileView.tsx @@ -16,14 +16,13 @@ import type { HTMLReport, TestCaseSummary, TestFileSummary } from './types'; import * as React from 'react'; -import { msToString } from './uiUtils'; +import { hashStringToInt, msToString } from './utils'; import { Chip } from './chip'; import { filterWithToken, type Filter } from './filter'; import { generateTraceUrl, Link, navigate, ProjectLink } from './links'; import { statusIcon } from './statusIcon'; import './testFileView.css'; import { video, image, trace } from './icons'; -import { hashStringToInt } from './labelUtils'; export const TestFileView: React.FC Date: Mon, 15 Jul 2024 22:34:57 +0100 Subject: [PATCH 067/498] fix: add 'window-management' to chromium browser (#31687) --- docs/src/api/class-browsercontext.md | 1 + packages/playwright-core/src/server/chromium/crBrowser.ts | 1 + packages/playwright-core/types/types.d.ts | 1 + tests/library/permissions.spec.ts | 8 ++++++++ 4 files changed, 11 insertions(+) diff --git a/docs/src/api/class-browsercontext.md b/docs/src/api/class-browsercontext.md index 48542a2603..e5ccf7b5ce 100644 --- a/docs/src/api/class-browsercontext.md +++ b/docs/src/api/class-browsercontext.md @@ -980,6 +980,7 @@ A permission or an array of permissions to grant. Permissions can be one of the * `'notifications'` * `'payment-handler'` * `'storage-access'` +* `'window-management'` ### option: BrowserContext.grantPermissions.origin * since: v1.8 diff --git a/packages/playwright-core/src/server/chromium/crBrowser.ts b/packages/playwright-core/src/server/chromium/crBrowser.ts index 777ff2eee8..9d1e672132 100644 --- a/packages/playwright-core/src/server/chromium/crBrowser.ts +++ b/packages/playwright-core/src/server/chromium/crBrowser.ts @@ -434,6 +434,7 @@ export class CRBrowserContext extends BrowserContext { // chrome-specific permissions we have. ['midi-sysex', 'midiSysex'], ['storage-access', 'storageAccess'], + ['window-management', 'windowManagement'] ]); const filtered = permissions.map(permission => { const protocolPermission = webPermissionToProtocol.get(permission); diff --git a/packages/playwright-core/types/types.d.ts b/packages/playwright-core/types/types.d.ts index f9e25c8c40..fc468defe0 100644 --- a/packages/playwright-core/types/types.d.ts +++ b/packages/playwright-core/types/types.d.ts @@ -8472,6 +8472,7 @@ export interface BrowserContext { * - `'notifications'` * - `'payment-handler'` * - `'storage-access'` + * - `'window-management'` * @param options */ grantPermissions(permissions: ReadonlyArray, options?: { diff --git a/tests/library/permissions.spec.ts b/tests/library/permissions.spec.ts index ac2ec7a0b5..7e77bba10f 100644 --- a/tests/library/permissions.spec.ts +++ b/tests/library/permissions.spec.ts @@ -48,6 +48,14 @@ it.describe('permissions', () => { expect(await getPermission(page, 'geolocation')).toBe('granted'); }); + it('should grant window-management permission when origin is listed', async ({ page, context, server, browserName }) => { + it.fail(browserName === 'firefox'); + + await page.goto(server.EMPTY_PAGE); + await context.grantPermissions(['window-management'], { origin: server.EMPTY_PAGE }); + expect(await getPermission(page, 'window-management')).toBe('granted'); + }); + it('should prompt for geolocation permission when origin is not listed', async ({ page, context, server }) => { await page.goto(server.EMPTY_PAGE); await context.grantPermissions(['geolocation'], { origin: server.EMPTY_PAGE }); From 37ffbd757e732b52c3497ff65009fbe3a5743df5 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Mon, 15 Jul 2024 14:35:11 -0700 Subject: [PATCH 068/498] chore: remove unused project to id mapping from html builder (#31698) --- packages/playwright/src/reporters/html.ts | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/packages/playwright/src/reporters/html.ts b/packages/playwright/src/reporters/html.ts index 2a5bbc94d4..7b279a70a1 100644 --- a/packages/playwright/src/reporters/html.ts +++ b/packages/playwright/src/reporters/html.ts @@ -226,8 +226,6 @@ class HtmlBuilder { private _dataZipFile: ZipFile; private _hasTraces = false; private _attachmentsBaseURL: string; - private _projectToId: Map = new Map(); - private _lastProjectId = 0; constructor(config: FullConfig, outputDir: string, attachmentsBaseURL: string) { this._config = config; @@ -406,16 +404,6 @@ class HtmlBuilder { }; } - private _projectId(suite: Suite): number { - const project = projectSuite(suite); - let id = this._projectToId.get(project); - if (!id) { - id = ++this._lastProjectId; - this._projectToId.set(project, id); - } - return id; - } - private _serializeAttachments(attachments: JsonAttachment[]) { let lastAttachment: TestAttachment | undefined; return attachments.map(a => { @@ -653,10 +641,4 @@ function createSnippets(stepsInFile: MultiMap) { } } -function projectSuite(suite: Suite): Suite { - while (suite.parent?.parent) - suite = suite.parent; - return suite; -} - export default HtmlReporter; From a5ca9b7d37a9c09b6da62a5d18d929a9c44e054e Mon Sep 17 00:00:00 2001 From: Playwright Service <89237858+playwrightmachine@users.noreply.github.com> Date: Mon, 15 Jul 2024 23:28:58 -0700 Subject: [PATCH 069/498] feat(webkit): roll to r2047 (#31701) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- packages/playwright-core/browsers.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/playwright-core/browsers.json b/packages/playwright-core/browsers.json index 7911ee8f1e..1f00780f4f 100644 --- a/packages/playwright-core/browsers.json +++ b/packages/playwright-core/browsers.json @@ -27,7 +27,7 @@ }, { "name": "webkit", - "revision": "2045", + "revision": "2047", "installByDefault": true, "revisionOverrides": { "mac10.14": "1446", From 96e0a96ac1278ac58723c1f6b79d673be3fc2ee2 Mon Sep 17 00:00:00 2001 From: damar Zaky Date: Tue, 16 Jul 2024 20:15:25 +0700 Subject: [PATCH 070/498] docs: fix grammar and typos in various files (#31678) - docs/src/best-practices-js.md - docs/src/codegen.md - docs/src/debug.md - docs/src/events.md - docs/src/library-js.md - docs/src/locators.md - docs/src/other-locators.md - docs/src/test-components-js.md - docs/src/trace-viewer.md --------- Signed-off-by: damar Zaky --- docs/src/best-practices-js.md | 2 +- docs/src/codegen.md | 8 ++++---- docs/src/debug.md | 12 ++++++------ docs/src/events.md | 2 +- docs/src/library-js.md | 2 +- docs/src/locators.md | 6 +++--- docs/src/other-locators.md | 2 +- docs/src/test-components-js.md | 2 +- docs/src/trace-viewer.md | 4 ++-- 9 files changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/src/best-practices-js.md b/docs/src/best-practices-js.md index 02e43786e0..3694418533 100644 --- a/docs/src/best-practices-js.md +++ b/docs/src/best-practices-js.md @@ -214,7 +214,7 @@ Playwright comes with a range of tooling to help you write tests. - The [VS Code extension](./getting-started-vscode.md) gives you a great developer experience when writing, running, and debugging tests. - The [test generator](./codegen.md) can generate tests and pick locators for you. - The [trace viewer](./trace-viewer.md) gives you a full trace of your tests as a local PWA that can easily be shared. With the trace viewer you can view the timeline, inspect DOM snapshots for each action, view network requests and more. -- The [UI Mode](./test-ui-mode) let's you explore, run and debug tests with a time travel experience complete with watch mode. All test files are loaded into the testing sidebar where you can expand each file and describe block to individually run, view, watch and debug each test. +- The [UI Mode](./test-ui-mode) lets you explore, run and debug tests with a time travel experience complete with watch mode. All test files are loaded into the testing sidebar where you can expand each file and describe block to individually run, view, watch and debug each test. - [Typescript](./test-typescript) in Playwright works out of the box and gives you better IDE integrations. Your IDE will show you everything you can do and highlight when you do something wrong. No TypeScript experience is needed and it is not necessary for your code to be in TypeScript, all you need to do is create your tests with a `.ts` extension. ### Test across all browsers diff --git a/docs/src/codegen.md b/docs/src/codegen.md index b23c023ac2..4b45f12d01 100644 --- a/docs/src/codegen.md +++ b/docs/src/codegen.md @@ -125,14 +125,14 @@ With the test generator you can record: When you have finished interacting with the page, press the **record** button to stop the recording and use the **copy** button to copy the generated code to your editor. -Use the **clear** button to clear the code to start recording again. Once finished close the Playwright inspector window or stop the terminal command. +Use the **clear** button to clear the code to start recording again. Once finished, close the Playwright inspector window or stop the terminal command. ### Generating locators You can generate [locators](/locators.md) with the test generator. * Press the `'Record'` button to stop the recording and the `'Pick Locator'` button will appear. * Click on the `'Pick Locator'` button and then hover over elements in the browser window to see the locator highlighted underneath each element. -* To choose a locator click on the element you would like to locate and the code for that locator will appear in the field next to the Pick Locator button. +* To choose a locator, click on the element you would like to locate and the code for that locator will appear in the field next to the Pick Locator button. * You can then edit the locator in this field to fine tune it or use the copy button to copy it and paste it into your code. ###### @@ -284,7 +284,7 @@ pwsh bin/Debug/netX/playwright.ps1 codegen --color-scheme=dark playwright.dev Record scripts and tests while emulating timezone, language & location using the `--timezone`, `--geolocation` and `--lang` options. Once the page opens: 1. Accept the cookies -1. On the top right click on the locate me button to see geolocation in action. +1. On the top right, click on the locate me button to see geolocation in action. ```bash js npx playwright codegen --timezone="Europe/Rome" --geolocation="41.890221,12.492348" --lang="it-IT" bing.com/maps @@ -375,7 +375,7 @@ Make sure you only use the `auth.json` locally as it contains sensitive informat #### Load authenticated state -Run with `--load-storage` to consume the previously loaded storage from the `auth.json`. This way, all [cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies) and [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) will be restored, bringing most web apps to the authenticated state without the need to login again. This means you can can continue generating tests from the logged in state. +Run with `--load-storage` to consume the previously loaded storage from the `auth.json`. This way, all [cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies) and [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) will be restored, bringing most web apps to the authenticated state without the need to login again. This means you can continue generating tests from the logged in state. ```bash js npx playwright codegen --load-storage=auth.json github.com/microsoft/playwright diff --git a/docs/src/debug.md b/docs/src/debug.md index bc4b0c1a80..aff5077d3c 100644 --- a/docs/src/debug.md +++ b/docs/src/debug.md @@ -46,7 +46,7 @@ A browser window will open and the test will run and pause at where the breakpoi ### Debug in different Browsers -By default debugging is done using the Chromium profile. You can debug your tests on different browsers by right clicking on the debug icon in the testing sidebar and clicking on the 'Select Default Profile' option from the dropdown. +By default, debugging is done using the Chromium profile. You can debug your tests on different browsers by right clicking on the debug icon in the testing sidebar and clicking on the 'Select Default Profile' option from the dropdown. debugging on specific profile @@ -80,7 +80,7 @@ npx playwright test --debug ``` #### Debug one test on all browsers -To debug one test on a specific line run the test command followed by the name of the test file and the line number of the test you want to debug, followed by the `--debug` flag. This will run a single test in each browser configured in your [`playwright.config`](./test-projects.md#configure-projects-for-multiple-browsers) and open the inspector. +To debug one test on a specific line, run the test command followed by the name of the test file and the line number of the test you want to debug, followed by the `--debug` flag. This will run a single test in each browser configured in your [`playwright.config`](./test-projects.md#configure-projects-for-multiple-browsers) and open the inspector. ```bash npx playwright test example.spec.ts:10 --debug @@ -207,7 +207,7 @@ While running in debug mode you can live edit the locators. Next to the 'Pick Lo ### Picking locators -While debugging you might need to choose a more resilient locator. You can do this by clicking on the **Pick Locator** button and hovering over any element in the browser window. While hovering over an element you will see the code needed to locate this element highlighted below. Clicking an element in the browser will add the locator into the field where you can then either tweak it or copy it into your code. +While debugging, you might need to choose a more resilient locator. You can do this by clicking on the **Pick Locator** button and hovering over any element in the browser window. While hovering over an element you will see the code needed to locate this element highlighted below. Clicking an element in the browser will add the locator into the field where you can then either tweak it or copy it into your code. Picking locators @@ -242,7 +242,7 @@ This will also set the default timeouts of Playwright to 0 (= no timeout). Browser Developer Tools with Playwright object -To debug your tests using the browser developer tools start by setting a breakpoint in your test to pause the execution using the [`method: Page.pause`] method. +To debug your tests using the browser developer tools, start by setting a breakpoint in your test to pause the execution using the [`method: Page.pause`] method. ```js await page.pause(); @@ -264,7 +264,7 @@ page.pause() await page.PauseAsync(); ``` -Once you have set a breakpoint in your test you can then run your test with `PWDEBUG=console`. +Once you have set a breakpoint in your test, you can then run your test with `PWDEBUG=console`. ```bash tab=bash-bash lang=js PWDEBUG=console npx playwright test @@ -327,7 +327,7 @@ $env:PWDEBUG=console dotnet test ``` -Once Playwright launches the browser window you can open the developer tools. +Once Playwright launches the browser window, you can open the developer tools. The `playwright` object will be available in the console panel. #### playwright.$(selector) diff --git a/docs/src/events.md b/docs/src/events.md index 900cde1a95..23d3c90c3e 100644 --- a/docs/src/events.md +++ b/docs/src/events.md @@ -5,7 +5,7 @@ title: "Events" ## Introduction -Playwright allows listening to various types of events happening on the web page, such as network requests, creation of child pages, dedicated workers etc. There are several ways to subscribe to such events such as waiting for events or adding or removing event listeners. +Playwright allows listening to various types of events happening on the web page, such as network requests, creation of child pages, dedicated workers etc. There are several ways to subscribe to such events, such as waiting for events or adding or removing event listeners. ## Waiting for event diff --git a/docs/src/library-js.md b/docs/src/library-js.md index ae3d1916ec..9085290bba 100644 --- a/docs/src/library-js.md +++ b/docs/src/library-js.md @@ -103,7 +103,7 @@ The key differences to note are as follows: | Installation | `npm install playwright` | `npm init playwright@latest` - note `install` vs. `init` | | Install browsers | Install `@playwright/browser-chromium`, `@playwright/browser-firefox` and/or `@playwright/browser-webkit` | `npx playwright install` or `npx playwright install chromium` for a single one | | `import` from | `playwright` | `@playwright/test` | -| Initialization | Explicitly need to:
  1. Pick a browser to use, e.g. `chromium`
  2. Launch browser with [`method: BrowserType.launch`]
  3. Create a context with [`method: Browser.newContext`], and pass any context options explicitly, e.g. `devices['iPhone 11']`
  4. Create a page with [`method: BrowserContext.newPage`]
| An isolated `page` and `context` are provided to each test out-of the box, along with other [built-in fixtures](./test-fixtures.md#built-in-fixtures). No explicit creation. If referenced by the test in it's arguments, the Test Runner will create them for the test. (i.e. lazy-initialization) | +| Initialization | Explicitly need to:
  1. Pick a browser to use, e.g. `chromium`
  2. Launch browser with [`method: BrowserType.launch`]
  3. Create a context with [`method: Browser.newContext`], and pass any context options explicitly, e.g. `devices['iPhone 11']`
  4. Create a page with [`method: BrowserContext.newPage`]
| An isolated `page` and `context` are provided to each test out-of the box, along with other [built-in fixtures](./test-fixtures.md#built-in-fixtures). No explicit creation. If referenced by the test in its arguments, the Test Runner will create them for the test. (i.e. lazy-initialization) | | Assertions | No built-in Web-First Assertions | [Web-First assertions](./test-assertions.md) like:
  • [`method: PageAssertions.toHaveTitle`]
  • [`method: PageAssertions.toHaveScreenshot#1`]
which auto-wait and retry for the condition to be met.| | Cleanup | Explicitly need to:
  1. Close context with [`method: BrowserContext.close`]
  2. Close browser with [`method: Browser.close`]
| No explicit close of [built-in fixtures](./test-fixtures.md#built-in-fixtures); the Test Runner will take care of it. | Running | When using the Library, you run the code as a node script, possibly with some compilation first. | When using the Test Runner, you use the `npx playwright test` command. Along with your [config](./test-configuration.md), the Test Runner handles any compilation and choosing what to run and how to run it. | diff --git a/docs/src/locators.md b/docs/src/locators.md index 052894a172..8ade71efb7 100644 --- a/docs/src/locators.md +++ b/docs/src/locators.md @@ -10,7 +10,7 @@ a way to find element(s) on the page at any moment. ### Quick Guide -These are the recommended built in locators. +These are the recommended built-in locators. - [`method: Page.getByRole`](#locate-by-role) to locate by explicit and implicit accessibility attributes. - [`method: Page.getByText`](#locate-by-text) to locate by text content. @@ -513,7 +513,7 @@ Use this locator when your element has the `title` attribute. ### Locate by test id -Testing by test ids is the most resilient way of testing as even if your text or role of the attribute changes the test will still pass. QA's and developers should define explicit test ids and query them with [`method: Page.getByTestId`]. However testing by test ids is not user facing. If the role or text value is important to you then consider using user facing locators such as [role](#locate-by-role) and [text locators](#locate-by-text). +Testing by test ids is the most resilient way of testing as even if your text or role of the attribute changes, the test will still pass. QA's and developers should define explicit test ids and query them with [`method: Page.getByTestId`]. However testing by test ids is not user facing. If the role or text value is important to you then consider using user facing locators such as [role](#locate-by-role) and [text locators](#locate-by-text). For example, consider the following DOM structure. @@ -1501,7 +1501,7 @@ For example, consider the following DOM structure: ``` -Locate an item by it's test id of "orange" and then click it. +Locate an item by its test id of "orange" and then click it. ```js await page.getByTestId('orange').click(); diff --git a/docs/src/other-locators.md b/docs/src/other-locators.md index c37b97f6e6..b42407231d 100644 --- a/docs/src/other-locators.md +++ b/docs/src/other-locators.md @@ -668,7 +668,7 @@ We recommend [locating by label text](./locators.md#locate-by-label) instead of Targeted input actions in Playwright automatically distinguish between labels and controls, so you can target the label to perform an action on the associated control. -For example, consider the following DOM structure: ``. You can target the label by it's "Password" text using [`method: Page.getByText`]. However, the following actions will be performed on the input instead of the label: +For example, consider the following DOM structure: ``. You can target the label by its "Password" text using [`method: Page.getByText`]. However, the following actions will be performed on the input instead of the label: - [`method: Locator.click`] will click the label and automatically focus the input field; - [`method: Locator.fill`] will fill the input field; - [`method: Locator.inputValue`] will return the value of the input field; diff --git a/docs/src/test-components-js.md b/docs/src/test-components-js.md index 87cf263711..60d920ee73 100644 --- a/docs/src/test-components-js.md +++ b/docs/src/test-components-js.md @@ -458,7 +458,7 @@ test('slot', async ({ mount }) => { ### hooks -You can use `beforeMount` and `afterMount` hooks to configure your app. This lets you setup things like your app router, fake server etc. giving you the flexibility you need. You can also pass custom configuration from the `mount` call from a test, which is accessible from the `hooksConfig` fixture. This includes any config that needs to be run before or after mounting the component. An example of configuring a router is provided below: +You can use `beforeMount` and `afterMount` hooks to configure your app. This lets you set up things like your app router, fake server etc. giving you the flexibility you need. You can also pass custom configuration from the `mount` call from a test, which is accessible from the `hooksConfig` fixture. This includes any config that needs to be run before or after mounting the component. An example of configuring a router is provided below: Date: Tue, 16 Jul 2024 15:55:35 +0200 Subject: [PATCH 071/498] fix(setInputFiles): throw when uploading file in directory upload (#31706) --- CONTRIBUTING.md | 2 +- packages/playwright-core/src/server/dom.ts | 2 ++ tests/page/page-set-input-files.spec.ts | 12 ++++++++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5b71ccde04..30e89e6bee 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -125,7 +125,7 @@ All API classes, methods, and events should have a description in [`docs/src`](h To run the documentation linter, use: ```bash -npm run doclint +npm run doc ``` To build the documentation site locally and test how your changes will look in practice: diff --git a/packages/playwright-core/src/server/dom.ts b/packages/playwright-core/src/server/dom.ts index 30eb04d3f6..52e648abe0 100644 --- a/packages/playwright-core/src/server/dom.ts +++ b/packages/playwright-core/src/server/dom.ts @@ -639,6 +639,8 @@ export class ElementHandle extends js.JSHandle { throw injected.createStacklessError('Non-multiple file input can only accept single file'); if (directoryUpload && !inputElement.webkitdirectory) throw injected.createStacklessError('File input does not support directories, pass individual files instead'); + if (!directoryUpload && inputElement.webkitdirectory) + throw injected.createStacklessError('[webkitdirectory] input requires passing a path to a directory'); return inputElement; }, { multiple, directoryUpload: !!localDirectory }); if (result === 'error:notconnected' || !result.asElement()) diff --git a/tests/page/page-set-input-files.spec.ts b/tests/page/page-set-input-files.spec.ts index 76a53fa571..a32db203bd 100644 --- a/tests/page/page-set-input-files.spec.ts +++ b/tests/page/page-set-input-files.spec.ts @@ -120,6 +120,15 @@ it('should throw when uploading a folder in a normal file upload input', async ( await expect(input.setInputFiles(dir)).rejects.toThrow('File input does not support directories, pass individual files instead'); }); +it('should throw when uploading a file in a directory upload input', async ({ page, server, isAndroid, asset }) => { + it.skip(isAndroid); + it.skip(os.platform() === 'darwin' && parseInt(os.release().split('.')[0], 10) <= 21, 'WebKit on macOS-12 is frozen'); + + await page.goto(server.PREFIX + '/input/folderupload.html'); + const input = await page.$('input'); + await expect(input.setInputFiles(asset('file to upload.txt'))).rejects.toThrow('[webkitdirectory] input requires passing a path to a directory'); +}); + it('should upload a file after popup', async ({ page, server, asset }) => { it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/29923' }); await page.goto(server.PREFIX + '/input/fileupload.html'); @@ -341,8 +350,7 @@ it('should emit event via prepend', async ({ page, server }) => { expect(chooser).toBeTruthy(); }); -it('should emit event for iframe', async ({ page, server, browserName }) => { - it.skip(browserName === 'firefox'); +it('should emit event for iframe', async ({ page, server }) => { const frame = await attachFrame(page, 'frame1', server.EMPTY_PAGE); await frame.setContent(``); const [chooser] = await Promise.all([ From f66f5b800ea925662139e202470b35e4e3d29f3b Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Tue, 16 Jul 2024 16:11:20 +0200 Subject: [PATCH 072/498] docs: fix broken anchor links (#31707) --- docs/src/other-locators.md | 10 +--------- docs/src/release-notes-java.md | 2 +- docs/src/release-notes-js.md | 2 +- docs/src/release-notes-python.md | 2 +- 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/docs/src/other-locators.md b/docs/src/other-locators.md index b42407231d..c7f6e234d1 100644 --- a/docs/src/other-locators.md +++ b/docs/src/other-locators.md @@ -881,7 +881,7 @@ await page.Locator("data-test-id=submit").ClickAsync(); ``` :::note -Attribute selectors are not CSS selectors, so anything CSS-specific like `:enabled` is not supported. For more features, use a proper [css] selector, e.g. `css=[data-test="login"]:enabled`. +Attribute selectors are not CSS selectors, so anything CSS-specific like `:enabled` is not supported. For more features, use a proper [css](#css-locator) selector, e.g. `css=[data-test="login"]:enabled`. ::: ## Chaining selectors @@ -918,11 +918,3 @@ We recommend [filtering by another locator](./locators.md#filter-by-childdescend By default, chained selectors resolve to an element queried by the last selector. A selector can be prefixed with `*` to capture elements that are queried by an intermediate selector. For example, `css=article >> text=Hello` captures the element with the text `Hello`, and `*css=article >> text=Hello` (note the `*`) captures the `article` element that contains some element with the text `Hello`. - - -[text]: #text-selector -[css]: #css-selector -[xpath]: #xpath-selectors -[react]: #react-selectors -[vue]: #vue-selectors -[id]: #id-data-testid-data-test-id-data-test-selectors diff --git a/docs/src/release-notes-java.md b/docs/src/release-notes-java.md index 6dce675b8f..54c4963216 100644 --- a/docs/src/release-notes-java.md +++ b/docs/src/release-notes-java.md @@ -1457,7 +1457,7 @@ This version of Playwright was also tested against the following stable channels #### New APIs -- [`browserType.launch()`](./api/class-browsertype#browsertypelaunchoptions) now accepts the new `'channel'` option. Read more in [our documentation](./browsers). +- [`method: BrowserType.launch`] now accepts the new `'channel'` option. Read more in [our documentation](./browsers). ## Version 1.9 diff --git a/docs/src/release-notes-js.md b/docs/src/release-notes-js.md index 18f07daa14..cd4ec8354e 100644 --- a/docs/src/release-notes-js.md +++ b/docs/src/release-notes-js.md @@ -2651,7 +2651,7 @@ This version of Playwright was also tested against the following stable channels #### New APIs -- [`browserType.launch()`](./api/class-browsertype#browsertypelaunchoptions) now accepts the new `'channel'` option. Read more in [our documentation](./browsers). +- [`method: BrowserType.launch`] now accepts the new `'channel'` option. Read more in [our documentation](./browsers). ## Version 1.9 diff --git a/docs/src/release-notes-python.md b/docs/src/release-notes-python.md index e7a4341a7e..25fbd3ef04 100644 --- a/docs/src/release-notes-python.md +++ b/docs/src/release-notes-python.md @@ -1433,7 +1433,7 @@ This version of Playwright was also tested against the following stable channels #### New APIs -- [`browserType.launch()`](./api/class-browsertype#browsertypelaunchoptions) now accepts the new `'channel'` option. Read more in [our documentation](./browsers). +- [`method: BrowserType.launch`] now accepts the new `'channel'` option. Read more in [our documentation](./browsers). ## Version 1.9 From 8021312c99e242138d7eb0aec1036cd320a93996 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Tue, 16 Jul 2024 09:44:38 -0700 Subject: [PATCH 073/498] chore: enable notification permission tests in WebKit (#31699) The Notifications API has been supported in WebKit since 2022, enable related permission and tests. --- packages/playwright-core/src/server/webkit/wkPage.ts | 1 + tests/library/permissions.spec.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/playwright-core/src/server/webkit/wkPage.ts b/packages/playwright-core/src/server/webkit/wkPage.ts index adfd06c05e..ae691f0ea3 100644 --- a/packages/playwright-core/src/server/webkit/wkPage.ts +++ b/packages/playwright-core/src/server/webkit/wkPage.ts @@ -1176,6 +1176,7 @@ export class WKPage implements PageDelegate { async _grantPermissions(origin: string, permissions: string[]) { const webPermissionToProtocol = new Map([ ['geolocation', 'geolocation'], + ['notifications', 'notifications'], ['clipboard-read', 'clipboard-read'], ]); const filtered = permissions.map(permission => { diff --git a/tests/library/permissions.spec.ts b/tests/library/permissions.spec.ts index 7e77bba10f..ad56b418d3 100644 --- a/tests/library/permissions.spec.ts +++ b/tests/library/permissions.spec.ts @@ -22,7 +22,7 @@ function getPermission(page, name) { } it.describe('permissions', () => { - it.skip(({ browserName }) => browserName === 'webkit', 'Permissions API is not implemented in WebKit (see https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API)'); + it.fixme(({ browserName, isWindows }) => browserName === 'webkit' && isWindows, 'Permissions API is disabled on Windows WebKit'); it('should be prompt by default', async ({ page, server }) => { await page.goto(server.EMPTY_PAGE); @@ -49,7 +49,7 @@ it.describe('permissions', () => { }); it('should grant window-management permission when origin is listed', async ({ page, context, server, browserName }) => { - it.fail(browserName === 'firefox'); + it.skip(browserName !== 'chromium', 'Only Chromium supports window management API.'); await page.goto(server.EMPTY_PAGE); await context.grantPermissions(['window-management'], { origin: server.EMPTY_PAGE }); From 6a9e60d6a17b2a5b88c2bfa6826a9cec5b37fe0a Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Tue, 16 Jul 2024 19:32:51 +0200 Subject: [PATCH 074/498] fix(ct): import ct* flavour types from ct-core and then from pwt (#31642) --- packages/playwright-ct-core/index.d.ts | 2 +- packages/playwright-ct-react/index.d.ts | 6 ++---- packages/playwright-ct-react17/index.d.ts | 6 ++---- packages/playwright-ct-solid/index.d.ts | 6 ++---- packages/playwright-ct-svelte/index.d.ts | 6 ++---- packages/playwright-ct-vue/index.d.ts | 6 ++---- packages/playwright-ct-vue2/index.d.ts | 6 ++---- 7 files changed, 13 insertions(+), 25 deletions(-) diff --git a/packages/playwright-ct-core/index.d.ts b/packages/playwright-ct-core/index.d.ts index b397169b74..1006bd59ec 100644 --- a/packages/playwright-ct-core/index.d.ts +++ b/packages/playwright-ct-core/index.d.ts @@ -56,4 +56,4 @@ export function defineConfig(config: PlaywrightTestConfig, ...configs: Playwrigh export function defineConfig(config: PlaywrightTestConfig, ...configs: PlaywrightTestConfig[]): PlaywrightTestConfig; export function defineConfig(config: PlaywrightTestConfig, ...configs: PlaywrightTestConfig[]): PlaywrightTestConfig; -export { expect, devices } from 'playwright/test'; +export { expect, devices, Locator } from 'playwright/test'; diff --git a/packages/playwright-ct-react/index.d.ts b/packages/playwright-ct-react/index.d.ts index c086d4bec5..c5e6d6d2da 100644 --- a/packages/playwright-ct-react/index.d.ts +++ b/packages/playwright-ct-react/index.d.ts @@ -14,8 +14,7 @@ * limitations under the License. */ -import type { Locator } from 'playwright/test'; -import type { TestType } from '@playwright/experimental-ct-core'; +import type { TestType, Locator } from '@playwright/experimental-ct-core'; export interface MountOptions { hooksConfig?: HooksConfig; @@ -33,5 +32,4 @@ export const test: TestType<{ ): Promise; }>; -export { defineConfig, PlaywrightTestConfig } from '@playwright/experimental-ct-core'; -export { expect, devices } from 'playwright/test'; +export { defineConfig, PlaywrightTestConfig, expect, devices } from '@playwright/experimental-ct-core'; diff --git a/packages/playwright-ct-react17/index.d.ts b/packages/playwright-ct-react17/index.d.ts index c086d4bec5..748212c45e 100644 --- a/packages/playwright-ct-react17/index.d.ts +++ b/packages/playwright-ct-react17/index.d.ts @@ -14,8 +14,7 @@ * limitations under the License. */ -import type { Locator } from 'playwright/test'; -import type { TestType } from '@playwright/experimental-ct-core'; +import type { TestType, Locator} from '@playwright/experimental-ct-core'; export interface MountOptions { hooksConfig?: HooksConfig; @@ -33,5 +32,4 @@ export const test: TestType<{ ): Promise; }>; -export { defineConfig, PlaywrightTestConfig } from '@playwright/experimental-ct-core'; -export { expect, devices } from 'playwright/test'; +export { defineConfig, PlaywrightTestConfig, expect, devices } from '@playwright/experimental-ct-core'; diff --git a/packages/playwright-ct-solid/index.d.ts b/packages/playwright-ct-solid/index.d.ts index c086d4bec5..c5e6d6d2da 100644 --- a/packages/playwright-ct-solid/index.d.ts +++ b/packages/playwright-ct-solid/index.d.ts @@ -14,8 +14,7 @@ * limitations under the License. */ -import type { Locator } from 'playwright/test'; -import type { TestType } from '@playwright/experimental-ct-core'; +import type { TestType, Locator } from '@playwright/experimental-ct-core'; export interface MountOptions { hooksConfig?: HooksConfig; @@ -33,5 +32,4 @@ export const test: TestType<{ ): Promise; }>; -export { defineConfig, PlaywrightTestConfig } from '@playwright/experimental-ct-core'; -export { expect, devices } from 'playwright/test'; +export { defineConfig, PlaywrightTestConfig, expect, devices } from '@playwright/experimental-ct-core'; diff --git a/packages/playwright-ct-svelte/index.d.ts b/packages/playwright-ct-svelte/index.d.ts index eb6d464032..761831f331 100644 --- a/packages/playwright-ct-svelte/index.d.ts +++ b/packages/playwright-ct-svelte/index.d.ts @@ -14,9 +14,8 @@ * limitations under the License. */ -import type { Locator } from 'playwright/test'; import type { SvelteComponent, ComponentProps } from 'svelte/types/runtime'; -import type { TestType } from '@playwright/experimental-ct-core'; +import type { TestType, Locator } from '@playwright/experimental-ct-core'; type ComponentSlot = string | string[]; type ComponentSlots = Record & { default?: ComponentSlot }; @@ -44,5 +43,4 @@ export const test: TestType<{ ): Promise>; }>; -export { defineConfig, PlaywrightTestConfig } from '@playwright/experimental-ct-core'; -export { expect, devices } from 'playwright/test'; +export { defineConfig, PlaywrightTestConfig, expect, devices } from '@playwright/experimental-ct-core'; diff --git a/packages/playwright-ct-vue/index.d.ts b/packages/playwright-ct-vue/index.d.ts index fee68f3cd0..2d182d4588 100644 --- a/packages/playwright-ct-vue/index.d.ts +++ b/packages/playwright-ct-vue/index.d.ts @@ -14,8 +14,7 @@ * limitations under the License. */ -import type { Locator } from 'playwright/test'; -import type { TestType } from '@playwright/experimental-ct-core'; +import type { TestType, Locator } from '@playwright/experimental-ct-core'; type ComponentSlot = string | string[]; type ComponentSlots = Record & { default?: ComponentSlot }; @@ -64,5 +63,4 @@ export const test: TestType<{ ): Promise>; }>; -export { defineConfig, PlaywrightTestConfig } from '@playwright/experimental-ct-core'; -export { expect, devices } from 'playwright/test'; +export { defineConfig, PlaywrightTestConfig, expect, devices } from '@playwright/experimental-ct-core'; diff --git a/packages/playwright-ct-vue2/index.d.ts b/packages/playwright-ct-vue2/index.d.ts index f1a2a0489f..133b4a60f2 100644 --- a/packages/playwright-ct-vue2/index.d.ts +++ b/packages/playwright-ct-vue2/index.d.ts @@ -14,8 +14,7 @@ * limitations under the License. */ -import type { Locator } from 'playwright/test'; -import type { TestType } from '@playwright/experimental-ct-core'; +import type { TestType, Locator } from '@playwright/experimental-ct-core'; type Slot = string | string[]; type ComponentSlots = Record & { default?: Slot }; @@ -64,5 +63,4 @@ export const test: TestType<{ ): Promise>; }>; -export { defineConfig, PlaywrightTestConfig } from '@playwright/experimental-ct-core'; -export { expect, devices } from 'playwright/test'; +export { defineConfig, PlaywrightTestConfig, expect, devices } from '@playwright/experimental-ct-core'; From bb2e9d1175198290556b387d8987609d2e85565a Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Tue, 16 Jul 2024 20:55:12 +0200 Subject: [PATCH 075/498] chore: make 'npm run clean' ignore .DS_Store (#31710) --- utils/build/clean.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/utils/build/clean.js b/utils/build/clean.js index b0ad6f2278..53079baf29 100644 --- a/utils/build/clean.js +++ b/utils/build/clean.js @@ -11,7 +11,9 @@ for (const pkg of workspace.packages()) { rmSync(path.join(pkg.path, 'src', 'generated')); const bundles = path.join(pkg.path, 'bundles'); if (fs.existsSync(bundles) && fs.statSync(bundles).isDirectory()) { - for (const bundle of fs.readdirSync(bundles)) - rmSync(path.join(bundles, bundle, 'node_modules')); + for (const bundle of fs.readdirSync(bundles, { withFileTypes: true })) { + if (bundle.isDirectory()) + rmSync(path.join(bundles, bundle.name, 'node_modules')); + } } } From 3694c1422d9a541776602fb870d0b8e249eff35d Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Tue, 16 Jul 2024 21:16:55 +0200 Subject: [PATCH 076/498] Revert "test: rebase golden snapshots on Chromium macOS arm64 (#31344)" (#31711) This reverts commit 02416877da13d21b277bc81221602e210171f6c7. Since we landed https://github.com/microsoft/playwright/commit/3127571b24e1a8a93960fa4a24fa011c3df20989 - we should revert this one as well. --- tests/page/page-screenshot.spec.ts | 5 ++--- .../screenshot-canvas-macOS-arm64-chromium.png | Bin 1939 -> 0 bytes 2 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 tests/page/page-screenshot.spec.ts-snapshots/screenshot-canvas-macOS-arm64-chromium.png diff --git a/tests/page/page-screenshot.spec.ts b/tests/page/page-screenshot.spec.ts index dd1be3fbaa..7f374ac59b 100644 --- a/tests/page/page-screenshot.spec.ts +++ b/tests/page/page-screenshot.spec.ts @@ -280,13 +280,12 @@ it.describe('page screenshot', () => { expect(screenshot).toMatchSnapshot('screenshot-clip-odd-size.png'); }); - it('should work for canvas', async ({ page, server, isElectron, isMac, browserName }) => { + it('should work for canvas', async ({ page, server, isElectron, isMac }) => { it.fixme(isElectron && isMac, 'Fails on the bots'); await page.setViewportSize({ width: 500, height: 500 }); await page.goto(server.PREFIX + '/screenshots/canvas.html'); const screenshot = await page.screenshot(); - const screenshotPrefix = browserName === 'chromium' && isMac && process.arch === 'arm64' ? '-macOS-arm64' : ''; - expect(screenshot).toMatchSnapshot(`screenshot-canvas${screenshotPrefix}.png`); + expect(screenshot).toMatchSnapshot('screenshot-canvas.png'); }); it('should capture canvas changes', async ({ page, isElectron, browserName, isMac, isWebView2 }) => { diff --git a/tests/page/page-screenshot.spec.ts-snapshots/screenshot-canvas-macOS-arm64-chromium.png b/tests/page/page-screenshot.spec.ts-snapshots/screenshot-canvas-macOS-arm64-chromium.png deleted file mode 100644 index 830872e8d2e6ac8f68cc70a8d99bb838b2270fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1939 zcmeAS@N?(olHy`uVBq!ia0y~yVEh8Y985qFmn|N5ffQqLkh>GZx^prw85r1oJzX3_ zD(1YsYnXS~K!D+(!H2_Nis>UG%Ppb=u~gaDTl0 zclPh@#};Az9~RF|XU;qEj8EW;-|XL)^Q=GReP+0EhjG>sSp|&OxTRU8sQT*?>Wb&V%H@S~l-@SWJ{KkZ{a4%$h-=7-yvyQhQ+KjUB1V+aKLtx}E zGpHklCS4K--BRJGMfA(@qhUQ7)^x03sG8g^h+imH$hkdliaxNGW$<+Mb6Mw<&;$TH CDVNRw From e11c0c0cbb177fbf4fd208f181b99ba5f6109f9e Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Wed, 17 Jul 2024 09:00:47 +0200 Subject: [PATCH 077/498] 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 From ed6abf86c743c50baf3b0f033c8c5ef1f707172b Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Wed, 17 Jul 2024 13:22:00 +0200 Subject: [PATCH 078/498] fix(expect): throw unsupported error when using this.equals() in expect (#31723) --- docs/src/test-assertions-js.md | 2 ++ packages/playwright/src/matchers/expect.ts | 5 +++++ tests/playwright-test/expect.spec.ts | 24 ++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/docs/src/test-assertions-js.md b/docs/src/test-assertions-js.md index 4745659cf9..defbc3a293 100644 --- a/docs/src/test-assertions-js.md +++ b/docs/src/test-assertions-js.md @@ -308,6 +308,8 @@ test('amount', async () => { }); ``` +### Compatibility with expect library + :::note Do not confuse Playwright's `expect` with the [`expect` library](https://jestjs.io/docs/expect). The latter is not fully integrated with Playwright test runner, so make sure to use Playwright's own `expect`. ::: diff --git a/packages/playwright/src/matchers/expect.ts b/packages/playwright/src/matchers/expect.ts index 9a010992da..3e49360eb7 100644 --- a/packages/playwright/src/matchers/expect.ts +++ b/packages/playwright/src/matchers/expect.ts @@ -138,6 +138,7 @@ function createExpect(info: ExpectMetaInfo) { utils, timeout: currentExpectTimeout() }; + (newThis as any).equals = throwUnsupportedExpectMatcherError; return (matcher as any).call(newThis, ...args); }; } @@ -183,6 +184,10 @@ function createExpect(info: ExpectMetaInfo) { return expectInstance; } +function throwUnsupportedExpectMatcherError() { + throw new Error('It looks like you are using custom expect matchers that are not compatible with Playwright. See https://aka.ms/playwright/expect-compatibility'); +} + expectLibrary.setState({ expand: false }); const customAsyncMatchers = { diff --git a/tests/playwright-test/expect.spec.ts b/tests/playwright-test/expect.spec.ts index 1393bdd3ff..63928e86fb 100644 --- a/tests/playwright-test/expect.spec.ts +++ b/tests/playwright-test/expect.spec.ts @@ -1039,3 +1039,27 @@ test('should expose timeout to custom matchers', async ({ runInlineTest, runTSC expect(result.failed).toBe(0); expect(result.passed).toBe(2); }); + +test('should throw error when using .equals()', async ({ runInlineTest }) => { + const result = await runInlineTest({ + 'helper.ts': ` + import { test as base, expect } from '@playwright/test'; + expect.extend({ + toBeWithinRange(received, floor, ceiling) { + this.equals(1, 2); + }, + }); + export const test = base; + `, + 'expect-test.spec.ts': ` + import { test } from './helper'; + test('numeric ranges', () => { + test.expect(() => { + test.expect(100).toBeWithinRange(90, 110); + }).toThrowError('It looks like you are using custom expect matchers that are not compatible with Playwright. See https://aka.ms/playwright/expect-compatibility'); + }); + ` + }); + expect(result.exitCode).toBe(0); + expect(result.passed).toBe(1); +}); From 8eab28d858fdf7df9077aff24e4047cd34ae0c39 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Wed, 17 Jul 2024 13:36:37 +0200 Subject: [PATCH 079/498] fix(list reporter): print step ends in non-TTY mode (#31703) When used in a terminal, the `list` reporter prints out information about test steps to help debugging. In non-TTY environments like GitHub Actions, currently it doesn't. This PR changes that, so that in non-TTY environments you'll see the "step end" messages appearing, but not the "step begin" messages. This is a good middleground, because it helps the user understand test progress, without being too verbose. Closes https://github.com/microsoft/playwright/issues/31674 --- packages/playwright/src/reporters/list.ts | 46 +++++----- tests/playwright-test/reporter-blob.spec.ts | 50 ++++++----- tests/playwright-test/reporter-list.spec.ts | 95 ++++++++++++++------- 3 files changed, 118 insertions(+), 73 deletions(-) diff --git a/packages/playwright/src/reporters/list.ts b/packages/playwright/src/reporters/list.ts index 94e507fd4b..f87a7d4fe8 100644 --- a/packages/playwright/src/reporters/list.ts +++ b/packages/playwright/src/reporters/list.ts @@ -36,7 +36,7 @@ class ListReporter extends BaseReporter { constructor(options: { printSteps?: boolean } = {}) { super(); - this._printSteps = isTTY && getAsBooleanFromENV('PLAYWRIGHT_LIST_PRINT_STEPS', options.printSteps); + this._printSteps = getAsBooleanFromENV('PLAYWRIGHT_LIST_PRINT_STEPS', options.printSteps); } override printsToStdio() { @@ -54,11 +54,13 @@ class ListReporter extends BaseReporter { override onTestBegin(test: TestCase, result: TestResult) { super.onTestBegin(test, result); + + const index = String(this._resultIndex.size + 1); + this._resultIndex.set(result, index); + if (!isTTY) return; this._maybeWriteNewLine(); - const index = String(this._resultIndex.size + 1); - this._resultIndex.set(result, index); this._testRows.set(test, this._lastRow); const prefix = this._testPrefix(index, ''); const line = colors.dim(formatTestTitle(this.config, test)) + this._retrySuffix(result); @@ -75,28 +77,34 @@ class ListReporter extends BaseReporter { this._dumpToStdio(test, chunk, process.stderr); } - override onStepBegin(test: TestCase, result: TestResult, step: TestStep) { - super.onStepBegin(test, result, step); - if (step.category !== 'test.step') - return; - const testIndex = this._resultIndex.get(result) || ''; - if (!this._printSteps) { - if (isTTY) - this._updateLine(this._testRows.get(test)!, colors.dim(formatTestTitle(this.config, test, step)) + this._retrySuffix(result), this._testPrefix(testIndex, '')); - return; - } + private getStepIndex(testIndex: string, result: TestResult, step: TestStep): string { + if (this._stepIndex.has(step)) + return this._stepIndex.get(step)!; const ordinal = ((result as any)[lastStepOrdinalSymbol] || 0) + 1; (result as any)[lastStepOrdinalSymbol] = ordinal; const stepIndex = `${testIndex}.${ordinal}`; this._stepIndex.set(step, stepIndex); + return stepIndex; + } - if (isTTY) { + override onStepBegin(test: TestCase, result: TestResult, step: TestStep) { + super.onStepBegin(test, result, step); + if (step.category !== 'test.step') + return; + const testIndex = this._resultIndex.get(result) || ''; + + if (!isTTY) + return; + + if (this._printSteps) { this._maybeWriteNewLine(); this._stepRows.set(step, this._lastRow); - const prefix = this._testPrefix(stepIndex, ''); + const prefix = this._testPrefix(this.getStepIndex(testIndex, result, step), ''); const line = test.title + colors.dim(stepSuffix(step)); this._appendLine(line, prefix); + } else { + this._updateLine(this._testRows.get(test)!, colors.dim(formatTestTitle(this.config, test, step)) + this._retrySuffix(result), this._testPrefix(testIndex, '')); } } @@ -112,8 +120,8 @@ class ListReporter extends BaseReporter { return; } - const index = this._stepIndex.get(step)!; - const title = test.title + colors.dim(stepSuffix(step)); + const index = this.getStepIndex(testIndex, result, step); + const title = isTTY ? test.title + colors.dim(stepSuffix(step)) : formatTestTitle(this.config, test, step); const prefix = this._testPrefix(index, ''); let text = ''; if (step.error) @@ -204,7 +212,7 @@ class ListReporter extends BaseReporter { private _appendLine(text: string, prefix: string) { const line = prefix + this.fitToScreen(text, prefix); if (process.env.PW_TEST_DEBUG_REPORTERS) { - process.stdout.write(this._lastRow + ' : ' + line + '\n'); + process.stdout.write('#' + this._lastRow + ' : ' + line + '\n'); } else { process.stdout.write(line); process.stdout.write('\n'); @@ -215,7 +223,7 @@ class ListReporter extends BaseReporter { private _updateLine(row: number, text: string, prefix: string) { const line = prefix + this.fitToScreen(text, prefix); if (process.env.PW_TEST_DEBUG_REPORTERS) - process.stdout.write(row + ' : ' + line + '\n'); + process.stdout.write('#' + row + ' : ' + line + '\n'); else this._updateLineForTTY(row, line); } diff --git a/tests/playwright-test/reporter-blob.spec.ts b/tests/playwright-test/reporter-blob.spec.ts index 99882777a8..8f3064a073 100644 --- a/tests/playwright-test/reporter-blob.spec.ts +++ b/tests/playwright-test/reporter-blob.spec.ts @@ -478,28 +478,36 @@ test('merge into list report by default', async ({ runInlineTest, mergeReports } const text = stripAnsi(output); expect(text).toContain('Running 10 tests using 3 workers'); - const lines = text.split('\n').filter(l => l.match(/^\d :/)).map(l => l.replace(/[.\d]+m?s/, 'Xms')); + const lines = text.split('\n').filter(l => l.match(/^#.* :/)).map(l => l.replace(/[.\d]+m?s/, 'Xms')); expect(lines).toEqual([ - `0 : 1 a.test.js:3:11 › math 1`, - `0 : ${POSITIVE_STATUS_MARK} 1 a.test.js:3:11 › math 1 (Xms)`, - `1 : 2 a.test.js:6:11 › failing 1`, - `1 : ${NEGATIVE_STATUS_MARK} 2 a.test.js:6:11 › failing 1 (Xms)`, - `2 : 3 a.test.js:6:11 › failing 1 (retry #1)`, - `2 : ${NEGATIVE_STATUS_MARK} 3 a.test.js:6:11 › failing 1 (retry #1) (Xms)`, - `3 : 4 a.test.js:9:11 › flaky 1`, - `3 : ${NEGATIVE_STATUS_MARK} 4 a.test.js:9:11 › flaky 1 (Xms)`, - `4 : 5 a.test.js:9:11 › flaky 1 (retry #1)`, - `4 : ${POSITIVE_STATUS_MARK} 5 a.test.js:9:11 › flaky 1 (retry #1) (Xms)`, - `5 : 6 a.test.js:12:12 › skipped 1`, - `5 : - 6 a.test.js:12:12 › skipped 1`, - `6 : 7 b.test.js:3:11 › math 2`, - `6 : ${POSITIVE_STATUS_MARK} 7 b.test.js:3:11 › math 2 (Xms)`, - `7 : 8 b.test.js:6:11 › failing 2`, - `7 : ${NEGATIVE_STATUS_MARK} 8 b.test.js:6:11 › failing 2 (Xms)`, - `8 : 9 b.test.js:6:11 › failing 2 (retry #1)`, - `8 : ${NEGATIVE_STATUS_MARK} 9 b.test.js:6:11 › failing 2 (retry #1) (Xms)`, - `9 : 10 b.test.js:9:12 › skipped 2`, - `9 : - 10 b.test.js:9:12 › skipped 2` + `#0 : 1 a.test.js:3:11 › math 1`, + `#0 : ${POSITIVE_STATUS_MARK} 1 a.test.js:3:11 › math 1 (Xms)`, + `#1 : 2 a.test.js:6:11 › failing 1`, + `#1 : ${NEGATIVE_STATUS_MARK} 2 a.test.js:6:11 › failing 1 (Xms)`, + `#2 : 3 a.test.js:6:11 › failing 1 (retry #1)`, + `#2 : ${NEGATIVE_STATUS_MARK} 3 a.test.js:6:11 › failing 1 (retry #1) (Xms)`, + `#3 : 4 a.test.js:9:11 › flaky 1`, + `#3 : ${NEGATIVE_STATUS_MARK} 4 a.test.js:9:11 › flaky 1 (Xms)`, + `#4 : 5 a.test.js:9:11 › flaky 1 (retry #1)`, + `#4 : ${POSITIVE_STATUS_MARK} 5 a.test.js:9:11 › flaky 1 (retry #1) (Xms)`, + `#5 : 6 a.test.js:12:12 › skipped 1`, + `#5 : - 6 a.test.js:12:12 › skipped 1`, + `#6 : 7 b.test.js:3:11 › math 2`, + `#6 : ${POSITIVE_STATUS_MARK} 7 b.test.js:3:11 › math 2 (Xms)`, + `#7 : 8 b.test.js:6:11 › failing 2`, + `#7 : ${NEGATIVE_STATUS_MARK} 8 b.test.js:6:11 › failing 2 (Xms)`, + `#8 : 9 b.test.js:6:11 › failing 2 (retry #1)`, + `#8 : ${NEGATIVE_STATUS_MARK} 9 b.test.js:6:11 › failing 2 (retry #1) (Xms)`, + `#9 : 10 b.test.js:9:12 › skipped 2`, + `#9 : - 10 b.test.js:9:12 › skipped 2`, + `#10 : 11 c.test.js:3:11 › math 3`, + `#10 : ${POSITIVE_STATUS_MARK} 11 c.test.js:3:11 › math 3 (Xms)`, + `#11 : 12 c.test.js:6:11 › flaky 2`, + `#11 : ${NEGATIVE_STATUS_MARK} 12 c.test.js:6:11 › flaky 2 (Xms)`, + `#12 : 13 c.test.js:6:11 › flaky 2 (retry #1)`, + `#12 : ${POSITIVE_STATUS_MARK} 13 c.test.js:6:11 › flaky 2 (retry #1) (Xms)`, + `#13 : 14 c.test.js:9:12 › skipped 3`, + `#13 : - 14 c.test.js:9:12 › skipped 3`, ]); }); diff --git a/tests/playwright-test/reporter-list.spec.ts b/tests/playwright-test/reporter-list.spec.ts index 489e97feb7..c57190a5d7 100644 --- a/tests/playwright-test/reporter-list.spec.ts +++ b/tests/playwright-test/reporter-list.spec.ts @@ -72,22 +72,22 @@ for (const useIntermediateMergeReport of [false, true] as const) { `, }, { reporter: 'list' }, { PW_TEST_DEBUG_REPORTERS: '1', PLAYWRIGHT_LIST_PRINT_STEPS: '1', PLAYWRIGHT_FORCE_TTY: '80' }); const text = result.output; - const lines = text.split('\n').filter(l => l.match(/^\d :/)).map(l => l.replace(/[.\d]+m?s/, 'Xms')); + const lines = text.split('\n').filter(l => l.match(/^#.* :/)).map(l => l.replace(/[.\d]+m?s/, 'Xms')); lines.pop(); // Remove last item that contains [v] and time in ms. expect(lines).toEqual([ - '0 : 1 a.test.ts:3:15 › passes', - '1 : 1.1 passes › outer 1.0', - '2 : 1.2 passes › outer 1.0 › inner 1.1', - '2 : 1.2 passes › outer 1.0 › inner 1.1 (Xms)', - '3 : 1.3 passes › outer 1.0 › inner 1.2', - '3 : 1.3 passes › outer 1.0 › inner 1.2 (Xms)', - '1 : 1.1 passes › outer 1.0 (Xms)', - '4 : 1.4 passes › outer 2.0', - '5 : 1.5 passes › outer 2.0 › inner 2.1', - '5 : 1.5 passes › outer 2.0 › inner 2.1 (Xms)', - '6 : 1.6 passes › outer 2.0 › inner 2.2', - '6 : 1.6 passes › outer 2.0 › inner 2.2 (Xms)', - '4 : 1.4 passes › outer 2.0 (Xms)', + '#0 : 1 a.test.ts:3:15 › passes', + '#1 : 1.1 passes › outer 1.0', + '#2 : 1.2 passes › outer 1.0 › inner 1.1', + '#2 : 1.2 passes › outer 1.0 › inner 1.1 (Xms)', + '#3 : 1.3 passes › outer 1.0 › inner 1.2', + '#3 : 1.3 passes › outer 1.0 › inner 1.2 (Xms)', + '#1 : 1.1 passes › outer 1.0 (Xms)', + '#4 : 1.4 passes › outer 2.0', + '#5 : 1.5 passes › outer 2.0 › inner 2.1', + '#5 : 1.5 passes › outer 2.0 › inner 2.1 (Xms)', + '#6 : 1.6 passes › outer 2.0 › inner 2.2', + '#6 : 1.6 passes › outer 2.0 › inner 2.2 (Xms)', + '#4 : 1.4 passes › outer 2.0 (Xms)', ]); }); @@ -107,22 +107,51 @@ for (const useIntermediateMergeReport of [false, true] as const) { });`, }, { reporter: 'list' }, { PW_TEST_DEBUG_REPORTERS: '1', PLAYWRIGHT_FORCE_TTY: '80' }); const text = result.output; - const lines = text.split('\n').filter(l => l.match(/^\d :/)).map(l => l.replace(/[.\d]+m?s/, 'Xms')); + const lines = text.split('\n').filter(l => l.match(/^#.* :/)).map(l => l.replace(/[.\d]+m?s/, 'Xms')); lines.pop(); // Remove last item that contains [v] and time in ms. expect(lines).toEqual([ - '0 : 1 a.test.ts:3:11 › passes', - '0 : 1 a.test.ts:4:20 › passes › outer 1.0', - '0 : 1 a.test.ts:5:22 › passes › outer 1.0 › inner 1.1', - '0 : 1 a.test.ts:4:20 › passes › outer 1.0', - '0 : 1 a.test.ts:6:22 › passes › outer 1.0 › inner 1.2', - '0 : 1 a.test.ts:4:20 › passes › outer 1.0', - '0 : 1 a.test.ts:3:11 › passes', - '0 : 1 a.test.ts:8:20 › passes › outer 2.0', - '0 : 1 a.test.ts:9:22 › passes › outer 2.0 › inner 2.1', - '0 : 1 a.test.ts:8:20 › passes › outer 2.0', - '0 : 1 a.test.ts:10:22 › passes › outer 2.0 › inner 2.2', - '0 : 1 a.test.ts:8:20 › passes › outer 2.0', - '0 : 1 a.test.ts:3:11 › passes', + '#0 : 1 a.test.ts:3:11 › passes', + '#0 : 1 a.test.ts:4:20 › passes › outer 1.0', + '#0 : 1 a.test.ts:5:22 › passes › outer 1.0 › inner 1.1', + '#0 : 1 a.test.ts:4:20 › passes › outer 1.0', + '#0 : 1 a.test.ts:6:22 › passes › outer 1.0 › inner 1.2', + '#0 : 1 a.test.ts:4:20 › passes › outer 1.0', + '#0 : 1 a.test.ts:3:11 › passes', + '#0 : 1 a.test.ts:8:20 › passes › outer 2.0', + '#0 : 1 a.test.ts:9:22 › passes › outer 2.0 › inner 2.1', + '#0 : 1 a.test.ts:8:20 › passes › outer 2.0', + '#0 : 1 a.test.ts:10:22 › passes › outer 2.0 › inner 2.2', + '#0 : 1 a.test.ts:8:20 › passes › outer 2.0', + '#0 : 1 a.test.ts:3:11 › passes', + ]); + }); + + test('render steps in non-TTY mode', async ({ runInlineTest }) => { + const result = await runInlineTest({ + 'a.test.ts': ` + import { test, expect } from '@playwright/test'; + test('passes', async ({}) => { + await test.step('outer 1.0', async () => { + await test.step('inner 1.1', async () => {}); + await test.step('inner 1.2', async () => {}); + }); + await test.step('outer 2.0', async () => { + await test.step('inner 2.1', async () => {}); + await test.step('inner 2.2', async () => {}); + }); + }); + `, + }, { reporter: 'list' }, { PW_TEST_DEBUG_REPORTERS: '1', PLAYWRIGHT_LIST_PRINT_STEPS: '1' }); + const text = result.output; + const lines = text.split('\n').filter(l => l.match(/^#.* :/)).map(l => l.replace(/[.\d]+m?s/, 'Xms')); + expect(lines).toEqual([ + '#0 : 1.1 a.test.ts:5:26 › passes › outer 1.0 › inner 1.1 (Xms)', + '#1 : 1.2 a.test.ts:6:26 › passes › outer 1.0 › inner 1.2 (Xms)', + '#2 : 1.3 a.test.ts:4:24 › passes › outer 1.0 (Xms)', + '#3 : 1.4 a.test.ts:9:26 › passes › outer 2.0 › inner 2.1 (Xms)', + '#4 : 1.5 a.test.ts:10:26 › passes › outer 2.0 › inner 2.2 (Xms)', + '#5 : 1.6 a.test.ts:8:24 › passes › outer 2.0 (Xms)', + `#6 : ${POSITIVE_STATUS_MARK} 1 a.test.ts:3:15 › passes (Xms)`, ]); }); @@ -156,13 +185,13 @@ for (const useIntermediateMergeReport of [false, true] as const) { `, }, { reporter: 'list', retries: '1' }, { PW_TEST_DEBUG_REPORTERS: '1', PLAYWRIGHT_FORCE_TTY: '80' }); const text = result.output; - const lines = text.split('\n').filter(l => l.startsWith('0 :') || l.startsWith('1 :')).map(l => l.replace(/\d+(\.\d+)?m?s/, 'XXms')); + const lines = text.split('\n').filter(l => l.startsWith('#0 :') || l.startsWith('#1 :')).map(l => l.replace(/\d+(\.\d+)?m?s/, 'XXms')); expect(lines).toEqual([ - `0 : 1 a.test.ts:3:15 › flaky`, - `0 : ${NEGATIVE_STATUS_MARK} 1 a.test.ts:3:15 › flaky (XXms)`, - `1 : 2 a.test.ts:3:15 › flaky (retry #1)`, - `1 : ${POSITIVE_STATUS_MARK} 2 a.test.ts:3:15 › flaky (retry #1) (XXms)`, + `#0 : 1 a.test.ts:3:15 › flaky`, + `#0 : ${NEGATIVE_STATUS_MARK} 1 a.test.ts:3:15 › flaky (XXms)`, + `#1 : 2 a.test.ts:3:15 › flaky (retry #1)`, + `#1 : ${POSITIVE_STATUS_MARK} 2 a.test.ts:3:15 › flaky (retry #1) (XXms)`, ]); }); From f4399f7f062315034a52c2ae395e00979b7cc54d Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Wed, 17 Jul 2024 07:08:43 -0700 Subject: [PATCH 080/498] fix(toHaveScreenshot): sanitize attachment names and paths (#31712) ... unless an array of file-system-friendly parts is provided. Motivation: attachment name is used as a file system path when downloading attachments, so we keep them fs-friendly. References #30693. --- .../src/matchers/toMatchSnapshot.ts | 108 +++++++++--------- tests/playwright-test/golden.spec.ts | 8 +- .../to-have-screenshot.spec.ts | 46 ++++++++ 3 files changed, 105 insertions(+), 57 deletions(-) diff --git a/packages/playwright/src/matchers/toMatchSnapshot.ts b/packages/playwright/src/matchers/toMatchSnapshot.ts index 7a3242100e..a533f13b48 100644 --- a/packages/playwright/src/matchers/toMatchSnapshot.ts +++ b/packages/playwright/src/matchers/toMatchSnapshot.ts @@ -75,10 +75,10 @@ const NonConfigProperties: (keyof ToHaveScreenshotOptions)[] = [ class SnapshotHelper { readonly testInfo: TestInfoImpl; - readonly outputBaseName: string; + readonly attachmentBaseName: string; readonly legacyExpectedPath: string; readonly previousPath: string; - readonly snapshotPath: string; + readonly expectedPath: string; readonly actualPath: string; readonly diffPath: string; readonly mimeType: string; @@ -117,40 +117,42 @@ class SnapshotHelper { (testInfo as any)[snapshotNamesSymbol] = snapshotNames; } - // Consider the use case below. We should save actual to different paths. - // - // expect.toMatchSnapshot('a.png') - // // noop - // expect.toMatchSnapshot('a.png') - - let inputPathSegments: string[]; + let expectedPathSegments: string[]; + let outputBasePath: string; if (!name) { + // Consider the use case below. We should save actual to different paths. + // Therefore we auto-increment |anonymousSnapshotIndex|. + // + // expect.toMatchSnapshot('a.png') + // // noop + // expect.toMatchSnapshot('a.png') const fullTitleWithoutSpec = [ ...testInfo.titlePath.slice(1), ++snapshotNames.anonymousSnapshotIndex, ].join(' '); - inputPathSegments = [sanitizeForFilePath(trimLongString(fullTitleWithoutSpec)) + '.' + anonymousSnapshotExtension]; + // Note: expected path must not ever change for backwards compatibility. + expectedPathSegments = [sanitizeForFilePath(trimLongString(fullTitleWithoutSpec)) + '.' + anonymousSnapshotExtension]; // Trim the output file paths more aggressively to avoid hitting Windows filesystem limits. - this.outputBaseName = sanitizeForFilePath(trimLongString(fullTitleWithoutSpec, windowsFilesystemFriendlyLength)) + '.' + anonymousSnapshotExtension; + const sanitizedName = sanitizeForFilePath(trimLongString(fullTitleWithoutSpec, windowsFilesystemFriendlyLength)) + '.' + anonymousSnapshotExtension; + outputBasePath = testInfo._getOutputPath(sanitizedName); + this.attachmentBaseName = sanitizedName; } else { - // We intentionally do not sanitize user-provided array of segments, but for backwards - // compatibility we do sanitize the name if it is a single string. - // See https://github.com/microsoft/playwright/pull/9156 - inputPathSegments = Array.isArray(name) ? name : [sanitizeFilePathBeforeExtension(name)]; - const joinedName = Array.isArray(name) ? name.join(path.sep) : name; + // We intentionally do not sanitize user-provided array of segments, assuming + // it is a file system path. See https://github.com/microsoft/playwright/pull/9156. + // Note: expected path must not ever change for backwards compatibility. + expectedPathSegments = Array.isArray(name) ? name : [sanitizeFilePathBeforeExtension(name)]; + const joinedName = Array.isArray(name) ? name.join(path.sep) : sanitizeFilePathBeforeExtension(trimLongString(name, windowsFilesystemFriendlyLength)); snapshotNames.namedSnapshotIndex[joinedName] = (snapshotNames.namedSnapshotIndex[joinedName] || 0) + 1; const index = snapshotNames.namedSnapshotIndex[joinedName]; - if (index > 1) - this.outputBaseName = addSuffixToFilePath(joinedName, `-${index - 1}`); - else - this.outputBaseName = joinedName; + const sanitizedName = index > 1 ? addSuffixToFilePath(joinedName, `-${index - 1}`) : joinedName; + outputBasePath = testInfo._getOutputPath(sanitizedName); + this.attachmentBaseName = sanitizedName; } - this.snapshotPath = testInfo.snapshotPath(...inputPathSegments); - const outputFile = testInfo._getOutputPath(sanitizeFilePathBeforeExtension(this.outputBaseName)); - this.legacyExpectedPath = addSuffixToFilePath(outputFile, '-expected'); - this.previousPath = addSuffixToFilePath(outputFile, '-previous'); - this.actualPath = addSuffixToFilePath(outputFile, '-actual'); - this.diffPath = addSuffixToFilePath(outputFile, '-diff'); + this.expectedPath = testInfo.snapshotPath(...expectedPathSegments); + this.legacyExpectedPath = addSuffixToFilePath(outputBasePath, '-expected'); + this.previousPath = addSuffixToFilePath(outputBasePath, '-previous'); + this.actualPath = addSuffixToFilePath(outputBasePath, '-actual'); + this.diffPath = addSuffixToFilePath(outputBasePath, '-diff'); const filteredConfigOptions = { ...configOptions }; for (const prop of NonConfigProperties) @@ -176,7 +178,7 @@ class SnapshotHelper { this.locator = locator; this.updateSnapshots = testInfo.config.updateSnapshots; - this.mimeType = mime.getType(path.basename(this.snapshotPath)) ?? 'application/octet-string'; + this.mimeType = mime.getType(path.basename(this.expectedPath)) ?? 'application/octet-string'; this.comparator = getComparator(this.mimeType); this.testInfo = testInfo; @@ -186,7 +188,7 @@ class SnapshotHelper { createMatcherResult(message: string, pass: boolean, log?: string[]): ImageMatcherResult { const unfiltered: ImageMatcherResult = { name: this.matcherName, - expected: this.snapshotPath, + expected: this.expectedPath, actual: this.actualPath, diff: this.diffPath, pass, @@ -198,7 +200,7 @@ class SnapshotHelper { handleMissingNegated(): ImageMatcherResult { const isWriteMissingMode = this.updateSnapshots === 'all' || this.updateSnapshots === 'missing'; - const message = `A snapshot doesn't exist at ${this.snapshotPath}${isWriteMissingMode ? ', matchers using ".not" won\'t write them automatically.' : '.'}`; + const message = `A snapshot doesn't exist at ${this.expectedPath}${isWriteMissingMode ? ', matchers using ".not" won\'t write them automatically.' : '.'}`; // NOTE: 'isNot' matcher implies inversed value. return this.createMatcherResult(message, true); } @@ -221,11 +223,11 @@ class SnapshotHelper { handleMissing(actual: Buffer | string): ImageMatcherResult { const isWriteMissingMode = this.updateSnapshots === 'all' || this.updateSnapshots === 'missing'; if (isWriteMissingMode) { - writeFileSync(this.snapshotPath, actual); + writeFileSync(this.expectedPath, actual); writeFileSync(this.actualPath, actual); - this.testInfo.attachments.push({ name: addSuffixToFilePath(this.outputBaseName, '-actual'), contentType: this.mimeType, path: this.actualPath }); + this.testInfo.attachments.push({ name: addSuffixToFilePath(this.attachmentBaseName, '-actual'), contentType: this.mimeType, path: this.actualPath }); } - const message = `A snapshot doesn't exist at ${this.snapshotPath}${isWriteMissingMode ? ', writing actual.' : '.'}`; + const message = `A snapshot doesn't exist at ${this.expectedPath}${isWriteMissingMode ? ', writing actual.' : '.'}`; if (this.updateSnapshots === 'all') { /* eslint-disable no-console */ console.log(message); @@ -258,22 +260,22 @@ class SnapshotHelper { // Copy the expectation inside the `test-results/` folder for backwards compatibility, // so that one can upload `test-results/` directory and have all the data inside. writeFileSync(this.legacyExpectedPath, expected); - this.testInfo.attachments.push({ name: addSuffixToFilePath(this.outputBaseName, '-expected'), contentType: this.mimeType, path: this.snapshotPath }); - output.push(`\nExpected: ${colors.yellow(this.snapshotPath)}`); + this.testInfo.attachments.push({ name: addSuffixToFilePath(this.attachmentBaseName, '-expected'), contentType: this.mimeType, path: this.expectedPath }); + output.push(`\nExpected: ${colors.yellow(this.expectedPath)}`); } if (previous !== undefined) { writeFileSync(this.previousPath, previous); - this.testInfo.attachments.push({ name: addSuffixToFilePath(this.outputBaseName, '-previous'), contentType: this.mimeType, path: this.previousPath }); + this.testInfo.attachments.push({ name: addSuffixToFilePath(this.attachmentBaseName, '-previous'), contentType: this.mimeType, path: this.previousPath }); output.push(`Previous: ${colors.yellow(this.previousPath)}`); } if (actual !== undefined) { writeFileSync(this.actualPath, actual); - this.testInfo.attachments.push({ name: addSuffixToFilePath(this.outputBaseName, '-actual'), contentType: this.mimeType, path: this.actualPath }); + this.testInfo.attachments.push({ name: addSuffixToFilePath(this.attachmentBaseName, '-actual'), contentType: this.mimeType, path: this.actualPath }); output.push(`Received: ${colors.yellow(this.actualPath)}`); } if (diff !== undefined) { writeFileSync(this.diffPath, diff); - this.testInfo.attachments.push({ name: addSuffixToFilePath(this.outputBaseName, '-diff'), contentType: this.mimeType, path: this.diffPath }); + this.testInfo.attachments.push({ name: addSuffixToFilePath(this.attachmentBaseName, '-diff'), contentType: this.mimeType, path: this.diffPath }); output.push(` Diff: ${colors.yellow(this.diffPath)}`); } @@ -311,25 +313,25 @@ export function toMatchSnapshot( configOptions, nameOrOptions, optOptions); if (this.isNot) { - if (!fs.existsSync(helper.snapshotPath)) + if (!fs.existsSync(helper.expectedPath)) return helper.handleMissingNegated(); - const isDifferent = !!helper.comparator(received, fs.readFileSync(helper.snapshotPath), helper.options); + const isDifferent = !!helper.comparator(received, fs.readFileSync(helper.expectedPath), helper.options); return isDifferent ? helper.handleDifferentNegated() : helper.handleMatchingNegated(); } - if (!fs.existsSync(helper.snapshotPath)) + if (!fs.existsSync(helper.expectedPath)) return helper.handleMissing(received); - const expected = fs.readFileSync(helper.snapshotPath); + const expected = fs.readFileSync(helper.expectedPath); const result = helper.comparator(received, expected, helper.options); if (!result) return helper.handleMatching(); if (helper.updateSnapshots === 'all') { - writeFileSync(helper.snapshotPath, received); + writeFileSync(helper.expectedPath, received); /* eslint-disable no-console */ - console.log(helper.snapshotPath + ' does not match, writing actual.'); - return helper.createMatcherResult(helper.snapshotPath + ' running with --update-snapshots, writing actual.', true); + console.log(helper.expectedPath + ' does not match, writing actual.'); + return helper.createMatcherResult(helper.expectedPath + ' running with --update-snapshots, writing actual.', true); } return helper.handleDifferent(received, expected, undefined, result.diff, result.errorMessage, undefined); @@ -364,8 +366,8 @@ export async function toHaveScreenshot( const [page, locator] = pageOrLocator.constructor.name === 'Page' ? [(pageOrLocator as PageEx), undefined] : [(pageOrLocator as Locator).page() as PageEx, pageOrLocator as Locator]; const configOptions = testInfo._projectInternal.expect?.toHaveScreenshot || {}; const helper = new SnapshotHelper(testInfo, 'toHaveScreenshot', locator, 'png', configOptions, nameOrOptions, optOptions); - if (!helper.snapshotPath.toLowerCase().endsWith('.png')) - throw new Error(`Screenshot name "${path.basename(helper.snapshotPath)}" must have '.png' extension`); + if (!helper.expectedPath.toLowerCase().endsWith('.png')) + throw new Error(`Screenshot name "${path.basename(helper.expectedPath)}" must have '.png' extension`); expectTypes(pageOrLocator, ['Page', 'Locator'], 'toHaveScreenshot'); const style = await loadScreenshotStyles(helper.options.stylePath); const expectScreenshotOptions: ExpectScreenshotOptions = { @@ -387,7 +389,7 @@ export async function toHaveScreenshot( threshold: helper.options.threshold, }; - const hasSnapshot = fs.existsSync(helper.snapshotPath); + const hasSnapshot = fs.existsSync(helper.expectedPath); if (this.isNot) { if (!hasSnapshot) return helper.handleMissingNegated(); @@ -395,14 +397,14 @@ export async function toHaveScreenshot( // Having `errorMessage` means we timed out while waiting // for screenshots not to match, so screenshots // are actually the same in the end. - expectScreenshotOptions.expected = await fs.promises.readFile(helper.snapshotPath); + expectScreenshotOptions.expected = await fs.promises.readFile(helper.expectedPath); const isDifferent = !(await page._expectScreenshot(expectScreenshotOptions)).errorMessage; return isDifferent ? helper.handleDifferentNegated() : helper.handleMatchingNegated(); } // Fast path: there's no screenshot and we don't intend to update it. if (helper.updateSnapshots === 'none' && !hasSnapshot) - return helper.createMatcherResult(`A snapshot doesn't exist at ${helper.snapshotPath}.`, false); + return helper.createMatcherResult(`A snapshot doesn't exist at ${helper.expectedPath}.`, false); if (!hasSnapshot) { // Regenerate a new screenshot by waiting until two screenshots are the same. @@ -420,18 +422,18 @@ export async function toHaveScreenshot( // - snapshot exists // - regular matcher (i.e. not a `.not`) // - perhaps an 'all' flag to update non-matching screenshots - expectScreenshotOptions.expected = await fs.promises.readFile(helper.snapshotPath); + expectScreenshotOptions.expected = await fs.promises.readFile(helper.expectedPath); const { actual, diff, errorMessage, log } = await page._expectScreenshot(expectScreenshotOptions); if (!errorMessage) return helper.handleMatching(); if (helper.updateSnapshots === 'all') { - writeFileSync(helper.snapshotPath, actual!); + writeFileSync(helper.expectedPath, actual!); writeFileSync(helper.actualPath, actual!); /* eslint-disable no-console */ - console.log(helper.snapshotPath + ' is re-generated, writing actual.'); - return helper.createMatcherResult(helper.snapshotPath + ' running with --update-snapshots, writing actual.', true); + console.log(helper.expectedPath + ' is re-generated, writing actual.'); + return helper.createMatcherResult(helper.expectedPath + ' running with --update-snapshots, writing actual.', true); } return helper.handleDifferent(actual, expectScreenshotOptions.expected, undefined, diff, errorMessage, log); diff --git a/tests/playwright-test/golden.spec.ts b/tests/playwright-test/golden.spec.ts index 41cdb9da5a..205eeee7f0 100644 --- a/tests/playwright-test/golden.spec.ts +++ b/tests/playwright-test/golden.spec.ts @@ -145,7 +145,7 @@ test('should generate separate actual results for repeating names', async ({ run { 'name': 'bar/baz-actual.txt', 'contentType': 'text/plain', - 'path': 'test-results/a-is-a-test/bar-baz-actual.txt' + 'path': 'test-results/a-is-a-test/bar/baz-actual.txt' }, { 'name': 'bar/baz-1-expected.txt', @@ -155,7 +155,7 @@ test('should generate separate actual results for repeating names', async ({ run { 'name': 'bar/baz-1-actual.txt', 'contentType': 'text/plain', - 'path': 'test-results/a-is-a-test/bar-baz-1-actual.txt' + 'path': 'test-results/a-is-a-test/bar/baz-1-actual.txt' } ]); }); @@ -977,12 +977,12 @@ test('should attach expected/actual/diff with snapshot path', async ({ runInline { name: 'test/path/snapshot-actual.png', contentType: 'image/png', - path: 'a-is-a-test/test-path-snapshot-actual.png' + path: 'a-is-a-test/test/path/snapshot-actual.png' }, { name: 'test/path/snapshot-diff.png', contentType: 'image/png', - path: 'a-is-a-test/test-path-snapshot-diff.png' + path: 'a-is-a-test/test/path/snapshot-diff.png' } ]); }); diff --git a/tests/playwright-test/to-have-screenshot.spec.ts b/tests/playwright-test/to-have-screenshot.spec.ts index 07fb590375..39044e460a 100644 --- a/tests/playwright-test/to-have-screenshot.spec.ts +++ b/tests/playwright-test/to-have-screenshot.spec.ts @@ -1320,3 +1320,49 @@ function playwrightConfig(obj: any) { `, }; } + +test('should trim+sanitize attachment names and paths', async ({ runInlineTest }, testInfo) => { + const result = await runInlineTest({ + ...playwrightConfig({ + snapshotPathTemplate: '__screenshots__/{testFilePath}/{arg}{ext}', + }), + 'a.spec.js': ` + const { test, expect } = require('@playwright/test'); + test.afterEach(async ({}, testInfo) => { + console.log('## ' + JSON.stringify(testInfo.attachments)); + }); + const title = 'long '.repeat(30) + 'title'; + test(title, async ({ page }) => { + await expect.soft(page).toHaveScreenshot(); + const name = 'long '.repeat(30) + 'name.png'; + await expect.soft(page).toHaveScreenshot(name); + await expect.soft(page).toHaveScreenshot(['dir', name]); + }); + ` + }); + + expect(result.exitCode).toBe(1); + const attachments = result.output.split('\n').filter(l => l.startsWith('## ')).map(l => l.substring(3)).map(l => JSON.parse(l))[0]; + for (const attachment of attachments) { + attachment.path = attachment.path.replace(testInfo.outputDir, '').substring(1).replace(/\\/g, '/'); + attachment.name = attachment.name.replace(/\\/g, '/'); + } + expect(attachments).toEqual([ + { + name: 'long-long-long-long-long-l-852e1-long-long-long-long-title-1-actual.png', + contentType: 'image/png', + path: 'test-results/a-long-long-long-long-long-abd51-g-long-long-long-long-title/long-long-long-long-long-l-852e1-long-long-long-long-title-1-actual.png', + }, + { + name: 'long-long-long-long-long-l-6bf1e-ong-long-long-long-name-actual.png', + contentType: 'image/png', + path: 'test-results/a-long-long-long-long-long-abd51-g-long-long-long-long-title/long-long-long-long-long-l-6bf1e-ong-long-long-long-name-actual.png', + }, + { + name: 'dir/long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long name-actual.png', + contentType: 'image/png', + path: 'test-results/a-long-long-long-long-long-abd51-g-long-long-long-long-title/dir/long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long name-actual.png', + }, + ]); +}); + From 3f15fe8518b1c0bfded61f902300a267b44a4530 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Wed, 17 Jul 2024 09:30:49 -0700 Subject: [PATCH 081/498] feat(reporter): links in attachment names, attachments name only (#31714) * Allow calling `test.info().attach('My text');` without options (no path nor body). * Highlight links in attachment names: image Fixes https://github.com/microsoft/playwright/issues/31284 --- packages/html-reporter/src/links.tsx | 2 +- .../html-reporter/src/testCaseView.spec.tsx | 12 +++++++++++- packages/playwright/src/reporters/base.ts | 2 +- packages/playwright/src/util.ts | 2 ++ .../reporter-attachment.spec.ts | 19 +++++++++++++++++-- 5 files changed, 32 insertions(+), 5 deletions(-) diff --git a/packages/html-reporter/src/links.tsx b/packages/html-reporter/src/links.tsx index 4ddaf20a91..42b9f9b5b9 100644 --- a/packages/html-reporter/src/links.tsx +++ b/packages/html-reporter/src/links.tsx @@ -78,7 +78,7 @@ export const AttachmentLink: React.FunctionComponent<{ return {attachment.contentType === kMissingContentType ? icons.warning() : icons.attachment()} {attachment.path && {linkName || attachment.name}} - {attachment.body && {linkifyText(attachment.name)}} + {!attachment.path && {linkifyText(attachment.name)}}
} loadChildren={attachment.body ? () => { return [
{linkifyText(attachment.body!)}
]; } : undefined} depth={0} style={{ lineHeight: '32px' }}>; diff --git a/packages/html-reporter/src/testCaseView.spec.tsx b/packages/html-reporter/src/testCaseView.spec.tsx index d73407582d..624a93805f 100644 --- a/packages/html-reporter/src/testCaseView.spec.tsx +++ b/packages/html-reporter/src/testCaseView.spec.tsx @@ -132,6 +132,9 @@ const resultWithAttachment: TestResult = { name: 'first attachment', body: 'The body with https://playwright.dev/docs/intro link and https://github.com/microsoft/playwright/issues/31284.', contentType: 'text/plain' + }, { + name: 'attachment with inline link https://github.com/microsoft/playwright/issues/31284', + contentType: 'text/plain' }], status: 'passed', }; @@ -157,4 +160,11 @@ test('should correctly render links in attachments', async ({ mount }) => { await expect(body).toBeVisible(); await expect(body.locator('a').filter({ hasText: 'playwright.dev' })).toHaveAttribute('href', 'https://playwright.dev/docs/intro'); await expect(body.locator('a').filter({ hasText: 'github.com' })).toHaveAttribute('href', 'https://github.com/microsoft/playwright/issues/31284'); -}); \ No newline at end of file +}); + +test('should correctly render links in attachment name', async ({ mount }) => { + const component = await mount(); + const link = component.getByText('attachment with inline link').locator('a'); + await expect(link).toHaveAttribute('href', 'https://github.com/microsoft/playwright/issues/31284'); + await expect(link).toHaveText('https://github.com/microsoft/playwright/issues/31284'); +}); diff --git a/packages/playwright/src/reporters/base.ts b/packages/playwright/src/reporters/base.ts index e4575a8627..c9ce2f7bcd 100644 --- a/packages/playwright/src/reporters/base.ts +++ b/packages/playwright/src/reporters/base.ts @@ -319,7 +319,7 @@ export function formatFailure(config: FullConfig, test: TestCase, options: {inde if (includeAttachments) { for (let i = 0; i < result.attachments.length; ++i) { const attachment = result.attachments[i]; - const hasPrintableContent = attachment.contentType.startsWith('text/') && attachment.body; + const hasPrintableContent = attachment.contentType.startsWith('text/'); if (!attachment.path && !hasPrintableContent) continue; resultLines.push(''); diff --git a/packages/playwright/src/util.ts b/packages/playwright/src/util.ts index d6cabd07c6..a4ddce7a3b 100644 --- a/packages/playwright/src/util.ts +++ b/packages/playwright/src/util.ts @@ -256,6 +256,8 @@ export function resolveReporterOutputPath(defaultValue: string, configDir: strin } export async function normalizeAndSaveAttachment(outputPath: string, name: string, options: { path?: string, body?: string | Buffer, contentType?: string } = {}): Promise<{ name: string; path?: string | undefined; body?: Buffer | undefined; contentType: string; }> { + if (options.path === undefined && options.body === undefined) + return { name, contentType: 'text/plain' }; if ((options.path !== undefined ? 1 : 0) + (options.body !== undefined ? 1 : 0) !== 1) throw new Error(`Exactly one of "path" and "body" must be specified`); if (options.path !== undefined) { diff --git a/tests/playwright-test/reporter-attachment.spec.ts b/tests/playwright-test/reporter-attachment.spec.ts index fd938be437..50d6d1ee0c 100644 --- a/tests/playwright-test/reporter-attachment.spec.ts +++ b/tests/playwright-test/reporter-attachment.spec.ts @@ -99,8 +99,8 @@ test(`testInfo.attach errors`, async ({ runInlineTest }) => { const text = result.output.replace(/\\/g, '/'); expect(text).toMatch(/Error: ENOENT: no such file or directory, copyfile '.*foo.txt.*'/); expect(text).toContain(`Exactly one of "path" and "body" must be specified`); - expect(result.passed).toBe(0); - expect(result.failed).toBe(3); + expect(result.passed).toBe(1); + expect(result.failed).toBe(2); expect(result.exitCode).toBe(1); }); @@ -175,6 +175,21 @@ test(`testInfo.attach allow empty string body`, async ({ runInlineTest }) => { expect(result.output).toMatch(/^.*attachment #1: name \(text\/plain\).*\n.*\n.*──────/gm); }); +test(`testInfo.attach allow without options`, async ({ runInlineTest }) => { + const result = await runInlineTest({ + 'a.test.ts': ` + import { test, expect } from '@playwright/test'; + test('success', async ({}, testInfo) => { + await testInfo.attach('Full name'); + expect(0).toBe(1); + }); + `, + }); + expect(result.exitCode).toBe(1); + expect(result.failed).toBe(1); + expect(result.output).toMatch(/^.*attachment #1: Full name \(text\/plain\).*\n.*──────/gm); +}); + test(`testInfo.attach allow empty buffer body`, async ({ runInlineTest }) => { const result = await runInlineTest({ 'a.test.ts': ` From 3cb41739a03f2e213b10d9ed32f17d6a4aab9f11 Mon Sep 17 00:00:00 2001 From: Playwright Service <89237858+playwrightmachine@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:33:47 -0700 Subject: [PATCH 082/498] feat(firefox-beta): roll to r1457 (#31733) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- packages/playwright-core/browsers.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/playwright-core/browsers.json b/packages/playwright-core/browsers.json index 1f00780f4f..d7abe551c1 100644 --- a/packages/playwright-core/browsers.json +++ b/packages/playwright-core/browsers.json @@ -21,9 +21,9 @@ }, { "name": "firefox-beta", - "revision": "1456", + "revision": "1457", "installByDefault": false, - "browserVersion": "128.0b3" + "browserVersion": "129.0b2" }, { "name": "webkit", From e06481a33254fc7e8d94cf891dcdd0b5c7eb5acc Mon Sep 17 00:00:00 2001 From: Matt Kleinsmith <8968171+MattKleinsmith@users.noreply.github.com> Date: Wed, 17 Jul 2024 11:45:48 -0700 Subject: [PATCH 083/498] fix(recorder): address custom context menus (#31634) --- .../src/server/injected/recorder/recorder.ts | 22 ++++++++ tests/library/inspector/cli-codegen-3.spec.ts | 54 +++++++++++++++++++ tests/library/inspector/inspectorTest.ts | 6 +-- 3 files changed, 79 insertions(+), 3 deletions(-) diff --git a/packages/playwright-core/src/server/injected/recorder/recorder.ts b/packages/playwright-core/src/server/injected/recorder/recorder.ts index 4cfa512a4f..116fca63bc 100644 --- a/packages/playwright-core/src/server/injected/recorder/recorder.ts +++ b/packages/playwright-core/src/server/injected/recorder/recorder.ts @@ -259,6 +259,28 @@ class RecordActionTool implements RecorderTool { }); } + onContextMenu(event: MouseEvent) { + // the 'contextmenu' event is triggered by a right-click or equivalent action, + // and it prevents the click event from firing for that action, so we always + // convert 'contextmenu' into a right-click. + if (this._shouldIgnoreMouseEvent(event)) + return; + if (this._actionInProgress(event)) + return; + if (this._consumedDueToNoModel(event, this._hoveredModel)) + return; + + this._performAction({ + name: 'click', + selector: this._hoveredModel!.selector, + position: positionForEvent(event), + signals: [], + button: 'right', + modifiers: 0, + clickCount: 0 + }); + } + onPointerDown(event: PointerEvent) { if (this._shouldIgnoreMouseEvent(event)) return; diff --git a/tests/library/inspector/cli-codegen-3.spec.ts b/tests/library/inspector/cli-codegen-3.spec.ts index 2c0fff974a..8ad14c87b9 100644 --- a/tests/library/inspector/cli-codegen-3.spec.ts +++ b/tests/library/inspector/cli-codegen-3.spec.ts @@ -559,6 +559,60 @@ await page.GetByLabel("Coun\\"try").ClickAsync();`); ]); }); + test('should consume contextmenu events, despite a custom context menu', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + + await recorder.setContentAndWait(` + + + + `); + + await recorder.hoverOverElement('button'); + expect(await page.evaluate('log')).toEqual(['button: pointermove', 'button: mousemove']); + + const [message] = await Promise.all([ + page.waitForEvent('console', msg => msg.type() !== 'error'), + recorder.waitForOutput('JavaScript', `button: 'right'`), + recorder.trustedClick({ button: 'right' }), + ]); + expect(message.text()).toBe('right-clicked'); + expect(await page.evaluate('log')).toEqual([ + // hover + 'button: pointermove', + 'button: mousemove', + // trusted right click + 'button: pointerup', + 'button: pointermove', + 'button: mousemove', + 'button: pointerdown', + 'button: mousedown', + 'button: contextmenu', + 'menu: pointerup', + 'menu: mouseup' + ]); + }); + test('should assert value', async ({ openRecorder }) => { const recorder = await openRecorder(); diff --git a/tests/library/inspector/inspectorTest.ts b/tests/library/inspector/inspectorTest.ts index 1d5e30825a..6ebbc1fdd1 100644 --- a/tests/library/inspector/inspectorTest.ts +++ b/tests/library/inspector/inspectorTest.ts @@ -186,9 +186,9 @@ class Recorder { await this.page.mouse.move(box.x + box.width / 2, box.y + box.height / 2); } - async trustedClick() { - await this.page.mouse.down(); - await this.page.mouse.up(); + async trustedClick(options?: { button?: 'left' | 'right' | 'middle' }) { + await this.page.mouse.down(options); + await this.page.mouse.up(options); } async focusElement(selector: string): Promise { From 6491e5b415a7abc72706450f463286277db7fd1f Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Thu, 18 Jul 2024 00:19:08 -0700 Subject: [PATCH 084/498] chore: deprecate/remove noWaitAfter from some actions (#31739) The following actions keep `noWaitAfter` option: `click`, `selectOption` and `press`. All other actions that used to have `noWaitAfter` now behave like it was set to true, not waiting for follow-up navigations. In the docs, this option is marked as completely ignored. A small logic change was made to compensate for this behavior: when waiting for the `hitTargetInterceptor`, we now race it against navigations to avoid stalling when navigation stalls. Previously, waiting for the interceptor was disabled when `noWaitAfter` was passed, and since it's impossible to pass this option now, we mitigate by never stalling instead. Fixes #31469. --- docs/src/api/class-elementhandle.md | 25 +- docs/src/api/class-filechooser.md | 2 +- docs/src/api/class-frame.md | 26 +- docs/src/api/class-locator.md | 31 +-- docs/src/api/class-page.md | 27 +- docs/src/api/params.md | 7 + .../playwright-core/src/protocol/validator.ts | 17 -- packages/playwright-core/src/server/dom.ts | 163 +++++------ packages/playwright-core/src/server/frames.ts | 35 +-- packages/playwright-core/src/server/types.ts | 8 +- packages/playwright-core/types/types.d.ts | 253 +++++++----------- packages/protocol/src/channels.ts | 34 --- packages/protocol/src/protocol.yml | 17 -- tests/library/tap.spec.ts | 27 +- tests/page/locator-misc-1.spec.ts | 10 - tests/page/page-autowaiting-basic.spec.ts | 4 +- tests/page/page-mouse.spec.ts | 10 - 17 files changed, 258 insertions(+), 438 deletions(-) diff --git a/docs/src/api/class-elementhandle.md b/docs/src/api/class-elementhandle.md index 24b8bb2b6f..1793798c8c 100644 --- a/docs/src/api/class-elementhandle.md +++ b/docs/src/api/class-elementhandle.md @@ -164,7 +164,6 @@ This method checks the element by performing the following steps: 1. Wait for [actionability](../actionability.md) checks on the element, unless [`option: force`] option is set. 1. Scroll the element into view if needed. 1. Use [`property: Page.mouse`] to click in the center of the element. -1. Wait for initiated navigations to either succeed or fail, unless [`option: noWaitAfter`] option is set. 1. Ensure that the element is now checked. If not, this method throws. If the element is detached from the DOM at any moment during the action, this method throws. @@ -178,7 +177,7 @@ When all steps combined have not finished during the specified [`option: timeout ### option: ElementHandle.check.force = %%-input-force-%% * since: v1.8 -### option: ElementHandle.check.noWaitAfter = %%-input-no-wait-after-%% +### option: ElementHandle.check.noWaitAfter = %%-input-no-wait-after-removed-%% * since: v1.8 ### option: ElementHandle.check.timeout = %%-input-timeout-%% @@ -251,8 +250,6 @@ This method double clicks the element by performing the following steps: 1. Wait for [actionability](../actionability.md) checks on the element, unless [`option: force`] option is set. 1. Scroll the element into view if needed. 1. Use [`property: Page.mouse`] to double click in the center of the element, or the specified [`option: position`]. -1. Wait for initiated navigations to either succeed or fail, unless [`option: noWaitAfter`] option is set. Note that - if the first click of the `dblclick()` triggers a navigation event, this method will throw. If the element is detached from the DOM at any moment during the action, this method throws. @@ -278,7 +275,7 @@ When all steps combined have not finished during the specified [`option: timeout ### option: ElementHandle.dblclick.force = %%-input-force-%% * since: v1.8 -### option: ElementHandle.dblclick.noWaitAfter = %%-input-no-wait-after-%% +### option: ElementHandle.dblclick.noWaitAfter = %%-input-no-wait-after-removed-%% * since: v1.8 ### option: ElementHandle.dblclick.timeout = %%-input-timeout-%% @@ -537,7 +534,7 @@ Value to set for the ``, `'); + await expect(page.locator('input')).toBeChecked(); + await expect(page.locator('input')).toBeDisabled(); + await expect(page.locator('textarea')).not.toBeEditable(); + await expect(page.locator('span')).toBeEmpty(); + await expect(page.locator('button')).not.toBeEnabled(); + await expect(page.locator('button')).toBeFocused(); + await expect(page.locator('span')).toBeHidden(); + await expect(page.locator('div')).not.toBeInViewport(); + await expect(page.locator('div')).not.toBeVisible(); + await expect(page.locator('span')).toContainText('World'); + await expect(page.locator('span')).toHaveAccessibleDescription('World'); + await expect(page.locator('span')).toHaveAccessibleName('World'); + await expect(page.locator('span')).toHaveAttribute('name', 'value'); + await expect(page.locator('span')).toHaveAttribute('name'); + await expect(page.locator('span')).toHaveClass('name'); + await expect(page.locator('span')).toHaveCount(2); + await expect(page.locator('span')).toHaveCSS('width', '10'); + await expect(page.locator('span')).toHaveId('id'); + await expect(page.locator('span')).toHaveJSProperty('name', 'value'); + await expect(page.locator('span')).toHaveRole('role'); + await expect(page.locator('span')).toHaveText('World'); + await expect(page.locator('textarea')).toHaveValue('value'); + await expect(page.locator('select')).toHaveValues(['value']); + }); + ` + }, { }); + expect(result.exitCode).toBe(1); + + const { errors } = result.report.suites[0].specs[0].tests[0].results[0]; + const matcherResults = errors.map(e => e.matcherResult); + expect(matcherResults).toEqual([ + { name: 'toBeChecked', pass: false, expected: 'checked', actual: 'unchecked', timeout: 1 }, + { name: 'toBeDisabled', pass: false, expected: 'disabled', actual: 'enabled', timeout: 1 }, + { name: 'toBeEditable', pass: true, expected: 'editable', actual: 'editable', timeout: 1 }, + { name: 'toBeEmpty', pass: false, expected: 'empty', actual: 'notEmpty', timeout: 1 }, + { name: 'toBeEnabled', pass: true, expected: 'enabled', actual: 'enabled', timeout: 1 }, + { name: 'toBeFocused', pass: false, expected: 'focused', actual: 'inactive', timeout: 1 }, + { name: 'toBeHidden', pass: false, expected: 'hidden', actual: 'visible', timeout: 1 }, + { name: 'toBeInViewport', pass: true, expected: 'in viewport', actual: 'in viewport', timeout: 1 }, + { name: 'toBeVisible', pass: true, expected: 'visible', actual: 'visible', timeout: 1 }, + { name: 'toContainText', pass: false, expected: 'World', actual: 'Hello', timeout: 1 }, + { name: 'toHaveAccessibleDescription', pass: false, expected: 'World', actual: '', timeout: 1 }, + { name: 'toHaveAccessibleName', pass: false, expected: 'World', actual: '', timeout: 1 }, + { name: 'toHaveAttribute', pass: false, expected: 'value', actual: null, timeout: 1 }, + { name: 'toHaveAttribute', pass: false, expected: 'have attribute', actual: 'not have attribute', timeout: 1 }, + { name: 'toHaveClass', pass: false, expected: 'name', actual: '', timeout: 1 }, + { name: 'toHaveCount', pass: false, expected: 2, actual: 1, timeout: 1 }, + { name: 'toHaveCSS', pass: false, expected: '10', actual: 'auto', timeout: 1 }, + { name: 'toHaveId', pass: false, expected: 'id', actual: '', timeout: 1 }, + { name: 'toHaveJSProperty', pass: false, expected: 'value', timeout: 1 }, + { name: 'toHaveRole', pass: false, expected: 'role', actual: '', timeout: 1 }, + { name: 'toHaveText', pass: false, expected: 'World', actual: 'Hello', timeout: 1 }, + { name: 'toHaveValue', pass: false, expected: 'value', actual: '', timeout: 1 }, + { name: 'toHaveValues', pass: false, expected: ['value'], actual: [], timeout: 1 }, + ]); +}); diff --git a/utils/generate_types/overrides-test.d.ts b/utils/generate_types/overrides-test.d.ts index 8494671c76..90ef7fa75a 100644 --- a/utils/generate_types/overrides-test.d.ts +++ b/utils/generate_types/overrides-test.d.ts @@ -384,6 +384,7 @@ export type MatcherReturnType = { expected?: unknown; actual?: any; log?: string[]; + timeout?: number; }; type MakeMatchers = { diff --git a/utils/generate_types/overrides-testReporter.d.ts b/utils/generate_types/overrides-testReporter.d.ts index 51eab7e370..0b81724373 100644 --- a/utils/generate_types/overrides-testReporter.d.ts +++ b/utils/generate_types/overrides-testReporter.d.ts @@ -105,6 +105,7 @@ export interface JSONReportTest { export interface JSONReportError { message: string; location?: Location; + matcherResult?: TestErrorMatcherResult; } export interface JSONReportTestResult { From 5d4a65b31835fcec13fccb84f703f92606a20b0d Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 6 Sep 2024 10:28:17 +0200 Subject: [PATCH 372/498] docs: update release notes for 1.47 to our changes from yesterday (#32482) I'll also cherry-pick this into the release branch and update playwright.dev. --- docs/src/release-notes-csharp.md | 10 +++++----- docs/src/release-notes-java.md | 10 +++++----- docs/src/release-notes-js.md | 10 +++++----- docs/src/release-notes-python.md | 10 +++++----- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/src/release-notes-csharp.md b/docs/src/release-notes-csharp.md index f4532376de..6c357ba3b5 100644 --- a/docs/src/release-notes-csharp.md +++ b/docs/src/release-notes-csharp.md @@ -8,14 +8,14 @@ toc_max_heading_level: 2 ### Network Tab improvements -The Network tab in the trace viewer now allows searching and filtering by asset type: +The Network tab in the trace viewer has several nice improvements: + +- filtering by asset type and URL +- better display of query string parameters +- preview of font assets ![Network tab now has filters](https://github.com/user-attachments/assets/4bd1b67d-90bd-438b-a227-00b9e86872e2) -And for fonts, it now shows a nice preview: - -![Font requests have a preview now](https://github.com/user-attachments/assets/769d64cc-cdcb-421d-9849-227d2f874d1f) - ### Miscellaneous - The `mcr.microsoft.com/playwright-dotnet:v1.47.0` now serves a Playwright image based on Ubuntu 24.04 Noble. diff --git a/docs/src/release-notes-java.md b/docs/src/release-notes-java.md index 4eab504435..2b9789e8bc 100644 --- a/docs/src/release-notes-java.md +++ b/docs/src/release-notes-java.md @@ -8,14 +8,14 @@ toc_max_heading_level: 2 ### Network Tab improvements -The Network tab in the trace viewer now allows searching and filtering by asset type: +The Network tab in the trace viewer has several nice improvements: + +- filtering by asset type and URL +- better display of query string parameters +- preview of font assets ![Network tab now has filters](https://github.com/user-attachments/assets/4bd1b67d-90bd-438b-a227-00b9e86872e2) -And for fonts, it now shows a nice preview: - -![Font requests have a preview now](https://github.com/user-attachments/assets/769d64cc-cdcb-421d-9849-227d2f874d1f) - ### Miscellaneous - The `mcr.microsoft.com/playwright-java:v1.47.0` now serves a Playwright image based on Ubuntu 24.04 Noble. diff --git a/docs/src/release-notes-js.md b/docs/src/release-notes-js.md index 386fa4abf8..a89b79c5ce 100644 --- a/docs/src/release-notes-js.md +++ b/docs/src/release-notes-js.md @@ -10,14 +10,14 @@ import LiteYouTube from '@site/src/components/LiteYouTube'; ### Network Tab improvements -The Network tab in the UI mode and trace viewer now allows searching and filtering by asset type: +The Network tab in the UI mode and trace viewer has several nice improvements: + +- filtering by asset type and URL +- better display of query string parameters +- preview of font assets ![Network tab now has filters](https://github.com/user-attachments/assets/4bd1b67d-90bd-438b-a227-00b9e86872e2) -And for fonts, it now shows a nice preview: - -![Font requests have a preview now](https://github.com/user-attachments/assets/769d64cc-cdcb-421d-9849-227d2f874d1f) - ### `--tsconfig` CLI option diff --git a/docs/src/release-notes-python.md b/docs/src/release-notes-python.md index 5fbf11873b..985c19d388 100644 --- a/docs/src/release-notes-python.md +++ b/docs/src/release-notes-python.md @@ -8,14 +8,14 @@ toc_max_heading_level: 2 ### Network Tab improvements -The Network tab in the trace viewer now allows searching and filtering by asset type: +The Network tab in the trace viewer has several nice improvements: + +- filtering by asset type and URL +- better display of query string parameters +- preview of font assets ![Network tab now has filters](https://github.com/user-attachments/assets/4bd1b67d-90bd-438b-a227-00b9e86872e2) -And for fonts, it now shows a nice preview: - -![Font requests have a preview now](https://github.com/user-attachments/assets/769d64cc-cdcb-421d-9849-227d2f874d1f) - ### Miscellaneous - The `mcr.microsoft.com/playwright-python:v1.47.0` now serves a Playwright image based on Ubuntu 24.04 Noble. From a8f67a42b8995d0e3f8dbf82ca755e93de7ee0b0 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Fri, 6 Sep 2024 11:27:35 +0200 Subject: [PATCH 373/498] docs(dotnet): fix wrong snippets (#32484) Fixes https://github.com/microsoft/playwright-dotnet/issues/2994 --- docs/src/api/class-pageassertions.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/src/api/class-pageassertions.md b/docs/src/api/class-pageassertions.md index 2dcd17b3ac..5e56907656 100644 --- a/docs/src/api/class-pageassertions.md +++ b/docs/src/api/class-pageassertions.md @@ -83,7 +83,7 @@ assertThat(page).not().hasURL("error"); ``` ```csharp -await Expect(Page).Not.ToHaveURL("error"); +await Expect(Page).Not.ToHaveURLAsync("error"); ``` ## async method: PageAssertions.NotToHaveTitle @@ -271,7 +271,7 @@ expect(page).to_have_title(re.compile(r".*checkout")) ``` ```csharp -await Expect(Page).ToHaveTitle("Playwright"); +await Expect(Page).ToHaveTitleAsync("Playwright"); ``` ### param: PageAssertions.toHaveTitle.titleOrRegExp @@ -320,7 +320,7 @@ expect(page).to_have_url(re.compile(".*checkout")) ``` ```csharp -await Expect(Page).ToHaveURL(new Regex(".*checkout")); +await Expect(Page).ToHaveURLAsync(new Regex(".*checkout")); ``` ### param: PageAssertions.toHaveURL.urlOrRegExp From 0e3f4736cc5f31823174e4b57c9c30ac2320d168 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 6 Sep 2024 11:35:20 +0200 Subject: [PATCH 374/498] fix(test runner): always show all projects in selection (#32450) Follow-up to https://github.com/microsoft/playwright/pull/32156#discussion_r1741628770, alternative solution to https://github.com/microsoft/playwright/pull/32425. Ensures we always show all projects in the watch mode project selector by performing the initial `listTests` without any filters, and using its result for the project selector. --- packages/playwright/src/runner/watchMode.ts | 6 ++++-- tests/playwright-test/watch.spec.ts | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/playwright/src/runner/watchMode.ts b/packages/playwright/src/runner/watchMode.ts index 924449adce..ba2c5a34e7 100644 --- a/packages/playwright/src/runner/watchMode.ts +++ b/packages/playwright/src/runner/watchMode.ts @@ -125,9 +125,11 @@ export async function runWatchModeLoop(configLocation: ConfigLocation, initialOp await testServerConnection.initialize({ interceptStdio: false, watchTestDirs: true }); await testServerConnection.runGlobalSetup({}); - const { report } = await testServerConnection.listTests({ locations: options.files, projects: options.projects, grep: options.grep }); + const { report } = await testServerConnection.listTests({}); teleSuiteUpdater.processListReport(report); + const projectNames = teleSuiteUpdater.rootSuite!.suites.map(s => s.title); + let lastRun: { type: 'changed' | 'regular' | 'failed', failedTestIds?: string[], dirtyTestIds?: string[] } = { type: 'regular' }; let result: FullResult['status'] = 'passed'; @@ -167,7 +169,7 @@ export async function runWatchModeLoop(configLocation: ConfigLocation, initialOp type: 'multiselect', name: 'selectedProjects', message: 'Select projects', - choices: teleSuiteUpdater.rootSuite!.suites.map(s => s.title), + choices: projectNames, }).catch(() => ({ selectedProjects: null })); if (!selectedProjects) continue; diff --git a/tests/playwright-test/watch.spec.ts b/tests/playwright-test/watch.spec.ts index 0dba9dd861..f4d1fd72ce 100644 --- a/tests/playwright-test/watch.spec.ts +++ b/tests/playwright-test/watch.spec.ts @@ -282,8 +282,8 @@ test('should respect file filter P', async ({ runWatchTest }) => { await testProcess.waitForOutput('Waiting for file changes.'); }); -test('should respect project filter C', async ({ runWatchTest }) => { - const testProcess = await runWatchTest({ +test('should respect project filter C', async ({ runWatchTest, writeFiles }) => { + const files = { 'playwright.config.ts': ` import { defineConfig } from '@playwright/test'; export default defineConfig({ projects: [{name: 'foo'}, {name: 'bar'}] }); @@ -292,9 +292,9 @@ test('should respect project filter C', async ({ runWatchTest }) => { import { test, expect } from '@playwright/test'; test('passes', () => {}); `, - }); + }; + const testProcess = await runWatchTest(files, { project: 'foo' }); await testProcess.waitForOutput('[foo] › a.test.ts:3:11 › passes'); - await testProcess.waitForOutput('[bar] › a.test.ts:3:11 › passes'); await testProcess.waitForOutput('Waiting for file changes.'); testProcess.clearOutput(); testProcess.write('c'); @@ -306,6 +306,16 @@ test('should respect project filter C', async ({ runWatchTest }) => { await testProcess.waitForOutput('npx playwright test --project foo #1'); await testProcess.waitForOutput('[foo] › a.test.ts:3:11 › passes'); expect(testProcess.output).not.toContain('[bar] › a.test.ts:3:11 › passes'); + + testProcess.clearOutput(); + + await writeFiles(files); // file change triggers listTests with project filter + await testProcess.waitForOutput('[foo] › a.test.ts:3:11 › passes'); + + testProcess.write('c'); + await testProcess.waitForOutput('Select projects'); + await testProcess.waitForOutput('foo'); + await testProcess.waitForOutput('bar'); // second selection should still show all }); test('should respect file filter P and split files', async ({ runWatchTest }) => { From ed303208b3750ac9662894fbeb5d655ae21b3f9c Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Fri, 6 Sep 2024 14:27:56 +0200 Subject: [PATCH 375/498] test: update to android-35 SDK (Android 15) (#32430) --- tests/android/webview.spec.ts | 4 ++++ tests/page/page-request-intercept.spec.ts | 3 ++- utils/avd_install.sh | 2 +- utils/avd_recreate.sh | 6 +++--- utils/avd_start.sh | 6 +++--- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/tests/android/webview.spec.ts b/tests/android/webview.spec.ts index 46e0e385a0..ca7a114bb1 100644 --- a/tests/android/webview.spec.ts +++ b/tests/android/webview.spec.ts @@ -16,6 +16,10 @@ import { androidTest as test, expect } from './androidTest'; +test.beforeEach(async ({ androidDevice }) => { + await androidDevice.shell('am force-stop com.google.android.googlequicksearchbox'); +}); + test.afterEach(async ({ androidDevice }) => { await androidDevice.shell('am force-stop org.chromium.webview_shell'); await androidDevice.shell('am force-stop com.android.chrome'); diff --git a/tests/page/page-request-intercept.spec.ts b/tests/page/page-request-intercept.spec.ts index 33516606e7..eb9baae47e 100644 --- a/tests/page/page-request-intercept.spec.ts +++ b/tests/page/page-request-intercept.spec.ts @@ -284,8 +284,9 @@ it('should fulfill popup main request using alias', async ({ page, server, isEle it('request.postData is not null when fetching FormData with a Blob', { annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/24077' } -}, async ({ server, page, browserName, isElectron, electronMajorVersion }) => { +}, async ({ server, page, browserName, isElectron, electronMajorVersion, isAndroid }) => { it.skip(isElectron && electronMajorVersion < 31); + it.fixme(isAndroid, 'postData is null for some reason'); it.fixme(browserName === 'webkit', 'The body is empty in WebKit when intercepting'); await page.goto(server.EMPTY_PAGE); await page.setContent(` diff --git a/utils/avd_install.sh b/utils/avd_install.sh index 6beb8bf43f..a0586d6936 100755 --- a/utils/avd_install.sh +++ b/utils/avd_install.sh @@ -24,7 +24,7 @@ echo Installing emulator... yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --install platform-tools emulator echo Installing platform SDK... -yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --install "platforms;android-33" +yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --install "platforms;android-35" echo Starting ADB... ${ANDROID_HOME}/platform-tools/adb devices diff --git a/utils/avd_recreate.sh b/utils/avd_recreate.sh index 0877e76ed1..81c3484907 100755 --- a/utils/avd_recreate.sh +++ b/utils/avd_recreate.sh @@ -13,7 +13,7 @@ if [[ "$(uname -m)" == "arm64" ]]; then ANDROID_ARCH="arm64-v8a" fi -${ANDROID_HOME}/cmdline-tools/latest/bin/avdmanager delete avd --name android33 || true -yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --install "system-images;android-33;google_apis;$ANDROID_ARCH" platform-tools emulator -echo "no" | ${ANDROID_HOME}/cmdline-tools/latest/bin/avdmanager create avd --force --name android33 --device "Nexus 5X" --package "system-images;android-33;google_apis;$ANDROID_ARCH" +${ANDROID_HOME}/cmdline-tools/latest/bin/avdmanager delete avd --name android35 || true +yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --install "system-images;android-35;google_apis;$ANDROID_ARCH" platform-tools emulator +echo "no" | ${ANDROID_HOME}/cmdline-tools/latest/bin/avdmanager create avd --force --name android35 --device "Nexus 5X" --package "system-images;android-35;google_apis;$ANDROID_ARCH" ${ANDROID_HOME}/emulator/emulator -list-avds diff --git a/utils/avd_start.sh b/utils/avd_start.sh index 67acb1c63e..1c3bc53418 100755 --- a/utils/avd_start.sh +++ b/utils/avd_start.sh @@ -9,15 +9,15 @@ fi bash $PWD/utils/avd_stop.sh echo "Starting emulator" -# nohup ${ANDROID_HOME}/emulator/emulator -avd android33 -gpu swiftshader & -nohup ${ANDROID_HOME}/emulator/emulator -avd android33 -no-audio -no-window -no-boot-anim -no-snapshot & +# nohup ${ANDROID_HOME}/emulator/emulator -avd android35 -gpu swiftshader & +nohup ${ANDROID_HOME}/emulator/emulator -avd android35 -no-audio -no-window -no-boot-anim -no-snapshot & ${ANDROID_HOME}/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 1; done; input keyevent 82' ${ANDROID_HOME}/platform-tools/adb devices echo "Emulator started" echo "Installing Chromium WebView" # See here for the latest revision: https://storage.googleapis.com/chromium-browser-snapshots/Android/LAST_CHANGE -CHROMIUM_ANDROID_REVISION="1190572" +CHROMIUM_ANDROID_REVISION="1340145" WEBVIEW_TMP_DIR="$(mktemp -d)" WEBVIEW_TMP_FILE="$WEBVIEW_TMP_DIR/chrome-android-zip" curl -s -o "${WEBVIEW_TMP_FILE}" "https://storage.googleapis.com/chromium-browser-snapshots/Android/${CHROMIUM_ANDROID_REVISION}/chrome-android.zip" From 3fe1263643b3b8590c63b0f4df677d174a626bc8 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 6 Sep 2024 16:24:33 +0200 Subject: [PATCH 376/498] feat(trace viewer): show Screenshot instead of Snapshot (#32248) Closes https://github.com/microsoft/playwright/issues/23964. Trace snapshots are a best-effort snapshots of the browser DOM, but we can't guarantee them to be exactly what the browser showed. One example of this is `canvas` elements, where you just can't see their contents. That makes snapshots useful, but not perfect. For those cases where the snapshot doesn't show everything, this PR introduces a new setting to show a screenshot instead. You won't be able to scroll or inspect the DOM or select a locator anymore. But if the snapshot was missing something, or displaying something wrong, you can now check the screenshot instead. --- packages/trace-viewer/src/entries.ts | 1 + packages/trace-viewer/src/snapshotServer.ts | 3 +- packages/trace-viewer/src/traceModernizer.ts | 1 + packages/trace-viewer/src/ui/inspectorTab.tsx | 6 ++- packages/trace-viewer/src/ui/modelUtil.ts | 6 +++ packages/trace-viewer/src/ui/snapshotTab.tsx | 38 +++++++++++++++---- packages/trace-viewer/src/ui/uiModeView.tsx | 3 ++ packages/trace-viewer/src/ui/workbench.tsx | 8 +++- packages/web/src/uiUtils.ts | 2 +- tests/config/traceViewerFixtures.ts | 6 +-- tests/library/trace-viewer.spec.ts | 30 +++++++++++++++ 11 files changed, 88 insertions(+), 16 deletions(-) diff --git a/packages/trace-viewer/src/entries.ts b/packages/trace-viewer/src/entries.ts index bca5751ab2..98d39927f7 100644 --- a/packages/trace-viewer/src/entries.ts +++ b/packages/trace-viewer/src/entries.ts @@ -41,6 +41,7 @@ export type ContextEntry = { }; export type PageEntry = { + pageId: string, screencastFrames: { sha1: string, timestamp: number, diff --git a/packages/trace-viewer/src/snapshotServer.ts b/packages/trace-viewer/src/snapshotServer.ts index b1dd371cb3..d41dcbdbbd 100644 --- a/packages/trace-viewer/src/snapshotServer.ts +++ b/packages/trace-viewer/src/snapshotServer.ts @@ -44,7 +44,8 @@ export class SnapshotServer { const snapshot = this._snapshot(pathname.substring('/snapshotInfo'.length), searchParams); return this._respondWithJson(snapshot ? { viewport: snapshot.viewport(), - url: snapshot.snapshot().frameUrl + url: snapshot.snapshot().frameUrl, + timestamp: snapshot.snapshot().timestamp, } : { error: 'No snapshot found' }); diff --git a/packages/trace-viewer/src/traceModernizer.ts b/packages/trace-viewer/src/traceModernizer.ts index b15ad527b0..7c6ff19ce6 100644 --- a/packages/trace-viewer/src/traceModernizer.ts +++ b/packages/trace-viewer/src/traceModernizer.ts @@ -58,6 +58,7 @@ export class TraceModernizer { let pageEntry = this._pageEntries.get(pageId); if (!pageEntry) { pageEntry = { + pageId, screencastFrames: [], }; this._pageEntries.set(pageId, pageEntry); diff --git a/packages/trace-viewer/src/ui/inspectorTab.tsx b/packages/trace-viewer/src/ui/inspectorTab.tsx index 7b3a90b709..ba37cf1bd1 100644 --- a/packages/trace-viewer/src/ui/inspectorTab.tsx +++ b/packages/trace-viewer/src/ui/inspectorTab.tsx @@ -17,7 +17,7 @@ import { CodeMirrorWrapper } from '@web/components/codeMirrorWrapper'; import type { Language } from '@web/components/codeMirrorWrapper'; import { ToolbarButton } from '@web/components/toolbarButton'; -import { copy } from '@web/uiUtils'; +import { copy, useSetting } from '@web/uiUtils'; import * as React from 'react'; import './sourceTab.css'; @@ -27,10 +27,12 @@ export const InspectorTab: React.FunctionComponent<{ highlightedLocator: string, setHighlightedLocator: (locator: string) => void, }> = ({ sdkLanguage, setIsInspecting, highlightedLocator, setHighlightedLocator }) => { + const [showScreenshot] = useSetting('screenshot-instead-of-snapshot', false); + return
Locator
- { + { // Updating text needs to go first - react can squeeze a render between the state updates. setHighlightedLocator(text); setIsInspecting(false); diff --git a/packages/trace-viewer/src/ui/modelUtil.ts b/packages/trace-viewer/src/ui/modelUtil.ts index c82cbc99a6..0c22d954f4 100644 --- a/packages/trace-viewer/src/ui/modelUtil.ts +++ b/packages/trace-viewer/src/ui/modelUtil.ts @@ -22,6 +22,7 @@ import type { ContextEntry, PageEntry } from '../entries'; import type { StackFrame } from '@protocol/channels'; const contextSymbol = Symbol('context'); +const pageSymbol = Symbol('page'); const nextInContextSymbol = Symbol('next'); const prevInListSymbol = Symbol('prev'); const eventsSymbol = Symbol('events'); @@ -148,6 +149,7 @@ function indexModel(context: ContextEntry) { for (let i = 0; i < context.actions.length; ++i) { const action = context.actions[i] as any; action[contextSymbol] = context; + action[pageSymbol] = context.pages.find(page => page.pageId === action.pageId); } let lastNonRouteAction = undefined; for (let i = context.actions.length - 1; i >= 0; i--) { @@ -356,6 +358,10 @@ export function prevInList(action: ActionTraceEvent): ActionTraceEvent { return (action as any)[prevInListSymbol]; } +export function pageForAction(action: ActionTraceEvent): PageEntry { + return (action as any)[pageSymbol]; +} + export function stats(action: ActionTraceEvent): { errors: number, warnings: number } { let errors = 0; let warnings = 0; diff --git a/packages/trace-viewer/src/ui/snapshotTab.tsx b/packages/trace-viewer/src/ui/snapshotTab.tsx index 4faa668677..229d9f8cef 100644 --- a/packages/trace-viewer/src/ui/snapshotTab.tsx +++ b/packages/trace-viewer/src/ui/snapshotTab.tsx @@ -17,10 +17,10 @@ import './snapshotTab.css'; import * as React from 'react'; import type { ActionTraceEvent } from '@trace/trace'; -import { context, prevInList } from './modelUtil'; +import { context, type MultiTraceModel, pageForAction, prevInList } from './modelUtil'; import { Toolbar } from '@web/components/toolbar'; import { ToolbarButton } from '@web/components/toolbarButton'; -import { clsx, useMeasure } from '@web/uiUtils'; +import { clsx, useMeasure, useSetting } from '@web/uiUtils'; import { InjectedScript } from '@injected/injectedScript'; import { Recorder } from '@injected/recorder/recorder'; import ConsoleAPI from '@injected/consoleApi'; @@ -30,8 +30,18 @@ import { locatorOrSelectorAsSelector } from '@isomorphic/locatorParser'; import { TabbedPaneTab } from '@web/components/tabbedPane'; import { BrowserFrame } from './browserFrame'; +function findClosest(items: T[], target: number) { + return items.find((item, index) => { + if (index === items.length - 1) + return true; + const next = items[index + 1]; + return Math.abs(item.timestamp - target) < Math.abs(next.timestamp - target); + }); +} + export const SnapshotTab: React.FunctionComponent<{ action: ActionTraceEvent | undefined, + model?: MultiTraceModel, sdkLanguage: Language, testIdAttributeName: string, isInspecting: boolean, @@ -39,9 +49,10 @@ export const SnapshotTab: React.FunctionComponent<{ highlightedLocator: string, setHighlightedLocator: (locator: string) => void, openPage?: (url: string, target?: string) => Window | any, -}> = ({ action, sdkLanguage, testIdAttributeName, isInspecting, setIsInspecting, highlightedLocator, setHighlightedLocator, openPage }) => { +}> = ({ action, model, sdkLanguage, testIdAttributeName, isInspecting, setIsInspecting, highlightedLocator, setHighlightedLocator, openPage }) => { const [measure, ref] = useMeasure(); const [snapshotTab, setSnapshotTab] = React.useState<'action'|'before'|'after'>('action'); + const [showScreenshotInsteadOfSnapshot] = useSetting('screenshot-instead-of-snapshot', false); type Snapshot = { action: ActionTraceEvent, snapshotName: string, point?: { x: number, y: number } }; const { snapshots } = React.useMemo(() => { @@ -90,7 +101,7 @@ export const SnapshotTab: React.FunctionComponent<{ const iframeRef0 = React.useRef(null); const iframeRef1 = React.useRef(null); - const [snapshotInfo, setSnapshotInfo] = React.useState({ viewport: kDefaultViewport, url: '' }); + const [snapshotInfo, setSnapshotInfo] = React.useState<{ viewport: typeof kDefaultViewport, url: string, timestamp?: number }>({ viewport: kDefaultViewport, url: '', timestamp: undefined }); const loadingRef = React.useRef({ iteration: 0, visibleIframe: 0 }); React.useEffect(() => { @@ -99,13 +110,14 @@ export const SnapshotTab: React.FunctionComponent<{ const newVisibleIframe = 1 - loadingRef.current.visibleIframe; loadingRef.current.iteration = thisIteration; - const newSnapshotInfo = { url: '', viewport: kDefaultViewport }; + const newSnapshotInfo = { url: '', viewport: kDefaultViewport, timestamp: undefined }; if (snapshotInfoUrl) { const response = await fetch(snapshotInfoUrl); const info = await response.json(); if (!info.error) { newSnapshotInfo.url = info.url; newSnapshotInfo.viewport = info.viewport; + newSnapshotInfo.timestamp = info.timestamp; } } @@ -154,6 +166,15 @@ export const SnapshotTab: React.FunctionComponent<{ y: (measure.height - snapshotContainerSize.height) / 2, }; + const page = action ? pageForAction(action) : undefined; + const screencastFrame = React.useMemo( + () => { + if (snapshotInfo.timestamp && page?.screencastFrames) + return findClosest(page.screencastFrames, snapshotInfo.timestamp); + }, + [page?.screencastFrames, snapshotInfo.timestamp] + ); + return
- setIsInspecting(!isInspecting)} /> + setIsInspecting(!isInspecting)} disabled={showScreenshotInsteadOfSnapshot} /> {['action', 'before', 'after'].map(tab => { return ; })}
- { + { if (!openPage) openPage = window.open; const win = openPage(popoutUrl || '', '_blank'); @@ -209,7 +230,8 @@ export const SnapshotTab: React.FunctionComponent<{ transform: `translate(${translate.x}px, ${translate.y}px) scale(${scale})`, }}> -
+ {(showScreenshotInsteadOfSnapshot && screencastFrame) && {`Screenshot ${renderTitle(snapshotTab)}`} src={`sha1/${screencastFrame.sha1}`} width={screencastFrame.width} height={screencastFrame.height} />} +
diff --git a/packages/trace-viewer/src/ui/uiModeView.tsx b/packages/trace-viewer/src/ui/uiModeView.tsx index 86e6bff80e..cad1c2eb58 100644 --- a/packages/trace-viewer/src/ui/uiModeView.tsx +++ b/packages/trace-viewer/src/ui/uiModeView.tsx @@ -107,6 +107,8 @@ export const UIModeView: React.FC<{}> = ({ const [updateSnapshots, setUpdateSnapshots] = React.useState(queryParams.updateSnapshots === 'all'); const [showRouteActions, setShowRouteActions] = useSetting('show-route-actions', true); const [darkMode, setDarkMode] = useDarkModeSetting(); + const [showScreenshot, setShowScreenshot] = useSetting('screenshot-instead-of-snapshot', false); + const inputRef = React.useRef(null); @@ -517,6 +519,7 @@ export const UIModeView: React.FC<{}> = ({ {settingsVisible && }
} diff --git a/packages/trace-viewer/src/ui/workbench.tsx b/packages/trace-viewer/src/ui/workbench.tsx index 491a8eac16..3565eb3850 100644 --- a/packages/trace-viewer/src/ui/workbench.tsx +++ b/packages/trace-viewer/src/ui/workbench.tsx @@ -73,6 +73,8 @@ export const Workbench: React.FunctionComponent<{ const [selectedTime, setSelectedTime] = React.useState(); const [sidebarLocation, setSidebarLocation] = useSetting<'bottom' | 'right'>('propertiesSidebarLocation', 'bottom'); const [showRouteActions, setShowRouteActions] = useSetting('show-route-actions', true); + const [showScreenshot, setShowScreenshot] = useSetting('screenshot-instead-of-snapshot', false); + const filteredActions = React.useMemo(() => { return (model?.actions || []).filter(action => showRouteActions || !isRouteAction(action)); @@ -299,7 +301,10 @@ export const Workbench: React.FunctionComponent<{ const settingsTab: TabbedPaneTabModel = { id: 'settings', title: 'Settings', - component: , + component: , }; return
@@ -325,6 +330,7 @@ export const Workbench: React.FunctionComponent<{ settingName='actionListSidebar' main={(name: string | undefined, defaultValue: S, title?: string): [S, React.Dispatch>] { +export function useSetting(name: string | undefined, defaultValue: S): [S, React.Dispatch>] { if (name) defaultValue = settings.getObject(name, defaultValue); const [value, setValue] = React.useState(defaultValue); diff --git a/tests/config/traceViewerFixtures.ts b/tests/config/traceViewerFixtures.ts index 7044e30a29..3b79a55e98 100644 --- a/tests/config/traceViewerFixtures.ts +++ b/tests/config/traceViewerFixtures.ts @@ -31,7 +31,7 @@ type BaseWorkerFixtures = { export type TraceViewerFixtures = { showTraceViewer: (trace: string[], options?: {host?: string, port?: number}) => Promise; - runAndTrace: (body: () => Promise) => Promise; + runAndTrace: (body: () => Promise, optsOverrides?: Parameters[0]) => Promise; }; class TraceViewerPage { @@ -127,9 +127,9 @@ export const traceViewerFixtures: Fixtures { - await use(async (body: () => Promise) => { + await use(async (body: () => Promise, optsOverrides = {}) => { const traceFile = testInfo.outputPath('trace.zip'); - await context.tracing.start({ snapshots: true, screenshots: true, sources: true }); + await context.tracing.start({ snapshots: true, screenshots: true, sources: true, ...optsOverrides }); await body(); await context.tracing.stop({ path: traceFile }); return showTraceViewer([traceFile]); diff --git a/tests/library/trace-viewer.spec.ts b/tests/library/trace-viewer.spec.ts index 4ebffc1f42..f8aaf9d0df 100644 --- a/tests/library/trace-viewer.spec.ts +++ b/tests/library/trace-viewer.spec.ts @@ -1465,3 +1465,33 @@ test('should serve css without content-type', async ({ page, runAndTrace, server const snapshotFrame = await traceViewer.snapshotFrame('page.goto'); await expect(snapshotFrame.locator('body')).toHaveCSS('background-color', 'rgb(255, 0, 0)', { timeout: 0 }); }); + +test('should allow showing screenshots instead of snapshots', async ({ runAndTrace, page, server }) => { + const traceViewer = await runAndTrace(async () => { + await page.goto(server.PREFIX + '/one-style.html'); + }); + + const screenshot = traceViewer.page.getByAltText(`Screenshot of page.goto > Action`); + const snapshot = (await traceViewer.snapshotFrame('page.goto')).owner(); + await expect(snapshot).toBeVisible(); + await expect(screenshot).not.toBeVisible(); + + await traceViewer.page.getByTitle('Settings').click(); + await traceViewer.page.getByText('Show screenshot instead of snapshot').setChecked(true); + + await expect(snapshot).not.toBeVisible(); + await expect(screenshot).toBeVisible(); +}); + +test('should handle case where neither snapshots nor screenshots exist', async ({ runAndTrace, page, server }) => { + const traceViewer = await runAndTrace(async () => { + await page.goto(server.PREFIX + '/one-style.html'); + }, { snapshots: false, screenshots: false }); + + await traceViewer.page.getByTitle('Settings').click(); + await traceViewer.page.getByText('Show screenshot instead of snapshot').setChecked(true); + + const screenshot = traceViewer.page.getByAltText(`Screenshot of page.goto > Action`); + await expect(screenshot).not.toBeVisible(); +}); + From 1402dee9e6589d0d01130809e9114048d23d2fc9 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Fri, 6 Sep 2024 12:08:10 -0700 Subject: [PATCH 377/498] Revert "fix(test runner): align with typescript behaviour for resolving `index.js` and `package.json` through path mapping (#32078)" (#32492) This reverts commit effb1ae2349aeef1c0bfb0b6cd886b9b4b32c8e5. This broke path mapping into directories in ESM mode. References #32480. --- packages/playwright-ct-core/src/vitePlugin.ts | 2 +- packages/playwright-ct-core/src/viteUtils.ts | 6 +- .../playwright/src/transform/esmLoader.ts | 2 +- .../playwright/src/transform/transform.ts | 16 +-- packages/playwright/src/util.ts | 19 +-- tests/playwright-test/resolver.spec.ts | 135 ------------------ 6 files changed, 14 insertions(+), 166 deletions(-) diff --git a/packages/playwright-ct-core/src/vitePlugin.ts b/packages/playwright-ct-core/src/vitePlugin.ts index 462730c61c..ec738c8700 100644 --- a/packages/playwright-ct-core/src/vitePlugin.ts +++ b/packages/playwright-ct-core/src/vitePlugin.ts @@ -262,7 +262,7 @@ function vitePlugin(registerSource: string, templateDir: string, buildInfo: Buil async writeBundle(this: PluginContext) { for (const importInfo of importInfos.values()) { - const importPath = resolveHook(importInfo.filename, importInfo.importSource, true); + const importPath = resolveHook(importInfo.filename, importInfo.importSource); if (!importPath) continue; const deps = new Set(); diff --git a/packages/playwright-ct-core/src/viteUtils.ts b/packages/playwright-ct-core/src/viteUtils.ts index d1160c16f0..a9f7020999 100644 --- a/packages/playwright-ct-core/src/viteUtils.ts +++ b/packages/playwright-ct-core/src/viteUtils.ts @@ -147,13 +147,13 @@ export async function populateComponentsFromTests(componentRegistry: ComponentRe for (const importInfo of importList) componentRegistry.set(importInfo.id, importInfo); if (componentsByImportingFile) - componentsByImportingFile.set(file, importList.map(i => resolveHook(i.filename, i.importSource, true)).filter(Boolean) as string[]); + componentsByImportingFile.set(file, importList.map(i => resolveHook(i.filename, i.importSource)).filter(Boolean) as string[]); } } export function hasJSComponents(components: ImportInfo[]): boolean { for (const component of components) { - const importPath = resolveHook(component.filename, component.importSource, true); + const importPath = resolveHook(component.filename, component.importSource); const extname = importPath ? path.extname(importPath) : ''; if (extname === '.js' || (importPath && !extname && fs.existsSync(importPath + '.js'))) return true; @@ -183,7 +183,7 @@ export function transformIndexFile(id: string, content: string, templateDir: str lines.push(registerSource); for (const value of importInfos.values()) { - const importPath = resolveHook(value.filename, value.importSource, true) || value.importSource; + const importPath = resolveHook(value.filename, value.importSource) || value.importSource; lines.push(`const ${value.id} = () => import('${importPath?.replaceAll(path.sep, '/')}').then((mod) => mod.${value.remoteName || 'default'});`); } diff --git a/packages/playwright/src/transform/esmLoader.ts b/packages/playwright/src/transform/esmLoader.ts index 0ef0f29eaf..c84d15146b 100644 --- a/packages/playwright/src/transform/esmLoader.ts +++ b/packages/playwright/src/transform/esmLoader.ts @@ -26,7 +26,7 @@ import { fileIsModule } from '../util'; async function resolve(specifier: string, context: { parentURL?: string }, defaultResolve: Function) { if (context.parentURL && context.parentURL.startsWith('file://')) { const filename = url.fileURLToPath(context.parentURL); - const resolved = resolveHook(filename, specifier, true); + const resolved = resolveHook(filename, specifier); if (resolved !== undefined) specifier = url.pathToFileURL(resolved).toString(); } diff --git a/packages/playwright/src/transform/transform.ts b/packages/playwright/src/transform/transform.ts index 52d05dde90..9ca80399fb 100644 --- a/packages/playwright/src/transform/transform.ts +++ b/packages/playwright/src/transform/transform.ts @@ -129,21 +129,15 @@ function loadAndValidateTsconfigsForFolder(folder: string): ParsedTsConfigData[] const pathSeparator = process.platform === 'win32' ? ';' : ':'; const builtins = new Set(Module.builtinModules); -export function resolveHook(filename: string, specifier: string, isESM: boolean): string | undefined { +export function resolveHook(filename: string, specifier: string): string | undefined { if (specifier.startsWith('node:') || builtins.has(specifier)) return; if (!shouldTransform(filename)) return; if (isRelativeSpecifier(specifier)) - return resolveImportSpecifierExtension(path.resolve(path.dirname(filename), specifier), false, isESM); + return resolveImportSpecifierExtension(path.resolve(path.dirname(filename), specifier)); - /** - * TypeScript discourages path-mapping into node_modules - * (https://www.typescriptlang.org/docs/handbook/modules/reference.html#paths-should-not-point-to-monorepo-packages-or-node_modules-packages). - * It seems like TypeScript tries path-mapping first, but does not look at the `package.json` or `index.js` files in ESM. - * If path-mapping doesn't yield a result, TypeScript falls back to the default resolution (typically node_modules). - */ const isTypeScript = filename.endsWith('.ts') || filename.endsWith('.tsx'); const tsconfigs = loadAndValidateTsconfigsForFile(filename); for (const tsconfig of tsconfigs) { @@ -185,7 +179,7 @@ export function resolveHook(filename: string, specifier: string, isESM: boolean) if (value.includes('*')) candidate = candidate.replace('*', matchedPartOfSpecifier); candidate = path.resolve(tsconfig.pathsBase!, candidate); - const existing = resolveImportSpecifierExtension(candidate, true, isESM); + const existing = resolveImportSpecifierExtension(candidate); if (existing) { longestPrefixLength = keyPrefix.length; pathMatchedByLongestPrefix = existing; @@ -199,7 +193,7 @@ export function resolveHook(filename: string, specifier: string, isESM: boolean) if (path.isAbsolute(specifier)) { // Handle absolute file paths like `import '/path/to/file'` // Do not handle module imports like `import 'fs'` - return resolveImportSpecifierExtension(specifier, false, isESM); + return resolveImportSpecifierExtension(specifier); } } @@ -281,7 +275,7 @@ function installTransformIfNeeded() { const originalResolveFilename = (Module as any)._resolveFilename; function resolveFilename(this: any, specifier: string, parent: Module, ...rest: any[]) { if (parent) { - const resolved = resolveHook(parent.filename, specifier, false); + const resolved = resolveHook(parent.filename, specifier); if (resolved !== undefined) specifier = resolved; } diff --git a/packages/playwright/src/util.ts b/packages/playwright/src/util.ts index 4c75d9d841..0531f167a0 100644 --- a/packages/playwright/src/util.ts +++ b/packages/playwright/src/util.ts @@ -316,7 +316,7 @@ const kExtLookups = new Map([ ['.mjs', ['.mts']], ['', ['.js', '.ts', '.jsx', '.tsx', '.cjs', '.mjs', '.cts', '.mts']], ]); -export function resolveImportSpecifierExtension(resolved: string, isPathMapping: boolean, isESM: boolean): string | undefined { +export function resolveImportSpecifierExtension(resolved: string): string | undefined { if (fileExists(resolved)) return resolved; @@ -331,25 +331,14 @@ export function resolveImportSpecifierExtension(resolved: string, isPathMapping: break; // Do not try '' when a more specific extension like '.jsx' matched. } - // After TypeScript path mapping, here's how directories with a `package.json` are resolved: - // - `package.json#exports` is not respected - // - `package.json#main` is respected only in CJS mode - // - `index.js` default is respected only in CJS mode - // - // More info: - // - https://www.typescriptlang.org/docs/handbook/modules/reference.html#paths-should-not-point-to-monorepo-packages-or-node_modules-packages - // - https://www.typescriptlang.org/docs/handbook/modules/reference.html#directory-modules-index-file-resolution - // - https://nodejs.org/dist/latest-v20.x/docs/api/modules.html#folders-as-modules - - const shouldNotResolveDirectory = isPathMapping && isESM; - - if (!shouldNotResolveDirectory && dirExists(resolved)) { + if (dirExists(resolved)) { // If we import a package, let Node.js figure out the correct import based on package.json. if (fileExists(path.join(resolved, 'package.json'))) return resolved; + // Otherwise, try to find a corresponding index file. const dirImport = path.join(resolved, 'index'); - return resolveImportSpecifierExtension(dirImport, isPathMapping, isESM); + return resolveImportSpecifierExtension(dirImport); } } diff --git a/tests/playwright-test/resolver.spec.ts b/tests/playwright-test/resolver.spec.ts index b87e22babb..5a0e91b099 100644 --- a/tests/playwright-test/resolver.spec.ts +++ b/tests/playwright-test/resolver.spec.ts @@ -606,79 +606,6 @@ test('should import packages with non-index main script through path resolver', expect(result.output).toContain(`foo=42`); }); -test('should not honor `package.json#main` field in ESM mode', async ({ runInlineTest }) => { - const result = await runInlineTest({ - 'app/pkg/main.ts': ` - export const foo = 42; - `, - 'app/pkg/package.json': ` - { "main": "main.ts" } - `, - 'package.json': ` - { "name": "example-project", "type": "module" } - `, - 'playwright.config.ts': ` - export default {}; - `, - 'tsconfig.json': `{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "app/*": ["app/*"], - }, - }, - }`, - 'example.spec.ts': ` - import { foo } from 'app/pkg'; - import { test, expect } from '@playwright/test'; - test('test', ({}) => { - console.log('foo=' + foo); - }); - `, - }); - - expect(result.exitCode).toBe(1); - expect(result.output).toContain(`Cannot find package 'app'`); -}); - - -test('does not honor `exports` field after type mapping', async ({ runInlineTest }) => { - const result = await runInlineTest({ - 'app/pkg/main.ts': ` - export const filename = 'main.ts'; - `, - 'app/pkg/index.js': ` - export const filename = 'index.js'; - `, - 'app/pkg/package.json': JSON.stringify({ - exports: { '.': { require: './main.ts' } } - }), - 'package.json': JSON.stringify({ - name: 'example-project' - }), - 'playwright.config.ts': ` - export default {}; - `, - 'tsconfig.json': JSON.stringify({ - compilerOptions: { - baseUrl: '.', - paths: { - 'app/*': ['app/*'], - }, - } - }), - 'example.spec.ts': ` - import { filename } from 'app/pkg'; - import { test, expect } from '@playwright/test'; - test('test', ({}) => { - console.log('filename=' + filename); - }); - `, - }); - - expect(result.output).toContain('filename=index.js'); -}); - test('should respect tsconfig project references', async ({ runInlineTest }) => { test.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/29256' }); @@ -766,65 +693,3 @@ test('should respect --tsconfig option', async ({ runInlineTest }) => { expect(result.exitCode).toBe(0); expect(result.output).not.toContain(`Could not`); }); - - -test('should resolve index.js in CJS after path mapping', async ({ runInlineTest }) => { - test.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/31811' }); - - const result = await runInlineTest({ - '@acme/lib/index.js': ` - exports.greet = () => console.log('hello playwright'); - `, - '@acme/lib/index.d.ts': ` - export const greet: () => void; - `, - 'tests/hello.test.ts': ` - import { greet } from '@acme/lib'; - import { test } from '@playwright/test'; - test('hello', async ({}) => { - greet(); - }); - `, - 'tests/tsconfig.json': JSON.stringify({ - compilerOptions: { - 'paths': { - '@acme/*': ['../@acme/*'], - } - } - }) - }); - - expect(result.exitCode).toBe(0); - expect(result.passed).toBe(1); -}); - -test('should not resolve index.js in ESM after path mapping', async ({ runInlineTest }) => { - test.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/31811' }); - - const result = await runInlineTest({ - '@acme/lib/index.js': ` - export const greet = () => console.log('hello playwright'); - `, - '@acme/lib/index.d.ts': ` - export const greet: () => void; - `, - 'tests/hello.test.ts': ` - import { greet } from '@acme/lib'; - import { test } from '@playwright/test'; - test('hello', async ({}) => { - greet(); - }); - `, - 'tests/tsconfig.json': JSON.stringify({ - compilerOptions: { - 'paths': { - '@acme/*': ['../@acme/*'], - } - } - }), - 'package.json': JSON.stringify({ type: 'module' }), - }); - - expect(result.exitCode).toBe(1); - expect(result.output).toContain(`Cannot find package '@acme/lib'`); -}); From d85527e9f63b0bc067d0209ed29ec4a5cb4a774c Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Fri, 6 Sep 2024 13:13:44 -0700 Subject: [PATCH 378/498] test: some tests for expected API behavior (#32495) Adding some tests discussed in https://github.com/microsoft/playwright/pull/32434 --- tests/library/chromium/oopif.spec.ts | 10 ++++++++++ tests/page/frame-frame-element.spec.ts | 16 +++++++++++++++ tests/page/interception.spec.ts | 19 +++++++++++++++++- tests/page/page-mouse.spec.ts | 27 ++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) diff --git a/tests/library/chromium/oopif.spec.ts b/tests/library/chromium/oopif.spec.ts index cc1279b8af..0143120629 100644 --- a/tests/library/chromium/oopif.spec.ts +++ b/tests/library/chromium/oopif.spec.ts @@ -297,6 +297,16 @@ it('should click', async function({ page, browser, server }) { expect(await handle1.evaluate(() => (window as any)['_clicked'])).toBe(true); }); +it('contentFrame should work', async ({ page, browser, server }) => { + await page.goto(server.PREFIX + '/dynamic-oopif.html'); + expect(page.frames().length).toBe(2); + expect(await countOOPIFs(browser)).toBe(1); + expect(await page.locator('iframe').contentFrame().locator('div').count()).toBe(200); + const oopif = await page.$('iframe'); + const content = await oopif.contentFrame(); + expect(await content.locator('div').count()).toBe(200); +}); + it('should allow cdp sessions on oopifs', async function({ page, browser, server }) { await page.goto(server.PREFIX + '/dynamic-oopif.html'); expect(await countOOPIFs(browser)).toBe(1); diff --git a/tests/page/frame-frame-element.spec.ts b/tests/page/frame-frame-element.spec.ts index e3b25a8fe1..e44e7deb3e 100644 --- a/tests/page/frame-frame-element.spec.ts +++ b/tests/page/frame-frame-element.spec.ts @@ -75,3 +75,19 @@ it('should work inside closed shadow root', async ({ page, server, browserName } const element = await frame.frameElement(); expect(await element.getAttribute('name')).toBe('myframe'); }); + +it('should work inside declarative shadow root', async ({ page, server, browserName }) => { + await page.goto(server.EMPTY_PAGE); + await page.setContent(` +
+ + footer +
+ `); + const frame = page.frame({ name: 'myframe' }); + const element = await frame.frameElement(); + expect(await element.getAttribute('name')).toBe('myframe'); +}); diff --git a/tests/page/interception.spec.ts b/tests/page/interception.spec.ts index fd798cb715..7f3ef98000 100644 --- a/tests/page/interception.spec.ts +++ b/tests/page/interception.spec.ts @@ -164,7 +164,7 @@ it('should work with regular expression passed from a different context', async expect(intercepted).toBe(true); }); -it('should not break remote worker importScripts', async ({ page, server, browserName, browserMajorVersion }) => { +it('should not break remote worker importScripts', async ({ page, server }) => { await page.route('**', async route => { await route.continue(); }); @@ -189,3 +189,20 @@ it('should disable memory cache when intercepting', async ({ page, server }) => await expect(page).toHaveURL(server.PREFIX + '/page.html'); expect(interceted).toBe(2); }); + +it('should intercept blob url requests', async function({ page, server, browserName }) { + it.fixme(browserName !== 'webkit'); + await page.goto(server.EMPTY_PAGE); + await page.route('**/*', route => { + route.fulfill({ + status: 200, + body: 'intercepted', + }).catch(e => null); + }); + page.on('console', msg => console.log(msg.text())); + const response = await page.evaluate(async () => { + const blobUrl = URL.createObjectURL(new Blob(['failed to intercept'], { type: 'text/plain' })); + return await fetch(blobUrl).then(response => response.text()); + }); + expect(response).toBe('intercepted'); +}); diff --git a/tests/page/page-mouse.spec.ts b/tests/page/page-mouse.spec.ts index 3e7223319f..5d29be2bb7 100644 --- a/tests/page/page-mouse.spec.ts +++ b/tests/page/page-mouse.spec.ts @@ -78,6 +78,33 @@ it('should dblclick the div', async ({ page, server }) => { expect(event.button).toBe(0); }); +it('down and up should generate click', async ({ page, server }) => { + await page.evaluate(() => { + window['clickPromise'] = new Promise(resolve => { + document.addEventListener('click', event => { + resolve({ + type: event.type, + detail: event.detail, + clientX: event.clientX, + clientY: event.clientY, + isTrusted: event.isTrusted, + button: event.button + }); + }); + }); + }); + await page.mouse.move(50, 60); + await page.mouse.down(); + await page.mouse.up(); + const event = await page.evaluate(() => window['clickPromise']); + expect(event.type).toBe('click'); + expect(event.detail).toBe(1); + expect(event.clientX).toBe(50); + expect(event.clientY).toBe(60); + expect(event.isTrusted).toBe(true); + expect(event.button).toBe(0); +}); + it('should pointerdown the div with a custom button', async ({ page, server, browserName }) => { await page.setContent(`
Click me
`); await page.evaluate(() => { From 11441c0fe1407b2448ad1a8b806b06a7e0b7a532 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Fri, 6 Sep 2024 13:17:32 -0700 Subject: [PATCH 379/498] fix: add missing await in adoptIfNeeded (#32497) Otherwise it throws in Bidi. --- packages/playwright-core/src/server/frameSelectors.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/playwright-core/src/server/frameSelectors.ts b/packages/playwright-core/src/server/frameSelectors.ts index 66f2e2e514..4be2a9c285 100644 --- a/packages/playwright-core/src/server/frameSelectors.ts +++ b/packages/playwright-core/src/server/frameSelectors.ts @@ -160,7 +160,7 @@ export class FrameSelectors { async function adoptIfNeeded(handle: ElementHandle, context: FrameExecutionContext): Promise> { if (handle._context === context) return handle; - const adopted = handle._page._delegate.adoptElementHandle(handle, context); + const adopted = await handle._page._delegate.adoptElementHandle(handle, context); handle.dispose(); return adopted; } From df2bc2d0dc59017493e9f2733aab3e6c9c309f01 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Fri, 6 Sep 2024 13:17:49 -0700 Subject: [PATCH 380/498] test: worker interception for existing workers (#32494) Failing test for https://github.com/microsoft/playwright/issues/32355 --- tests/page/interception.spec.ts | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/tests/page/interception.spec.ts b/tests/page/interception.spec.ts index 7f3ef98000..338ac97a05 100644 --- a/tests/page/interception.spec.ts +++ b/tests/page/interception.spec.ts @@ -100,8 +100,7 @@ it('should work with glob', async () => { expect(globToRegex('$^+.\\*()|\\?\\{\\}\\[\\]')).toEqual(/^\$\^\+\.\*\(\)\|\?\{\}\[\]$/); }); -it('should intercept network activity from worker', async function({ page, server, isAndroid, browserName, browserMajorVersion }) { - it.skip(browserName === 'firefox' && browserMajorVersion < 114, 'https://github.com/microsoft/playwright/issues/21760'); +it('should intercept network activity from worker', async function({ page, server, isAndroid }) { it.skip(isAndroid); await page.goto(server.EMPTY_PAGE); @@ -122,6 +121,35 @@ it('should intercept network activity from worker', async function({ page, serve expect(msg.text()).toBe('intercepted'); }); +it('should intercept worker requests when enabled after worker creation', { + annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/32355' } +}, async function({ page, server, isAndroid, browserName }) { + it.skip(isAndroid); + it.fixme(browserName === 'chromium'); + + await page.goto(server.EMPTY_PAGE); + server.setRoute('/data_for_worker', (req, res) => res.end('failed to intercept')); + const url = server.PREFIX + '/data_for_worker'; + await page.evaluate(url => { + (window as any).w = new Worker(URL.createObjectURL(new Blob([` + onmessage = function(e) { + fetch("${url}").then(response => response.text()).then(console.log); + }; + `], { type: 'application/javascript' }))); + }, url); + await page.route(url, route => { + route.fulfill({ + status: 200, + body: 'intercepted', + }).catch(e => null); + }); + const [msg] = await Promise.all([ + page.waitForEvent('console'), + page.evaluate(() => (window as any).w.postMessage('')) + ]); + expect(msg.text()).toBe('intercepted'); +}); + it('should intercept network activity from worker 2', async function({ page, server, isAndroid }) { it.skip(isAndroid); From a113553f1468b5c8d14e85cd87dd018fda5cb49f Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Fri, 6 Sep 2024 13:49:37 -0700 Subject: [PATCH 381/498] test: allow running oopif test without newBrowserCDPSession (#32496) --- tests/bidi/playwright.config.ts | 1 - tests/library/chromium/oopif.spec.ts | 58 +++++++++++++++------------- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/tests/bidi/playwright.config.ts b/tests/bidi/playwright.config.ts index 7aa17f35ba..7adaa56638 100644 --- a/tests/bidi/playwright.config.ts +++ b/tests/bidi/playwright.config.ts @@ -81,7 +81,6 @@ for (const [key, channels] of Object.entries(browserToChannels)) { channel, video: 'off', launchOptions: { - channel: 'bidi-chrome-canary', executablePath, }, trace: trace ? 'on' : undefined, diff --git a/tests/library/chromium/oopif.spec.ts b/tests/library/chromium/oopif.spec.ts index 0143120629..bea16bdb75 100644 --- a/tests/library/chromium/oopif.spec.ts +++ b/tests/library/chromium/oopif.spec.ts @@ -25,14 +25,14 @@ it.use({ it('should report oopif frames', async function({ page, browser, server }) { await page.goto(server.PREFIX + '/dynamic-oopif.html'); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); expect(page.frames().length).toBe(2); expect(await page.frames()[1].evaluate(() => '' + location.href)).toBe(server.CROSS_PROCESS_PREFIX + '/grid.html'); }); it('should handle oopif detach', async function({ page, browser, server }) { await page.goto(server.PREFIX + '/dynamic-oopif.html'); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); expect(page.frames().length).toBe(2); const frame = page.frames()[1]; expect(await frame.evaluate(() => '' + location.href)).toBe(server.CROSS_PROCESS_PREFIX + '/grid.html'); @@ -46,20 +46,20 @@ it('should handle oopif detach', async function({ page, browser, server }) { it('should handle remote -> local -> remote transitions', async function({ page, browser, server }) { await page.goto(server.PREFIX + '/dynamic-oopif.html'); expect(page.frames().length).toBe(2); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); expect(await page.frames()[1].evaluate(() => '' + location.href)).toBe(server.CROSS_PROCESS_PREFIX + '/grid.html'); await Promise.all([ page.frames()[1].waitForNavigation(), page.evaluate('goLocal()'), ]); expect(await page.frames()[1].evaluate(() => '' + location.href)).toBe(server.PREFIX + '/grid.html'); - expect(await countOOPIFs(browser)).toBe(0); + await assertOOPIFCount(browser, 0); await Promise.all([ page.frames()[1].waitForNavigation(), page.evaluate('goRemote()'), ]); expect(await page.frames()[1].evaluate(() => '' + location.href)).toBe(server.CROSS_PROCESS_PREFIX + '/grid.html'); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); }); it('should get the proper viewport', async ({ page, browser, server }) => { @@ -68,7 +68,7 @@ it('should get the proper viewport', async ({ page, browser, server }) => { expect(page.viewportSize()).toEqual({ width: 1280, height: 720 }); await page.goto(server.PREFIX + '/dynamic-oopif.html'); expect(page.frames().length).toBe(2); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); const oopif = page.frames()[1]; expect(await oopif.evaluate(() => screen.width)).toBe(1280); expect(await oopif.evaluate(() => screen.height)).toBe(720); @@ -86,7 +86,7 @@ it('should get the proper viewport', async ({ page, browser, server }) => { it('should expose function', async ({ page, browser, server }) => { await page.goto(server.PREFIX + '/dynamic-oopif.html'); expect(page.frames().length).toBe(2); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); const oopif = page.frames()[1]; await page.exposeFunction('mul', (a: number, b: number) => a * b); const result = await oopif.evaluate(async function() { @@ -98,7 +98,7 @@ it('should expose function', async ({ page, browser, server }) => { it('should emulate media', async ({ page, browser, server }) => { await page.goto(server.PREFIX + '/dynamic-oopif.html'); expect(page.frames().length).toBe(2); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); const oopif = page.frames()[1]; expect(await oopif.evaluate(() => matchMedia('(prefers-color-scheme: dark)').matches)).toBe(false); await page.emulateMedia({ colorScheme: 'dark' }); @@ -108,7 +108,7 @@ it('should emulate media', async ({ page, browser, server }) => { it('should emulate offline', async ({ page, browser, server }) => { await page.goto(server.PREFIX + '/dynamic-oopif.html'); expect(page.frames().length).toBe(2); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); const oopif = page.frames()[1]; expect(await oopif.evaluate(() => navigator.onLine)).toBe(true); await page.context().setOffline(true); @@ -125,7 +125,7 @@ it('should support context options', async ({ browser, server, playwright }) => page.goto(server.PREFIX + '/dynamic-oopif.html'), ]); expect(page.frames().length).toBe(2); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); const oopif = page.frames()[1]; expect(await oopif.evaluate(() => 'ontouchstart' in window)).toBe(true); @@ -145,7 +145,7 @@ it('should respect route', async ({ page, browser, server }) => { }); await page.goto(server.PREFIX + '/dynamic-oopif.html'); expect(page.frames().length).toBe(2); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); expect(intercepted).toBe(true); }); @@ -153,14 +153,14 @@ it('should take screenshot', async ({ page, browser, server }) => { await page.setViewportSize({ width: 500, height: 500 }); await page.goto(server.PREFIX + '/dynamic-oopif.html'); expect(page.frames().length).toBe(2); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); expect(await page.screenshot()).toMatchSnapshot('screenshot-oopif.png'); }); it('should load oopif iframes with subresources and route', async function({ page, browser, server }) { await page.route('**/*', route => route.continue()); await page.goto(server.PREFIX + '/dynamic-oopif.html'); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); }); it('should report main requests', async function({ page, browser, server }) { @@ -192,7 +192,7 @@ it('should report main requests', async function({ page, browser, server }) { const grandChild = child.childFrames()[0]; await grandChild.waitForLoadState('domcontentloaded'); - expect(await countOOPIFs(browser)).toBe(2); + await assertOOPIFCount(browser, 2); expect(requestFrames[0]).toBe(main); expect(finishedFrames[0]).toBe(main); expect(requestFrames[1]).toBe(child); @@ -205,7 +205,7 @@ it('should support exposeFunction', async function({ page, browser, server }) { await page.context().exposeFunction('dec', (a: number) => a - 1); await page.exposeFunction('inc', (a: number) => a + 1); await page.goto(server.PREFIX + '/dynamic-oopif.html'); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); expect(page.frames().length).toBe(2); expect(await page.frames()[0].evaluate(() => (window as any)['inc'](3))).toBe(4); expect(await page.frames()[1].evaluate(() => (window as any)['inc'](4))).toBe(5); @@ -217,7 +217,7 @@ it('should support addInitScript', async function({ page, browser, server }) { await page.context().addInitScript(() => (window as any)['bar'] = 17); await page.addInitScript(() => (window as any)['foo'] = 42); await page.goto(server.PREFIX + '/dynamic-oopif.html'); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); expect(page.frames().length).toBe(2); expect(await page.frames()[0].evaluate(() => (window as any)['foo'])).toBe(42); expect(await page.frames()[1].evaluate(() => (window as any)['foo'])).toBe(42); @@ -227,7 +227,7 @@ it('should support addInitScript', async function({ page, browser, server }) { // @see https://github.com/microsoft/playwright/issues/1240 it('should click a button when it overlays oopif', async function({ page, browser, server }) { await page.goto(server.PREFIX + '/button-overlay-oopif.html'); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); await page.click('button'); expect(await page.evaluate(() => (window as any)['BUTTON_CLICKED'])).toBe(true); }); @@ -248,7 +248,7 @@ it('should report google.com frame with headed', async ({ browserType, server }) return new Promise(x => frame.onload = x); }); await page.waitForSelector('iframe[src="https://google.com/"]'); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); const urls = page.frames().map(frame => frame.url()); expect(urls).toEqual([ server.EMPTY_PAGE, @@ -267,7 +267,7 @@ it('ElementHandle.boundingBox() should work', async function({ page, browser, se }); await page.frames()[1].goto(page.frames()[1].url()); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); const handle1 = await page.frames()[1].$('.box:nth-of-type(13)'); expect(await handle1!.boundingBox()).toEqual({ x: 100 + 42, y: 50 + 17, width: 50, height: 50 }); @@ -275,7 +275,7 @@ it('ElementHandle.boundingBox() should work', async function({ page, browser, se page.frames()[1].waitForNavigation(), page.evaluate('goLocal()'), ]); - expect(await countOOPIFs(browser)).toBe(0); + await assertOOPIFCount(browser, 0); const handle2 = await page.frames()[1].$('.box:nth-of-type(13)'); expect(await handle2!.boundingBox()).toEqual({ x: 100 + 42, y: 50 + 17, width: 50, height: 50 }); }); @@ -290,7 +290,7 @@ it('should click', async function({ page, browser, server }) { }); await page.frames()[1].goto(page.frames()[1].url()); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); const handle1 = (await page.frames()[1].$('.box:nth-of-type(13)'))!; await handle1.evaluate(div => div.addEventListener('click', () => (window as any)['_clicked'] = true, false)); await handle1.click(); @@ -300,7 +300,7 @@ it('should click', async function({ page, browser, server }) { it('contentFrame should work', async ({ page, browser, server }) => { await page.goto(server.PREFIX + '/dynamic-oopif.html'); expect(page.frames().length).toBe(2); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); expect(await page.locator('iframe').contentFrame().locator('div').count()).toBe(200); const oopif = await page.$('iframe'); const content = await oopif.contentFrame(); @@ -309,7 +309,7 @@ it('contentFrame should work', async ({ page, browser, server }) => { it('should allow cdp sessions on oopifs', async function({ page, browser, server }) { await page.goto(server.PREFIX + '/dynamic-oopif.html'); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); expect(page.frames().length).toBe(2); expect(await page.frames()[1].evaluate(() => '' + location.href)).toBe(server.CROSS_PROCESS_PREFIX + '/grid.html'); @@ -326,7 +326,7 @@ it('should emit filechooser event for iframe', async ({ page, server, browser }) // Add listener before OOPIF is created. const chooserPromise = page.waitForEvent('filechooser'); await page.goto(server.PREFIX + '/dynamic-oopif.html'); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); expect(page.frames().length).toBe(2); const frame = page.frames()[1]; await frame.setContent(``); @@ -340,7 +340,7 @@ it('should emit filechooser event for iframe', async ({ page, server, browser }) it('should be able to click in iframe', async ({ page, server, browser }) => { it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/28023' }); await page.goto(server.PREFIX + '/dynamic-oopif.html'); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); expect(page.frames().length).toBe(2); const frame = page.frames()[1]; await frame.setContent(``); @@ -353,7 +353,7 @@ it('should be able to click in iframe', async ({ page, server, browser }) => { it('should not throw on exposeFunction when oopif detaches', async ({ page, browser, server }) => { await page.goto(server.PREFIX + '/dynamic-oopif.html'); - expect(await countOOPIFs(browser)).toBe(1); + await assertOOPIFCount(browser, 1); await Promise.all([ page.exposeFunction('myFunc', () => 2022), page.evaluate(() => document.querySelector('iframe')!.remove()), @@ -370,6 +370,12 @@ it('should intercept response body from oopif', async function({ page, browser, expect(await response.text()).toBeTruthy(); }); +async function assertOOPIFCount(browser: Browser, count: number) { + if (browser.browserType().name() !== 'chromium') + return; + expect(await countOOPIFs(browser)).toBe(count); +} + async function countOOPIFs(browser: Browser) { const browserSession = await browser.newBrowserCDPSession(); const oopifs = []; From 37bc4858273d3cc63ca4fed1eaeadf0433e7a448 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Fri, 6 Sep 2024 16:40:24 -0700 Subject: [PATCH 382/498] chore: remove browser-specific bidi hacks (#32498) Those were just workarounds for browser-specific bugs, they should be fixed upstream. * individual mouse down/up/down/up events don't trigger dblclick event in Firefox * setContent throws when document.open/write is called in the utility context in Firefox --- .../src/server/bidi/bidiInput.ts | 18 ------------------ .../src/server/bidi/bidiPage.ts | 4 ---- packages/playwright-core/src/server/frames.ts | 2 +- packages/playwright-core/src/server/input.ts | 3 --- packages/playwright-core/src/server/page.ts | 2 -- 5 files changed, 1 insertion(+), 28 deletions(-) diff --git a/packages/playwright-core/src/server/bidi/bidiInput.ts b/packages/playwright-core/src/server/bidi/bidiInput.ts index 29d1dd48db..e14e90529c 100644 --- a/packages/playwright-core/src/server/bidi/bidiInput.ts +++ b/packages/playwright-core/src/server/bidi/bidiInput.ts @@ -90,24 +90,6 @@ export class RawMouseImpl implements input.RawMouse { await this._performActions([{ type: 'pointerUp', button: toBidiButton(button) }]); } - async click(x: number, y: number, options: { delay?: number, button?: types.MouseButton, clickCount?: number } = {}) { - x = Math.round(x); - y = Math.round(y); - const button = toBidiButton(options.button || 'left'); - const { delay = null, clickCount = 1 } = options; - const actions: bidi.Input.PointerSourceAction[] = []; - actions.push({ type: 'pointerMove', x, y }); - for (let cc = 1; cc <= clickCount; ++cc) { - actions.push({ type: 'pointerDown', button }); - if (delay) - actions.push({ type: 'pause', duration: delay }); - actions.push({ type: 'pointerUp', button }); - if (delay && cc < clickCount) - actions.push({ type: 'pause', duration: delay }); - } - await this._performActions(actions); - } - async wheel(x: number, y: number, buttons: Set, modifiers: Set, deltaX: number, deltaY: number): Promise { } diff --git a/packages/playwright-core/src/server/bidi/bidiPage.ts b/packages/playwright-core/src/server/bidi/bidiPage.ts index 2802aa1452..9ecb5c789b 100644 --- a/packages/playwright-core/src/server/bidi/bidiPage.ts +++ b/packages/playwright-core/src/server/bidi/bidiPage.ts @@ -505,10 +505,6 @@ export class BidiPage implements PageDelegate { shouldToggleStyleSheetToSyncAnimations(): boolean { return true; } - - useMainWorldForSetContent(): boolean { - return true; - } } function toBidiExecutionContext(executionContext: dom.FrameExecutionContext): BidiExecutionContext { diff --git a/packages/playwright-core/src/server/frames.ts b/packages/playwright-core/src/server/frames.ts index 32699a199f..3b952ea02a 100644 --- a/packages/playwright-core/src/server/frames.ts +++ b/packages/playwright-core/src/server/frames.ts @@ -900,7 +900,7 @@ export class Frame extends SdkObject { const waitUntil = options.waitUntil === undefined ? 'load' : options.waitUntil; progress.log(`setting frame content, waiting until "${waitUntil}"`); const tag = `--playwright--set--content--${this._id}--${++this._setContentCounter}--`; - const context = this._page._delegate.useMainWorldForSetContent?.() ? await this._mainContext() : await this._utilityContext(); + const context = await this._utilityContext(); const lifecyclePromise = new Promise((resolve, reject) => { this._page._frameManager._consoleMessageTags.set(tag, () => { // Clear lifecycle right after document.open() - see 'tag' below. diff --git a/packages/playwright-core/src/server/input.ts b/packages/playwright-core/src/server/input.ts index a4407d36d7..4e4c95a8f3 100644 --- a/packages/playwright-core/src/server/input.ts +++ b/packages/playwright-core/src/server/input.ts @@ -162,7 +162,6 @@ export interface RawMouse { move(x: number, y: number, button: types.MouseButton | 'none', buttons: Set, modifiers: Set, forClick: boolean): Promise; down(x: number, y: number, button: types.MouseButton, buttons: Set, modifiers: Set, clickCount: number): Promise; up(x: number, y: number, button: types.MouseButton, buttons: Set, modifiers: Set, clickCount: number): Promise; - click?(x: number, y: number, options: { delay?: number, button?: types.MouseButton, clickCount?: number }): Promise; wheel(x: number, y: number, buttons: Set, modifiers: Set, deltaX: number, deltaY: number): Promise; } @@ -217,8 +216,6 @@ export class Mouse { async click(x: number, y: number, options: { delay?: number, button?: types.MouseButton, clickCount?: number } = {}, metadata?: CallMetadata) { if (metadata) metadata.point = { x, y }; - if (this._raw.click) - return await this._raw.click(x, y, options); const { delay = null, clickCount = 1 } = options; if (delay) { this.move(x, y, { forClick: true }); diff --git a/packages/playwright-core/src/server/page.ts b/packages/playwright-core/src/server/page.ts index 144b34c28e..25394b1b5c 100644 --- a/packages/playwright-core/src/server/page.ts +++ b/packages/playwright-core/src/server/page.ts @@ -98,8 +98,6 @@ export interface PageDelegate { resetForReuse(): Promise; // WebKit hack. shouldToggleStyleSheetToSyncAnimations(): boolean; - // Bidi throws on attempt to document.open() in utility context. - useMainWorldForSetContent?(): boolean; } type EmulatedSize = { screen: types.Size, viewport: types.Size }; From f3ada9c6540ad6e2b0fe93f6204b63d27d9c42b4 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Fri, 6 Sep 2024 17:10:14 -0700 Subject: [PATCH 383/498] chore: wheel input in bidi (#32499) --- .../playwright-core/src/server/bidi/bidiInput.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/playwright-core/src/server/bidi/bidiInput.ts b/packages/playwright-core/src/server/bidi/bidiInput.ts index e14e90529c..3550051a6a 100644 --- a/packages/playwright-core/src/server/bidi/bidiInput.ts +++ b/packages/playwright-core/src/server/bidi/bidiInput.ts @@ -76,7 +76,7 @@ export class RawMouseImpl implements input.RawMouse { } async move(x: number, y: number, button: types.MouseButton | 'none', buttons: Set, modifiers: Set, forClick: boolean): Promise { - // TODO: bidi throws when x/y are not integers. + // Bidi throws when x/y are not integers. x = Math.round(x); y = Math.round(y); await this._performActions([{ type: 'pointerMove', x, y }]); @@ -91,6 +91,19 @@ export class RawMouseImpl implements input.RawMouse { } async wheel(x: number, y: number, buttons: Set, modifiers: Set, deltaX: number, deltaY: number): Promise { + // Bidi throws when x/y are not integers. + x = Math.round(x); + y = Math.round(y); + await this._session.send('input.performActions', { + context: this._session.sessionId, + actions: [ + { + type: 'wheel', + id: 'pw_mouse_wheel', + actions: [{ type: 'scroll', x, y, deltaX, deltaY }], + } + ] + }); } private async _performActions(actions: bidi.Input.PointerSourceAction[]) { From 718bd9b35fd206245401a9ecb320289f427592d9 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Sat, 7 Sep 2024 09:16:42 +0200 Subject: [PATCH 384/498] devops: run BiDi tests (#32493) --- .github/workflows/tests_bidi.yml | 42 +++++++++++++++++++ .../src/server/registry/index.ts | 7 +++- tests/bidi/playwright.config.ts | 8 ++-- 3 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/tests_bidi.yml diff --git a/.github/workflows/tests_bidi.yml b/.github/workflows/tests_bidi.yml new file mode 100644 index 0000000000..433294dbea --- /dev/null +++ b/.github/workflows/tests_bidi.yml @@ -0,0 +1,42 @@ +name: tests BiDi + +on: + workflow_dispatch: + pull_request: + branches: + - main + paths: + - .github/workflows/tests_bidi.yml + schedule: + # Run every day at midnight + - cron: '0 0 * * *' + +env: + FORCE_COLOR: 1 + ELECTRON_SKIP_BINARY_DOWNLOAD: 1 + +jobs: + test_bidi: + name: BiDi + environment: ${{ github.event_name == 'push' && 'allow-uploading-flakiness-results' || null }} + runs-on: ubuntu-24.04 + permissions: + id-token: write # This is required for OIDC login (azure/login) to succeed + contents: read # This is required for actions/checkout to succeed + strategy: + fail-fast: false + matrix: + # TODO: add Firefox + channel: [bidi-chrome-stable] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + - run: npm ci + env: + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: '1' + - run: npm run build + - run: npx playwright install --with-deps chromium + - name: Run tests + run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run biditest -- --project=${{ matrix.channel }}* diff --git a/packages/playwright-core/src/server/registry/index.ts b/packages/playwright-core/src/server/registry/index.ts index cafef726fb..058e0bcbc3 100644 --- a/packages/playwright-core/src/server/registry/index.ts +++ b/packages/playwright-core/src/server/registry/index.ts @@ -354,7 +354,7 @@ function readDescriptors(browsersJSON: BrowsersJSON) { export type BrowserName = 'chromium' | 'firefox' | 'webkit' | 'bidi'; type InternalTool = 'ffmpeg' | 'firefox-beta' | 'chromium-tip-of-tree' | 'android'; -type BidiChannel = 'bidi-firefox-stable' | 'bidi-chrome-canary'; +type BidiChannel = 'bidi-firefox-stable' | 'bidi-chrome-canary' | 'bidi-chrome-stable'; type ChromiumChannel = 'chrome' | 'chrome-beta' | 'chrome-dev' | 'chrome-canary' | 'msedge' | 'msedge-beta' | 'msedge-dev' | 'msedge-canary'; const allDownloadable = ['chromium', 'firefox', 'webkit', 'ffmpeg', 'firefox-beta', 'chromium-tip-of-tree']; @@ -530,6 +530,11 @@ export class Registry { 'darwin': '/Applications/Firefox.app/Contents/MacOS/firefox', 'win32': '\\Mozilla Firefox\\firefox.exe', })); + this._executables.push(this._createBidiChannel('bidi-chrome-stable', { + 'linux': '/opt/google/chrome/chrome', + 'darwin': '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', + 'win32': `\\Google\\Chrome\\Application\\chrome.exe`, + })); this._executables.push(this._createBidiChannel('bidi-chrome-canary', { 'linux': '', 'darwin': '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary', diff --git a/tests/bidi/playwright.config.ts b/tests/bidi/playwright.config.ts index 7adaa56638..bc7b29e56b 100644 --- a/tests/bidi/playwright.config.ts +++ b/tests/bidi/playwright.config.ts @@ -47,9 +47,9 @@ const config: Config Date: Mon, 9 Sep 2024 12:52:40 +0200 Subject: [PATCH 385/498] test: fix stress tests bots (#32513) --- tests/stress/heap.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/stress/heap.spec.ts b/tests/stress/heap.spec.ts index a88ab29005..66bedfe9ff 100644 --- a/tests/stress/heap.spec.ts +++ b/tests/stress/heap.spec.ts @@ -44,9 +44,9 @@ test('should not leak fixtures w/o page', async ({}) => { test('should not leak server-side objects', async ({ page }) => { expect(await queryObjectCount(require('../../packages/playwright-core/lib/server/page').Page)).toBe(1); - // 4 is because v8 heap creates objects for descendant classes, so WKContext, CRContext, FFContext and our context instance. - expect(await queryObjectCount(require('../../packages/playwright-core/lib/server/browserContext').BrowserContext)).toBe(4); - expect(await queryObjectCount(require('../../packages/playwright-core/lib/server/browser').Browser)).toBe(4); + // 4 is because v8 heap creates objects for descendant classes, so WKContext, CRContext, FFContext, BidiBrowserContext and our context instance. + expect(await queryObjectCount(require('../../packages/playwright-core/lib/server/browserContext').BrowserContext)).toBe(5); + expect(await queryObjectCount(require('../../packages/playwright-core/lib/server/browser').Browser)).toBe(5); }); test('should not leak dispatchers after closing page', async ({ context, server }) => { From 31e269ad06c8cada6e53313403682479349e6b4f Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Mon, 9 Sep 2024 14:00:22 +0200 Subject: [PATCH 386/498] feat(trace-viewer): show screenshot pointer (#32514) Follow-up to https://github.com/microsoft/playwright/pull/32248. Adds a glowing red circle that shows the click position. I made it glowing to show that its position is inaccurate. Screenshot 2024-09-09 at 11 33 45 --- packages/trace-viewer/src/ui/clickPointer.tsx | 48 +++++++++++++++++++ packages/trace-viewer/src/ui/snapshotTab.tsx | 12 +++-- 2 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 packages/trace-viewer/src/ui/clickPointer.tsx diff --git a/packages/trace-viewer/src/ui/clickPointer.tsx b/packages/trace-viewer/src/ui/clickPointer.tsx new file mode 100644 index 0000000000..862f6522ea --- /dev/null +++ b/packages/trace-viewer/src/ui/clickPointer.tsx @@ -0,0 +1,48 @@ +/** + * Copyright (c) Microsoft Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export function ClickPointer({ point }: { point: { x: number; y: number } }) { + return ( +
+
+ ⚠ +
+
+ ); +} diff --git a/packages/trace-viewer/src/ui/snapshotTab.tsx b/packages/trace-viewer/src/ui/snapshotTab.tsx index 229d9f8cef..05d0cc5918 100644 --- a/packages/trace-viewer/src/ui/snapshotTab.tsx +++ b/packages/trace-viewer/src/ui/snapshotTab.tsx @@ -29,6 +29,7 @@ import type { Language } from '@isomorphic/locatorGenerators'; import { locatorOrSelectorAsSelector } from '@isomorphic/locatorParser'; import { TabbedPaneTab } from '@web/components/tabbedPane'; import { BrowserFrame } from './browserFrame'; +import { ClickPointer } from './clickPointer'; function findClosest(items: T[], target: number) { return items.find((item, index) => { @@ -73,7 +74,7 @@ export const SnapshotTab: React.FunctionComponent<{ return { snapshots: { action: actionSnapshot, before: beforeSnapshot, after: afterSnapshot } }; }, [action]); - const { snapshotInfoUrl, snapshotUrl, popoutUrl } = React.useMemo(() => { + const { snapshotInfoUrl, snapshotUrl, popoutUrl, point } = React.useMemo(() => { const snapshot = snapshots[snapshotTab]; if (!snapshot) return { snapshotUrl: kBlankSnapshotUrl }; @@ -96,7 +97,7 @@ export const SnapshotTab: React.FunctionComponent<{ popoutParams.set('pointY', String(snapshot.point.y)); } const popoutUrl = new URL(`snapshot.html?${popoutParams.toString()}`, window.location.href).toString(); - return { snapshots, snapshotInfoUrl, snapshotUrl, popoutUrl }; + return { snapshots, snapshotInfoUrl, snapshotUrl, popoutUrl, point: snapshot.point }; }, [snapshots, snapshotTab]); const iframeRef0 = React.useRef(null); @@ -230,7 +231,12 @@ export const SnapshotTab: React.FunctionComponent<{ transform: `translate(${translate.x}px, ${translate.y}px) scale(${scale})`, }}> - {(showScreenshotInsteadOfSnapshot && screencastFrame) && {`Screenshot ${renderTitle(snapshotTab)}`} src={`sha1/${screencastFrame.sha1}`} width={screencastFrame.width} height={screencastFrame.height} />} + {(showScreenshotInsteadOfSnapshot && screencastFrame) && ( + <> + {point && } + {`Screenshot ${renderTitle(snapshotTab)}`} src={`sha1/${screencastFrame.sha1}`} width={screencastFrame.width} height={screencastFrame.height} /> + + )}
From cc9c4cdd9a502ccbbe4b9c5cbb917010fd72799d Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Mon, 9 Sep 2024 14:00:38 +0200 Subject: [PATCH 387/498] chore: fix flaky screenshot test (#32517) In this test, the trace recording goes super fast. Sometimes, this means that the recording is finished before the screen recorder got a chance to take a screenshot. If that happens, the tests fail because we never show a screenshot. This PR fixes the flakiness by delaying the trace recording so that there's always a screenshot taken. --- tests/library/trace-viewer.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/library/trace-viewer.spec.ts b/tests/library/trace-viewer.spec.ts index f8aaf9d0df..8f8d69116f 100644 --- a/tests/library/trace-viewer.spec.ts +++ b/tests/library/trace-viewer.spec.ts @@ -1469,6 +1469,7 @@ test('should serve css without content-type', async ({ page, runAndTrace, server test('should allow showing screenshots instead of snapshots', async ({ runAndTrace, page, server }) => { const traceViewer = await runAndTrace(async () => { await page.goto(server.PREFIX + '/one-style.html'); + await page.waitForTimeout(1000); // ensure we could take a screenshot }); const screenshot = traceViewer.page.getByAltText(`Screenshot of page.goto > Action`); From 4a53973fd07b4725e9485df33e40f3dc026fe3d6 Mon Sep 17 00:00:00 2001 From: Sander Date: Mon, 9 Sep 2024 14:09:18 +0200 Subject: [PATCH 388/498] docs(ct): vue + jsx and general improvements (#32212) partial fix for: https://github.com/microsoft/playwright/issues/31927#issuecomment-2267065378 --------- Signed-off-by: Sander Co-authored-by: Dmitry Gozman --- docs/src/test-components-js.md | 178 +++++++++++++++++++++++++-------- 1 file changed, 135 insertions(+), 43 deletions(-) diff --git a/docs/src/test-components-js.md b/docs/src/test-components-js.md index e0bdc000bf..91d1860a26 100644 --- a/docs/src/test-components-js.md +++ b/docs/src/test-components-js.md @@ -113,12 +113,10 @@ component is mounted using this script. It can be either a `.js`, `.ts`, `.jsx` }> -```js +```js title="app.spec.tsx" import { test, expect } from '@playwright/experimental-ct-react'; import App from './App'; -test.use({ viewport: { width: 500, height: 500 } }); - test('should work', async ({ mount }) => { const component = await mount(); await expect(component).toContainText('Learn React'); @@ -129,18 +127,25 @@ test('should work', async ({ mount }) => { -```js +```js title="app.spec.ts" import { test, expect } from '@playwright/experimental-ct-vue'; import App from './App.vue'; -test.use({ viewport: { width: 500, height: 500 } }); - test('should work', async ({ mount }) => { const component = await mount(App); - await expect(component).toContainText('Vite + Vue'); + await expect(component).toContainText('Learn Vue'); }); ``` +```js title="app.spec.tsx" +import { test, expect } from '@playwright/experimental-ct-vue'; +import App from './App.vue'; + +test('should work', async ({ mount }) => { + const component = await mount(); + await expect(component).toContainText('Learn Vue'); +}); +``` If using TypeScript and Vue make sure to add a `vue.d.ts` file to your project: ```js @@ -151,15 +156,13 @@ declare module '*.vue'; -```js +```js title="app.spec.ts" import { test, expect } from '@playwright/experimental-ct-svelte'; import App from './App.svelte'; -test.use({ viewport: { width: 500, height: 500 } }); - test('should work', async ({ mount }) => { const component = await mount(App); - await expect(component).toContainText('Vite + Svelte'); + await expect(component).toContainText('Learn Svelte'); }); ``` @@ -167,12 +170,10 @@ test('should work', async ({ mount }) => { -```js +```js title="app.spec.tsx" import { test, expect } from '@playwright/experimental-ct-solid'; import App from './App'; -test.use({ viewport: { width: 500, height: 500 } }); - test('should work', async ({ mount }) => { const component = await mount(); await expect(component).toContainText('Learn Solid'); @@ -261,7 +262,10 @@ export function InputMediaForTest(props: InputMediaForTestProps) { Then test the component via testing the story: -```js title="input-media.test.spec.tsx" +```js title="input-media.spec.tsx" +import { test, expect } from '@playwright/experimental-ct-react'; +import { InputMediaForTest } from './input-media.story.tsx'; + test('changes the image', async ({ mount }) => { let mediaSelected: string | null = null; @@ -313,7 +317,9 @@ Provide props to a component when mounted. -```js +```js title="component.spec.tsx" +import { test } from '@playwright/experimental-ct-react'; + test('props', async ({ mount }) => { const component = await mount(); }); @@ -322,7 +328,9 @@ test('props', async ({ mount }) => { -```js +```js title="component.spec.tsx" +import { test } from '@playwright/experimental-ct-solid'; + test('props', async ({ mount }) => { const component = await mount(); }); @@ -331,7 +339,9 @@ test('props', async ({ mount }) => { -```js +```js title="component.spec.ts" +import { test } from '@playwright/experimental-ct-svelte'; + test('props', async ({ mount }) => { const component = await mount(Component, { props: { msg: 'greetings' } }); }); @@ -340,12 +350,23 @@ test('props', async ({ mount }) => { -```js +```js title="component.spec.ts" +import { test } from '@playwright/experimental-ct-vue'; + test('props', async ({ mount }) => { const component = await mount(Component, { props: { msg: 'greetings' } }); }); ``` +```js title="component.spec.tsx" +// Or alternatively, using the `jsx` style +import { test } from '@playwright/experimental-ct-vue'; + +test('props', async ({ mount }) => { + const component = await mount(); +}); +``` + @@ -366,36 +387,53 @@ Provide callbacks/events to a component when mounted. -```js +```js title="component.spec.tsx" +import { test } from '@playwright/experimental-ct-react'; + test('callback', async ({ mount }) => { - const component = await mount( {}} />); + const component = await mount( {}} />); }); ``` -```js +```js title="component.spec.tsx" +import { test } from '@playwright/experimental-ct-solid'; + test('callback', async ({ mount }) => { - const component = await mount( {}} />); + const component = await mount( {}} />); }); ``` -```js +```js title="component.spec.ts" +import { test } from '@playwright/experimental-ct-svelte'; + test('event', async ({ mount }) => { - const component = await mount(Component, { on: { callback() {} } }); + const component = await mount(Component, { on: { click() {} } }); }); ``` -```js +```js title="component.spec.ts" +import { test } from '@playwright/experimental-ct-vue'; + test('event', async ({ mount }) => { - const component = await mount(Component, { on: { callback() {} } }); + const component = await mount(Component, { on: { click() {} } }); +}); +``` + +```js title="component.spec.tsx" +// Or alternatively, using the `jsx` style +import { test } from '@playwright/experimental-ct-vue'; + +test('event', async ({ mount }) => { + const component = await mount( {}} />); }); ``` @@ -419,7 +457,9 @@ Provide children/slots to a component when mounted. -```js +```js title="component.spec.tsx" +import { test } from '@playwright/experimental-ct-react'; + test('children', async ({ mount }) => { const component = await mount(Child); }); @@ -428,7 +468,9 @@ test('children', async ({ mount }) => { -```js +```js title="component.spec.tsx" +import { test } from '@playwright/experimental-ct-solid'; + test('children', async ({ mount }) => { const component = await mount(Child); }); @@ -437,7 +479,9 @@ test('children', async ({ mount }) => { -```js +```js title="component.spec.ts" +import { test } from '@playwright/experimental-ct-svelte'; + test('slot', async ({ mount }) => { const component = await mount(Component, { slots: { default: 'Slot' } }); }); @@ -446,12 +490,23 @@ test('slot', async ({ mount }) => { -```js +```js title="component.spec.ts" +import { test } from '@playwright/experimental-ct-vue'; + test('slot', async ({ mount }) => { const component = await mount(Component, { slots: { default: 'Slot' } }); }); ``` +```js title="component.spec.tsx" +// Or alternatively, using the `jsx` style +import { test } from '@playwright/experimental-ct-vue'; + +test('children', async ({ mount }) => { + const component = await mount(Child); +}); +``` + @@ -614,7 +669,9 @@ Unmount the mounted component from the DOM. This is useful for testing the compo -```js +```js title="component.spec.tsx" +import { test } from '@playwright/experimental-ct-react'; + test('unmount', async ({ mount }) => { const component = await mount(); await component.unmount(); @@ -624,7 +681,9 @@ test('unmount', async ({ mount }) => { -```js +```js title="component.spec.tsx" +import { test } from '@playwright/experimental-ct-solid'; + test('unmount', async ({ mount }) => { const component = await mount(); await component.unmount(); @@ -634,7 +693,9 @@ test('unmount', async ({ mount }) => { -```js +```js title="component.spec.ts" +import { test } from '@playwright/experimental-ct-svelte'; + test('unmount', async ({ mount }) => { const component = await mount(Component); await component.unmount(); @@ -644,13 +705,24 @@ test('unmount', async ({ mount }) => { -```js +```js title="component.spec.ts" +import { test } from '@playwright/experimental-ct-vue'; + test('unmount', async ({ mount }) => { const component = await mount(Component); await component.unmount(); }); ``` +```js title="component.spec.tsx" +// Or alternatively, using the `jsx` style +import { test } from '@playwright/experimental-ct-vue'; + +test('unmount', async ({ mount }) => { + const component = await mount(); + await component.unmount(); +}); +``` @@ -671,11 +743,13 @@ Update props, slots/children, and/or events/callbacks of a mounted component. Th -```js +```js title="component.spec.tsx" +import { test } from '@playwright/experimental-ct-react'; + test('update', async ({ mount }) => { const component = await mount(); await component.update( - {}}>Child + {}}>Child ); }); ``` @@ -683,11 +757,13 @@ test('update', async ({ mount }) => { -```js +```js title="component.spec.tsx" +import { test } from '@playwright/experimental-ct-solid'; + test('update', async ({ mount }) => { const component = await mount(); await component.update( - {}}>Child + {}}>Child ); }); ``` @@ -695,12 +771,14 @@ test('update', async ({ mount }) => { -```js +```js title="component.spec.ts" +import { test } from '@playwright/experimental-ct-svelte'; + test('update', async ({ mount }) => { const component = await mount(Component); await component.update({ props: { msg: 'greetings' }, - on: { callback: () => {} }, + on: { click() {} }, slots: { default: 'Child' } }); }); @@ -709,17 +787,31 @@ test('update', async ({ mount }) => { -```js +```js title="component.spec.ts" +import { test } from '@playwright/experimental-ct-vue'; + test('update', async ({ mount }) => { const component = await mount(Component); await component.update({ props: { msg: 'greetings' }, - on: { callback: () => {} }, + on: { click() {} }, slots: { default: 'Child' } }); }); ``` +```js title="component.spec.tsx" +// Or alternatively, using the `jsx` style +import { test } from '@playwright/experimental-ct-vue'; + +test('update', async ({ mount }) => { + const component = await mount(); + await component.update( + {}}>Child + ); +}); +``` + From 728083b435ac0d7ec379a22bf7f7edc09b416490 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Mon, 9 Sep 2024 15:49:59 +0200 Subject: [PATCH 389/498] chore: allow query as string in Python/.NET (#32516) https://github.com/microsoft/playwright-python/issues/2497 --- docs/src/api/class-apirequestcontext.md | 35 ++++++++++++++++++++----- docs/src/api/params.md | 10 +++++-- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/docs/src/api/class-apirequestcontext.md b/docs/src/api/class-apirequestcontext.md index a6333d6b0a..1d3e728235 100644 --- a/docs/src/api/class-apirequestcontext.md +++ b/docs/src/api/class-apirequestcontext.md @@ -141,7 +141,7 @@ context cookies from the response. The method will automatically follow redirect ### option: APIRequestContext.delete.params = %%-js-fetch-option-params-%% * since: v1.16 -### param: APIRequestContext.delete.params = %%-java-csharp-fetch-params-%% +### param: APIRequestContext.delete.params = %%-java-fetch-params-%% * since: v1.18 ### option: APIRequestContext.delete.params = %%-python-fetch-option-params-%% @@ -150,6 +150,9 @@ context cookies from the response. The method will automatically follow redirect ### option: APIRequestContext.delete.params = %%-csharp-fetch-option-params-%% * since: v1.16 +### option: APIRequestContext.delete.paramsString = %%-csharp-fetch-option-paramsString-%% +* since: v1.47 + ### option: APIRequestContext.delete.headers = %%-js-python-csharp-fetch-option-headers-%% * since: v1.16 @@ -303,7 +306,7 @@ Target URL or Request to get all parameters from. ### option: APIRequestContext.fetch.params = %%-js-fetch-option-params-%% * since: v1.16 -### param: APIRequestContext.fetch.params = %%-java-csharp-fetch-params-%% +### param: APIRequestContext.fetch.params = %%-java-fetch-params-%% * since: v1.18 ### option: APIRequestContext.fetch.params = %%-python-fetch-option-params-%% @@ -312,6 +315,9 @@ Target URL or Request to get all parameters from. ### option: APIRequestContext.fetch.params = %%-csharp-fetch-option-params-%% * since: v1.16 +### option: APIRequestContext.fetch.paramsString = %%-csharp-fetch-option-paramsString-%% +* since: v1.47 + ### option: APIRequestContext.fetch.method * since: v1.16 * langs: js, python, csharp @@ -418,7 +424,7 @@ await request.GetAsync("https://example.com/api/getText", new() { Params = query ### option: APIRequestContext.get.params = %%-js-fetch-option-params-%% * since: v1.16 -### param: APIRequestContext.get.params = %%-java-csharp-fetch-params-%% +### param: APIRequestContext.get.params = %%-java-fetch-params-%% * since: v1.18 ### option: APIRequestContext.get.params = %%-python-fetch-option-params-%% @@ -427,6 +433,9 @@ await request.GetAsync("https://example.com/api/getText", new() { Params = query ### option: APIRequestContext.get.params = %%-csharp-fetch-option-params-%% * since: v1.16 +### option: APIRequestContext.get.paramsString = %%-csharp-fetch-option-paramsString-%% +* since: v1.47 + ### option: APIRequestContext.get.headers = %%-js-python-csharp-fetch-option-headers-%% * since: v1.16 @@ -477,7 +486,7 @@ context cookies from the response. The method will automatically follow redirect ### option: APIRequestContext.head.params = %%-js-fetch-option-params-%% * since: v1.16 -### param: APIRequestContext.head.params = %%-java-csharp-fetch-params-%% +### param: APIRequestContext.head.params = %%-java-fetch-params-%% * since: v1.18 ### option: APIRequestContext.head.params = %%-python-fetch-option-params-%% @@ -486,6 +495,9 @@ context cookies from the response. The method will automatically follow redirect ### option: APIRequestContext.head.params = %%-csharp-fetch-option-params-%% * since: v1.16 +### option: APIRequestContext.head.paramsString = %%-csharp-fetch-option-paramsString-%% +* since: v1.47 + ### option: APIRequestContext.head.headers = %%-js-python-csharp-fetch-option-headers-%% * since: v1.16 @@ -536,7 +548,7 @@ context cookies from the response. The method will automatically follow redirect ### option: APIRequestContext.patch.params = %%-js-fetch-option-params-%% * since: v1.16 -### param: APIRequestContext.patch.params = %%-java-csharp-fetch-params-%% +### param: APIRequestContext.patch.params = %%-java-fetch-params-%% * since: v1.18 ### option: APIRequestContext.patch.params = %%-python-fetch-option-params-%% @@ -545,6 +557,9 @@ context cookies from the response. The method will automatically follow redirect ### option: APIRequestContext.patch.params = %%-csharp-fetch-option-params-%% * since: v1.16 +### option: APIRequestContext.patch.paramsString = %%-csharp-fetch-option-paramsString-%% +* since: v1.47 + ### option: APIRequestContext.patch.headers = %%-js-python-csharp-fetch-option-headers-%% * since: v1.16 @@ -716,7 +731,7 @@ await request.PostAsync("https://example.com/api/uploadScript", new() { Multipar ### option: APIRequestContext.post.params = %%-js-fetch-option-params-%% * since: v1.16 -### param: APIRequestContext.post.params = %%-java-csharp-fetch-params-%% +### param: APIRequestContext.post.params = %%-java-fetch-params-%% * since: v1.18 ### option: APIRequestContext.post.params = %%-python-fetch-option-params-%% @@ -725,6 +740,9 @@ await request.PostAsync("https://example.com/api/uploadScript", new() { Multipar ### option: APIRequestContext.post.params = %%-csharp-fetch-option-params-%% * since: v1.16 +### option: APIRequestContext.post.paramsString = %%-csharp-fetch-option-paramsString-%% +* since: v1.47 + ### option: APIRequestContext.post.headers = %%-js-python-csharp-fetch-option-headers-%% * since: v1.16 @@ -775,7 +793,7 @@ context cookies from the response. The method will automatically follow redirect ### option: APIRequestContext.put.params = %%-js-fetch-option-params-%% * since: v1.16 -### param: APIRequestContext.put.params = %%-java-csharp-fetch-params-%% +### param: APIRequestContext.put.params = %%-java-fetch-params-%% * since: v1.18 ### option: APIRequestContext.put.params = %%-python-fetch-option-params-%% @@ -784,6 +802,9 @@ context cookies from the response. The method will automatically follow redirect ### option: APIRequestContext.put.params = %%-csharp-fetch-option-params-%% * since: v1.16 +### option: APIRequestContext.put.paramsString = %%-csharp-fetch-option-paramsString-%% +* since: v1.47 + ### option: APIRequestContext.put.headers = %%-js-python-csharp-fetch-option-headers-%% * since: v1.16 diff --git a/docs/src/api/params.md b/docs/src/api/params.md index ccd6bae8fe..cbec1a5e25 100644 --- a/docs/src/api/params.md +++ b/docs/src/api/params.md @@ -364,7 +364,7 @@ Query parameters to be sent with the URL. ## python-fetch-option-params * langs: python -- `params` <[Object]<[string], [string]|[float]|[boolean]>> +- `params` <[Object]<[string], [string]|[float]|[boolean]>|[string]> Query parameters to be sent with the URL. @@ -374,7 +374,13 @@ Query parameters to be sent with the URL. Query parameters to be sent with the URL. -## java-csharp-fetch-params +## csharp-fetch-option-paramsString +* langs: csharp +- `paramsString` <[string]> + +Query parameters to be sent with the URL. + +## java-fetch-params * langs: java - `options` ?<[RequestOptions]> From d0309656885728dfb8760426cfb54fae829b8287 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Mon, 9 Sep 2024 10:13:26 -0700 Subject: [PATCH 390/498] chore: addInitScript and auth (unsuccessful) in bidi (#32500) --- .../src/server/bidi/bidiBrowser.ts | 12 +++++++--- .../src/server/bidi/bidiPage.ts | 23 ++++++++++++++----- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/packages/playwright-core/src/server/bidi/bidiBrowser.ts b/packages/playwright-core/src/server/bidi/bidiBrowser.ts index cc3fbc0562..0c658a82b4 100644 --- a/packages/playwright-core/src/server/bidi/bidiBrowser.ts +++ b/packages/playwright-core/src/server/bidi/bidiBrowser.ts @@ -195,8 +195,12 @@ export class BidiBrowserContext extends BrowserContext { this._authenticateProxyViaHeader(); } + private _bidiPages() { + return [...this._browser._bidiPages.values()].filter(bidiPage => bidiPage._browserContext === this); + } + pages(): Page[] { - return []; + return this._bidiPages().map(bidiPage => bidiPage._initializedPage).filter(Boolean) as Page[]; } async newPageDelegate(): Promise { @@ -269,11 +273,13 @@ export class BidiBrowserContext extends BrowserContext { } async doSetHTTPCredentials(httpCredentials?: types.Credentials): Promise { + this._options.httpCredentials = httpCredentials; + for (const page of this.pages()) + await (page._delegate as BidiPage).updateHttpCredentials(); } async doAddInitScript(initScript: InitScript) { - // for (const page of this.pages()) - // await (page._delegate as WKPage)._updateBootstrapScript(); + await Promise.all(this.pages().map(page => (page._delegate as BidiPage).addInitScript(initScript))); } async doRemoveNonInternalInitScripts() { diff --git a/packages/playwright-core/src/server/bidi/bidiPage.ts b/packages/playwright-core/src/server/bidi/bidiPage.ts index 9ecb5c789b..f06924d70f 100644 --- a/packages/playwright-core/src/server/bidi/bidiPage.ts +++ b/packages/playwright-core/src/server/bidi/bidiPage.ts @@ -47,6 +47,7 @@ export class BidiPage implements PageDelegate { readonly _browserContext: BidiBrowserContext; readonly _networkManager: BidiNetworkManager; _initializedPage: Page | null = null; + private _initScriptIds: string[] = []; constructor(browserContext: BidiBrowserContext, bidiSession: BidiSession, opener: BidiPage | null) { this._session = bidiSession; @@ -92,9 +93,14 @@ export class BidiPage implements PageDelegate { this.updateHttpCredentials(), this.updateRequestInterception(), this._updateViewport(), + this._addAllInitScripts(), ]); } + private async _addAllInitScripts() { + return Promise.all(this._page.allInitScripts().map(initScript => this.addInitScript(initScript))); + } + potentiallyUninitializedPage(): Page { return this._page; } @@ -318,15 +324,20 @@ export class BidiPage implements PageDelegate { } async addInitScript(initScript: InitScript): Promise { - await this._updateBootstrapScript(); + const { script } = await this._session.send('script.addPreloadScript', { + // TODO: remove function call from the source. + functionDeclaration: `() => { return ${initScript.source} }`, + // TODO: push to iframes? + contexts: [this._session.sessionId], + }); + if (!initScript.internal) + this._initScriptIds.push(script); } async removeNonInternalInitScripts() { - await this._updateBootstrapScript(); - } - - async _updateBootstrapScript(): Promise { - throw new Error('Method not implemented.'); + const promises = this._initScriptIds.map(script => this._session.send('script.removePreloadScript', { script })); + this._initScriptIds = []; + await Promise.all(promises); } async closePage(runBeforeUnload: boolean): Promise { From 363e79ee87feb309b6a1e187a81cd444d2251301 Mon Sep 17 00:00:00 2001 From: Playwright Service <89237858+playwrightmachine@users.noreply.github.com> Date: Mon, 9 Sep 2024 11:07:37 -0700 Subject: [PATCH 391/498] feat(webkit): roll to r2071 (#32521) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- packages/playwright-core/browsers.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/playwright-core/browsers.json b/packages/playwright-core/browsers.json index 0ea21f1ecc..2b0dc63ce7 100644 --- a/packages/playwright-core/browsers.json +++ b/packages/playwright-core/browsers.json @@ -27,7 +27,7 @@ }, { "name": "webkit", - "revision": "2070", + "revision": "2071", "installByDefault": true, "revisionOverrides": { "mac10.14": "1446", From 4b5422a3c7ecfe871eb4da3036e31725271a69da Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Mon, 9 Sep 2024 22:07:28 +0200 Subject: [PATCH 392/498] fix(ui-mode): use server side path separator (#32523) Fixes https://github.com/microsoft/playwright/issues/32323 --- .../src/server/trace/viewer/traceViewer.ts | 2 ++ packages/trace-viewer/src/ui/uiModeTraceView.tsx | 10 ++++++++-- packages/trace-viewer/src/ui/uiModeView.tsx | 12 ++++++------ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/playwright-core/src/server/trace/viewer/traceViewer.ts b/packages/playwright-core/src/server/trace/viewer/traceViewer.ts index d053a3e643..6ca0319aa3 100644 --- a/packages/playwright-core/src/server/trace/viewer/traceViewer.ts +++ b/packages/playwright-core/src/server/trace/viewer/traceViewer.ts @@ -109,6 +109,8 @@ export async function startTraceViewerServer(options?: TraceViewerServerOptions) export async function installRootRedirect(server: HttpServer, traceUrls: string[], options: TraceViewerRedirectOptions) { const params = new URLSearchParams(); + if (path.sep !== path.posix.sep) + params.set('pathSeparator', path.sep); for (const traceUrl of traceUrls) params.append('trace', traceUrl); if (server.wsGuid()) diff --git a/packages/trace-viewer/src/ui/uiModeTraceView.tsx b/packages/trace-viewer/src/ui/uiModeTraceView.tsx index e34ab6aede..8027005812 100644 --- a/packages/trace-viewer/src/ui/uiModeTraceView.tsx +++ b/packages/trace-viewer/src/ui/uiModeTraceView.tsx @@ -31,7 +31,8 @@ export const TraceView: React.FC<{ rootDir?: string, onOpenExternally?: (location: SourceLocation) => void, revealSource?: boolean, -}> = ({ item, rootDir, onOpenExternally, revealSource }) => { + pathSeparator: string, +}> = ({ item, rootDir, onOpenExternally, revealSource, pathSeparator }) => { const [model, setModel] = React.useState<{ model: MultiTraceModel, isLive: boolean } | undefined>(); const [counter, setCounter] = React.useState(0); const pollTimer = React.useRef(null); @@ -69,7 +70,12 @@ export const TraceView: React.FC<{ return; } - const traceLocation = `${outputDir}/${artifactsFolderName(result!.workerIndex)}/traces/${item.testCase?.id}.json`; + const traceLocation = [ + outputDir, + artifactsFolderName(result!.workerIndex), + 'traces', + `${item.testCase?.id}.json` + ].join(pathSeparator); // Start polling running test. pollTimer.current = setTimeout(async () => { try { diff --git a/packages/trace-viewer/src/ui/uiModeView.tsx b/packages/trace-viewer/src/ui/uiModeView.tsx index cad1c2eb58..2c4b61fdad 100644 --- a/packages/trace-viewer/src/ui/uiModeView.tsx +++ b/packages/trace-viewer/src/ui/uiModeView.tsx @@ -38,8 +38,6 @@ import { TestListView } from './uiModeTestListView'; import { TraceView } from './uiModeTraceView'; import { SettingsView } from './settingsView'; -const pathSeparator = navigator.userAgent.toLowerCase().includes('windows') ? '\\' : '/'; - let xtermSize = { cols: 80, rows: 24 }; const xtermDataSource: XtermDataSource = { pending: [], @@ -63,6 +61,7 @@ const queryParams = { outputDir: searchParams.get('outputDir') || undefined, updateSnapshots: (searchParams.get('updateSnapshots') as 'all' | 'none' | 'missing' | undefined) || undefined, reporters: searchParams.has('reporter') ? searchParams.getAll('reporter') : undefined, + pathSeparator: searchParams.get('pathSeparator') || '/', }; if (queryParams.updateSnapshots && !['all', 'none', 'missing'].includes(queryParams.updateSnapshots)) queryParams.updateSnapshots = undefined; @@ -170,7 +169,7 @@ export const UIModeView: React.FC<{}> = ({ onError: error => { xtermDataSource.write((error.stack || error.value || '') + '\n'); }, - pathSeparator, + pathSeparator: queryParams.pathSeparator, }); setTeleSuiteUpdater(teleSuiteUpdater); @@ -242,8 +241,8 @@ export const UIModeView: React.FC<{}> = ({ // Test tree is built from the model and filters. const { testTree } = React.useMemo(() => { if (!testModel) - return { testTree: new TestTree('', new TeleSuite('', 'root'), [], projectFilters, pathSeparator) }; - const testTree = new TestTree('', testModel.rootSuite, testModel.loadErrors, projectFilters, pathSeparator); + return { testTree: new TestTree('', new TeleSuite('', 'root'), [], projectFilters, queryParams.pathSeparator) }; + const testTree = new TestTree('', testModel.rootSuite, testModel.loadErrors, projectFilters, queryParams.pathSeparator); testTree.filterTree(filterText, statusFilters, isRunningTest ? runningState?.testIds : undefined); testTree.sortAndPropagateStatus(); testTree.shortenRoot(); @@ -332,7 +331,7 @@ export const UIModeView: React.FC<{}> = ({ // run affected watched tests const testModel = teleSuiteUpdater.asModel(); - const testTree = new TestTree('', testModel.rootSuite, testModel.loadErrors, projectFilters, pathSeparator); + const testTree = new TestTree('', testModel.rootSuite, testModel.loadErrors, projectFilters, queryParams.pathSeparator); const testIds: string[] = []; const set = new Set(params.testFiles); @@ -435,6 +434,7 @@ export const UIModeView: React.FC<{}> = ({
Date: Mon, 9 Sep 2024 13:12:20 -0700 Subject: [PATCH 393/498] chore: roll expect and move it to third party (#32458) --- package-lock.json | 161 +- package.json | 3 + packages/playwright/ThirdPartyNotices.txt | 392 +- .../bundles/expect/package-lock.json | 436 +- .../playwright/bundles/expect/package.json | 8 +- .../bundles/expect/src/expectBundleImpl.ts | 24 +- .../bundles/expect/third_party/LICENSE | 21 + .../expect/third_party/asymmetricMatchers.ts | 362 ++ .../extractExpectedAssertionsErrors.ts | 85 + .../bundles/expect/third_party/index.ts | 463 +++ .../expect/third_party/jestMatchersObject.ts | 144 + .../bundles/expect/third_party/matchers.ts | 983 +++++ .../bundles/expect/third_party/print.ts | 134 + .../bundles/expect/third_party/spyMatchers.ts | 1184 ++++++ .../expect/third_party/toThrowMatchers.ts | 481 +++ .../bundles/expect/third_party/types.ts | 353 ++ .../playwright/src/common/expectBundle.ts | 5 +- packages/web/src/ansi2html.ts | 5 +- tests/config/utils.ts | 35 + tests/expect/assertionCounts.test.ts | 78 + tests/expect/asymmetricMatchers.test.ts | 519 +++ tests/expect/customEqualityTesters.test.ts | 197 + .../customEqualityTestersRecursive.test.ts | 246 ++ tests/expect/extend.test.ts | 247 ++ tests/expect/fixtures.ts | 108 + tests/expect/matchers.snapshots.js | 3614 +++++++++++++++++ tests/expect/matchers.test.ts | 2338 +++++++++++ tests/expect/spyMatchers.snapshots.js | 2600 ++++++++++++ tests/expect/spyMatchers.test.ts | 1499 +++++++ tests/expect/stacktrace.test.ts | 71 + tests/expect/symbolInObjects.test.ts | 43 + tests/expect/toThrowMatchers.snapshots.js | 456 +++ tests/expect/toThrowMatchers.test.ts | 591 +++ tests/playwright-test/playwright.config.ts | 4 + utils/check_deps.js | 4 +- 35 files changed, 17407 insertions(+), 487 deletions(-) create mode 100644 packages/playwright/bundles/expect/third_party/LICENSE create mode 100644 packages/playwright/bundles/expect/third_party/asymmetricMatchers.ts create mode 100644 packages/playwright/bundles/expect/third_party/extractExpectedAssertionsErrors.ts create mode 100644 packages/playwright/bundles/expect/third_party/index.ts create mode 100644 packages/playwright/bundles/expect/third_party/jestMatchersObject.ts create mode 100644 packages/playwright/bundles/expect/third_party/matchers.ts create mode 100644 packages/playwright/bundles/expect/third_party/print.ts create mode 100644 packages/playwright/bundles/expect/third_party/spyMatchers.ts create mode 100644 packages/playwright/bundles/expect/third_party/toThrowMatchers.ts create mode 100644 packages/playwright/bundles/expect/third_party/types.ts create mode 100644 tests/expect/assertionCounts.test.ts create mode 100644 tests/expect/asymmetricMatchers.test.ts create mode 100644 tests/expect/customEqualityTesters.test.ts create mode 100644 tests/expect/customEqualityTestersRecursive.test.ts create mode 100644 tests/expect/extend.test.ts create mode 100644 tests/expect/fixtures.ts create mode 100644 tests/expect/matchers.snapshots.js create mode 100644 tests/expect/matchers.test.ts create mode 100644 tests/expect/spyMatchers.snapshots.js create mode 100644 tests/expect/spyMatchers.test.ts create mode 100644 tests/expect/stacktrace.test.ts create mode 100644 tests/expect/symbolInObjects.test.ts create mode 100644 tests/expect/toThrowMatchers.snapshots.js create mode 100644 tests/expect/toThrowMatchers.test.ts diff --git a/package-lock.json b/package-lock.json index 4e24bcfa49..b7cdad125e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "@types/babel__core": "^7.20.2", "@types/codemirror": "^5.60.7", "@types/formidable": "^2.0.4", + "@types/immutable": "^3.8.7", "@types/node": "^18.19.39", "@types/react": "^18.0.12", "@types/react-dom": "^18.0.5", @@ -37,6 +38,7 @@ "@vitejs/plugin-basic-ssl": "^1.1.0", "@vitejs/plugin-react": "^4.2.1", "@zip.js/zip.js": "^2.7.29", + "ansi-styles": "^4.3.0", "chokidar": "^3.5.3", "chromium-bidi": "^0.6.4", "colors": "^1.4.0", @@ -51,6 +53,7 @@ "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", "formidable": "^2.1.1", + "immutable": "^4.3.7", "license-checker": "^25.0.1", "mime": "^3.0.0", "node-stream-zip": "^1.15.0", @@ -1832,6 +1835,16 @@ "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "dev": true }, + "node_modules/@types/immutable": { + "version": "3.8.7", + "resolved": "https://registry.npmjs.org/@types/immutable/-/immutable-3.8.7.tgz", + "integrity": "sha512-nsHFDX48Tl3RaP4BF47HHe5njx40Pcp+0a8CIqzJata80Fp7JzkcuGB7UhZBGjH9aA1fMEahIqvPQQNmro5YLg==", + "deprecated": "This is a stub types definition for Facebook's Immutable (https://github.com/facebook/immutable-js). Facebook's Immutable provides its own type definitions, so you don't need @types/immutable installed!", + "dev": true, + "dependencies": { + "immutable": "*" + } + }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -2359,16 +2372,38 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/ansi-styles/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ansi-styles/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/ansi-to-html": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.7.2.tgz", @@ -2802,6 +2837,17 @@ "node": ">=4" } }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -2942,21 +2988,6 @@ "node": ">=10.0.0" } }, - "node_modules/concurrently/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/concurrently/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2985,24 +3016,6 @@ "node": ">=8" } }, - "node_modules/concurrently/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/concurrently/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/concurrently/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3779,21 +3792,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3820,24 +3818,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -4635,6 +4615,12 @@ "node": ">= 4" } }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -7772,39 +7758,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 44d259d7a4..c095546c7d 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "@types/babel__core": "^7.20.2", "@types/codemirror": "^5.60.7", "@types/formidable": "^2.0.4", + "@types/immutable": "^3.8.7", "@types/node": "^18.19.39", "@types/react": "^18.0.12", "@types/react-dom": "^18.0.5", @@ -76,6 +77,7 @@ "@vitejs/plugin-basic-ssl": "^1.1.0", "@vitejs/plugin-react": "^4.2.1", "@zip.js/zip.js": "^2.7.29", + "ansi-styles": "^4.3.0", "chokidar": "^3.5.3", "chromium-bidi": "^0.6.4", "colors": "^1.4.0", @@ -90,6 +92,7 @@ "eslint-plugin-react": "^7.35.0", "eslint-plugin-react-hooks": "^4.6.2", "formidable": "^2.1.1", + "immutable": "^4.3.7", "license-checker": "^25.0.1", "mime": "^3.0.0", "node-stream-zip": "^1.15.0", diff --git a/packages/playwright/ThirdPartyNotices.txt b/packages/playwright/ThirdPartyNotices.txt index 020b2bc3f6..f2bb64d661 100644 --- a/packages/playwright/ThirdPartyNotices.txt +++ b/packages/playwright/ThirdPartyNotices.txt @@ -5,8 +5,8 @@ THIRD-PARTY SOFTWARE NOTICES AND INFORMATION This project incorporates components from the projects listed below. The original copyright notices and the licenses under which Microsoft received such components are set forth below. Microsoft reserves all rights not expressly granted herein, whether by implication, estoppel or otherwise. - @ampproject/remapping@2.2.1 (https://github.com/ampproject/remapping) -- @babel/code-frame@7.22.5 (https://github.com/babel/babel) - @babel/code-frame@7.24.2 (https://github.com/babel/babel) +- @babel/code-frame@7.24.7 (https://github.com/babel/babel) - @babel/compat-data@7.23.5 (https://github.com/babel/babel) - @babel/core@7.24.4 (https://github.com/babel/babel) - @babel/generator@7.24.4 (https://github.com/babel/babel) @@ -27,11 +27,11 @@ This project incorporates components from the projects listed below. The origina - @babel/helper-split-export-declaration@7.22.6 (https://github.com/babel/babel) - @babel/helper-string-parser@7.23.4 (https://github.com/babel/babel) - @babel/helper-validator-identifier@7.22.20 (https://github.com/babel/babel) -- @babel/helper-validator-identifier@7.22.5 (https://github.com/babel/babel) +- @babel/helper-validator-identifier@7.24.7 (https://github.com/babel/babel) - @babel/helper-validator-option@7.23.5 (https://github.com/babel/babel) - @babel/helpers@7.24.4 (https://github.com/babel/babel) -- @babel/highlight@7.22.5 (https://github.com/babel/babel) - @babel/highlight@7.24.2 (https://github.com/babel/babel) +- @babel/highlight@7.24.7 (https://github.com/babel/babel) - @babel/parser@7.24.4 (https://github.com/babel/babel) - @babel/plugin-proposal-decorators@7.24.1 (https://github.com/babel/babel) - @babel/plugin-proposal-explicit-resource-management@7.24.1 (https://github.com/babel/babel) @@ -67,22 +67,22 @@ This project incorporates components from the projects listed below. The origina - @babel/template@7.24.0 (https://github.com/babel/babel) - @babel/traverse@7.24.1 (https://github.com/babel/babel) - @babel/types@7.24.0 (https://github.com/babel/babel) -- @jest/expect-utils@29.5.0 (https://github.com/facebook/jest) -- @jest/schemas@29.4.3 (https://github.com/facebook/jest) -- @jest/types@29.5.0 (https://github.com/facebook/jest) +- @jest/expect-utils@29.7.0 (https://github.com/jestjs/jest) +- @jest/schemas@29.6.3 (https://github.com/jestjs/jest) +- @jest/types@29.6.3 (https://github.com/jestjs/jest) - @jridgewell/gen-mapping@0.3.5 (https://github.com/jridgewell/gen-mapping) - @jridgewell/resolve-uri@3.1.1 (https://github.com/jridgewell/resolve-uri) - @jridgewell/set-array@1.2.1 (https://github.com/jridgewell/set-array) - @jridgewell/sourcemap-codec@1.4.15 (https://github.com/jridgewell/sourcemap-codec) - @jridgewell/trace-mapping@0.3.25 (https://github.com/jridgewell/trace-mapping) -- @sinclair/typebox@0.25.24 (https://github.com/sinclairzx81/typebox) -- @types/istanbul-lib-coverage@2.0.4 (https://github.com/DefinitelyTyped/DefinitelyTyped) -- @types/istanbul-lib-report@3.0.0 (https://github.com/DefinitelyTyped/DefinitelyTyped) -- @types/istanbul-reports@3.0.1 (https://github.com/DefinitelyTyped/DefinitelyTyped) -- @types/node@20.2.5 (https://github.com/DefinitelyTyped/DefinitelyTyped) -- @types/stack-utils@2.0.1 (https://github.com/DefinitelyTyped/DefinitelyTyped) -- @types/yargs-parser@21.0.0 (https://github.com/DefinitelyTyped/DefinitelyTyped) -- @types/yargs@17.0.24 (https://github.com/DefinitelyTyped/DefinitelyTyped) +- @sinclair/typebox@0.27.8 (https://github.com/sinclairzx81/typebox) +- @types/istanbul-lib-coverage@2.0.6 (https://github.com/DefinitelyTyped/DefinitelyTyped) +- @types/istanbul-lib-report@3.0.3 (https://github.com/DefinitelyTyped/DefinitelyTyped) +- @types/istanbul-reports@3.0.4 (https://github.com/DefinitelyTyped/DefinitelyTyped) +- @types/node@22.5.4 (https://github.com/DefinitelyTyped/DefinitelyTyped) +- @types/stack-utils@2.0.3 (https://github.com/DefinitelyTyped/DefinitelyTyped) +- @types/yargs-parser@21.0.3 (https://github.com/DefinitelyTyped/DefinitelyTyped) +- @types/yargs@17.0.33 (https://github.com/DefinitelyTyped/DefinitelyTyped) - ansi-colors@4.1.3 (https://github.com/doowb/ansi-colors) - ansi-styles@3.2.1 (https://github.com/chalk/ansi-styles) - ansi-styles@4.3.0 (https://github.com/chalk/ansi-styles) @@ -96,7 +96,7 @@ This project incorporates components from the projects listed below. The origina - chalk@2.4.2 (https://github.com/chalk/chalk) - chalk@4.1.2 (https://github.com/chalk/chalk) - chokidar@3.6.0 (https://github.com/paulmillr/chokidar) -- ci-info@3.8.0 (https://github.com/watson/ci-info) +- ci-info@3.9.0 (https://github.com/watson/ci-info) - codemirror-shadow-1@0.0.1 (https://github.com/codemirror/CodeMirror) - color-convert@1.9.3 (https://github.com/Qix-/color-convert) - color-convert@2.0.1 (https://github.com/Qix-/color-convert) @@ -104,13 +104,12 @@ This project incorporates components from the projects listed below. The origina - color-name@1.1.4 (https://github.com/colorjs/color-name) - convert-source-map@2.0.0 (https://github.com/thlorenz/convert-source-map) - debug@4.3.4 (https://github.com/debug-js/debug) -- diff-sequences@29.4.3 (https://github.com/facebook/jest) +- diff-sequences@29.6.3 (https://github.com/jestjs/jest) - electron-to-chromium@1.4.638 (https://github.com/kilian/electron-to-chromium) - enquirer@2.3.6 (https://github.com/enquirer/enquirer) - escalade@3.1.1 (https://github.com/lukeed/escalade) - escape-string-regexp@1.0.5 (https://github.com/sindresorhus/escape-string-regexp) - escape-string-regexp@2.0.0 (https://github.com/sindresorhus/escape-string-regexp) -- expect@29.5.0 (https://github.com/facebook/jest) - fill-range@7.1.1 (https://github.com/jonschlinkert/fill-range) - gensync@1.0.0-beta.2 (https://github.com/loganfsmyth/gensync) - glob-parent@5.1.2 (https://github.com/gulpjs/glob-parent) @@ -122,11 +121,12 @@ This project incorporates components from the projects listed below. The origina - is-extglob@2.1.1 (https://github.com/jonschlinkert/is-extglob) - is-glob@4.0.3 (https://github.com/micromatch/is-glob) - is-number@7.0.0 (https://github.com/jonschlinkert/is-number) -- jest-diff@29.5.0 (https://github.com/facebook/jest) -- jest-get-type@29.4.3 (https://github.com/facebook/jest) -- jest-matcher-utils@29.5.0 (https://github.com/facebook/jest) -- jest-message-util@29.5.0 (https://github.com/facebook/jest) -- jest-util@29.5.0 (https://github.com/facebook/jest) +- jest-diff@29.7.0 (https://github.com/jestjs/jest) +- jest-get-type@29.6.3 (https://github.com/jestjs/jest) +- jest-matcher-utils@29.7.0 (https://github.com/jestjs/jest) +- jest-message-util@29.7.0 (https://github.com/jestjs/jest) +- jest-mock@29.7.0 (https://github.com/jestjs/jest) +- jest-util@29.7.0 (https://github.com/jestjs/jest) - js-tokens@4.0.0 (https://github.com/lydell/js-tokens) - jsesc@2.5.2 (https://github.com/mathiasbynens/jsesc) - json5@2.2.3 (https://github.com/json5/json5) @@ -136,10 +136,11 @@ This project incorporates components from the projects listed below. The origina - node-releases@2.0.14 (https://github.com/chicoxyzzy/node-releases) - normalize-path@3.0.0 (https://github.com/jonschlinkert/normalize-path) - picocolors@1.0.0 (https://github.com/alexeyraspopov/picocolors) +- picocolors@1.1.0 (https://github.com/alexeyraspopov/picocolors) - picomatch@2.3.1 (https://github.com/micromatch/picomatch) - pirates@4.0.4 (https://github.com/danez/pirates) -- pretty-format@29.5.0 (https://github.com/facebook/jest) -- react-is@18.2.0 (https://github.com/facebook/react) +- pretty-format@29.7.0 (https://github.com/jestjs/jest) +- react-is@18.3.1 (https://github.com/facebook/react) - readdirp@3.6.0 (https://github.com/paulmillr/readdirp) - semver@6.3.1 (https://github.com/npm/node-semver) - slash@3.0.0 (https://github.com/sindresorhus/slash) @@ -151,6 +152,7 @@ This project incorporates components from the projects listed below. The origina - supports-color@7.2.0 (https://github.com/chalk/supports-color) - to-fast-properties@2.0.0 (https://github.com/sindresorhus/to-fast-properties) - to-regex-range@5.0.1 (https://github.com/micromatch/to-regex-range) +- undici-types@6.19.8 (https://github.com/nodejs/undici) - update-browserslist-db@1.0.13 (https://github.com/browserslist/update-db) - yallist@3.1.1 (https://github.com/isaacs/yallist) @@ -360,33 +362,6 @@ Apache License ========================================= END OF @ampproject/remapping@2.2.1 AND INFORMATION -%% @babel/code-frame@7.22.5 NOTICES AND INFORMATION BEGIN HERE -========================================= -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF @babel/code-frame@7.22.5 AND INFORMATION - %% @babel/code-frame@7.24.2 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -414,6 +389,33 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= END OF @babel/code-frame@7.24.2 AND INFORMATION +%% @babel/code-frame@7.24.7 NOTICES AND INFORMATION BEGIN HERE +========================================= +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF @babel/code-frame@7.24.7 AND INFORMATION + %% @babel/compat-data@7.23.5 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -954,7 +956,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= END OF @babel/helper-validator-identifier@7.22.20 AND INFORMATION -%% @babel/helper-validator-identifier@7.22.5 NOTICES AND INFORMATION BEGIN HERE +%% @babel/helper-validator-identifier@7.24.7 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -979,7 +981,7 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF @babel/helper-validator-identifier@7.22.5 AND INFORMATION +END OF @babel/helper-validator-identifier@7.24.7 AND INFORMATION %% @babel/helper-validator-option@7.23.5 NOTICES AND INFORMATION BEGIN HERE ========================================= @@ -1035,33 +1037,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= END OF @babel/helpers@7.24.4 AND INFORMATION -%% @babel/highlight@7.22.5 NOTICES AND INFORMATION BEGIN HERE -========================================= -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF @babel/highlight@7.22.5 AND INFORMATION - %% @babel/highlight@7.24.2 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -1089,6 +1064,33 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= END OF @babel/highlight@7.24.2 AND INFORMATION +%% @babel/highlight@7.24.7 NOTICES AND INFORMATION BEGIN HERE +========================================= +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF @babel/highlight@7.24.7 AND INFORMATION + %% @babel/parser@7.24.4 NOTICES AND INFORMATION BEGIN HERE ========================================= Copyright (C) 2012-2014 by various contributors (see AUTHORS) @@ -2031,7 +2033,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= END OF @babel/types@7.24.0 AND INFORMATION -%% @jest/expect-utils@29.5.0 NOTICES AND INFORMATION BEGIN HERE +%% @jest/expect-utils@29.7.0 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -2055,9 +2057,9 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF @jest/expect-utils@29.5.0 AND INFORMATION +END OF @jest/expect-utils@29.7.0 AND INFORMATION -%% @jest/schemas@29.4.3 NOTICES AND INFORMATION BEGIN HERE +%% @jest/schemas@29.6.3 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -2081,9 +2083,9 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF @jest/schemas@29.4.3 AND INFORMATION +END OF @jest/schemas@29.6.3 AND INFORMATION -%% @jest/types@29.5.0 NOTICES AND INFORMATION BEGIN HERE +%% @jest/types@29.6.3 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -2107,7 +2109,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF @jest/types@29.5.0 AND INFORMATION +END OF @jest/types@29.6.3 AND INFORMATION %% @jridgewell/gen-mapping@0.3.5 NOTICES AND INFORMATION BEGIN HERE ========================================= @@ -2231,7 +2233,7 @@ SOFTWARE. ========================================= END OF @jridgewell/trace-mapping@0.3.25 AND INFORMATION -%% @sinclair/typebox@0.25.24 NOTICES AND INFORMATION BEGIN HERE +%% @sinclair/typebox@0.27.8 NOTICES AND INFORMATION BEGIN HERE ========================================= TypeBox: JSON Schema Type Builder with Static Type Resolution for TypeScript @@ -2257,9 +2259,9 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF @sinclair/typebox@0.25.24 AND INFORMATION +END OF @sinclair/typebox@0.27.8 AND INFORMATION -%% @types/istanbul-lib-coverage@2.0.4 NOTICES AND INFORMATION BEGIN HERE +%% @types/istanbul-lib-coverage@2.0.6 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -2283,35 +2285,9 @@ MIT License OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE ========================================= -END OF @types/istanbul-lib-coverage@2.0.4 AND INFORMATION +END OF @types/istanbul-lib-coverage@2.0.6 AND INFORMATION -%% @types/istanbul-lib-report@3.0.0 NOTICES AND INFORMATION BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE -========================================= -END OF @types/istanbul-lib-report@3.0.0 AND INFORMATION - -%% @types/istanbul-reports@3.0.1 NOTICES AND INFORMATION BEGIN HERE +%% @types/istanbul-lib-report@3.0.3 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -2335,9 +2311,9 @@ MIT License OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE ========================================= -END OF @types/istanbul-reports@3.0.1 AND INFORMATION +END OF @types/istanbul-lib-report@3.0.3 AND INFORMATION -%% @types/node@20.2.5 NOTICES AND INFORMATION BEGIN HERE +%% @types/istanbul-reports@3.0.4 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -2361,9 +2337,9 @@ MIT License OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE ========================================= -END OF @types/node@20.2.5 AND INFORMATION +END OF @types/istanbul-reports@3.0.4 AND INFORMATION -%% @types/stack-utils@2.0.1 NOTICES AND INFORMATION BEGIN HERE +%% @types/node@22.5.4 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -2387,9 +2363,9 @@ MIT License OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE ========================================= -END OF @types/stack-utils@2.0.1 AND INFORMATION +END OF @types/node@22.5.4 AND INFORMATION -%% @types/yargs-parser@21.0.0 NOTICES AND INFORMATION BEGIN HERE +%% @types/stack-utils@2.0.3 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -2413,9 +2389,9 @@ MIT License OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE ========================================= -END OF @types/yargs-parser@21.0.0 AND INFORMATION +END OF @types/stack-utils@2.0.3 AND INFORMATION -%% @types/yargs@17.0.24 NOTICES AND INFORMATION BEGIN HERE +%% @types/yargs-parser@21.0.3 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -2439,7 +2415,33 @@ MIT License OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE ========================================= -END OF @types/yargs@17.0.24 AND INFORMATION +END OF @types/yargs-parser@21.0.3 AND INFORMATION + +%% @types/yargs@17.0.33 NOTICES AND INFORMATION BEGIN HERE +========================================= +MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE +========================================= +END OF @types/yargs@17.0.33 AND INFORMATION %% ansi-colors@4.1.3 NOTICES AND INFORMATION BEGIN HERE ========================================= @@ -3074,11 +3076,11 @@ THE SOFTWARE. ========================================= END OF chokidar@3.6.0 AND INFORMATION -%% ci-info@3.8.0 NOTICES AND INFORMATION BEGIN HERE +%% ci-info@3.9.0 NOTICES AND INFORMATION BEGIN HERE ========================================= The MIT License (MIT) -Copyright (c) 2016-2023 Thomas Watson Steen +Copyright (c) 2016 Thomas Watson Steen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -3098,7 +3100,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF ci-info@3.8.0 AND INFORMATION +END OF ci-info@3.9.0 AND INFORMATION %% codemirror-shadow-1@0.0.1 NOTICES AND INFORMATION BEGIN HERE ========================================= @@ -3254,7 +3256,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= END OF debug@4.3.4 AND INFORMATION -%% diff-sequences@29.4.3 NOTICES AND INFORMATION BEGIN HERE +%% diff-sequences@29.6.3 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -3278,7 +3280,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF diff-sequences@29.4.3 AND INFORMATION +END OF diff-sequences@29.6.3 AND INFORMATION %% electron-to-chromium@1.4.638 NOTICES AND INFORMATION BEGIN HERE ========================================= @@ -3370,32 +3372,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ========================================= END OF escape-string-regexp@2.0.0 AND INFORMATION -%% expect@29.5.0 NOTICES AND INFORMATION BEGIN HERE -========================================= -MIT License - -Copyright (c) Meta Platforms, Inc. and affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -========================================= -END OF expect@29.5.0 AND INFORMATION - %% fill-range@7.1.1 NOTICES AND INFORMATION BEGIN HERE ========================================= The MIT License (MIT) @@ -3608,7 +3584,7 @@ THE SOFTWARE. ========================================= END OF is-number@7.0.0 AND INFORMATION -%% jest-diff@29.5.0 NOTICES AND INFORMATION BEGIN HERE +%% jest-diff@29.7.0 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -3632,9 +3608,9 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF jest-diff@29.5.0 AND INFORMATION +END OF jest-diff@29.7.0 AND INFORMATION -%% jest-get-type@29.4.3 NOTICES AND INFORMATION BEGIN HERE +%% jest-get-type@29.6.3 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -3658,9 +3634,9 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF jest-get-type@29.4.3 AND INFORMATION +END OF jest-get-type@29.6.3 AND INFORMATION -%% jest-matcher-utils@29.5.0 NOTICES AND INFORMATION BEGIN HERE +%% jest-matcher-utils@29.7.0 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -3684,9 +3660,9 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF jest-matcher-utils@29.5.0 AND INFORMATION +END OF jest-matcher-utils@29.7.0 AND INFORMATION -%% jest-message-util@29.5.0 NOTICES AND INFORMATION BEGIN HERE +%% jest-message-util@29.7.0 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -3710,9 +3686,9 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF jest-message-util@29.5.0 AND INFORMATION +END OF jest-message-util@29.7.0 AND INFORMATION -%% jest-util@29.5.0 NOTICES AND INFORMATION BEGIN HERE +%% jest-mock@29.7.0 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -3736,7 +3712,33 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF jest-util@29.5.0 AND INFORMATION +END OF jest-mock@29.7.0 AND INFORMATION + +%% jest-util@29.7.0 NOTICES AND INFORMATION BEGIN HERE +========================================= +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF jest-util@29.7.0 AND INFORMATION %% js-tokens@4.0.0 NOTICES AND INFORMATION BEGIN HERE ========================================= @@ -3961,6 +3963,26 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ========================================= END OF picocolors@1.0.0 AND INFORMATION +%% picocolors@1.1.0 NOTICES AND INFORMATION BEGIN HERE +========================================= +ISC License + +Copyright (c) 2021-2024 Oleksii Raspopov, Kostiantyn Denysov, Anton Verinov + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF picocolors@1.1.0 AND INFORMATION + %% picomatch@2.3.1 NOTICES AND INFORMATION BEGIN HERE ========================================= The MIT License (MIT) @@ -4013,7 +4035,7 @@ SOFTWARE. ========================================= END OF pirates@4.0.4 AND INFORMATION -%% pretty-format@29.5.0 NOTICES AND INFORMATION BEGIN HERE +%% pretty-format@29.7.0 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -4037,9 +4059,9 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF pretty-format@29.5.0 AND INFORMATION +END OF pretty-format@29.7.0 AND INFORMATION -%% react-is@18.2.0 NOTICES AND INFORMATION BEGIN HERE +%% react-is@18.3.1 NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License @@ -4063,7 +4085,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= -END OF react-is@18.2.0 AND INFORMATION +END OF react-is@18.3.1 AND INFORMATION %% readdirp@3.6.0 NOTICES AND INFORMATION BEGIN HERE ========================================= @@ -4304,6 +4326,32 @@ THE SOFTWARE. ========================================= END OF to-regex-range@5.0.1 AND INFORMATION +%% undici-types@6.19.8 NOTICES AND INFORMATION BEGIN HERE +========================================= +MIT License + +Copyright (c) Matteo Collina and Undici contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF undici-types@6.19.8 AND INFORMATION + %% update-browserslist-db@1.0.13 NOTICES AND INFORMATION BEGIN HERE ========================================= The MIT License (MIT) @@ -4351,6 +4399,6 @@ END OF yallist@3.1.1 AND INFORMATION SUMMARY BEGIN HERE ========================================= -Total Packages: 149 +Total Packages: 151 ========================================= END OF SUMMARY \ No newline at end of file diff --git a/packages/playwright/bundles/expect/package-lock.json b/packages/playwright/bundles/expect/package-lock.json index 9a1707ff38..73375dd81b 100644 --- a/packages/playwright/bundles/expect/package-lock.json +++ b/packages/playwright/bundles/expect/package-lock.json @@ -8,37 +8,43 @@ "name": "expect-bundle", "version": "0.0.1", "dependencies": { - "expect": "29.5.0", - "jest-matcher-utils": "29.5.0" + "@jest/expect-utils": "29.7.0", + "jest-get-type": "29.6.3", + "jest-matcher-utils": "29.7.0", + "jest-message-util": "29.7.0", + "jest-mock": "29.7.0", + "jest-util": "29.7.0" } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dependencies": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -109,33 +115,33 @@ } }, "node_modules/@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dependencies": { - "jest-get-type": "^29.4.3" + "jest-get-type": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dependencies": { - "@sinclair/typebox": "^0.25.16" + "@sinclair/typebox": "^0.27.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -147,53 +153,56 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==" + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/node": { - "version": "20.2.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", - "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "dependencies": { + "undici-types": "~6.19.2" + } }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "node_modules/ansi-styles": { "version": "4.3.0", @@ -236,9 +245,9 @@ } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "funding": [ { "type": "github", @@ -266,9 +275,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -281,21 +290,6 @@ "node": ">=8" } }, - "node_modules/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "dependencies": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -329,53 +323,53 @@ } }, "node_modules/jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -383,12 +377,25 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dependencies": { + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -416,6 +423,11 @@ "node": ">=8.6" } }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -428,11 +440,11 @@ } }, "node_modules/pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -452,9 +464,9 @@ } }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/slash": { "version": "3.0.0", @@ -496,30 +508,37 @@ "engines": { "node": ">=8.0" } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" } }, "dependencies": { "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "requires": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" } }, "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==" }, "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "dependencies": { "ansi-styles": { @@ -574,27 +593,27 @@ } }, "@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "requires": { - "jest-get-type": "^29.4.3" + "jest-get-type": "^29.6.3" } }, "@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "requires": { - "@sinclair/typebox": "^0.25.16" + "@sinclair/typebox": "^0.27.8" } }, "@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "requires": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -603,53 +622,56 @@ } }, "@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==" + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" }, "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" }, "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "requires": { "@types/istanbul-lib-coverage": "*" } }, "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "requires": { "@types/istanbul-lib-report": "*" } }, "@types/node": { - "version": "20.2.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", - "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "requires": { + "undici-types": "~6.19.2" + } }, "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" }, "@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "ansi-styles": { "version": "4.3.0", @@ -677,9 +699,9 @@ } }, "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==" + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==" }, "color-convert": { "version": "2.0.1", @@ -695,27 +717,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==" + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==" }, "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" }, - "expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "requires": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" - } - }, "fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -740,54 +750,64 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "requires": { "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" } }, "jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==" + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" }, "jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "requires": { "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" } }, "jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, - "jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "requires": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -809,17 +829,22 @@ "picomatch": "^2.3.1" } }, + "picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "requires": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -832,9 +857,9 @@ } }, "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "slash": { "version": "3.0.0", @@ -864,6 +889,11 @@ "requires": { "is-number": "^7.0.0" } + }, + "undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" } } } diff --git a/packages/playwright/bundles/expect/package.json b/packages/playwright/bundles/expect/package.json index 11ea4cc42e..d9f436755f 100644 --- a/packages/playwright/bundles/expect/package.json +++ b/packages/playwright/bundles/expect/package.json @@ -9,7 +9,11 @@ "generate-license": "node ../../../../utils/generate_third_party_notice.js" }, "dependencies": { - "expect": "29.5.0", - "jest-matcher-utils": "29.5.0" + "@jest/expect-utils": "29.7.0", + "jest-get-type": "29.6.3", + "jest-matcher-utils": "29.7.0", + "jest-message-util": "29.7.0", + "jest-mock": "29.7.0", + "jest-util": "29.7.0" } } diff --git a/packages/playwright/bundles/expect/src/expectBundleImpl.ts b/packages/playwright/bundles/expect/src/expectBundleImpl.ts index 3eddff1323..dbfd169353 100644 --- a/packages/playwright/bundles/expect/src/expectBundleImpl.ts +++ b/packages/playwright/bundles/expect/src/expectBundleImpl.ts @@ -14,8 +14,30 @@ * limitations under the License. */ -import expectLibrary from 'expect'; +import expectLibrary from '../third_party/index'; export const expect = expectLibrary; +export * as mock from 'jest-mock'; +import * as am from '../third_party/asymmetricMatchers'; +import * as mu from 'jest-matcher-utils'; + +export const asymmetricMatchers = { + any: am.any, + anything: am.anything, + arrayContaining: am.arrayContaining, + arrayNotContaining: am.arrayNotContaining, + closeTo: am.closeTo, + notCloseTo: am.notCloseTo, + objectContaining: am.objectContaining, + objectNotContaining: am.objectNotContaining, + stringContaining: am.stringContaining, + stringMatching: am.stringMatching, + stringNotContaining: am.stringNotContaining, + stringNotMatching: am.stringNotMatching, +}; + +export const matcherUtils = { + stringify: mu.stringify, +}; export { INVERTED_COLOR, diff --git a/packages/playwright/bundles/expect/third_party/LICENSE b/packages/playwright/bundles/expect/third_party/LICENSE new file mode 100644 index 0000000000..b93be90515 --- /dev/null +++ b/packages/playwright/bundles/expect/third_party/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/playwright/bundles/expect/third_party/asymmetricMatchers.ts b/packages/playwright/bundles/expect/third_party/asymmetricMatchers.ts new file mode 100644 index 0000000000..4e7a3402c9 --- /dev/null +++ b/packages/playwright/bundles/expect/third_party/asymmetricMatchers.ts @@ -0,0 +1,362 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { + equals, + getObjectKeys, + isA, + iterableEquality, + subsetEquality, +} from '@jest/expect-utils'; +import * as matcherUtils from 'jest-matcher-utils'; +import { pluralize } from 'jest-util'; +import { getCustomEqualityTesters, getState } from './jestMatchersObject'; +import type { + AsymmetricMatcher as AsymmetricMatcherInterface, + MatcherContext, + MatcherState, +} from './types'; + +const functionToString = Function.prototype.toString; + +function fnNameFor(func: () => unknown) { + if (func.name) + return func.name; + + const matches = functionToString + .call(func) + .match(/^(?:async)?\s*function\s*\*?\s*([\w$]+)\s*\(/); + return matches ? matches[1] : ''; +} + +const utils = Object.freeze({ + ...matcherUtils, + iterableEquality, + subsetEquality, +}); + +function getPrototype(obj: object) { + if (Object.getPrototypeOf) + return Object.getPrototypeOf(obj); + + if (obj.constructor.prototype === obj) + return null; + + return obj.constructor.prototype; +} + +export function hasProperty( + obj: object | null, + property: string | symbol, +): boolean { + if (!obj) + return false; + + if (Object.prototype.hasOwnProperty.call(obj, property)) + return true; + + return hasProperty(getPrototype(obj), property); +} + +export abstract class AsymmetricMatcher +implements AsymmetricMatcherInterface { + $$typeof = Symbol.for('jest.asymmetricMatcher'); + + constructor(protected sample: T, protected inverse = false) { } + + protected getMatcherContext(): MatcherContext { + return { + customTesters: getCustomEqualityTesters(), + + dontThrow: () => { }, + ...getState(), + equals, + isNot: this.inverse, + utils, + }; + } + + abstract asymmetricMatch(other: unknown): boolean; + abstract toString(): string; + getExpectedType?(): string; + toAsymmetricMatcher?(): string; +} + +class Any extends AsymmetricMatcher { + constructor(sample: unknown) { + if (typeof sample === 'undefined') { + throw new TypeError( + 'any() expects to be passed a constructor function. ' + + 'Please pass one or use anything() to match any object.', + ); + } + super(sample); + } + + asymmetricMatch(other: unknown) { + if (this.sample === String) + return typeof other === 'string' || other instanceof String; + + if (this.sample === Number) + return typeof other === 'number' || other instanceof Number; + + if (this.sample === Function) + return typeof other === 'function' || other instanceof Function; + + if (this.sample === Boolean) + return typeof other === 'boolean' || other instanceof Boolean; + + if (this.sample === BigInt) + return typeof other === 'bigint' || other instanceof BigInt; + + if (this.sample === Symbol) + return typeof other === 'symbol' || other instanceof Symbol; + + if (this.sample === Object) + return typeof other === 'object'; + + return other instanceof this.sample; + } + + toString() { + return 'Any'; + } + + override getExpectedType() { + if (this.sample === String) + return 'string'; + + if (this.sample === Number) + return 'number'; + + if (this.sample === Function) + return 'function'; + + if (this.sample === Object) + return 'object'; + + if (this.sample === Boolean) + return 'boolean'; + + return fnNameFor(this.sample); + } + + override toAsymmetricMatcher() { + return `Any<${fnNameFor(this.sample)}>`; + } +} + +class Anything extends AsymmetricMatcher { + asymmetricMatch(other: unknown) { + // eslint-disable-next-line eqeqeq + return other != null; + } + + toString() { + return 'Anything'; + } + + // No getExpectedType method, because it matches either null or undefined. + + override toAsymmetricMatcher() { + return 'Anything'; + } +} + +class ArrayContaining extends AsymmetricMatcher> { + constructor(sample: Array, inverse = false) { + super(sample, inverse); + } + + asymmetricMatch(other: unknown) { + if (!Array.isArray(this.sample)) { + throw new Error( + `You must provide an array to ${this.toString()}, not '${typeof this + .sample}'.`, + ); + } + + const matcherContext = this.getMatcherContext(); + const result = + this.sample.length === 0 || + (Array.isArray(other) && + this.sample.every(item => + other.some(another => + equals(item, another, matcherContext.customTesters), + ), + )); + + return this.inverse ? !result : result; + } + + toString() { + return `Array${this.inverse ? 'Not' : ''}Containing`; + } + + override getExpectedType() { + return 'array'; + } +} + +class ObjectContaining extends AsymmetricMatcher< + Record +> { + constructor(sample: Record, inverse = false) { + super(sample, inverse); + } + + asymmetricMatch(other: any) { + if (typeof this.sample !== 'object') { + throw new Error( + `You must provide an object to ${this.toString()}, not '${typeof this + .sample}'.`, + ); + } + + let result = true; + + const matcherContext = this.getMatcherContext(); + const objectKeys = getObjectKeys(this.sample); + + for (const key of objectKeys) { + if ( + !hasProperty(other, key) || + !equals(this.sample[key], other[key], matcherContext.customTesters) + ) { + result = false; + break; + } + } + + return this.inverse ? !result : result; + } + + toString() { + return `Object${this.inverse ? 'Not' : ''}Containing`; + } + + override getExpectedType() { + return 'object'; + } +} + +class StringContaining extends AsymmetricMatcher { + constructor(sample: string, inverse = false) { + if (!isA('String', sample)) + throw new Error('Expected is not a string'); + super(sample, inverse); + } + + asymmetricMatch(other: unknown) { + const result = isA('String', other) && other.includes(this.sample); + + return this.inverse ? !result : result; + } + + toString() { + return `String${this.inverse ? 'Not' : ''}Containing`; + } + + override getExpectedType() { + return 'string'; + } +} + +class StringMatching extends AsymmetricMatcher { + constructor(sample: string | RegExp, inverse = false) { + if (!isA('String', sample) && !isA('RegExp', sample)) + throw new Error('Expected is not a String or a RegExp'); + super(new RegExp(sample), inverse); + } + + asymmetricMatch(other: unknown) { + const result = isA('String', other) && this.sample.test(other); + + return this.inverse ? !result : result; + } + + toString() { + return `String${this.inverse ? 'Not' : ''}Matching`; + } + + override getExpectedType() { + return 'string'; + } +} + +class CloseTo extends AsymmetricMatcher { + private readonly precision: number; + + constructor(sample: number, precision = 2, inverse = false) { + if (!isA('Number', sample)) + throw new Error('Expected is not a Number'); + + if (!isA('Number', precision)) + throw new Error('Precision is not a Number'); + + super(sample); + this.inverse = inverse; + this.precision = precision; + } + + asymmetricMatch(other: unknown) { + if (!isA('Number', other)) + return false; + let result = false; + if (other === Infinity && this.sample === Infinity) { + result = true; // Infinity - Infinity is NaN + } else if (other === -Infinity && this.sample === -Infinity) { + result = true; // -Infinity - -Infinity is NaN + } else { + result = + Math.abs(this.sample - other) < Math.pow(10, -this.precision) / 2; + } + return this.inverse ? !result : result; + } + + toString() { + return `Number${this.inverse ? 'Not' : ''}CloseTo`; + } + + override getExpectedType() { + return 'number'; + } + + override toAsymmetricMatcher(): string { + return [ + this.toString(), + this.sample, + `(${pluralize('digit', this.precision)})`, + ].join(' '); + } +} + +export const any = (expectedObject: unknown): Any => new Any(expectedObject); +export const anything = (): Anything => new Anything(); +export const arrayContaining = (sample: Array): ArrayContaining => + new ArrayContaining(sample); +export const arrayNotContaining = (sample: Array): ArrayContaining => + new ArrayContaining(sample, true); +export const objectContaining = ( + sample: Record, +): ObjectContaining => new ObjectContaining(sample); +export const objectNotContaining = ( + sample: Record, +): ObjectContaining => new ObjectContaining(sample, true); +export const stringContaining = (expected: string): StringContaining => + new StringContaining(expected); +export const stringNotContaining = (expected: string): StringContaining => + new StringContaining(expected, true); +export const stringMatching = (expected: string | RegExp): StringMatching => + new StringMatching(expected); +export const stringNotMatching = (expected: string | RegExp): StringMatching => + new StringMatching(expected, true); +export const closeTo = (expected: number, precision?: number): CloseTo => + new CloseTo(expected, precision); +export const notCloseTo = (expected: number, precision?: number): CloseTo => + new CloseTo(expected, precision, true); diff --git a/packages/playwright/bundles/expect/third_party/extractExpectedAssertionsErrors.ts b/packages/playwright/bundles/expect/third_party/extractExpectedAssertionsErrors.ts new file mode 100644 index 0000000000..1be9b4dce9 --- /dev/null +++ b/packages/playwright/bundles/expect/third_party/extractExpectedAssertionsErrors.ts @@ -0,0 +1,85 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { + EXPECTED_COLOR, + RECEIVED_COLOR, + matcherHint, + pluralize, +} from 'jest-matcher-utils'; +import { getState, setState } from './jestMatchersObject'; +import type { Expect, ExpectedAssertionsErrors } from './types'; + +const resetAssertionsLocalState = () => { + setState({ + assertionCalls: 0, + expectedAssertionsNumber: null, + isExpectingAssertions: false, + numPassingAsserts: 0, + }); +}; + +// Create and format all errors related to the mismatched number of `expect` +// calls and reset the matcher's state. +const extractExpectedAssertionsErrors: Expect['extractExpectedAssertionsErrors'] = + () => { + const result: ExpectedAssertionsErrors = []; + const { + assertionCalls, + expectedAssertionsNumber, + expectedAssertionsNumberError, + isExpectingAssertions, + isExpectingAssertionsError, + } = getState(); + + resetAssertionsLocalState(); + + if ( + typeof expectedAssertionsNumber === 'number' && + assertionCalls !== expectedAssertionsNumber + ) { + const numOfAssertionsExpected = EXPECTED_COLOR( + pluralize('assertion', expectedAssertionsNumber), + ); + + expectedAssertionsNumberError!.message = + `${matcherHint('.assertions', '', expectedAssertionsNumber.toString(), { + isDirectExpectCall: true, + })}\n\n` + + `Expected ${numOfAssertionsExpected} to be called but received ${RECEIVED_COLOR( + pluralize('assertion call', assertionCalls || 0), + )}.`; + + result.push({ + actual: assertionCalls.toString(), + error: expectedAssertionsNumberError!, + expected: expectedAssertionsNumber.toString(), + }); + } + if (isExpectingAssertions && assertionCalls === 0) { + const expected = EXPECTED_COLOR('at least one assertion'); + const received = RECEIVED_COLOR('received none'); + + isExpectingAssertionsError!.message = `${matcherHint( + '.hasAssertions', + '', + '', + { isDirectExpectCall: true }, + )}\n\nExpected ${expected} to be called but ${received}.`; + + result.push({ + actual: 'none', + error: isExpectingAssertionsError!, + expected: 'at least one', + }); + } + + return result; + }; + +export default extractExpectedAssertionsErrors; diff --git a/packages/playwright/bundles/expect/third_party/index.ts b/packages/playwright/bundles/expect/third_party/index.ts new file mode 100644 index 0000000000..3935ab71e1 --- /dev/null +++ b/packages/playwright/bundles/expect/third_party/index.ts @@ -0,0 +1,463 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { equals, iterableEquality, subsetEquality } from '@jest/expect-utils'; +import * as matcherUtils from 'jest-matcher-utils'; +import { isPromise } from 'jest-util'; +import { + any, + anything, + arrayContaining, + arrayNotContaining, + closeTo, + notCloseTo, + objectContaining, + objectNotContaining, + stringContaining, + stringMatching, + stringNotContaining, + stringNotMatching, +} from './asymmetricMatchers'; +import extractExpectedAssertionsErrors from './extractExpectedAssertionsErrors'; +import { + INTERNAL_MATCHER_FLAG, + addCustomEqualityTesters, + getCustomEqualityTesters, + getMatchers, + getState, + setMatchers, + setState, +} from './jestMatchersObject'; +import matchers from './matchers'; +import spyMatchers from './spyMatchers'; +import toThrowMatchers, { + createMatcher as createThrowMatcher, +} from './toThrowMatchers'; +import type { + Expect, + ExpectationResult, + MatcherContext, + MatcherState, + MatcherUtils, + MatchersObject, + PromiseMatcherFn, + RawMatcherFn, + SyncExpectationResult, + ThrowingMatcherFn, +} from './types'; + +export type { Tester, TesterContext } from '@jest/expect-utils'; +export { AsymmetricMatcher } from './asymmetricMatchers'; +export type { + AsyncExpectationResult, + AsymmetricMatchers, + BaseExpect, + Expect, + ExpectationResult, + MatcherContext, + MatcherFunction, + MatcherFunctionWithContext, + MatcherState, + MatcherUtils, + Matchers, + SyncExpectationResult, +} from './types'; + +export class JestAssertionError extends Error { + matcherResult?: Omit & { message: string }; +} + +const createToThrowErrorMatchingSnapshotMatcher = function( + matcher: RawMatcherFn, +) { + return function( + this: MatcherContext, + received: any, + testNameOrInlineSnapshot?: string, + ) { + return matcher.apply(this, [received, testNameOrInlineSnapshot, true]); + }; +}; + +const getPromiseMatcher = (name: string, matcher: RawMatcherFn) => { + if (name === 'toThrow' || name === 'toThrowError') + return createThrowMatcher(name, true); + else if ( + name === 'toThrowErrorMatchingSnapshot' || + name === 'toThrowErrorMatchingInlineSnapshot' + ) + return createToThrowErrorMatchingSnapshotMatcher(matcher); + + + return null; +}; + +export const expect: Expect = (actual: any, ...rest: Array) => { + if (rest.length !== 0) + throw new Error('Expect takes at most one argument.'); + + + const allMatchers = getMatchers(); + const expectation: any = { + not: {}, + rejects: { not: {} }, + resolves: { not: {} }, + }; + + const err = new JestAssertionError(); + + Object.keys(allMatchers).forEach(name => { + const matcher = allMatchers[name]; + const promiseMatcher = getPromiseMatcher(name, matcher) || matcher; + expectation[name] = makeThrowingMatcher(matcher, false, '', actual); + expectation.not[name] = makeThrowingMatcher(matcher, true, '', actual); + + expectation.resolves[name] = makeResolveMatcher( + name, + promiseMatcher, + false, + actual, + err, + ); + expectation.resolves.not[name] = makeResolveMatcher( + name, + promiseMatcher, + true, + actual, + err, + ); + + expectation.rejects[name] = makeRejectMatcher( + name, + promiseMatcher, + false, + actual, + err, + ); + expectation.rejects.not[name] = makeRejectMatcher( + name, + promiseMatcher, + true, + actual, + err, + ); + }); + + return expectation; +}; + +const getMessage = (message?: () => string) => + (message && message()) || + matcherUtils.RECEIVED_COLOR('No message was specified for this matcher.'); + +const makeResolveMatcher = + ( + matcherName: string, + matcher: RawMatcherFn, + isNot: boolean, + actual: Promise, + outerErr: JestAssertionError, + ): PromiseMatcherFn => + (...args) => { + const options = { + isNot, + promise: 'resolves', + }; + + if (!isPromise(actual)) { + throw new JestAssertionError( + matcherUtils.matcherErrorMessage( + matcherUtils.matcherHint(matcherName, undefined, '', options), + `${matcherUtils.RECEIVED_COLOR('received')} value must be a promise`, + matcherUtils.printWithType( + 'Received', + actual, + matcherUtils.printReceived, + ), + ), + ); + } + + const innerErr = new JestAssertionError(); + + return actual.then( + result => + makeThrowingMatcher(matcher, isNot, 'resolves', result, innerErr).apply( + null, + args, + ), + reason => { + outerErr.message = + `${matcherUtils.matcherHint( + matcherName, + undefined, + '', + options, + )}\n\n` + + 'Received promise rejected instead of resolved\n' + + `Rejected to value: ${matcherUtils.printReceived(reason)}`; + return Promise.reject(outerErr); + }, + ); + }; + +const makeRejectMatcher = + ( + matcherName: string, + matcher: RawMatcherFn, + isNot: boolean, + actual: Promise | (() => Promise), + outerErr: JestAssertionError, + ): PromiseMatcherFn => + (...args) => { + const options = { + isNot, + promise: 'rejects', + }; + + const actualWrapper: Promise = + typeof actual === 'function' ? actual() : actual; + + if (!isPromise(actualWrapper)) { + throw new JestAssertionError( + matcherUtils.matcherErrorMessage( + matcherUtils.matcherHint(matcherName, undefined, '', options), + `${matcherUtils.RECEIVED_COLOR( + 'received', + )} value must be a promise or a function returning a promise`, + matcherUtils.printWithType( + 'Received', + actual, + matcherUtils.printReceived, + ), + ), + ); + } + + const innerErr = new JestAssertionError(); + + return actualWrapper.then( + result => { + outerErr.message = + `${matcherUtils.matcherHint( + matcherName, + undefined, + '', + options, + )}\n\n` + + 'Received promise resolved instead of rejected\n' + + `Resolved to value: ${matcherUtils.printReceived(result)}`; + return Promise.reject(outerErr); + }, + reason => + makeThrowingMatcher(matcher, isNot, 'rejects', reason, innerErr).apply( + null, + args, + ), + ); + }; + +const makeThrowingMatcher = ( + matcher: RawMatcherFn, + isNot: boolean, + promise: string, + actual: any, + err?: JestAssertionError, +): ThrowingMatcherFn => + function throwingMatcher(...args): any { + let throws = true; + const utils: MatcherUtils['utils'] = { + ...matcherUtils, + iterableEquality, + subsetEquality, + }; + + const matcherUtilsThing: MatcherUtils = { + customTesters: getCustomEqualityTesters(), + // When throws is disabled, the matcher will not throw errors during test + // execution but instead add them to the global matcher state. If a + // matcher throws, test execution is normally stopped immediately. The + // snapshot matcher uses it because we want to log all snapshot + // failures in a test. + dontThrow: () => (throws = false), + equals, + utils, + }; + + const matcherContext: MatcherContext = { + ...getState(), + ...matcherUtilsThing, + error: err, + isNot, + promise, + }; + + const processResult = ( + result: SyncExpectationResult, + asyncError?: JestAssertionError, + ) => { + _validateResult(result); + + getState().assertionCalls++; + + if ((result.pass && isNot) || (!result.pass && !isNot)) { + // XOR + const message = getMessage(result.message); + let error; + + if (err) { + error = err; + error.message = message; + } else if (asyncError) { + error = asyncError; + error.message = message; + } else { + error = new JestAssertionError(message); + + // Try to remove this function from the stack trace frame. + // Guard for some environments (browsers) that do not support this feature. + if (Error.captureStackTrace) + Error.captureStackTrace(error, throwingMatcher); + + } + // Passing the result of the matcher with the error so that a custom + // reporter could access the actual and expected objects of the result + // for example in order to display a custom visual diff + error.matcherResult = { ...result, message }; + + if (throws) + throw error; + else + getState().suppressedErrors.push(error); + + } else { + getState().numPassingAsserts++; + } + }; + + const handleError = (error: Error) => { + if ( + matcher[INTERNAL_MATCHER_FLAG] === true && + !(error instanceof JestAssertionError) && + error.name !== 'PrettyFormatPluginError' && + // Guard for some environments (browsers) that do not support this feature. + Error.captureStackTrace + ) { + // Try to remove this and deeper functions from the stack trace frame. + Error.captureStackTrace(error, throwingMatcher); + } + throw error; + }; + + let potentialResult: ExpectationResult; + + try { + potentialResult = + matcher[INTERNAL_MATCHER_FLAG] === true + ? matcher.call(matcherContext, actual, ...args) + : // It's a trap specifically for inline snapshot to capture this name + // in the stack trace, so that it can correctly get the custom matcher + // function call. + (function __EXTERNAL_MATCHER_TRAP__() { + return matcher.call(matcherContext, actual, ...args); + })(); + + if (isPromise(potentialResult)) { + const asyncError = new JestAssertionError(); + if (Error.captureStackTrace) + Error.captureStackTrace(asyncError, throwingMatcher); + + + return potentialResult + .then(aResult => processResult(aResult, asyncError)) + .catch(handleError); + } else { + return processResult(potentialResult); + } + } catch (error: any) { + return handleError(error); + } + }; + +expect.extend = (matchers: MatchersObject) => + setMatchers(matchers, false, expect); + +expect.addEqualityTesters = customTesters => + addCustomEqualityTesters(customTesters); + +expect.anything = anything; +expect.any = any; + +expect.not = { + arrayContaining: arrayNotContaining, + closeTo: notCloseTo, + objectContaining: objectNotContaining, + stringContaining: stringNotContaining, + stringMatching: stringNotMatching, +}; + +expect.arrayContaining = arrayContaining; +expect.closeTo = closeTo; +expect.objectContaining = objectContaining; +expect.stringContaining = stringContaining; +expect.stringMatching = stringMatching; + +const _validateResult = (result: any) => { + if ( + typeof result !== 'object' || + typeof result.pass !== 'boolean' || + (result.message && + typeof result.message !== 'string' && + typeof result.message !== 'function') + ) { + throw new Error( + 'Unexpected return from a matcher function.\n' + + 'Matcher functions should ' + + 'return an object in the following format:\n' + + ' {message?: string | function, pass: boolean}\n' + + `'${matcherUtils.stringify(result)}' was returned`, + ); + } +}; + +function assertions(expected: number): void { + const error = new Error(); + if (Error.captureStackTrace) + Error.captureStackTrace(error, assertions); + + + setState({ + expectedAssertionsNumber: expected, + expectedAssertionsNumberError: error, + }); +} +function hasAssertions(...args: Array): void { + const error = new Error(); + if (Error.captureStackTrace) + Error.captureStackTrace(error, hasAssertions); + + + matcherUtils.ensureNoExpected(args[0], '.hasAssertions'); + setState({ + isExpectingAssertions: true, + isExpectingAssertionsError: error, + }); +} + +// add default jest matchers +setMatchers(matchers, true, expect); +setMatchers(spyMatchers, true, expect); +setMatchers(toThrowMatchers, true, expect); + +expect.assertions = assertions; +expect.hasAssertions = hasAssertions; +expect.getState = getState; +expect.setState = setState; +expect.extractExpectedAssertionsErrors = extractExpectedAssertionsErrors; + +export default expect; diff --git a/packages/playwright/bundles/expect/third_party/jestMatchersObject.ts b/packages/playwright/bundles/expect/third_party/jestMatchersObject.ts new file mode 100644 index 0000000000..7a9a304b30 --- /dev/null +++ b/packages/playwright/bundles/expect/third_party/jestMatchersObject.ts @@ -0,0 +1,144 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { Tester } from '@jest/expect-utils'; +import { getType } from 'jest-get-type'; +import { AsymmetricMatcher } from './asymmetricMatchers'; +import type { + Expect, + MatcherState, + MatchersObject, + SyncExpectationResult, +} from './types'; + +// Global matchers object holds the list of available matchers and +// the state, that can hold matcher specific values that change over time. +const JEST_MATCHERS_OBJECT = Symbol.for('$$jest-matchers-object'); + +// Notes a built-in/internal Jest matcher. +// Jest may override the stack trace of Errors thrown by internal matchers. +export const INTERNAL_MATCHER_FLAG = Symbol.for('$$jest-internal-matcher'); + +if (!Object.prototype.hasOwnProperty.call(globalThis, JEST_MATCHERS_OBJECT)) { + const defaultState: MatcherState = { + assertionCalls: 0, + expectedAssertionsNumber: null, + isExpectingAssertions: false, + numPassingAsserts: 0, + suppressedErrors: [], // errors that are not thrown immediately. + }; + Object.defineProperty(globalThis, JEST_MATCHERS_OBJECT, { + value: { + customEqualityTesters: [], + matchers: Object.create(null), + state: defaultState, + }, + }); +} + +export const getState = (): State => + (globalThis as any)[JEST_MATCHERS_OBJECT].state; + +export const setState = ( + state: Partial, +): void => { + Object.assign((globalThis as any)[JEST_MATCHERS_OBJECT].state, state); +}; + +export const getMatchers = (): MatchersObject => + (globalThis as any)[JEST_MATCHERS_OBJECT].matchers; + +export const setMatchers = ( + matchers: MatchersObject, + isInternal: boolean, + expect: Expect, +): void => { + Object.keys(matchers).forEach(key => { + const matcher = matchers[key]; + + if (typeof matcher !== 'function') { + throw new TypeError( + `expect.extend: \`${key}\` is not a valid matcher. Must be a function, is "${getType( + matcher, + )}"`, + ); + } + + Object.defineProperty(matcher, INTERNAL_MATCHER_FLAG, { + value: isInternal, + }); + + if (!isInternal) { + // expect is defined + + class CustomMatcher extends AsymmetricMatcher< + [unknown, ...Array] + > { + constructor(inverse = false, ...sample: [unknown, ...Array]) { + super(sample, inverse); + } + + asymmetricMatch(other: unknown) { + const { pass } = matcher.call( + this.getMatcherContext(), + other, + ...this.sample, + ) as SyncExpectationResult; + + return this.inverse ? !pass : pass; + } + + toString() { + return `${this.inverse ? 'not.' : ''}${key}`; + } + + override getExpectedType() { + return 'any'; + } + + override toAsymmetricMatcher() { + return `${this.toString()}<${this.sample.map(String).join(', ')}>`; + } + } + + Object.defineProperty(expect, key, { + configurable: true, + enumerable: true, + value: (...sample: [unknown, ...Array]) => + new CustomMatcher(false, ...sample), + writable: true, + }); + Object.defineProperty(expect.not, key, { + configurable: true, + enumerable: true, + value: (...sample: [unknown, ...Array]) => + new CustomMatcher(true, ...sample), + writable: true, + }); + } + }); + + Object.assign((globalThis as any)[JEST_MATCHERS_OBJECT].matchers, matchers); +}; + +export const getCustomEqualityTesters = (): Array => + (globalThis as any)[JEST_MATCHERS_OBJECT].customEqualityTesters; + +export const addCustomEqualityTesters = (newTesters: Array): void => { + if (!Array.isArray(newTesters)) { + throw new TypeError( + `expect.customEqualityTesters: Must be set to an array of Testers. Was given "${getType( + newTesters, + )}"`, + ); + } + + (globalThis as any)[JEST_MATCHERS_OBJECT].customEqualityTesters.push( + ...newTesters, + ); +}; diff --git a/packages/playwright/bundles/expect/third_party/matchers.ts b/packages/playwright/bundles/expect/third_party/matchers.ts new file mode 100644 index 0000000000..5102b50c32 --- /dev/null +++ b/packages/playwright/bundles/expect/third_party/matchers.ts @@ -0,0 +1,983 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +/* eslint-disable eqeqeq */ + +import { + arrayBufferEquality, + equals, + getObjectSubset, + getPath, + iterableEquality, + pathAsArray, + sparseArrayEquality, + subsetEquality, + typeEquality, +} from '@jest/expect-utils'; +import { getType, isPrimitive } from 'jest-get-type'; +import { + DIM_COLOR, + EXPECTED_COLOR, + type MatcherHintOptions, + RECEIVED_COLOR, + SUGGEST_TO_CONTAIN_EQUAL, + ensureExpectedIsNonNegativeInteger, + ensureNoExpected, + ensureNumbers, + getLabelPrinter, + matcherErrorMessage, + matcherHint, + printDiffOrStringify, + printExpected, + printReceived, + printWithType, + stringify, +} from 'jest-matcher-utils'; +import { + printCloseTo, + printExpectedConstructorName, + printExpectedConstructorNameNot, + printReceivedArrayContainExpectedItem, + printReceivedConstructorName, + printReceivedConstructorNameNot, + printReceivedStringContainExpectedResult, + printReceivedStringContainExpectedSubstring, +} from './print'; +import type { MatchersObject } from './types'; + +// Omit colon and one or more spaces, so can call getLabelPrinter. +const EXPECTED_LABEL = 'Expected'; +const RECEIVED_LABEL = 'Received'; +const EXPECTED_VALUE_LABEL = 'Expected value'; +const RECEIVED_VALUE_LABEL = 'Received value'; + +// The optional property of matcher context is true if undefined. +const isExpand = (expand?: boolean): boolean => expand !== false; + +const toStrictEqualTesters = [ + iterableEquality, + typeEquality, + sparseArrayEquality, + arrayBufferEquality, +]; + +type ContainIterable = + | Array + | Set + | NodeListOf + | DOMTokenList + | HTMLCollectionOf; + +const matchers: MatchersObject = { + toBe(received: unknown, expected: unknown) { + const matcherName = 'toBe'; + const options: MatcherHintOptions = { + comment: 'Object.is equality', + isNot: this.isNot, + promise: this.promise, + }; + + const pass = Object.is(received, expected); + + const message = pass + ? () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `Expected: not ${printExpected(expected)}` + : () => { + const expectedType = getType(expected); + + let deepEqualityName = null; + if (expectedType !== 'map' && expectedType !== 'set') { + // If deep equality passes when referential identity fails, + // but exclude map and set until review of their equality logic. + if ( + equals( + received, + expected, + [...this.customTesters, ...toStrictEqualTesters], + true, + ) + ) + deepEqualityName = 'toStrictEqual'; + else if ( + equals(received, expected, [ + ...this.customTesters, + iterableEquality, + ]) + ) + deepEqualityName = 'toEqual'; + + } + + return ( + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + (deepEqualityName !== null + ? `${DIM_COLOR( + `If it should pass with deep equality, replace "${matcherName}" with "${deepEqualityName}"`, + )}\n\n` + : '') + + printDiffOrStringify( + expected, + received, + EXPECTED_LABEL, + RECEIVED_LABEL, + isExpand(this.expand), + ) + ); + }; + + // Passing the actual and expected objects so that a custom reporter + // could access them, for example in order to display a custom visual diff, + // or create a different error message + return { actual: received, expected, message, name: matcherName, pass }; + }, + + toBeCloseTo(received: number, expected: number, precision = 2) { + const matcherName = 'toBeCloseTo'; + const secondArgument = arguments.length === 3 ? 'precision' : undefined; + const isNot = this.isNot; + const options: MatcherHintOptions = { + isNot, + promise: this.promise, + secondArgument, + secondArgumentColor: (arg: string) => arg, + }; + + if (typeof expected !== 'number') { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, undefined, options), + `${EXPECTED_COLOR('expected')} value must be a number`, + printWithType('Expected', expected, printExpected), + ), + ); + } + + if (typeof received !== 'number') { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, undefined, options), + `${RECEIVED_COLOR('received')} value must be a number`, + printWithType('Received', received, printReceived), + ), + ); + } + + let pass = false; + let expectedDiff = 0; + let receivedDiff = 0; + + if (received === Infinity && expected === Infinity) { + pass = true; // Infinity - Infinity is NaN + } else if (received === -Infinity && expected === -Infinity) { + pass = true; // -Infinity - -Infinity is NaN + } else { + expectedDiff = Math.pow(10, -precision) / 2; + receivedDiff = Math.abs(expected - received); + pass = receivedDiff < expectedDiff; + } + + const message = pass + ? () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `Expected: not ${printExpected(expected)}\n` + + (receivedDiff === 0 + ? '' + : `Received: ${printReceived(received)}\n` + + `\n${printCloseTo(receivedDiff, expectedDiff, precision, isNot)}`) + : () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `Expected: ${printExpected(expected)}\n` + + `Received: ${printReceived(received)}\n` + + '\n' + + printCloseTo(receivedDiff, expectedDiff, precision, isNot); + + return { message, pass }; + }, + + toBeDefined(received: unknown, expected: void) { + const matcherName = 'toBeDefined'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureNoExpected(expected, matcherName, options); + + const pass = received !== void 0; + + const message = () => + + matcherHint(matcherName, undefined, '', options) + + '\n\n' + + `Received: ${printReceived(received)}`; + + return { message, pass }; + }, + + toBeFalsy(received: unknown, expected: void) { + const matcherName = 'toBeFalsy'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureNoExpected(expected, matcherName, options); + + const pass = !received; + + const message = () => + + matcherHint(matcherName, undefined, '', options) + + '\n\n' + + `Received: ${printReceived(received)}`; + + return { message, pass }; + }, + + toBeGreaterThan(received: number | bigint, expected: number | bigint) { + const matcherName = 'toBeGreaterThan'; + const isNot = this.isNot; + const options: MatcherHintOptions = { + isNot, + promise: this.promise, + }; + ensureNumbers(received, expected, matcherName, options); + + const pass = received > expected; + + const message = () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `Expected:${isNot ? ' not' : ''} > ${printExpected(expected)}\n` + + `Received:${isNot ? ' ' : ''} ${printReceived(received)}`; + + return { message, pass }; + }, + + toBeGreaterThanOrEqual(received: number | bigint, expected: number | bigint) { + const matcherName = 'toBeGreaterThanOrEqual'; + const isNot = this.isNot; + const options: MatcherHintOptions = { + isNot, + promise: this.promise, + }; + ensureNumbers(received, expected, matcherName, options); + + const pass = received >= expected; + + const message = () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `Expected:${isNot ? ' not' : ''} >= ${printExpected(expected)}\n` + + `Received:${isNot ? ' ' : ''} ${printReceived(received)}`; + + return { message, pass }; + }, + + toBeInstanceOf(received: any, expected: Function) { + const matcherName = 'toBeInstanceOf'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + + if (typeof expected !== 'function') { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, undefined, options), + `${EXPECTED_COLOR('expected')} value must be a function`, + printWithType('Expected', expected, printExpected), + ), + ); + } + + const pass = received instanceof expected; + + const message = pass + ? () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + printExpectedConstructorNameNot('Expected constructor', expected) + + (typeof received.constructor === 'function' && + received.constructor !== expected + ? printReceivedConstructorNameNot( + 'Received constructor', + received.constructor, + expected, + ) + : '') + : () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + printExpectedConstructorName('Expected constructor', expected) + + (isPrimitive(received) || Object.getPrototypeOf(received) === null + ? `\nReceived value has no prototype\nReceived value: ${printReceived( + received, + )}` + : typeof received.constructor !== 'function' + ? `\nReceived value: ${printReceived(received)}` + : printReceivedConstructorName( + 'Received constructor', + received.constructor, + )); + + return { message, pass }; + }, + + toBeLessThan(received: number | bigint, expected: number | bigint) { + const matcherName = 'toBeLessThan'; + const isNot = this.isNot; + const options: MatcherHintOptions = { + isNot, + promise: this.promise, + }; + ensureNumbers(received, expected, matcherName, options); + + const pass = received < expected; + + const message = () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `Expected:${isNot ? ' not' : ''} < ${printExpected(expected)}\n` + + `Received:${isNot ? ' ' : ''} ${printReceived(received)}`; + + return { message, pass }; + }, + + toBeLessThanOrEqual(received: number | bigint, expected: number | bigint) { + const matcherName = 'toBeLessThanOrEqual'; + const isNot = this.isNot; + const options: MatcherHintOptions = { + isNot, + promise: this.promise, + }; + ensureNumbers(received, expected, matcherName, options); + + const pass = received <= expected; + + const message = () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `Expected:${isNot ? ' not' : ''} <= ${printExpected(expected)}\n` + + `Received:${isNot ? ' ' : ''} ${printReceived(received)}`; + + return { message, pass }; + }, + + toBeNaN(received: any, expected: void) { + const matcherName = 'toBeNaN'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureNoExpected(expected, matcherName, options); + + const pass = Number.isNaN(received); + + const message = () => + + matcherHint(matcherName, undefined, '', options) + + '\n\n' + + `Received: ${printReceived(received)}`; + + return { message, pass }; + }, + + toBeNull(received: unknown, expected: void) { + const matcherName = 'toBeNull'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureNoExpected(expected, matcherName, options); + + const pass = received === null; + + const message = () => + + matcherHint(matcherName, undefined, '', options) + + '\n\n' + + `Received: ${printReceived(received)}`; + + return { message, pass }; + }, + + toBeTruthy(received: unknown, expected: void) { + const matcherName = 'toBeTruthy'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureNoExpected(expected, matcherName, options); + + const pass = !!received; + + const message = () => + + matcherHint(matcherName, undefined, '', options) + + '\n\n' + + `Received: ${printReceived(received)}`; + + return { message, pass }; + }, + + toBeUndefined(received: unknown, expected: void) { + const matcherName = 'toBeUndefined'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureNoExpected(expected, matcherName, options); + + const pass = received === void 0; + + const message = () => + + matcherHint(matcherName, undefined, '', options) + + '\n\n' + + `Received: ${printReceived(received)}`; + + return { message, pass }; + }, + + toContain(received: ContainIterable | string, expected: unknown) { + const matcherName = 'toContain'; + const isNot = this.isNot; + const options: MatcherHintOptions = { + comment: 'indexOf', + isNot, + promise: this.promise, + }; + + if (received == null) { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, undefined, options), + `${RECEIVED_COLOR('received')} value must not be null nor undefined`, + printWithType('Received', received, printReceived), + ), + ); + } + + if (typeof received === 'string') { + const wrongTypeErrorMessage = `${EXPECTED_COLOR( + 'expected', + )} value must be a string if ${RECEIVED_COLOR( + 'received', + )} value is a string`; + + if (typeof expected !== 'string') { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, received, String(expected), options), + wrongTypeErrorMessage, + + printWithType('Expected', expected, printExpected) + + '\n' + + printWithType('Received', received, printReceived), + ), + ); + } + + const index = received.indexOf(String(expected)); + const pass = index !== -1; + + const message = () => { + const labelExpected = `Expected ${typeof expected === 'string' ? 'substring' : 'value' + }`; + const labelReceived = 'Received string'; + const printLabel = getLabelPrinter(labelExpected, labelReceived); + + return ( + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `${printLabel(labelExpected)}${isNot ? 'not ' : ''}${printExpected( + expected, + )}\n` + + `${printLabel(labelReceived)}${isNot ? ' ' : ''}${isNot + ? printReceivedStringContainExpectedSubstring( + received, + index, + String(expected).length, + ) + : printReceived(received) + }` + ); + }; + + return { message, pass }; + } + + const indexable = Array.from(received); + const index = indexable.indexOf(expected); + const pass = index !== -1; + + const message = () => { + const labelExpected = 'Expected value'; + const labelReceived = `Received ${getType(received)}`; + const printLabel = getLabelPrinter(labelExpected, labelReceived); + + return ( + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `${printLabel(labelExpected)}${isNot ? 'not ' : ''}${printExpected( + expected, + )}\n` + + `${printLabel(labelReceived)}${isNot ? ' ' : ''}${isNot && Array.isArray(received) + ? printReceivedArrayContainExpectedItem(received, index) + : printReceived(received) + }` + + (!isNot && + indexable.findIndex(item => + equals(item, expected, [...this.customTesters, iterableEquality]), + ) !== -1 + ? `\n\n${SUGGEST_TO_CONTAIN_EQUAL}` + : '') + ); + }; + + return { message, pass }; + }, + + toContainEqual(received: ContainIterable, expected: unknown) { + const matcherName = 'toContainEqual'; + const isNot = this.isNot; + const options: MatcherHintOptions = { + comment: 'deep equality', + isNot, + promise: this.promise, + }; + + if (received == null) { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, undefined, options), + `${RECEIVED_COLOR('received')} value must not be null nor undefined`, + printWithType('Received', received, printReceived), + ), + ); + } + + const index = Array.from(received).findIndex(item => + equals(item, expected, [...this.customTesters, iterableEquality]), + ); + const pass = index !== -1; + + const message = () => { + const labelExpected = 'Expected value'; + const labelReceived = `Received ${getType(received)}`; + const printLabel = getLabelPrinter(labelExpected, labelReceived); + + return ( + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `${printLabel(labelExpected)}${isNot ? 'not ' : ''}${printExpected( + expected, + )}\n` + + `${printLabel(labelReceived)}${isNot ? ' ' : ''}${isNot && Array.isArray(received) + ? printReceivedArrayContainExpectedItem(received, index) + : printReceived(received) + }` + ); + }; + + return { message, pass }; + }, + + toEqual(received: unknown, expected: unknown) { + const matcherName = 'toEqual'; + const options: MatcherHintOptions = { + comment: 'deep equality', + isNot: this.isNot, + promise: this.promise, + }; + + const pass = equals(received, expected, [ + ...this.customTesters, + iterableEquality, + ]); + + const message = pass + ? () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `Expected: not ${printExpected(expected)}\n` + + (stringify(expected) !== stringify(received) + ? `Received: ${printReceived(received)}` + : '') + : () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + printDiffOrStringify( + expected, + received, + EXPECTED_LABEL, + RECEIVED_LABEL, + isExpand(this.expand), + ); + + // Passing the actual and expected objects so that a custom reporter + // could access them, for example in order to display a custom visual diff, + // or create a different error message + return { actual: received, expected, message, name: matcherName, pass }; + }, + + toHaveLength(received: any, expected: number) { + const matcherName = 'toHaveLength'; + const isNot = this.isNot; + const options: MatcherHintOptions = { + isNot, + promise: this.promise, + }; + + if (typeof received?.length !== 'number') { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, undefined, options), + `${RECEIVED_COLOR( + 'received', + )} value must have a length property whose value must be a number`, + printWithType('Received', received, printReceived), + ), + ); + } + + ensureExpectedIsNonNegativeInteger(expected, matcherName, options); + + const pass = received.length === expected; + + const message = () => { + const labelExpected = 'Expected length'; + const labelReceivedLength = 'Received length'; + const labelReceivedValue = `Received ${getType(received)}`; + const printLabel = getLabelPrinter( + labelExpected, + labelReceivedLength, + labelReceivedValue, + ); + + return ( + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `${printLabel(labelExpected)}${isNot ? 'not ' : ''}${printExpected( + expected, + )}\n` + + (isNot + ? '' + : `${printLabel(labelReceivedLength)}${printReceived( + received.length, + )}\n`) + + `${printLabel(labelReceivedValue)}${isNot ? ' ' : ''}${printReceived( + received, + )}` + ); + }; + + return { message, pass }; + }, + + toHaveProperty( + received: object, + expectedPath: string | Array, + expectedValue?: unknown, + ) { + const matcherName = 'toHaveProperty'; + const expectedArgument = 'path'; + const hasValue = arguments.length === 3; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + secondArgument: hasValue ? 'value' : '', + }; + + if (received === null || received === undefined) { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, expectedArgument, options), + `${RECEIVED_COLOR('received')} value must not be null nor undefined`, + printWithType('Received', received, printReceived), + ), + ); + } + + const expectedPathType = getType(expectedPath); + + if (expectedPathType !== 'string' && expectedPathType !== 'array') { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, expectedArgument, options), + `${EXPECTED_COLOR('expected')} path must be a string or array`, + printWithType('Expected', expectedPath, printExpected), + ), + ); + } + + const expectedPathLength = + typeof expectedPath === 'string' + ? pathAsArray(expectedPath).length + : expectedPath.length; + + if (expectedPathType === 'array' && expectedPathLength === 0) { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, expectedArgument, options), + `${EXPECTED_COLOR('expected')} path must not be an empty array`, + printWithType('Expected', expectedPath, printExpected), + ), + ); + } + + const result = getPath(received, expectedPath); + const { lastTraversedObject, endPropIsDefined, hasEndProp, value } = result; + const receivedPath = result.traversedPath; + const hasCompletePath = receivedPath.length === expectedPathLength; + const receivedValue = hasCompletePath ? result.value : lastTraversedObject; + + const pass = + hasValue && endPropIsDefined + ? equals(value, expectedValue, [ + ...this.customTesters, + iterableEquality, + ]) + : Boolean(hasEndProp); + + const message = pass + ? () => + + matcherHint(matcherName, undefined, expectedArgument, options) + + '\n\n' + + (hasValue + ? `Expected path: ${printExpected(expectedPath)}\n\n` + + `Expected value: not ${printExpected(expectedValue)}${stringify(expectedValue) !== stringify(receivedValue) + ? `\nReceived value: ${printReceived(receivedValue)}` + : '' + }` + : `Expected path: not ${printExpected(expectedPath)}\n\n` + + `Received value: ${printReceived(receivedValue)}`) + : () => + + matcherHint(matcherName, undefined, expectedArgument, options) + + '\n\n' + + `Expected path: ${printExpected(expectedPath)}\n` + + (hasCompletePath + ? `\n${printDiffOrStringify( + expectedValue, + receivedValue, + EXPECTED_VALUE_LABEL, + RECEIVED_VALUE_LABEL, + isExpand(this.expand), + )}` + : `Received path: ${printReceived( + expectedPathType === 'array' || receivedPath.length === 0 + ? receivedPath + : receivedPath.join('.'), + )}\n\n${hasValue + ? `Expected value: ${printExpected(expectedValue)}\n` + : '' + }Received value: ${printReceived(receivedValue)}`); + + return { message, pass }; + }, + + toMatch(received: string, expected: string | RegExp) { + const matcherName = 'toMatch'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + + if (typeof received !== 'string') { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, undefined, options), + `${RECEIVED_COLOR('received')} value must be a string`, + printWithType('Received', received, printReceived), + ), + ); + } + + if ( + !(typeof expected === 'string') && + !(expected && typeof expected.test === 'function') + ) { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, undefined, options), + `${EXPECTED_COLOR( + 'expected', + )} value must be a string or regular expression`, + printWithType('Expected', expected, printExpected), + ), + ); + } + + const pass = + typeof expected === 'string' + ? received.includes(expected) + : new RegExp(expected).test(received); + + const message = pass + ? () => + typeof expected === 'string' + ? + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `Expected substring: not ${printExpected(expected)}\n` + + `Received string: ${printReceivedStringContainExpectedSubstring( + received, + received.indexOf(expected), + expected.length, + )}` + : + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `Expected pattern: not ${printExpected(expected)}\n` + + `Received string: ${printReceivedStringContainExpectedResult( + received, + typeof expected.exec === 'function' + ? expected.exec(received) + : null, + )}` + : () => { + const labelExpected = `Expected ${typeof expected === 'string' ? 'substring' : 'pattern' + }`; + const labelReceived = 'Received string'; + const printLabel = getLabelPrinter(labelExpected, labelReceived); + + return ( + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `${printLabel(labelExpected)}${printExpected(expected)}\n` + + `${printLabel(labelReceived)}${printReceived(received)}` + ); + }; + + return { message, pass }; + }, + + toMatchObject(received: object, expected: object) { + const matcherName = 'toMatchObject'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + + if (typeof received !== 'object' || received === null) { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, undefined, options), + `${RECEIVED_COLOR('received')} value must be a non-null object`, + printWithType('Received', received, printReceived), + ), + ); + } + + if (typeof expected !== 'object' || expected === null) { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, undefined, options), + `${EXPECTED_COLOR('expected')} value must be a non-null object`, + printWithType('Expected', expected, printExpected), + ), + ); + } + + const pass = equals(received, expected, [ + ...this.customTesters, + iterableEquality, + subsetEquality, + ]); + + const message = pass + ? () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `Expected: not ${printExpected(expected)}` + + (stringify(expected) !== stringify(received) + ? `\nReceived: ${printReceived(received)}` + : '') + : () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + printDiffOrStringify( + expected, + getObjectSubset(received, expected, this.customTesters), + EXPECTED_LABEL, + RECEIVED_LABEL, + isExpand(this.expand), + ); + + return { message, pass }; + }, + + toStrictEqual(received: unknown, expected: unknown) { + const matcherName = 'toStrictEqual'; + const options: MatcherHintOptions = { + comment: 'deep equality', + isNot: this.isNot, + promise: this.promise, + }; + + const pass = equals( + received, + expected, + [...this.customTesters, ...toStrictEqualTesters], + true, + ); + + const message = pass + ? () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + `Expected: not ${printExpected(expected)}\n` + + (stringify(expected) !== stringify(received) + ? `Received: ${printReceived(received)}` + : '') + : () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + printDiffOrStringify( + expected, + received, + EXPECTED_LABEL, + RECEIVED_LABEL, + isExpand(this.expand), + ); + + // Passing the actual and expected objects so that a custom reporter + // could access them, for example in order to display a custom visual diff, + // or create a different error message + return { actual: received, expected, message, name: matcherName, pass }; + }, +}; + +export default matchers; diff --git a/packages/playwright/bundles/expect/third_party/print.ts b/packages/playwright/bundles/expect/third_party/print.ts new file mode 100644 index 0000000000..63cad0f91e --- /dev/null +++ b/packages/playwright/bundles/expect/third_party/print.ts @@ -0,0 +1,134 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { + EXPECTED_COLOR, + INVERTED_COLOR, + RECEIVED_COLOR, + printReceived, + stringify, +} from 'jest-matcher-utils'; + +// Format substring but do not enclose in double quote marks. +// The replacement is compatible with pretty-format package. +const printSubstring = (val: string): string => val.replace(/"|\\/g, '\\$&'); + +export const printReceivedStringContainExpectedSubstring = ( + received: string, + start: number, + length: number, // not end +): string => + RECEIVED_COLOR( + `"${printSubstring(received.slice(0, start))}${INVERTED_COLOR( + printSubstring(received.slice(start, start + length)), + )}${printSubstring(received.slice(start + length))}"`, + ); + +export const printReceivedStringContainExpectedResult = ( + received: string, + result: RegExpExecArray | null, +): string => + result === null + ? printReceived(received) + : printReceivedStringContainExpectedSubstring( + received, + result.index, + result[0].length, + ); + +// The serialized array is compatible with pretty-format package min option. +// However, items have default stringify depth (instead of depth - 1) +// so expected item looks consistent by itself and enclosed in the array. +export const printReceivedArrayContainExpectedItem = ( + received: Array, + index: number, +): string => + RECEIVED_COLOR( + `[${received + .map((item, i) => { + const stringified = stringify(item); + return i === index ? INVERTED_COLOR(stringified) : stringified; + }) + .join(', ')}]`, + ); + +export const printCloseTo = ( + receivedDiff: number, + expectedDiff: number, + precision: number, + isNot: boolean | undefined, +): string => { + const receivedDiffString = stringify(receivedDiff); + const expectedDiffString = receivedDiffString.includes('e') + ? // toExponential arg is number of digits after the decimal point. + expectedDiff.toExponential(0) + : 0 <= precision && precision < 20 + ? // toFixed arg is number of digits after the decimal point. + // It may be a value between 0 and 20 inclusive. + // Implementations may optionally support a larger range of values. + expectedDiff.toFixed(precision + 1) + : stringify(expectedDiff); + + return ( + `Expected precision: ${isNot ? ' ' : ''} ${stringify(precision)}\n` + + `Expected difference: ${isNot ? 'not ' : ''}< ${EXPECTED_COLOR( + expectedDiffString, + )}\n` + + `Received difference: ${isNot ? ' ' : ''} ${RECEIVED_COLOR( + receivedDiffString, + )}` + ); +}; + +export const printExpectedConstructorName = ( + label: string, + expected: Function, +): string => `${printConstructorName(label, expected, false, true)}\n`; + +export const printExpectedConstructorNameNot = ( + label: string, + expected: Function, +): string => `${printConstructorName(label, expected, true, true)}\n`; + +export const printReceivedConstructorName = ( + label: string, + received: Function, +): string => `${printConstructorName(label, received, false, false)}\n`; + +// Do not call function if received is equal to expected. +export const printReceivedConstructorNameNot = ( + label: string, + received: Function, + expected: Function, +): string => + typeof expected.name === 'string' && + expected.name.length !== 0 && + typeof received.name === 'string' && + received.name.length !== 0 + ? `${printConstructorName(label, received, true, false)} ${ + Object.getPrototypeOf(received) === expected + ? 'extends' + : 'extends … extends' + } ${EXPECTED_COLOR(expected.name)}\n` + : `${printConstructorName(label, received, false, false)}\n`; + +const printConstructorName = ( + label: string, + constructor: Function, + isNot: boolean, + isExpected: boolean, +): string => + typeof constructor.name !== 'string' + ? `${label} name is not a string` + : constructor.name.length === 0 + ? `${label} name is an empty string` + : `${label}: ${!isNot ? '' : isExpected ? 'not ' : ' '}${ + isExpected + ? EXPECTED_COLOR(constructor.name) + : RECEIVED_COLOR(constructor.name) + }`; diff --git a/packages/playwright/bundles/expect/third_party/spyMatchers.ts b/packages/playwright/bundles/expect/third_party/spyMatchers.ts new file mode 100644 index 0000000000..ac74fd8d91 --- /dev/null +++ b/packages/playwright/bundles/expect/third_party/spyMatchers.ts @@ -0,0 +1,1184 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { equals, iterableEquality } from '@jest/expect-utils'; +import { getType, isPrimitive } from 'jest-get-type'; +import { + DIM_COLOR, + EXPECTED_COLOR, + type MatcherHintOptions, + RECEIVED_COLOR, + diff, + ensureExpectedIsNonNegativeInteger, + ensureNoExpected, + matcherErrorMessage, + matcherHint, + printExpected, + printReceived, + printWithType, + stringify, +} from 'jest-matcher-utils'; +import { getCustomEqualityTesters } from './jestMatchersObject'; +import type { + MatcherFunction, + MatchersObject, + SyncExpectationResult, +} from './types'; + +/* eslint-disable eqeqeq */ + +// The optional property of matcher context is true if undefined. +const isExpand = (expand?: boolean): boolean => expand !== false; + +const PRINT_LIMIT = 3; + +const NO_ARGUMENTS = 'called with 0 arguments'; + +const printExpectedArgs = (expected: Array): string => + expected.length === 0 + ? NO_ARGUMENTS + : expected.map(arg => printExpected(arg)).join(', '); + +const printReceivedArgs = ( + received: Array, + expected?: Array, +): string => + received.length === 0 + ? NO_ARGUMENTS + : received + .map((arg, i) => + Array.isArray(expected) && + i < expected.length && + isEqualValue(expected[i], arg) + ? printCommon(arg) + : printReceived(arg), + ) + .join(', '); + +const printCommon = (val: unknown) => DIM_COLOR(stringify(val)); + +const isEqualValue = (expected: unknown, received: unknown): boolean => + equals(expected, received, [...getCustomEqualityTesters(), iterableEquality]); + +const isEqualCall = ( + expected: Array, + received: Array, +): boolean => + received.length === expected.length && isEqualValue(expected, received); + +const isEqualReturn = (expected: unknown, result: any): boolean => + result.type === 'return' && isEqualValue(expected, result.value); + +const countReturns = (results: Array): number => + results.reduce( + (n: number, result: any) => (result.type === 'return' ? n + 1 : n), + 0, + ); + +const printNumberOfReturns = ( + countReturns: number, + countCalls: number, +): string => + `\nNumber of returns: ${printReceived(countReturns)}${countCalls !== countReturns + ? `\nNumber of calls: ${printReceived(countCalls)}` + : '' + }`; + +type PrintLabel = (string: string, isExpectedCall: boolean) => string; + +// Given a label, return a function which given a string, +// right-aligns it preceding the colon in the label. +const getRightAlignedPrinter = (label: string): PrintLabel => { + // Assume that the label contains a colon. + const index = label.indexOf(':'); + const suffix = label.slice(index); + + return (string: string, isExpectedCall: boolean) => + (isExpectedCall + ? `->${' '.repeat(Math.max(0, index - 2 - string.length))}` + : ' '.repeat(Math.max(index - string.length))) + + string + + suffix; +}; + +type IndexedCall = [number, Array]; + +const printReceivedCallsNegative = ( + expected: Array, + indexedCalls: Array, + isOnlyCall: boolean, + iExpectedCall?: number, +) => { + if (indexedCalls.length === 0) + return ''; + + + const label = 'Received: '; + if (isOnlyCall) + return `${label + printReceivedArgs(indexedCalls[0], expected)}\n`; + + + const printAligned = getRightAlignedPrinter(label); + + return `Received\n${indexedCalls.reduce( + (printed: string, [i, args]: IndexedCall) => + `${printed + + printAligned(String(i + 1), i === iExpectedCall) + + printReceivedArgs(args, expected) + }\n`, + '', + )}`; +}; + +const printExpectedReceivedCallsPositive = ( + expected: Array, + indexedCalls: Array, + expand: boolean, + isOnlyCall: boolean, + iExpectedCall?: number, +) => { + const expectedLine = `Expected: ${printExpectedArgs(expected)}\n`; + if (indexedCalls.length === 0) + return expectedLine; + + + const label = 'Received: '; + if (isOnlyCall && (iExpectedCall === 0 || iExpectedCall === undefined)) { + const received = indexedCalls[0][1]; + + if (isLineDiffableCall(expected, received)) { + // Display diff without indentation. + const lines = [ + EXPECTED_COLOR('- Expected'), + RECEIVED_COLOR('+ Received'), + '', + ]; + + const length = Math.max(expected.length, received.length); + for (let i = 0; i < length; i += 1) { + if (i < expected.length && i < received.length) { + if (isEqualValue(expected[i], received[i])) { + lines.push(` ${printCommon(received[i])},`); + continue; + } + + if (isLineDiffableArg(expected[i], received[i])) { + const difference = diff(expected[i], received[i], { expand }); + if ( + typeof difference === 'string' && + difference.includes('- Expected') && + difference.includes('+ Received') + ) { + // Omit annotation in case multiple args have diff. + lines.push(`${difference.split('\n').slice(3).join('\n')},`); + continue; + } + } + } + + if (i < expected.length) + lines.push(`${EXPECTED_COLOR(`- ${stringify(expected[i])}`)},`); + + if (i < received.length) + lines.push(`${RECEIVED_COLOR(`+ ${stringify(received[i])}`)},`); + + } + + return `${lines.join('\n')}\n`; + } + + return `${expectedLine + label + printReceivedArgs(received, expected)}\n`; + } + + const printAligned = getRightAlignedPrinter(label); + + return ( + + expectedLine + + 'Received\n' + + indexedCalls.reduce((printed: string, [i, received]: IndexedCall) => { + const aligned = printAligned(String(i + 1), i === iExpectedCall); + return `${printed + + ((i === iExpectedCall || iExpectedCall === undefined) && + isLineDiffableCall(expected, received) + ? aligned.replace(': ', '\n') + + printDiffCall(expected, received, expand) + : aligned + printReceivedArgs(received, expected)) + }\n`; + }, '') + ); +}; + +const indentation = 'Received'.replace(/\w/g, ' '); + +const printDiffCall = ( + expected: Array, + received: Array, + expand: boolean, +) => + received + .map((arg, i) => { + if (i < expected.length) { + if (isEqualValue(expected[i], arg)) + return `${indentation} ${printCommon(arg)},`; + + + if (isLineDiffableArg(expected[i], arg)) { + const difference = diff(expected[i], arg, { expand }); + + if ( + typeof difference === 'string' && + difference.includes('- Expected') && + difference.includes('+ Received') + ) { + // Display diff with indentation. + // Omit annotation in case multiple args have diff. + return `${difference + .split('\n') + .slice(3) + .map(line => indentation + line) + .join('\n')},`; + } + } + } + + // Display + only if received arg has no corresponding expected arg. + return `${indentation + + (i < expected.length + ? ` ${printReceived(arg)}` + : RECEIVED_COLOR(`+ ${stringify(arg)}`)) + },`; + }) + .join('\n'); + +const isLineDiffableCall = ( + expected: Array, + received: Array, +): boolean => + expected.some( + (arg, i) => i < received.length && isLineDiffableArg(arg, received[i]), + ); + +// Almost redundant with function in jest-matcher-utils, +// except no line diff for any strings. +const isLineDiffableArg = (expected: unknown, received: unknown): boolean => { + const expectedType = getType(expected); + const receivedType = getType(received); + + if (expectedType !== receivedType) + return false; + + + if (isPrimitive(expected)) + return false; + + + if ( + expectedType === 'date' || + expectedType === 'function' || + expectedType === 'regexp' + ) + return false; + + + if (expected instanceof Error && received instanceof Error) + return false; + + + if ( + expectedType === 'object' && + typeof (expected as any).asymmetricMatch === 'function' + ) + return false; + + + if ( + receivedType === 'object' && + typeof (received as any).asymmetricMatch === 'function' + ) + return false; + + + return true; +}; + +const printResult = (result: any, expected: unknown) => + result.type === 'throw' + ? 'function call threw an error' + : result.type === 'incomplete' + ? 'function call has not returned yet' + : isEqualValue(expected, result.value) + ? printCommon(result.value) + : printReceived(result.value); + +type IndexedResult = [number, any]; + +// Return either empty string or one line per indexed result, +// so additional empty line can separate from `Number of returns` which follows. +const printReceivedResults = ( + label: string, + expected: unknown, + indexedResults: Array, + isOnlyCall: boolean, + iExpectedCall?: number, +) => { + if (indexedResults.length === 0) + return ''; + + + if (isOnlyCall && (iExpectedCall === 0 || iExpectedCall === undefined)) + return `${label + printResult(indexedResults[0][1], expected)}\n`; + + + const printAligned = getRightAlignedPrinter(label); + + return ( + + label.replace(':', '').trim() + + '\n' + + indexedResults.reduce( + (printed: string, [i, result]: IndexedResult) => + `${printed + + printAligned(String(i + 1), i === iExpectedCall) + + printResult(result, expected) + }\n`, + '', + ) + ); +}; + +const createToBeCalledMatcher = ( + matcherName: string, +): MatcherFunction<[unknown]> => + function(received: any, expected: unknown): SyncExpectationResult { + const expectedArgument = ''; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureNoExpected(expected, matcherName, options); + ensureMockOrSpy(received, matcherName, expectedArgument, options); + + const receivedIsSpy = isSpy(received); + const receivedName = receivedIsSpy ? 'spy' : received.getMockName(); + const count = receivedIsSpy + ? received.calls.count() + : received.mock.calls.length; + const calls = receivedIsSpy + ? received.calls.all().map((x: any) => x.args) + : received.mock.calls; + const pass = count > 0; + const message = pass + ? () => + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected number of calls: ${printExpected(0)}\n` + + `Received number of calls: ${printReceived(count)}\n\n` + + calls + .reduce((lines: Array, args: any, i: number) => { + if (lines.length < PRINT_LIMIT) + lines.push(`${i + 1}: ${printReceivedArgs(args)}`); + + + return lines; + }, []) + .join('\n') + : () => + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected number of calls: >= ${printExpected(1)}\n` + + `Received number of calls: ${printReceived(count)}`; + + return { message, pass }; + }; + +const createToReturnMatcher = ( + matcherName: string, +): MatcherFunction<[unknown]> => + function(received: any, expected): SyncExpectationResult { + const expectedArgument = ''; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureNoExpected(expected, matcherName, options); + ensureMock(received, matcherName, expectedArgument, options); + + const receivedName = received.getMockName(); + + // Count return values that correspond only to calls that returned + const count = received.mock.results.reduce( + (n: number, result: any) => (result.type === 'return' ? n + 1 : n), + 0, + ); + + const pass = count > 0; + + const message = pass + ? () => + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected number of returns: ${printExpected(0)}\n` + + `Received number of returns: ${printReceived(count)}\n\n` + + received.mock.results + .reduce((lines: Array, result: any, i: number) => { + if (result.type === 'return' && lines.length < PRINT_LIMIT) + lines.push(`${i + 1}: ${printReceived(result.value)}`); + + + return lines; + }, []) + .join('\n') + + (received.mock.calls.length !== count + ? `\n\nReceived number of calls: ${printReceived( + received.mock.calls.length, + )}` + : '') + : () => + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected number of returns: >= ${printExpected(1)}\n` + + `Received number of returns: ${printReceived(count)}` + + (received.mock.calls.length !== count + ? `\nReceived number of calls: ${printReceived( + received.mock.calls.length, + )}` + : ''); + + return { message, pass }; + }; + +const createToBeCalledTimesMatcher = ( + matcherName: string, +): MatcherFunction<[number]> => + function(received: any, expected): SyncExpectationResult { + const expectedArgument = 'expected'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureExpectedIsNonNegativeInteger(expected, matcherName, options); + ensureMockOrSpy(received, matcherName, expectedArgument, options); + + const receivedIsSpy = isSpy(received); + const receivedName = receivedIsSpy ? 'spy' : received.getMockName(); + const count = receivedIsSpy + ? received.calls.count() + : received.mock.calls.length; + + const pass = count === expected; + + const message = pass + ? () => + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected number of calls: not ${printExpected(expected)}` + : () => + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected number of calls: ${printExpected(expected)}\n` + + `Received number of calls: ${printReceived(count)}`; + + return { message, pass }; + }; + +const createToReturnTimesMatcher = ( + matcherName: string, +): MatcherFunction<[number]> => + function(received: any, expected): SyncExpectationResult { + const expectedArgument = 'expected'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureExpectedIsNonNegativeInteger(expected, matcherName, options); + ensureMock(received, matcherName, expectedArgument, options); + + const receivedName = received.getMockName(); + + // Count return values that correspond only to calls that returned + const count = received.mock.results.reduce( + (n: number, result: any) => (result.type === 'return' ? n + 1 : n), + 0, + ); + + const pass = count === expected; + + const message = pass + ? () => + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected number of returns: not ${printExpected(expected)}` + + (received.mock.calls.length !== count + ? `\n\nReceived number of calls: ${printReceived( + received.mock.calls.length, + )}` + : '') + : () => + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected number of returns: ${printExpected(expected)}\n` + + `Received number of returns: ${printReceived(count)}` + + (received.mock.calls.length !== count + ? `\nReceived number of calls: ${printReceived( + received.mock.calls.length, + )}` + : ''); + + return { message, pass }; + }; + +const createToBeCalledWithMatcher = ( + matcherName: string, +): MatcherFunction> => + function(received: any, ...expected): SyncExpectationResult { + const expectedArgument = '...expected'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureMockOrSpy(received, matcherName, expectedArgument, options); + + const receivedIsSpy = isSpy(received); + const receivedName = receivedIsSpy ? 'spy' : received.getMockName(); + + const calls = receivedIsSpy + ? received.calls.all().map((x: any) => x.args) + : received.mock.calls; + + const pass = calls.some((call: any) => isEqualCall(expected, call)); + + const message = pass + ? () => { + // Some examples of calls that are equal to expected value. + const indexedCalls: Array = []; + let i = 0; + while (i < calls.length && indexedCalls.length < PRINT_LIMIT) { + if (isEqualCall(expected, calls[i])) + indexedCalls.push([i, calls[i]]); + + i += 1; + } + + return ( + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected: not ${printExpectedArgs(expected)}\n` + + (calls.length === 1 && stringify(calls[0]) === stringify(expected) + ? '' + : printReceivedCallsNegative( + expected, + indexedCalls, + calls.length === 1, + )) + + `\nNumber of calls: ${printReceived(calls.length)}` + ); + } + : () => { + // Some examples of calls that are not equal to expected value. + const indexedCalls: Array = []; + let i = 0; + while (i < calls.length && indexedCalls.length < PRINT_LIMIT) { + indexedCalls.push([i, calls[i]]); + i += 1; + } + + return ( + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + printExpectedReceivedCallsPositive( + expected, + indexedCalls, + isExpand(this.expand), + calls.length === 1, + ) + + `\nNumber of calls: ${printReceived(calls.length)}` + ); + }; + + return { message, pass }; + }; + +const createToReturnWithMatcher = ( + matcherName: string, +): MatcherFunction<[unknown]> => + function(received: any, expected): SyncExpectationResult { + const expectedArgument = 'expected'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureMock(received, matcherName, expectedArgument, options); + + const receivedName = received.getMockName(); + const { calls, results } = received.mock; + + const pass = results.some((result: any) => isEqualReturn(expected, result)); + + const message = pass + ? () => { + // Some examples of results that are equal to expected value. + const indexedResults: Array = []; + let i = 0; + while (i < results.length && indexedResults.length < PRINT_LIMIT) { + if (isEqualReturn(expected, results[i])) + indexedResults.push([i, results[i]]); + + i += 1; + } + + return ( + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected: not ${printExpected(expected)}\n` + + (results.length === 1 && + results[0].type === 'return' && + stringify(results[0].value) === stringify(expected) + ? '' + : printReceivedResults( + 'Received: ', + expected, + indexedResults, + results.length === 1, + )) + + printNumberOfReturns(countReturns(results), calls.length) + ); + } + : () => { + // Some examples of results that are not equal to expected value. + const indexedResults: Array = []; + let i = 0; + while (i < results.length && indexedResults.length < PRINT_LIMIT) { + indexedResults.push([i, results[i]]); + i += 1; + } + + return ( + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected: ${printExpected(expected)}\n` + + printReceivedResults( + 'Received: ', + expected, + indexedResults, + results.length === 1, + ) + + printNumberOfReturns(countReturns(results), calls.length) + ); + }; + + return { message, pass }; + }; + +const createLastCalledWithMatcher = ( + matcherName: string, +): MatcherFunction> => + function(received: any, ...expected): SyncExpectationResult { + const expectedArgument = '...expected'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureMockOrSpy(received, matcherName, expectedArgument, options); + + const receivedIsSpy = isSpy(received); + const receivedName = receivedIsSpy ? 'spy' : received.getMockName(); + + const calls = receivedIsSpy + ? received.calls.all().map((x: any) => x.args) + : received.mock.calls; + const iLast = calls.length - 1; + + const pass = iLast >= 0 && isEqualCall(expected, calls[iLast]); + + const message = pass + ? () => { + const indexedCalls: Array = []; + if (iLast > 0) { + // Display preceding call as context. + indexedCalls.push([iLast - 1, calls[iLast - 1]]); + } + indexedCalls.push([iLast, calls[iLast]]); + + return ( + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected: not ${printExpectedArgs(expected)}\n` + + (calls.length === 1 && stringify(calls[0]) === stringify(expected) + ? '' + : printReceivedCallsNegative( + expected, + indexedCalls, + calls.length === 1, + iLast, + )) + + `\nNumber of calls: ${printReceived(calls.length)}` + ); + } + : () => { + const indexedCalls: Array = []; + if (iLast >= 0) { + if (iLast > 0) { + let i = iLast - 1; + // Is there a preceding call that is equal to expected args? + while (i >= 0 && !isEqualCall(expected, calls[i])) + i -= 1; + + if (i < 0) + i = iLast - 1; // otherwise, preceding call + + + indexedCalls.push([i, calls[i]]); + } + + indexedCalls.push([iLast, calls[iLast]]); + } + + return ( + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + printExpectedReceivedCallsPositive( + expected, + indexedCalls, + isExpand(this.expand), + calls.length === 1, + iLast, + ) + + `\nNumber of calls: ${printReceived(calls.length)}` + ); + }; + + return { message, pass }; + }; + +const createLastReturnedMatcher = ( + matcherName: string, +): MatcherFunction<[unknown]> => + function(received: any, expected): SyncExpectationResult { + const expectedArgument = 'expected'; + const options: MatcherHintOptions = { + isNot: this.isNot, + promise: this.promise, + }; + ensureMock(received, matcherName, expectedArgument, options); + + const receivedName = received.getMockName(); + + const { calls, results } = received.mock; + const iLast = results.length - 1; + + const pass = iLast >= 0 && isEqualReturn(expected, results[iLast]); + + const message = pass + ? () => { + const indexedResults: Array = []; + if (iLast > 0) { + // Display preceding result as context. + indexedResults.push([iLast - 1, results[iLast - 1]]); + } + indexedResults.push([iLast, results[iLast]]); + + return ( + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected: not ${printExpected(expected)}\n` + + (results.length === 1 && + results[0].type === 'return' && + stringify(results[0].value) === stringify(expected) + ? '' + : printReceivedResults( + 'Received: ', + expected, + indexedResults, + results.length === 1, + iLast, + )) + + printNumberOfReturns(countReturns(results), calls.length) + ); + } + : () => { + const indexedResults: Array = []; + if (iLast >= 0) { + if (iLast > 0) { + let i = iLast - 1; + // Is there a preceding result that is equal to expected value? + while (i >= 0 && !isEqualReturn(expected, results[i])) + i -= 1; + + if (i < 0) + i = iLast - 1; // otherwise, preceding result + + + indexedResults.push([i, results[i]]); + } + + indexedResults.push([iLast, results[iLast]]); + } + + return ( + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `Expected: ${printExpected(expected)}\n` + + printReceivedResults( + 'Received: ', + expected, + indexedResults, + results.length === 1, + iLast, + ) + + printNumberOfReturns(countReturns(results), calls.length) + ); + }; + + return { message, pass }; + }; + +const createNthCalledWithMatcher = ( + matcherName: string, +): MatcherFunction<[number, ...Array]> => + function(received: any, nth, ...expected): SyncExpectationResult { + const expectedArgument = 'n'; + const options: MatcherHintOptions = { + expectedColor: (arg: string) => arg, + isNot: this.isNot, + promise: this.promise, + secondArgument: '...expected', + }; + ensureMockOrSpy(received, matcherName, expectedArgument, options); + + if (!Number.isSafeInteger(nth) || nth < 1) { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, expectedArgument, options), + `${expectedArgument} must be a positive integer`, + printWithType(expectedArgument, nth, stringify), + ), + ); + } + + const receivedIsSpy = isSpy(received); + const receivedName = receivedIsSpy ? 'spy' : received.getMockName(); + + const calls = receivedIsSpy + ? received.calls.all().map((x: any) => x.args) + : received.mock.calls; + const length = calls.length; + const iNth = nth - 1; + + const pass = iNth < length && isEqualCall(expected, calls[iNth]); + + const message = pass + ? () => { + // Display preceding and following calls, + // in case assertions fails because index is off by one. + const indexedCalls: Array = []; + if (iNth - 1 >= 0) + indexedCalls.push([iNth - 1, calls[iNth - 1]]); + + indexedCalls.push([iNth, calls[iNth]]); + if (iNth + 1 < length) + indexedCalls.push([iNth + 1, calls[iNth + 1]]); + + + return ( + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `n: ${nth}\n` + + `Expected: not ${printExpectedArgs(expected)}\n` + + (calls.length === 1 && stringify(calls[0]) === stringify(expected) + ? '' + : printReceivedCallsNegative( + expected, + indexedCalls, + calls.length === 1, + iNth, + )) + + `\nNumber of calls: ${printReceived(calls.length)}` + ); + } + : () => { + // Display preceding and following calls: + // * nearest call that is equal to expected args + // * otherwise, adjacent call + // in case assertions fails because of index, especially off by one. + const indexedCalls: Array = []; + if (iNth < length) { + if (iNth - 1 >= 0) { + let i = iNth - 1; + // Is there a preceding call that is equal to expected args? + while (i >= 0 && !isEqualCall(expected, calls[i])) + i -= 1; + + if (i < 0) + i = iNth - 1; // otherwise, adjacent call + + + indexedCalls.push([i, calls[i]]); + } + indexedCalls.push([iNth, calls[iNth]]); + if (iNth + 1 < length) { + let i = iNth + 1; + // Is there a following call that is equal to expected args? + while (i < length && !isEqualCall(expected, calls[i])) + i += 1; + + if (i >= length) + i = iNth + 1; // otherwise, adjacent call + + + indexedCalls.push([i, calls[i]]); + } + } else if (length > 0) { + // The number of received calls is fewer than the expected number. + let i = length - 1; + // Is there a call that is equal to expected args? + while (i >= 0 && !isEqualCall(expected, calls[i])) + i -= 1; + + if (i < 0) + i = length - 1; // otherwise, last call + + + indexedCalls.push([i, calls[i]]); + } + + return ( + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `n: ${nth}\n` + + printExpectedReceivedCallsPositive( + expected, + indexedCalls, + isExpand(this.expand), + calls.length === 1, + iNth, + ) + + `\nNumber of calls: ${printReceived(calls.length)}` + ); + }; + + return { message, pass }; + }; + +const createNthReturnedWithMatcher = ( + matcherName: string, +): MatcherFunction<[number, unknown]> => + function(received: any, nth, expected): SyncExpectationResult { + const expectedArgument = 'n'; + const options: MatcherHintOptions = { + expectedColor: (arg: string) => arg, + isNot: this.isNot, + promise: this.promise, + secondArgument: 'expected', + }; + ensureMock(received, matcherName, expectedArgument, options); + + if (!Number.isSafeInteger(nth) || nth < 1) { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, expectedArgument, options), + `${expectedArgument} must be a positive integer`, + printWithType(expectedArgument, nth, stringify), + ), + ); + } + + const receivedName = received.getMockName(); + const { calls, results } = received.mock; + const length = results.length; + const iNth = nth - 1; + + const pass = iNth < length && isEqualReturn(expected, results[iNth]); + + const message = pass + ? () => { + // Display preceding and following results, + // in case assertions fails because index is off by one. + const indexedResults: Array = []; + if (iNth - 1 >= 0) + indexedResults.push([iNth - 1, results[iNth - 1]]); + + indexedResults.push([iNth, results[iNth]]); + if (iNth + 1 < length) + indexedResults.push([iNth + 1, results[iNth + 1]]); + + + return ( + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `n: ${nth}\n` + + `Expected: not ${printExpected(expected)}\n` + + (results.length === 1 && + results[0].type === 'return' && + stringify(results[0].value) === stringify(expected) + ? '' + : printReceivedResults( + 'Received: ', + expected, + indexedResults, + results.length === 1, + iNth, + )) + + printNumberOfReturns(countReturns(results), calls.length) + ); + } + : () => { + // Display preceding and following results: + // * nearest result that is equal to expected value + // * otherwise, adjacent result + // in case assertions fails because of index, especially off by one. + const indexedResults: Array = []; + if (iNth < length) { + if (iNth - 1 >= 0) { + let i = iNth - 1; + // Is there a preceding result that is equal to expected value? + while (i >= 0 && !isEqualReturn(expected, results[i])) + i -= 1; + + if (i < 0) + i = iNth - 1; // otherwise, adjacent result + + + indexedResults.push([i, results[i]]); + } + indexedResults.push([iNth, results[iNth]]); + if (iNth + 1 < length) { + let i = iNth + 1; + // Is there a following result that is equal to expected value? + while (i < length && !isEqualReturn(expected, results[i])) + i += 1; + + if (i >= length) + i = iNth + 1; // otherwise, adjacent result + + + indexedResults.push([i, results[i]]); + } + } else if (length > 0) { + // The number of received calls is fewer than the expected number. + let i = length - 1; + // Is there a result that is equal to expected value? + while (i >= 0 && !isEqualReturn(expected, results[i])) + i -= 1; + + if (i < 0) + i = length - 1; // otherwise, last result + + + indexedResults.push([i, results[i]]); + } + + return ( + + matcherHint(matcherName, receivedName, expectedArgument, options) + + '\n\n' + + `n: ${nth}\n` + + `Expected: ${printExpected(expected)}\n` + + printReceivedResults( + 'Received: ', + expected, + indexedResults, + results.length === 1, + iNth, + ) + + printNumberOfReturns(countReturns(results), calls.length) + ); + }; + + return { message, pass }; + }; + +const spyMatchers: MatchersObject = { + lastCalledWith: createLastCalledWithMatcher('lastCalledWith'), + lastReturnedWith: createLastReturnedMatcher('lastReturnedWith'), + nthCalledWith: createNthCalledWithMatcher('nthCalledWith'), + nthReturnedWith: createNthReturnedWithMatcher('nthReturnedWith'), + toBeCalled: createToBeCalledMatcher('toBeCalled'), + toBeCalledTimes: createToBeCalledTimesMatcher('toBeCalledTimes'), + toBeCalledWith: createToBeCalledWithMatcher('toBeCalledWith'), + toHaveBeenCalled: createToBeCalledMatcher('toHaveBeenCalled'), + toHaveBeenCalledTimes: createToBeCalledTimesMatcher('toHaveBeenCalledTimes'), + toHaveBeenCalledWith: createToBeCalledWithMatcher('toHaveBeenCalledWith'), + toHaveBeenLastCalledWith: createLastCalledWithMatcher( + 'toHaveBeenLastCalledWith', + ), + toHaveBeenNthCalledWith: createNthCalledWithMatcher( + 'toHaveBeenNthCalledWith', + ), + toHaveLastReturnedWith: createLastReturnedMatcher('toHaveLastReturnedWith'), + toHaveNthReturnedWith: createNthReturnedWithMatcher('toHaveNthReturnedWith'), + toHaveReturned: createToReturnMatcher('toHaveReturned'), + toHaveReturnedTimes: createToReturnTimesMatcher('toHaveReturnedTimes'), + toHaveReturnedWith: createToReturnWithMatcher('toHaveReturnedWith'), + toReturn: createToReturnMatcher('toReturn'), + toReturnTimes: createToReturnTimesMatcher('toReturnTimes'), + toReturnWith: createToReturnWithMatcher('toReturnWith'), +}; + +const isMock = (received: any) => + received != null && received._isMockFunction === true; + +const isSpy = (received: any) => + received != null && + received.calls != null && + typeof received.calls.all === 'function' && + typeof received.calls.count === 'function'; + +const ensureMockOrSpy = ( + received: any, + matcherName: string, + expectedArgument: string, + options: MatcherHintOptions, +) => { + if (!isMock(received) && !isSpy(received)) { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, expectedArgument, options), + `${RECEIVED_COLOR('received')} value must be a mock or spy function`, + printWithType('Received', received, printReceived), + ), + ); + } +}; + +const ensureMock = ( + received: any, + matcherName: string, + expectedArgument: string, + options: MatcherHintOptions, +) => { + if (!isMock(received)) { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, expectedArgument, options), + `${RECEIVED_COLOR('received')} value must be a mock function`, + printWithType('Received', received, printReceived), + ), + ); + } +}; + +export default spyMatchers; diff --git a/packages/playwright/bundles/expect/third_party/toThrowMatchers.ts b/packages/playwright/bundles/expect/third_party/toThrowMatchers.ts new file mode 100644 index 0000000000..5a2bb9dcad --- /dev/null +++ b/packages/playwright/bundles/expect/third_party/toThrowMatchers.ts @@ -0,0 +1,481 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { isError } from '@jest/expect-utils'; +import { + EXPECTED_COLOR, + type MatcherHintOptions, + RECEIVED_COLOR, + matcherErrorMessage, + matcherHint, + printDiffOrStringify, + printExpected, + printReceived, + printWithType, +} from 'jest-matcher-utils'; +import { formatStackTrace, separateMessageFromStack } from 'jest-message-util'; +import { + printExpectedConstructorName, + printExpectedConstructorNameNot, + printReceivedConstructorName, + printReceivedConstructorNameNot, + printReceivedStringContainExpectedResult, + printReceivedStringContainExpectedSubstring, +} from './print'; +import type { + ExpectationResult, + MatcherFunction, + MatchersObject, + SyncExpectationResult, +} from './types'; + +/* eslint-disable eqeqeq */ + +const DID_NOT_THROW = 'Received function did not throw'; + +type Thrown = + | { + hasMessage: true; + isError: true; + message: string; + value: Error; + } + | { + hasMessage: boolean; + isError: false; + message: string; + value: any; + }; + +const getThrown = (e: any): Thrown => { + const hasMessage = + e !== null && e !== undefined && typeof e.message === 'string'; + + if (hasMessage && typeof e.name === 'string' && typeof e.stack === 'string') { + return { + hasMessage, + isError: true, + message: e.message, + value: e, + }; + } + + return { + hasMessage, + isError: false, + message: hasMessage ? e.message : String(e), + value: e, + }; +}; + +export const createMatcher = ( + matcherName: string, + fromPromise?: boolean, +): MatcherFunction<[any]> => + function(received, expected): ExpectationResult { + const options = { + isNot: this.isNot, + promise: this.promise, + }; + + let thrown = null; + + if (fromPromise && isError(received)) { + thrown = getThrown(received); + } else { + if (typeof received !== 'function') { + if (!fromPromise) { + const placeholder = expected === undefined ? '' : 'expected'; + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, placeholder, options), + `${RECEIVED_COLOR('received')} value must be a function`, + printWithType('Received', received, printReceived), + ), + ); + } + } else { + try { + received(); + } catch (e) { + thrown = getThrown(e); + } + } + } + + if (expected === undefined) { + return toThrow(matcherName, options, thrown); + } else if (typeof expected === 'function') { + return toThrowExpectedClass(matcherName, options, thrown, expected); + } else if (typeof expected === 'string') { + return toThrowExpectedString(matcherName, options, thrown, expected); + } else if (expected !== null && typeof expected.test === 'function') { + return toThrowExpectedRegExp(matcherName, options, thrown, expected); + } else if ( + expected !== null && + typeof expected.asymmetricMatch === 'function' + ) { + return toThrowExpectedAsymmetric(matcherName, options, thrown, expected); + } else if (expected !== null && typeof expected === 'object') { + return toThrowExpectedObject(matcherName, options, thrown, expected); + } else { + throw new Error( + matcherErrorMessage( + matcherHint(matcherName, undefined, undefined, options), + `${EXPECTED_COLOR( + 'expected', + )} value must be a string or regular expression or class or error`, + printWithType('Expected', expected, printExpected), + ), + ); + } + }; + +const matchers: MatchersObject = { + toThrow: createMatcher('toThrow'), + toThrowError: createMatcher('toThrowError'), +}; + +const toThrowExpectedRegExp = ( + matcherName: string, + options: MatcherHintOptions, + thrown: Thrown | null, + expected: RegExp, +): SyncExpectationResult => { + const pass = thrown !== null && expected.test(thrown.message); + + const message = pass + ? () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + formatExpected('Expected pattern: not ', expected) + + (thrown !== null && thrown.hasMessage + ? formatReceived( + 'Received message: ', + thrown, + 'message', + expected, + ) + formatStack(thrown) + : formatReceived('Received value: ', thrown, 'value')) + : () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + formatExpected('Expected pattern: ', expected) + + (thrown === null + ? `\n${DID_NOT_THROW}` + : thrown.hasMessage + ? formatReceived('Received message: ', thrown, 'message') + + formatStack(thrown) + : formatReceived('Received value: ', thrown, 'value')); + + return { message, pass }; +}; + +type AsymmetricMatcher = { + asymmetricMatch: (received: unknown) => boolean; +}; + +const toThrowExpectedAsymmetric = ( + matcherName: string, + options: MatcherHintOptions, + thrown: Thrown | null, + expected: AsymmetricMatcher, +): SyncExpectationResult => { + const pass = thrown !== null && expected.asymmetricMatch(thrown.value); + + const message = pass + ? () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + formatExpected('Expected asymmetric matcher: not ', expected) + + '\n' + + (thrown !== null && thrown.hasMessage + ? formatReceived('Received name: ', thrown, 'name') + + formatReceived('Received message: ', thrown, 'message') + + formatStack(thrown) + : formatReceived('Thrown value: ', thrown, 'value')) + : () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + formatExpected('Expected asymmetric matcher: ', expected) + + '\n' + + (thrown === null + ? DID_NOT_THROW + : thrown.hasMessage + ? formatReceived('Received name: ', thrown, 'name') + + formatReceived('Received message: ', thrown, 'message') + + formatStack(thrown) + : formatReceived('Thrown value: ', thrown, 'value')); + + return { message, pass }; +}; + +const toThrowExpectedObject = ( + matcherName: string, + options: MatcherHintOptions, + thrown: Thrown | null, + expected: Error, +): SyncExpectationResult => { + const expectedMessageAndCause = createMessageAndCause(expected); + const thrownMessageAndCause = + thrown !== null ? createMessageAndCause(thrown.value) : null; + const pass = + thrown !== null && + thrown.message === expected.message && + thrownMessageAndCause === expectedMessageAndCause; + + const message = pass + ? () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + formatExpected( + `Expected ${messageAndCause(expected)}: not `, + expectedMessageAndCause, + ) + + (thrown !== null && thrown.hasMessage + ? formatStack(thrown) + : formatReceived('Received value: ', thrown, 'value')) + : () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + (thrown === null + ? + formatExpected( + `Expected ${messageAndCause(expected)}: `, + expectedMessageAndCause, + ) + + '\n' + + DID_NOT_THROW + : thrown.hasMessage + ? + printDiffOrStringify( + expectedMessageAndCause, + thrownMessageAndCause, + `Expected ${messageAndCause(expected)}`, + `Received ${messageAndCause(thrown.value)}`, + true, + ) + + '\n' + + formatStack(thrown) + : formatExpected( + `Expected ${messageAndCause(expected)}: `, + expectedMessageAndCause, + ) + formatReceived('Received value: ', thrown, 'value')); + + return { message, pass }; +}; + +const toThrowExpectedClass = ( + matcherName: string, + options: MatcherHintOptions, + thrown: Thrown | null, + expected: Function, +): SyncExpectationResult => { + const pass = thrown !== null && thrown.value instanceof expected; + + const message = pass + ? () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + printExpectedConstructorNameNot('Expected constructor', expected) + + (thrown !== null && + thrown.value != null && + typeof thrown.value.constructor === 'function' && + thrown.value.constructor !== expected + ? printReceivedConstructorNameNot( + 'Received constructor', + thrown.value.constructor, + expected, + ) + : '') + + '\n' + + (thrown !== null && thrown.hasMessage + ? formatReceived('Received message: ', thrown, 'message') + + formatStack(thrown) + : formatReceived('Received value: ', thrown, 'value')) + : () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + printExpectedConstructorName('Expected constructor', expected) + + (thrown === null + ? `\n${DID_NOT_THROW}` + : `${thrown.value != null && + typeof thrown.value.constructor === 'function' + ? printReceivedConstructorName( + 'Received constructor', + thrown.value.constructor, + ) + : '' + }\n${thrown.hasMessage + ? formatReceived('Received message: ', thrown, 'message') + + formatStack(thrown) + : formatReceived('Received value: ', thrown, 'value') + }`); + + return { message, pass }; +}; + +const toThrowExpectedString = ( + matcherName: string, + options: MatcherHintOptions, + thrown: Thrown | null, + expected: string, +): SyncExpectationResult => { + const pass = thrown !== null && thrown.message.includes(expected); + + const message = pass + ? () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + formatExpected('Expected substring: not ', expected) + + (thrown !== null && thrown.hasMessage + ? formatReceived( + 'Received message: ', + thrown, + 'message', + expected, + ) + formatStack(thrown) + : formatReceived('Received value: ', thrown, 'value')) + : () => + + matcherHint(matcherName, undefined, undefined, options) + + '\n\n' + + formatExpected('Expected substring: ', expected) + + (thrown === null + ? `\n${DID_NOT_THROW}` + : thrown.hasMessage + ? formatReceived('Received message: ', thrown, 'message') + + formatStack(thrown) + : formatReceived('Received value: ', thrown, 'value')); + + return { message, pass }; +}; + +const toThrow = ( + matcherName: string, + options: MatcherHintOptions, + thrown: Thrown | null, +): SyncExpectationResult => { + const pass = thrown !== null; + + const message = pass + ? () => + + matcherHint(matcherName, undefined, '', options) + + '\n\n' + + (thrown !== null && thrown.hasMessage + ? formatReceived('Error name: ', thrown, 'name') + + formatReceived('Error message: ', thrown, 'message') + + formatStack(thrown) + : formatReceived('Thrown value: ', thrown, 'value')) + : () => + + matcherHint(matcherName, undefined, '', options) + + '\n\n' + + DID_NOT_THROW; + + return { message, pass }; +}; + +const formatExpected = (label: string, expected: unknown) => + `${label + printExpected(expected)}\n`; + +const formatReceived = ( + label: string, + thrown: Thrown | null, + key: string, + expected?: string | RegExp, +) => { + if (thrown === null) + return ''; + + + if (key === 'message') { + const message = thrown.message; + + if (typeof expected === 'string') { + const index = message.indexOf(expected); + if (index !== -1) { + return `${label + + printReceivedStringContainExpectedSubstring( + message, + index, + expected.length, + ) + }\n`; + } + } else if (expected instanceof RegExp) { + return `${label + + printReceivedStringContainExpectedResult( + message, + typeof expected.exec === 'function' ? expected.exec(message) : null, + ) + }\n`; + } + + return `${label + printReceived(message)}\n`; + } + + if (key === 'name') { + return thrown.isError + ? `${label + printReceived(thrown.value.name)}\n` + : ''; + } + + if (key === 'value') + return thrown.isError ? '' : `${label + printReceived(thrown.value)}\n`; + + + return ''; +}; + +const formatStack = (thrown: Thrown | null) => + thrown === null || !thrown.isError + ? '' + : formatStackTrace( + separateMessageFromStack(thrown.value.stack!).stack, + { + rootDir: process.cwd(), + testMatch: [], + }, + { + noStackTrace: false, + }, + ); + +function createMessageAndCauseMessage(error: Error): string { + if (error.cause instanceof Error) { + return `{ message: ${error.message}, cause: ${createMessageAndCauseMessage( + error.cause, + )}}`; + } + + return `{ message: ${error.message} }`; +} + +function createMessageAndCause(error: Error) { + if (error.cause instanceof Error) + return createMessageAndCauseMessage(error); + + return error.message; +} + +function messageAndCause(error: Error) { + return error.cause === undefined ? 'message' : 'message and cause'; +} + +export default matchers; diff --git a/packages/playwright/bundles/expect/third_party/types.ts b/packages/playwright/bundles/expect/third_party/types.ts new file mode 100644 index 0000000000..abaa3a3b69 --- /dev/null +++ b/packages/playwright/bundles/expect/third_party/types.ts @@ -0,0 +1,353 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import type { EqualsFunction, Tester } from '@jest/expect-utils'; +import type * as jestMatcherUtils from 'jest-matcher-utils'; +import type { INTERNAL_MATCHER_FLAG } from './jestMatchersObject'; + +export type SyncExpectationResult = { + pass: boolean; + message(): string; +}; + +export type AsyncExpectationResult = Promise; + +export type ExpectationResult = SyncExpectationResult | AsyncExpectationResult; + +export type MatcherFunctionWithContext< + Context extends MatcherContext = MatcherContext, + Expected extends Array = [] /** TODO should be: extends Array = [] */, +> = ( + this: Context, + actual: unknown, + ...expected: Expected +) => ExpectationResult; + +export type MatcherFunction = []> = + MatcherFunctionWithContext; + +// TODO should be replaced with `MatcherFunctionWithContext` +export type RawMatcherFn = { + (this: Context, actual: any, ...expected: Array): ExpectationResult; + /** @internal */ + [INTERNAL_MATCHER_FLAG]?: boolean; +}; + +export type MatchersObject = { + [name: string]: RawMatcherFn; +}; + +export type ThrowingMatcherFn = (actual: any) => void; +export type PromiseMatcherFn = (actual: any) => Promise; + +export interface MatcherUtils { + customTesters: Array; + dontThrow(): void; + equals: EqualsFunction; + utils: typeof jestMatcherUtils & { + iterableEquality: Tester; + subsetEquality: Tester; + }; +} + +export interface MatcherState { + assertionCalls: number; + currentConcurrentTestName?: () => string | undefined; + currentTestName?: string; + error?: Error; + expand?: boolean; + expectedAssertionsNumber: number | null; + expectedAssertionsNumberError?: Error; + isExpectingAssertions: boolean; + isExpectingAssertionsError?: Error; + isNot?: boolean; + numPassingAsserts: number; + promise?: string; + suppressedErrors: Array; + testPath?: string; +} + +export type MatcherContext = MatcherUtils & Readonly; + +export type AsymmetricMatcher = { + asymmetricMatch(other: unknown): boolean; + toString(): string; + getExpectedType?(): string; + toAsymmetricMatcher?(): string; +}; + +export type ExpectedAssertionsErrors = Array<{ + actual: string | number; + error: Error; + expected: string; +}>; + +export interface BaseExpect { + assertions(numberOfAssertions: number): void; + addEqualityTesters(testers: Array): void; + extend(matchers: MatchersObject): void; + extractExpectedAssertionsErrors(): ExpectedAssertionsErrors; + getState(): MatcherState; + hasAssertions(): void; + setState(state: Partial): void; +} + +export type Expect = { + (actual: T): Matchers & + Inverse> & + PromiseMatchers; +} & BaseExpect & + AsymmetricMatchers & + Inverse>; + +type Inverse = { + /** + * Inverse next matcher. If you know how to test something, `.not` lets you test its opposite. + */ + not: Matchers; +}; + +export interface AsymmetricMatchers { + any(sample: unknown): AsymmetricMatcher; + anything(): AsymmetricMatcher; + arrayContaining(sample: Array): AsymmetricMatcher; + closeTo(sample: number, precision?: number): AsymmetricMatcher; + objectContaining(sample: Record): AsymmetricMatcher; + stringContaining(sample: string): AsymmetricMatcher; + stringMatching(sample: string | RegExp): AsymmetricMatcher; +} + +type PromiseMatchers = { + /** + * Unwraps the reason of a rejected promise so any other matcher can be chained. + * If the promise is fulfilled the assertion fails. + */ + rejects: Matchers, T> & Inverse, T>>; + /** + * Unwraps the value of a fulfilled promise so any other matcher can be chained. + * If the promise is rejected the assertion fails. + */ + resolves: Matchers, T> & Inverse, T>>; +}; + +export interface Matchers, T = unknown> { + /** + * T is a type param for the benefit of users who extend Matchers. It's + * intentionally unused and needs to be named T, not _T, for those users. + * This makes sure TypeScript agrees. + * + * @internal + */ + _unusedT(expected: T): R; + /** + * Ensures the last call to a mock function was provided specific args. + */ + lastCalledWith(...expected: Array): R; + /** + * Ensure that the last call to a mock function has returned a specified value. + */ + lastReturnedWith(expected?: unknown): R; + /** + * Ensure that a mock function is called with specific arguments on an Nth call. + */ + nthCalledWith(nth: number, ...expected: Array): R; + /** + * Ensure that the nth call to a mock function has returned a specified value. + */ + nthReturnedWith(nth: number, expected?: unknown): R; + /** + * Checks that a value is what you expect. It calls `Object.is` to compare values. + * Don't use `toBe` with floating-point numbers. + */ + toBe(expected: unknown): R; + /** + * Ensures that a mock function is called. + */ + toBeCalled(): R; + /** + * Ensures that a mock function is called an exact number of times. + */ + toBeCalledTimes(expected: number): R; + /** + * Ensure that a mock function is called with specific arguments. + */ + toBeCalledWith(...expected: Array): R; + /** + * Using exact equality with floating point numbers is a bad idea. + * Rounding means that intuitive things fail. + * The default for `precision` is 2. + */ + toBeCloseTo(expected: number, precision?: number): R; + /** + * Ensure that a variable is not undefined. + */ + toBeDefined(): R; + /** + * When you don't care what a value is, you just want to + * ensure a value is false in a boolean context. + */ + toBeFalsy(): R; + /** + * For comparing floating point numbers. + */ + toBeGreaterThan(expected: number | bigint): R; + /** + * For comparing floating point numbers. + */ + toBeGreaterThanOrEqual(expected: number | bigint): R; + /** + * Ensure that an object is an instance of a class. + * This matcher uses `instanceof` underneath. + */ + toBeInstanceOf(expected: unknown): R; + /** + * For comparing floating point numbers. + */ + toBeLessThan(expected: number | bigint): R; + /** + * For comparing floating point numbers. + */ + toBeLessThanOrEqual(expected: number | bigint): R; + /** + * Used to check that a variable is NaN. + */ + toBeNaN(): R; + /** + * This is the same as `.toBe(null)` but the error messages are a bit nicer. + * So use `.toBeNull()` when you want to check that something is null. + */ + toBeNull(): R; + /** + * Use when you don't care what a value is, you just want to ensure a value + * is true in a boolean context. In JavaScript, there are six falsy values: + * `false`, `0`, `''`, `null`, `undefined`, and `NaN`. Everything else is truthy. + */ + toBeTruthy(): R; + /** + * Used to check that a variable is undefined. + */ + toBeUndefined(): R; + /** + * Used when you want to check that an item is in a list. + * For testing the items in the list, this uses `===`, a strict equality check. + */ + toContain(expected: unknown): R; + /** + * Used when you want to check that an item is in a list. + * For testing the items in the list, this matcher recursively checks the + * equality of all fields, rather than checking for object identity. + */ + toContainEqual(expected: unknown): R; + /** + * Used when you want to check that two objects have the same value. + * This matcher recursively checks the equality of all fields, rather than checking for object identity. + */ + toEqual(expected: unknown): R; + /** + * Ensures that a mock function is called. + */ + toHaveBeenCalled(): R; + /** + * Ensures that a mock function is called an exact number of times. + */ + toHaveBeenCalledTimes(expected: number): R; + /** + * Ensure that a mock function is called with specific arguments. + */ + toHaveBeenCalledWith(...expected: Array): R; + /** + * Ensure that a mock function is called with specific arguments on an Nth call. + */ + toHaveBeenNthCalledWith(nth: number, ...expected: Array): R; + /** + * If you have a mock function, you can use `.toHaveBeenLastCalledWith` + * to test what arguments it was last called with. + */ + toHaveBeenLastCalledWith(...expected: Array): R; + /** + * Use to test the specific value that a mock function last returned. + * If the last call to the mock function threw an error, then this matcher will fail + * no matter what value you provided as the expected return value. + */ + toHaveLastReturnedWith(expected?: unknown): R; + /** + * Used to check that an object has a `.length` property + * and it is set to a certain numeric value. + */ + toHaveLength(expected: number): R; + /** + * Use to test the specific value that a mock function returned for the nth call. + * If the nth call to the mock function threw an error, then this matcher will fail + * no matter what value you provided as the expected return value. + */ + toHaveNthReturnedWith(nth: number, expected?: unknown): R; + /** + * Use to check if property at provided reference keyPath exists for an object. + * For checking deeply nested properties in an object you may use dot notation or an array containing + * the keyPath for deep references. + * + * Optionally, you can provide a value to check if it's equal to the value present at keyPath + * on the target object. This matcher uses 'deep equality' (like `toEqual()`) and recursively checks + * the equality of all fields. + * + * @example + * + * expect(houseForSale).toHaveProperty('kitchen.area', 20); + */ + toHaveProperty( + expectedPath: string | Array, + expectedValue?: unknown, + ): R; + /** + * Use to test that the mock function successfully returned (i.e., did not throw an error) at least one time + */ + toHaveReturned(): R; + /** + * Use to ensure that a mock function returned successfully (i.e., did not throw an error) an exact number of times. + * Any calls to the mock function that throw an error are not counted toward the number of times the function returned. + */ + toHaveReturnedTimes(expected: number): R; + /** + * Use to ensure that a mock function returned a specific value. + */ + toHaveReturnedWith(expected?: unknown): R; + /** + * Check that a string matches a regular expression. + */ + toMatch(expected: string | RegExp): R; + /** + * Used to check that a JavaScript object matches a subset of the properties of an object + */ + toMatchObject( + expected: Record | Array>, + ): R; + /** + * Ensure that a mock function has returned (as opposed to thrown) at least once. + */ + toReturn(): R; + /** + * Ensure that a mock function has returned (as opposed to thrown) a specified number of times. + */ + toReturnTimes(expected: number): R; + /** + * Ensure that a mock function has returned a specified value at least once. + */ + toReturnWith(expected?: unknown): R; + /** + * Use to test that objects have the same types as well as structure. + */ + toStrictEqual(expected: unknown): R; + /** + * Used to test that a function throws when it is called. + */ + toThrow(expected?: unknown): R; + /** + * If you want to test that a specific error is thrown inside a function. + */ + toThrowError(expected?: unknown): R; +} diff --git a/packages/playwright/src/common/expectBundle.ts b/packages/playwright/src/common/expectBundle.ts index 3322c36277..4b601b77ae 100644 --- a/packages/playwright/src/common/expectBundle.ts +++ b/packages/playwright/src/common/expectBundle.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -export const expect: typeof import('../../bundles/expect/node_modules/expect/build').expect = require('./expectBundleImpl').expect; +export const expect: typeof import('../../bundles/expect/third_party/index').expect = require('./expectBundleImpl').expect; +export const mock: typeof import('../../bundles/expect/node_modules/jest-mock') = require('./expectBundleImpl').mock; +export const asymmetricMatchers = require('./expectBundleImpl').asymmetricMatchers; +export const matcherUtils = require('./expectBundleImpl').matcherUtils; export const EXPECTED_COLOR: typeof import('../../bundles/expect/node_modules/jest-matcher-utils/build').EXPECTED_COLOR = require('./expectBundleImpl').EXPECTED_COLOR; export const INVERTED_COLOR: typeof import('../../bundles/expect/node_modules/jest-matcher-utils/build').INVERTED_COLOR = require('./expectBundleImpl').INVERTED_COLOR; export const RECEIVED_COLOR: typeof import('../../bundles/expect/node_modules/jest-matcher-utils/build').RECEIVED_COLOR = require('./expectBundleImpl').RECEIVED_COLOR; diff --git a/packages/web/src/ansi2html.ts b/packages/web/src/ansi2html.ts index 210d1210bc..e1d80ed073 100644 --- a/packages/web/src/ansi2html.ts +++ b/packages/web/src/ansi2html.ts @@ -26,12 +26,13 @@ export function ansi2html(text: string): string { switch (code) { case 0: style = {}; break; case 1: style['font-weight'] = 'bold'; break; + case 2: style['opacity'] = '0.8'; break; case 3: style['font-style'] = 'italic'; break; case 4: style['text-decoration'] = 'underline'; break; case 8: style.display = 'none'; break; case 9: style['text-decoration'] = 'line-through'; break; - case 22: style = { ...style, 'font-weight': undefined, 'font-style': undefined, 'text-decoration': undefined }; break; - case 23: style = { ...style, 'font-weight': undefined, 'font-style': undefined }; break; + case 22: style = { ...style, 'font-weight': undefined, 'font-style': undefined, 'opacity': undefined, 'text-decoration': undefined }; break; + case 23: style = { ...style, 'font-weight': undefined, 'font-style': undefined, 'opacity': undefined }; break; case 24: style = { ...style, 'text-decoration': undefined }; break; case 30: case 31: diff --git a/tests/config/utils.ts b/tests/config/utils.ts index 88cff686b3..d01d40771f 100644 --- a/tests/config/utils.ts +++ b/tests/config/utils.ts @@ -23,6 +23,7 @@ import { TraceModel } from '../../packages/trace-viewer/src/traceModel'; import type { ActionTreeItem } from '../../packages/trace-viewer/src/ui/modelUtil'; import { buildActionTree, MultiTraceModel } from '../../packages/trace-viewer/src/ui/modelUtil'; import type { ActionTraceEvent, ConsoleMessageTraceEvent, EventTraceEvent, TraceEvent } from '@trace/trace'; +import style from 'ansi-styles'; export async function attachFrame(page: Page, frameId: string, url: string): Promise { const handle = await page.evaluateHandle(async ({ frameId, url }) => { @@ -207,6 +208,40 @@ export function stripAnsi(str: string): string { return str.replace(ansiRegex, ''); } +export function ansi2Markup(text: string): string { + return text.replace(ansiRegex, match => { + switch (match) { + case style.inverse.open: + return ''; + case style.inverse.close: + return ''; + + case style.bold.open: + return ''; + case style.dim.open: + return ''; + case style.green.open: + return ''; + case style.red.open: + return ''; + case style.yellow.open: + return ''; + case style.bgYellow.open: + return ''; + + case style.bold.close: + case style.dim.close: + case style.green.close: + case style.red.close: + case style.yellow.close: + case style.bgYellow.close: + return ''; + + default: + return match; // unexpected escape sequence + } + }); +} class TraceBackend implements TraceModelBackend { private _fileName: string; diff --git a/tests/expect/assertionCounts.test.ts b/tests/expect/assertionCounts.test.ts new file mode 100644 index 0000000000..ebaae506c9 --- /dev/null +++ b/tests/expect/assertionCounts.test.ts @@ -0,0 +1,78 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { test, expect } from './fixtures'; +import { expect as expectUnderTest } from '../../packages/playwright/bundles/expect/src/expectBundleImpl'; + +test.describe('.assertions()', () => { + test('does not throw', () => { + expectUnderTest.assertions(2); + expectUnderTest('a').not.toBe('b'); + expectUnderTest('a').toBe('a'); + }); + + test('redeclares different assertion count', () => { + expectUnderTest.assertions(3); + expectUnderTest('a').not.toBe('b'); + expectUnderTest('a').toBe('a'); + expectUnderTest.assertions(2); + }); + test('expects no assertions', () => { + expectUnderTest.assertions(0); + }); +}); + +test.describe('.hasAssertions()', () => { + test('does not throw if there is an assertion', () => { + expectUnderTest.hasAssertions(); + expectUnderTest('a').toBe('a'); + }); + + test('throws if expected is not undefined', () => { + expect(() => + (expectUnderTest as any).hasAssertions(2) + ).toThrowErrorMatchingSnapshot(`expect(received)[.not].hasAssertions() + +Matcher error: this matcher must not have an expected argument + +Expected has type: number +Expected has value: 2`); + }); +}); + +test.describe('numPassingAsserts', () => { + test.skip('verify the default value of numPassingAsserts', () => { + const { numPassingAsserts } = expectUnderTest.getState(); + expect(numPassingAsserts).toBe(0); + }); + + test('verify the resetting of numPassingAsserts after a test', () => { + expect('a').toBe('a'); + expect('a').toBe('a'); + // reset state + expectUnderTest.extractExpectedAssertionsErrors(); + const { numPassingAsserts } = expectUnderTest.getState(); + expect(numPassingAsserts).toBe(0); + }); + + test.skip('verify the correctness of numPassingAsserts count for passing test', () => { + expect('a').toBe('a'); + expect('a').toBe('a'); + const { numPassingAsserts } = expectUnderTest.getState(); + expect(numPassingAsserts).toBe(2); + }); + + test.skip('verify the correctness of numPassingAsserts count for failing test', () => { + expect('a').toBe('a'); + try { + expect('a').toBe('b'); + } catch (error) { } + const { numPassingAsserts } = expectUnderTest.getState(); + expect(numPassingAsserts).toBe(1); + }); +}); diff --git a/tests/expect/asymmetricMatchers.test.ts b/tests/expect/asymmetricMatchers.test.ts new file mode 100644 index 0000000000..ec0c40dbec --- /dev/null +++ b/tests/expect/asymmetricMatchers.test.ts @@ -0,0 +1,519 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { test } from '../playwright-test/stable-test-runner'; +import { expect as expectUnderTest, asymmetricMatchers } from '../../packages/playwright/bundles/expect/src/expectBundleImpl'; + +const { + any, + anything, + arrayContaining, + arrayNotContaining, + closeTo, + notCloseTo, + objectContaining, + objectNotContaining, + stringContaining, + stringMatching, + stringNotContaining, + stringNotMatching, +} = asymmetricMatchers; + +test('Any.asymmetricMatch()', () => { + class Thing {} + + [ + any(String).asymmetricMatch('jest'), + any(Number).asymmetricMatch(1), + any(Function).asymmetricMatch(() => {}), + any(Boolean).asymmetricMatch(true), + any(BigInt).asymmetricMatch(1n), + any(Symbol).asymmetricMatch(Symbol()), + any(Object).asymmetricMatch({}), + any(Object).asymmetricMatch(null), + any(Array).asymmetricMatch([]), + any(Thing).asymmetricMatch(new Thing()), + ].forEach(test => { + expectUnderTest(test).toBe(true); + }); +}); + +test('Any.asymmetricMatch() on primitive wrapper classes', () => { + [ + + any(String).asymmetricMatch(new String('jest')), + + any(Number).asymmetricMatch(new Number(1)), + + any(Function).asymmetricMatch(new Function('() => {}')), + + any(Boolean).asymmetricMatch(new Boolean(true)), + any(BigInt).asymmetricMatch(Object(1n)), + any(Symbol).asymmetricMatch(Object(Symbol())), + ].forEach(test => { + expectUnderTest(test).toBe(true); + }); +}); + +test('Any.toAsymmetricMatcher()', () => { + expectUnderTest(any(Number).toAsymmetricMatcher()).toBe('Any'); +}); + +test('Any.toAsymmetricMatcher() with function name', () => { + [ + ['someFunc', function someFunc() {}], + ['$someFunc', function $someFunc() {}], + [ + '$someFunc2', + (function() { + function $someFunc2() {} + Object.defineProperty($someFunc2, 'name', { value: '' }); + return $someFunc2; + })(), + ], + [ + '$someAsyncFunc', + (function() { + async function $someAsyncFunc() {} + Object.defineProperty($someAsyncFunc, 'name', { value: '' }); + return $someAsyncFunc; + })(), + ], + [ + '$someGeneratorFunc', + (function() { + function* $someGeneratorFunc() {} + Object.defineProperty($someGeneratorFunc, 'name', { value: '' }); + return $someGeneratorFunc; + })(), + ], + [ + '$someFuncWithFakeToString', + (function() { + function $someFuncWithFakeToString() {} + $someFuncWithFakeToString.toString = () => 'Fake to string'; + return $someFuncWithFakeToString; + })(), + ], + ].forEach(([name, fn]) => { + expectUnderTest(any(fn).toAsymmetricMatcher()).toBe(`Any<${name}>`); + }); +}); + +test('Any throws when called with empty constructor', () => { + // @ts-expect-error: Testing runtime error + expectUnderTest(() => any()).toThrow( + 'any() expects to be passed a constructor function. Please pass one or use anything() to match any object.', + ); +}); + +test('Anything matches any type', () => { + [ + anything().asymmetricMatch('jest'), + anything().asymmetricMatch(1), + anything().asymmetricMatch(() => {}), + anything().asymmetricMatch(true), + anything().asymmetricMatch({}), + anything().asymmetricMatch([]), + ].forEach(test => { + expectUnderTest(test).toBe(true); + }); +}); + +test('Anything does not match null and undefined', () => { + [ + anything().asymmetricMatch(null), + anything().asymmetricMatch(undefined), + ].forEach(test => { + expectUnderTest(test).toBe(false); + }); +}); + +test('Anything.toAsymmetricMatcher()', () => { + expectUnderTest(anything().toAsymmetricMatcher()).toBe('Anything'); +}); + +test('ArrayContaining matches', () => { + [ + arrayContaining([]).asymmetricMatch('jest'), + arrayContaining(['foo']).asymmetricMatch(['foo']), + arrayContaining(['foo']).asymmetricMatch(['foo', 'bar']), + arrayContaining([]).asymmetricMatch({}), + ].forEach(test => { + expectUnderTest(test).toEqual(true); + }); +}); + +test('ArrayContaining does not match', () => { + expectUnderTest(arrayContaining(['foo']).asymmetricMatch(['bar'])).toBe(false); +}); + +test('ArrayContaining throws for non-arrays', () => { + expectUnderTest(() => { + // @ts-expect-error: Testing runtime error + arrayContaining('foo').asymmetricMatch([]); + }).toThrow("You must provide an array to ArrayContaining, not 'string'."); +}); + +test('ArrayNotContaining matches', () => { + expectUnderTest(arrayNotContaining(['foo']).asymmetricMatch(['bar'])).toBe(true); +}); + +test('ArrayNotContaining does not match', () => { + [ + arrayNotContaining([]).asymmetricMatch('jest'), + arrayNotContaining(['foo']).asymmetricMatch(['foo']), + arrayNotContaining(['foo']).asymmetricMatch(['foo', 'bar']), + arrayNotContaining([]).asymmetricMatch({}), + ].forEach(test => { + expectUnderTest(test).toEqual(false); + }); +}); + +test('ArrayNotContaining throws for non-arrays', () => { + expectUnderTest(() => { + // @ts-expect-error: Testing runtime error + arrayNotContaining('foo').asymmetricMatch([]); + }).toThrow("You must provide an array to ArrayNotContaining, not 'string'."); +}); + +test('ObjectContaining matches', () => { + const foo = Symbol('foo'); + [ + objectContaining({}).asymmetricMatch('jest'), + objectContaining({ foo: 'foo' }).asymmetricMatch({ foo: 'foo', jest: 'jest' }), + objectContaining({ foo: undefined }).asymmetricMatch({ foo: undefined }), + objectContaining({ first: objectContaining({ second: {} }) }).asymmetricMatch({ + first: { second: {} }, + }), + objectContaining({ foo: Buffer.from('foo') }).asymmetricMatch({ + foo: Buffer.from('foo'), + jest: 'jest', + }), + objectContaining({ [foo]: 'foo' }).asymmetricMatch({ [foo]: 'foo' }), + ].forEach(test => { + expectUnderTest(test).toEqual(true); + }); +}); + +test('ObjectContaining does not match', () => { + const foo = Symbol('foo'); + const bar = Symbol('bar'); + [ + objectContaining({ foo: 'foo' }).asymmetricMatch({ bar: 'bar' }), + objectContaining({ foo: 'foo' }).asymmetricMatch({ foo: 'foox' }), + objectContaining({ foo: undefined }).asymmetricMatch({}), + objectContaining({ + answer: 42, + foo: { bar: 'baz', foobar: 'qux' }, + }).asymmetricMatch({ foo: { bar: 'baz' } }), + objectContaining({ [foo]: 'foo' }).asymmetricMatch({ [bar]: 'bar' }), + ].forEach(test => { + expectUnderTest(test).toEqual(false); + }); +}); + +test('ObjectContaining matches defined properties', () => { + const definedPropertyObject = {}; + Object.defineProperty(definedPropertyObject, 'foo', { get: () => 'bar' }); + expectUnderTest( + objectContaining({ foo: 'bar' }).asymmetricMatch(definedPropertyObject), + ).toBe(true); +}); + +test('ObjectContaining matches prototype properties', () => { + const prototypeObject = { foo: 'bar' }; + let obj; + + if (Object.create) { + obj = Object.create(prototypeObject); + } else { + function Foo() {} + Foo.prototype = prototypeObject; + Foo.prototype.constructor = Foo; + obj = new (Foo as any)(); + } + expectUnderTest(objectContaining({ foo: 'bar' }).asymmetricMatch(obj)).toBe(true); +}); + +test('ObjectContaining throws for non-objects', () => { + // @ts-expect-error: Testing runtime error + expectUnderTest(() => objectContaining(1337).asymmetricMatch()).toThrow( + "You must provide an object to ObjectContaining, not 'number'.", + ); +}); + +test('ObjectContaining does not mutate the sample', () => { + const sample = { foo: { bar: {} } }; + const sample_json = JSON.stringify(sample); + expectUnderTest({ foo: { bar: {} } }).toEqual(expectUnderTest.objectContaining(sample)); + + expectUnderTest(JSON.stringify(sample)).toEqual(sample_json); +}); + +test('ObjectNotContaining matches', () => { + const foo = Symbol('foo'); + const bar = Symbol('bar'); + [ + objectContaining({}).asymmetricMatch(null), + objectContaining({}).asymmetricMatch(undefined), + objectNotContaining({ [foo]: 'foo' }).asymmetricMatch({ [bar]: 'bar' }), + objectNotContaining({ foo: 'foo' }).asymmetricMatch({ bar: 'bar' }), + objectNotContaining({ foo: 'foo' }).asymmetricMatch({ foo: 'foox' }), + objectNotContaining({ foo: undefined }).asymmetricMatch({}), + objectNotContaining({ + first: objectNotContaining({ second: {} }), + }).asymmetricMatch({ first: { second: {} } }), + objectNotContaining({ first: { second: {}, third: {} } }).asymmetricMatch({ + first: { second: {} }, + }), + objectNotContaining({ first: { second: {} } }).asymmetricMatch({ + first: { second: {}, third: {} }, + }), + objectNotContaining({ foo: 'foo', jest: 'jest' }).asymmetricMatch({ + foo: 'foo', + }), + ].forEach(test => { + expectUnderTest(test).toEqual(true); + }); +}); + +test('ObjectNotContaining does not match', () => { + [ + objectNotContaining({}).asymmetricMatch('jest'), + objectNotContaining({ foo: 'foo' }).asymmetricMatch({ + foo: 'foo', + jest: 'jest', + }), + objectNotContaining({ foo: undefined }).asymmetricMatch({ foo: undefined }), + objectNotContaining({ first: { second: {} } }).asymmetricMatch({ + first: { second: {} }, + }), + objectNotContaining({ + first: objectContaining({ second: {} }), + }).asymmetricMatch({ first: { second: {} } }), + objectNotContaining({}).asymmetricMatch(null), + objectNotContaining({}).asymmetricMatch(undefined), + objectNotContaining({}).asymmetricMatch({}), + ].forEach(test => { + expectUnderTest(test).toEqual(false); + }); +}); + +test('ObjectNotContaining inverts ObjectContaining', () => { + ( + [ + [{}, null], + [{ foo: 'foo' }, { foo: 'foo', jest: 'jest' }], + [{ foo: 'foo', jest: 'jest' }, { foo: 'foo' }], + [{ foo: undefined }, { foo: undefined }], + [{ foo: undefined }, {}], + [{ first: { second: {} } }, { first: { second: {} } }], + [{ first: objectContaining({ second: {} }) }, { first: { second: {} } }], + [{ first: objectNotContaining({ second: {} }) }, { first: { second: {} } }], + [{}, { foo: undefined }], + ] as const + ).forEach(([sample, received]) => { + expectUnderTest(objectNotContaining(sample).asymmetricMatch(received)).toEqual( + !objectContaining(sample).asymmetricMatch(received), + ); + }); +}); + +test('ObjectNotContaining throws for non-objects', () => { + expectUnderTest(() => { + // @ts-expect-error: Testing runtime error + objectNotContaining(1337).asymmetricMatch(); + }).toThrow( + "You must provide an object to ObjectNotContaining, not 'number'.", + ); +}); + +test('StringContaining matches string against string', () => { + expectUnderTest(stringContaining('en*').asymmetricMatch('queen*')).toBe(true); + expectUnderTest(stringContaining('en').asymmetricMatch('queue')).toBe(false); +}); + +test('StringContaining throws if expected value is not string', () => { + expectUnderTest(() => { + // @ts-expect-error: Testing runtime error + stringContaining([1]).asymmetricMatch('queen'); + }).toThrow('Expected is not a string'); +}); + +test('StringContaining returns false if received value is not string', () => { + expectUnderTest(stringContaining('en*').asymmetricMatch(1)).toBe(false); +}); + +test('StringNotContaining matches string against string', () => { + expectUnderTest(stringNotContaining('en*').asymmetricMatch('queen*')).toBe(false); + expectUnderTest(stringNotContaining('en').asymmetricMatch('queue')).toBe(true); +}); + +test('StringNotContaining throws if expected value is not string', () => { + expectUnderTest(() => { + // @ts-expect-error: Testing runtime error + stringNotContaining([1]).asymmetricMatch('queen'); + }).toThrow('Expected is not a string'); +}); + +test('StringNotContaining returns true if received value is not string', () => { + expectUnderTest(stringNotContaining('en*').asymmetricMatch(1)).toBe(true); +}); + +test('StringMatching matches string against regexp', () => { + expectUnderTest(stringMatching(/en/).asymmetricMatch('queen')).toBe(true); + expectUnderTest(stringMatching(/en/).asymmetricMatch('queue')).toBe(false); +}); + +test('StringMatching matches string against string', () => { + expectUnderTest(stringMatching('en').asymmetricMatch('queen')).toBe(true); + expectUnderTest(stringMatching('en').asymmetricMatch('queue')).toBe(false); +}); + +test('StringMatching throws if expected value is neither string nor regexp', () => { + expectUnderTest(() => { + // @ts-expect-error: Testing runtime error + stringMatching([1]).asymmetricMatch('queen'); + }).toThrow('Expected is not a String or a RegExp'); +}); + +test('StringMatching returns false if received value is not string', () => { + expectUnderTest(stringMatching('en').asymmetricMatch(1)).toBe(false); +}); + +test('StringMatching returns false even if coerced non-string received value matches pattern', () => { + expectUnderTest(stringMatching('null').asymmetricMatch(null)).toBe(false); +}); + +test('StringNotMatching matches string against regexp', () => { + expectUnderTest(stringNotMatching(/en/).asymmetricMatch('queen')).toBe(false); + expectUnderTest(stringNotMatching(/en/).asymmetricMatch('queue')).toBe(true); +}); + +test('StringNotMatching matches string against string', () => { + expectUnderTest(stringNotMatching('en').asymmetricMatch('queen')).toBe(false); + expectUnderTest(stringNotMatching('en').asymmetricMatch('queue')).toBe(true); +}); + +test('StringNotMatching throws if expected value is neither string nor regexp', () => { + expectUnderTest(() => { + // @ts-expect-error: Testing runtime error + stringNotMatching([1]).asymmetricMatch('queen'); + }).toThrow('Expected is not a String or a RegExp'); +}); + +test('StringNotMatching returns true if received value is not string', () => { + expectUnderTest(stringNotMatching('en').asymmetricMatch(1)).toBe(true); +}); + +test.describe('closeTo', () => { + [ + [0, 0], + [0, 0.001], + [1.23, 1.229], + [1.23, 1.226], + [1.23, 1.225], + [1.23, 1.234], + [Infinity, Infinity], + [-Infinity, -Infinity], + ].forEach(([expected, received]) => { + test(`${expected} closeTo ${received} return true`, () => { + expectUnderTest(closeTo(expected).asymmetricMatch(received)).toBe(true); + }); + test(`${expected} notCloseTo ${received} return false`, () => { + expectUnderTest(notCloseTo(expected).asymmetricMatch(received)).toBe(false); + }); + }); + + [ + [0, 0.01], + [1, 1.23], + [1.23, 1.2249999], + [Infinity, -Infinity], + [Infinity, 1.23], + [-Infinity, -1.23], + ].forEach(([expected, received]) => { + test(`${expected} closeTo ${received} return false`, () => { + expectUnderTest(closeTo(expected).asymmetricMatch(received)).toBe(false); + }); + test(`${expected} notCloseTo ${received} return true`, () => { + expectUnderTest(notCloseTo(expected).asymmetricMatch(received)).toBe(true); + }); + }); + + [ + [0, 0.1, 0], + [0, 0.0001, 3], + [0, 0.000004, 5], + [2.0000002, 2, 5], + ].forEach(([expected, received, precision]) => { + test(`${expected} closeTo ${received} with precision ${precision} return true`, () => { + expectUnderTest(closeTo(expected, precision).asymmetricMatch(received)).toBe( + true, + ); + }); + test(`${expected} notCloseTo ${received} with precision ${precision} return false`, () => { + expectUnderTest( + notCloseTo(expected, precision).asymmetricMatch(received), + ).toBe(false); + }); + }); + + [ + [3.141592e-7, 3e-7, 8], + [56789, 51234, -4], + ].forEach(([expected, received, precision]) => { + test(`${expected} closeTo ${received} with precision ${precision} return false`, () => { + expectUnderTest(closeTo(expected, precision).asymmetricMatch(received)).toBe( + false, + ); + }); + test(`${expected} notCloseTo ${received} with precision ${precision} return true`, () => { + expectUnderTest( + notCloseTo(expected, precision).asymmetricMatch(received), + ).toBe(true); + }); + }); + + test('closeTo throw if expected is not number', () => { + expectUnderTest(() => { + // @ts-expect-error: Testing runtime error + closeTo('a'); + }).toThrow('Expected is not a Number'); + }); + + test('notCloseTo throw if expected is not number', () => { + expectUnderTest(() => { + // @ts-expect-error: Testing runtime error + notCloseTo('a'); + }).toThrow('Expected is not a Number'); + }); + + test('closeTo throw if precision is not number', () => { + expectUnderTest(() => { + // @ts-expect-error: Testing runtime error + closeTo(1, 'a'); + }).toThrow('Precision is not a Number'); + }); + + test('notCloseTo throw if precision is not number', () => { + expectUnderTest(() => { + // @ts-expect-error: Testing runtime error + notCloseTo(1, 'a'); + }).toThrow('Precision is not a Number'); + }); + + test('closeTo return false if received is not number', () => { + expectUnderTest(closeTo(1).asymmetricMatch('a')).toBe(false); + }); + + test('notCloseTo return false if received is not number', () => { + expectUnderTest(notCloseTo(1).asymmetricMatch('a')).toBe(false); + }); +}); diff --git a/tests/expect/customEqualityTesters.test.ts b/tests/expect/customEqualityTesters.test.ts new file mode 100644 index 0000000000..2909c1091e --- /dev/null +++ b/tests/expect/customEqualityTesters.test.ts @@ -0,0 +1,197 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { test, expect } from './fixtures'; +import { expect as expectUnderTest, mock } from '../../packages/playwright/bundles/expect/src/expectBundleImpl'; + +class Volume { + public amount: number; + public unit: 'L' | 'mL'; + + constructor(amount: number, unit: 'L' | 'mL') { + this.amount = amount; + this.unit = unit; + } + + toString(): string { + return `[Volume ${this.amount}${this.unit}]`; + } + + equals(other: Volume): boolean { + if (this.unit === other.unit) + return this.amount === other.amount; + else if (this.unit === 'L' && other.unit === 'mL') + return this.amount * 1000 === other.amount; + else + return this.amount === other.amount * 1000; + + } +} + +function createVolume(amount: number, unit: 'L' | 'mL' = 'L') { + return new Volume(amount, unit); +} + +function isVolume(a: unknown): a is Volume { + return a instanceof Volume; +} + +const areVolumesEqual = ( + a: unknown, + b: unknown, +): boolean | undefined => { + const isAVolume = isVolume(a); + const isBVolume = isVolume(b); + + if (isAVolume && isBVolume) + return a.equals(b); + else if (isAVolume !== isBVolume) + return false; + else + return undefined; + +}; + +function* toIterator(array: Array): Iterator { + for (const obj of array) + yield obj; + +} + +expectUnderTest.extend({ + toEqualVolume(expected: Volume, actual: Volume) { + const result = this.equals(expected, actual, this.customTesters); + + return { + message: () => + `Expected Volume object: ${expected.toString()}. Actual Volume object: ${actual.toString()}`, + pass: result, + }; + }, +}); + +// Create Volumes with different specifications but the same value for use in +// tests. Without the custom tester, these volumes would not be equal because +// their properties have different values. However, with our custom tester they +// are equal. +const volume1 = createVolume(1, 'L'); +const volume2 = createVolume(1000, 'mL'); + +const volumeArg1 = createVolume(1, 'L'); +const volumeArg2 = createVolume(1000, 'mL'); +const volumeArg3 = createVolume(2, 'L'); +const volumeArg4 = createVolume(2000, 'mL'); + +const volumeReturn1 = createVolume(2, 'L'); +const volumeReturn2 = createVolume(2000, 'mL'); + +const testArgs = [volumeArg1, volumeArg2, [volumeArg3, volumeArg4]]; +// Swap the order of args to assert custom tester sees these volumes as equal +const expectedArgs = [volumeArg2, volumeArg1, [volumeArg4, volumeArg3]]; + +expectUnderTest.addEqualityTesters([areVolumesEqual]); + +test.describe('with custom equality testers', () => { + test('basic matchers customTesters do not apply to still do not pass different Volume objects', () => { + expectUnderTest(volume1).not.toBe(volume2); + expectUnderTest([volume1]).not.toContain(volume2); + }); + + test('basic matchers pass different Volume objects', () => { + expectUnderTest(volume1).toEqual(volume1); + expectUnderTest(volume1).toEqual(volume2); + expectUnderTest([volume1, volume2]).toEqual([volume2, volume1]); + expectUnderTest(new Map([['key', volume1]])).toEqual(new Map([['key', volume2]])); + expectUnderTest(new Set([volume1])).toEqual(new Set([volume2])); + expectUnderTest(toIterator([volume1, volume2])).toEqual( + toIterator([volume2, volume1]), + ); + expectUnderTest([volume1]).toContainEqual(volume2); + expectUnderTest({ a: volume1 }).toHaveProperty('a', volume2); + expectUnderTest({ a: volume1, b: undefined }).toStrictEqual({ + a: volume2, + b: undefined, + }); + expectUnderTest({ a: 1, b: { c: volume1 } }).toMatchObject({ + a: 1, + b: { c: volume2 }, + }); + }); + + test('asymmetric matchers pass different Volume objects', () => { + expectUnderTest([volume1]).toEqual(expectUnderTest.arrayContaining([volume2])); + expectUnderTest({ a: 1, b: { c: volume1 } }).toEqual( + expectUnderTest.objectContaining({ b: { c: volume2 } }), + ); + }); + + test('spy matchers pass different Volume objects', () => { + const mockFn = mock.fn<(...args: Array) => unknown>( + () => volumeReturn1, + ); + mockFn(...testArgs); + + expectUnderTest(mockFn).toHaveBeenCalledWith(...expectedArgs); + expectUnderTest(mockFn).toHaveBeenLastCalledWith(...expectedArgs); + expectUnderTest(mockFn).toHaveBeenNthCalledWith(1, ...expectedArgs); + + expectUnderTest(mockFn).toHaveReturnedWith(volumeReturn2); + expectUnderTest(mockFn).toHaveLastReturnedWith(volumeReturn2); + expectUnderTest(mockFn).toHaveNthReturnedWith(1, volumeReturn2); + }); + + test('custom matchers pass different Volume objects', () => { + (expectUnderTest as any)(volume1).toEqualVolume(volume2); + }); + + test('toBe recommends toStrictEqual even with different Volume objects', () => { + expectUnderTest(() => expectUnderTest(volume1).toBe(volume2)).toThrow('toStrictEqual'); + }); + + test('toBe recommends toEqual even with different Volume objects', () => { + expectUnderTest(() => expectUnderTest({ a: undefined, b: volume1 }).toBe({ b: volume2 })).toThrow( + 'toEqual', + ); + }); + + test('toContains recommends toContainEquals even with different Volume objects', () => { + expectUnderTest(() => expectUnderTest([volume1]).toContain(volume2)).toThrow( + 'toContainEqual', + ); + }); + + test('toMatchObject error shows Volume objects as equal', () => { + expect(() => + expectUnderTest({ a: 1, b: volume1 }).toMatchObject({ a: 2, b: volume2 }) + ).toThrowErrorMatchingSnapshot(`expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Object { +- "a": 2, ++ "a": 1, + "b": Volume { + "amount": 1000, + "unit": "mL", + }, + }`); + }); + + test('iterableEquality still properly detects cycles', () => { + const a = new Set(); + a.add(volume1); + a.add(a); + + const b = new Set(); + b.add(volume2); + b.add(b); + + expectUnderTest(a).toEqual(b); + }); +}); diff --git a/tests/expect/customEqualityTestersRecursive.test.ts b/tests/expect/customEqualityTestersRecursive.test.ts new file mode 100644 index 0000000000..34c5813a8d --- /dev/null +++ b/tests/expect/customEqualityTestersRecursive.test.ts @@ -0,0 +1,246 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { test, expect } from './fixtures'; +import { expect as expectUnderTest, mock } from '../../packages/playwright/bundles/expect/src/expectBundleImpl'; + +// Test test file demonstrates and tests the capability of recursive custom +// testers that call `equals` within their tester logic. These testers should +// receive the array of custom testers and be able to pass it into equals + +const CONNECTION_PROP = '__connection'; +type DbConnection = number; +let DbConnectionId = 0; + +class Author { + public name: string; + public [CONNECTION_PROP]: DbConnection; + + constructor(name: string) { + this.name = name; + this[CONNECTION_PROP] = DbConnectionId++; + } +} + +class Book { + public name: string; + public authors: Array; + public [CONNECTION_PROP]: DbConnection; + + constructor(name: string, authors: Array) { + this.name = name; + this.authors = authors; + this[CONNECTION_PROP] = DbConnectionId++; + } +} + +const areAuthorsEqual = (a: unknown, b: unknown) => { + const isAAuthor = a instanceof Author; + const isBAuthor = b instanceof Author; + + if (isAAuthor && isBAuthor) + return a.name === b.name; + else if (isAAuthor !== isBAuthor) + return false; + else + return undefined; + +}; + +const areBooksEqual = function( + a: unknown, + b: unknown, + customTesters: [], +) { + const isABook = a instanceof Book; + const isBBook = b instanceof Book; + + if (isABook && isBBook) { + return ( + a.name === b.name && this.equals(a.authors, b.authors, customTesters) + ); + } else if (isABook !== isBBook) { + return false; + } else { + return undefined; + } +}; + +function* toIterator(array: Array): Iterator { + for (const obj of array) + yield obj; + +} + +expectUnderTest.extend({ + toEqualBook(expected: Book, actual: Book) { + const result = this.equals(expected, actual, this.customTesters); + + return { + message: () => + `Expected Book object: ${expected.name}. Actual Book object: ${actual.name}`, + pass: result, + }; + }, +}); + +// Create books with the same name and authors for use in tests. Without the +// custom tester, these books would not be equal because their DbConnections +// would have different values. However, with our custom tester they are equal. +const book1 = new Book('Book 1', [ + new Author('Author 1'), + new Author('Author 2'), +]); +const book1b = new Book('Book 1', [ + new Author('Author 1'), + new Author('Author 2'), +]); + +const bookArg1a = new Book('Book Arg 1', [ + new Author('Author Arg 1'), + new Author('Author Arg 2'), +]); +const bookArg1b = new Book('Book Arg 1', [ + new Author('Author Arg 1'), + new Author('Author Arg 2'), +]); +const bookArg2a = new Book('Book Arg 2', [ + new Author('Author Arg 3'), + new Author('Author Arg 4'), +]); +const bookArg2b = new Book('Book Arg 2', [ + new Author('Author Arg 3'), + new Author('Author Arg 4'), +]); + +const bookReturn1a = new Book('Book Return 1', [ + new Author('Author Return 1'), + new Author('Author Return 2'), +]); +const bookReturn1b = new Book('Book Return 1', [ + new Author('Author Return 1'), + new Author('Author Return 2'), +]); + +const testArgs = [bookArg1a, bookArg1b, [bookArg2a, bookArg2b]]; +// Swap the order of args to assert custom tester works correctly and ignores +// DbConnection differences +const expectedArgs = [bookArg1b, bookArg1a, [bookArg2b, bookArg2a]]; + +expectUnderTest.addEqualityTesters([areAuthorsEqual, areBooksEqual]); + +test.describe('with custom equality testers', () => { + test('exposes an equality function to custom testers', () => { + const runTestSymbol = Symbol('run this test'); + + expectUnderTest.addEqualityTesters([ + function dummyTester() { + return undefined; + }, + ]); + + expectUnderTest(() => + expectUnderTest(runTestSymbol).toEqual(runTestSymbol), + ).not.toThrow(); + }); + + test('basic matchers customTesters do not apply to still do not pass different Book objects', () => { + expectUnderTest(book1).not.toBe(book1b); + expectUnderTest([book1]).not.toContain(book1b); + }); + + test('basic matchers pass different Book objects', () => { + expectUnderTest(book1).toEqual(book1); + expectUnderTest(book1).toEqual(book1b); + expectUnderTest([book1, book1b]).toEqual([book1b, book1]); + expectUnderTest(new Map([['key', book1]])).toEqual(new Map([['key', book1b]])); + expectUnderTest(new Set([book1])).toEqual(new Set([book1b])); + expectUnderTest(toIterator([book1, book1b])).toEqual(toIterator([book1b, book1])); + expectUnderTest([book1]).toContainEqual(book1b); + expectUnderTest({ a: book1 }).toHaveProperty('a', book1b); + expectUnderTest({ a: book1, b: undefined }).toStrictEqual({ + a: book1b, + b: undefined, + }); + expectUnderTest({ a: 1, b: { c: book1 } }).toMatchObject({ + a: 1, + b: { c: book1b }, + }); + }); + + test('asymmetric matchers pass different Book objects', () => { + expectUnderTest([book1]).toEqual(expect.arrayContaining([book1b])); + expectUnderTest({ a: 1, b: { c: book1 } }).toEqual( + expect.objectContaining({ b: { c: book1b } }), + ); + }); + + test('spy matchers pass different Book objects', () => { + const mockFn = mock.fn<(...args: Array) => unknown>( + () => bookReturn1a, + ); + mockFn(...testArgs); + + expectUnderTest(mockFn).toHaveBeenCalledWith(...expectedArgs); + expectUnderTest(mockFn).toHaveBeenLastCalledWith(...expectedArgs); + expectUnderTest(mockFn).toHaveBeenNthCalledWith(1, ...expectedArgs); + + expectUnderTest(mockFn).toHaveReturnedWith(bookReturn1b); + expectUnderTest(mockFn).toHaveLastReturnedWith(bookReturn1b); + expectUnderTest(mockFn).toHaveNthReturnedWith(1, bookReturn1b); + }); + + test('custom matchers pass different Book objects', () => { + (expectUnderTest as any)(book1).toEqualBook(book1b); + }); + + test('toBe recommends toStrictEqual even with different Book objects', () => { + expectUnderTest(() => expectUnderTest(book1).toBe(book1b)).toThrow('toStrictEqual'); + }); + + test('toBe recommends toEqual even with different Book objects', () => { + expectUnderTest(() => expectUnderTest({ a: undefined, b: book1 }).toBe({ b: book1b })).toThrow( + 'toEqual', + ); + }); + + test('toContains recommends toContainEquals even with different Book objects', () => { + expectUnderTest(() => expectUnderTest([book1]).toContain(book1b)).toThrow('toContainEqual'); + }); + + test('toMatchObject error shows Book objects as equal', () => { + expect(() => + expectUnderTest({ a: 1, b: book1 }).toMatchObject({ a: 2, b: book1b }) + ).toThrowErrorMatchingSnapshot(`expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + +@@ -1,7 +1,7 @@ + Object { +- "a": 2, ++ "a": 1, + "b": Book { + "__connection": 5, + "authors": Array [ + Author { + "__connection": 3,`); + }); + + test('iterableEquality still properly detects cycles', () => { + const a = new Set(); + a.add(book1); + a.add(a); + + const b = new Set(); + b.add(book1b); + b.add(b); + + expectUnderTest(a).toEqual(b); + }); +}); diff --git a/tests/expect/extend.test.ts b/tests/expect/extend.test.ts new file mode 100644 index 0000000000..94b879bb40 --- /dev/null +++ b/tests/expect/extend.test.ts @@ -0,0 +1,247 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { test, expect } from './fixtures'; +import { expect as expectUnderTest } from '../../packages/playwright/bundles/expect/src/expectBundleImpl'; + +expectUnderTest.extend({ + toBeDivisibleBy(actual: number, expected: number) { + const pass = actual % expected === 0; + const message: () => string = pass + ? () => + `expected ${this.utils.printReceived( + actual, + )} not to be divisible by ${expected}` + : () => + `expected ${this.utils.printReceived( + actual, + )} to be divisible by ${expected}`; + + return { message, pass }; + }, + toBeSymbol(actual: symbol, expected: symbol) { + const pass = actual === expected; + const message = () => + `expected ${actual.toString()} to be Symbol ${expected.toString()}`; + + return { message, pass }; + }, + toBeWithinRange(actual: number, floor: number, ceiling: number) { + const pass = actual >= floor && actual <= ceiling; + const message = pass + ? () => + `expected ${this.utils.printReceived( + actual, + )} not to be within range ${floor} - ${ceiling}` + : () => + `expected ${this.utils.printReceived( + actual, + )} to be within range ${floor} - ${ceiling}`; + + return { message, pass }; + }, +}); + +const expectUnderTestAsAny = expectUnderTest as any; + +test('is available globally when matcher is unary', () => { + expectUnderTestAsAny(15).toBeDivisibleBy(5); + expectUnderTestAsAny(15).toBeDivisibleBy(3); + expectUnderTestAsAny(15).not.toBeDivisibleBy(6); + + expect(() => + expectUnderTestAsAny(15).toBeDivisibleBy(2), + ).toThrowErrorMatchingSnapshot(`expected 15 to be divisible by 2`); +}); + +test('is available globally when matcher is variadic', () => { + expectUnderTestAsAny(15).toBeWithinRange(10, 20); + expectUnderTestAsAny(15).not.toBeWithinRange(6, 10); + + expect(() => + expectUnderTestAsAny(15).toBeWithinRange(1, 3), + ).toThrowErrorMatchingSnapshot(`expected 15 to be within range 1 - 3`); +}); + +test.skip('exposes matcherUtils in context', () => { + // expectUnderTest.extend({ + // shouldNotError(_actual: unknown) { + // const pass: boolean = this.equals( + // this.utils, + // Object.assign(matcherUtils, { + // iterableEquality, + // subsetEquality, + // }), + // ); + // const message = pass + // ? () => 'expected this.utils to be defined in an extend call' + // : () => 'expected this.utils not to be defined in an extend call'; + + // return { message, pass }; + // }, + // }); + + // expectUnderTestAsAny('test').shouldNotError(); +}); + +test('is ok if there is no message specified', () => { + expectUnderTest.extend({ + toFailWithoutMessage(_expected: unknown) { + return { message: () => '', pass: false }; + }, + }); + + expect(() => + expectUnderTestAsAny(true).toFailWithoutMessage(), + ).toThrowErrorMatchingSnapshot(`No message was specified for this matcher.`); +}); + +test('exposes an equality function to custom matchers', () => { + expectUnderTest.extend({ + toBeOne(_expected: unknown) { + return { message: () => '', pass: !!this.equals(1, 1) }; + }, + }); + + expect(() => expectUnderTestAsAny('test').toBeOne()).not.toThrow(); +}); + +test('defines asymmetric unary matchers', () => { + expect(() => + expectUnderTest({ value: 2 }).toEqual({ value: expectUnderTestAsAny.toBeDivisibleBy(2) }), + ).not.toThrow(); + expect(() => + expectUnderTest({ value: 3 }).toEqual({ value: expectUnderTestAsAny.toBeDivisibleBy(2) }), + ).toThrowErrorMatchingSnapshot(`expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Object { +- "value": toBeDivisibleBy<2>, ++ "value": 3, + }`); +}); + +test('defines asymmetric unary matchers that can be prefixed by not', () => { + expect(() => + expectUnderTest({ value: 2 }).toEqual({ value: expectUnderTestAsAny.not.toBeDivisibleBy(2) }), + ).toThrowErrorMatchingSnapshot(`expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Object { +- "value": not.toBeDivisibleBy<2>, ++ "value": 2, + }`); + expect(() => + expectUnderTest({ value: 3 }).toEqual({ value: expectUnderTestAsAny.not.toBeDivisibleBy(2) }), + ).not.toThrow(); +}); + +test('defines asymmetric variadic matchers', () => { + expect(() => + expectUnderTest({ value: 2 }).toEqual({ value: expectUnderTestAsAny.toBeWithinRange(1, 3) }), + ).not.toThrow(); + expect(() => + expectUnderTest({ value: 3 }).toEqual({ value: expectUnderTestAsAny.toBeWithinRange(4, 11) }), + ).toThrowErrorMatchingSnapshot(`expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Object { +- "value": toBeWithinRange<4, 11>, ++ "value": 3, + }`); +}); + +test('defines asymmetric variadic matchers that can be prefixed by not', () => { + expect(() => + expectUnderTest({ value: 2 }).toEqual({ + value: expectUnderTestAsAny.not.toBeWithinRange(1, 3), + }), + ).toThrowErrorMatchingSnapshot(`expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Object { +- "value": not.toBeWithinRange<1, 3>, ++ "value": 2, + }`); + expect(() => + expectUnderTest({ value: 3 }).toEqual({ + value: expectUnderTestAsAny.not.toBeWithinRange(5, 7), + }), + ).not.toThrow(); +}); + +test('prints the Symbol into the error message', () => { + const foo = Symbol('foo'); + const bar = Symbol('bar'); + + expect(() => + expectUnderTest({ a: foo }).toEqual({ + a: expectUnderTestAsAny.toBeSymbol(bar), + }), + ).toThrowErrorMatchingSnapshot(`expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Object { +- "a": toBeSymbol, ++ "a": Symbol(foo), + }`); +}); + +test('allows overriding existing extension', () => { + expectUnderTest.extend({ + toAllowOverridingExistingMatcher(_expected: unknown) { + return { message: () => '', pass: _expected === 'bar' }; + }, + }); + + expectUnderTestAsAny('foo').not.toAllowOverridingExistingMatcher(); + + expectUnderTest.extend({ + toAllowOverridingExistingMatcher(_expected: unknown) { + return { message: () => '', pass: _expected === 'foo' }; + }, + }); + + expectUnderTestAsAny('foo').toAllowOverridingExistingMatcher(); +}); + +test('throws descriptive errors for invalid matchers', () => { + expect(() => + expectUnderTest.extend({ + default: undefined, + }), + ).toThrow( + 'expect.extend: `default` is not a valid matcher. Must be a function, is "undefined"', + ); + expect(() => + expectUnderTest.extend({ + // @ts-expect-error: Testing runtime error + default: 42, + }), + ).toThrow( + 'expect.extend: `default` is not a valid matcher. Must be a function, is "number"', + ); + expect(() => + expectUnderTest.extend({ + // @ts-expect-error: Testing runtime error + default: 'foobar', + }), + ).toThrow( + 'expect.extend: `default` is not a valid matcher. Must be a function, is "string"', + ); +}); diff --git a/tests/expect/fixtures.ts b/tests/expect/fixtures.ts new file mode 100644 index 0000000000..502f9571b0 --- /dev/null +++ b/tests/expect/fixtures.ts @@ -0,0 +1,108 @@ +/* + Copyright (c) Microsoft Corporation. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +import fs from 'fs'; +import { ansi2Markup } from 'tests/config/utils'; +import { expect as baseExpect } from '../playwright-test/stable-test-runner'; +import { test } from '../playwright-test/stable-test-runner'; +export { test } from '../playwright-test/stable-test-runner'; + +const ordinals = new Map(); +const snapshotFiles = new Set(); + +function checkExpectation(unformatted: string, inlineExpected?: string) { + const actual = ansi2Markup(unformatted); + const file = test.info().file.replace('.test.ts', '.snapshots.js'); + const fullKey = test.info().titlePath.join('|'); + const ordinal = ordinals.get(fullKey) || 0; + ordinals.set(fullKey, ordinal + 1); + + const key = test.info().titlePath.slice(1).join(' ') + (ordinal ? ` #${ordinal}` : ''); + + if (!inlineExpected && test.info().config.updateSnapshots === 'all') { + if (!snapshotFiles.has(file)) { + fs.writeFileSync(file, ''); + snapshotFiles.add(file); + } + const line = `module.exports[${JSON.stringify(key)}] = \`${actual.replace(/\\/g, '\\\\').replace(/`/g, '\\`')}\`;\n\n`; + fs.appendFileSync(file, line); + return { message: () => '', pass: true }; + } + + let expected: string; + if (inlineExpected) { + expected = inlineExpected; + } else { + const data = require(file); + expected = data[key]; + } + + let pass: boolean; + let matcherResult: any; + try { + baseExpect(actual).toBe(expected); + pass = true; + } catch (e: any) { + matcherResult = e.matcherResult; + pass = false; + } + + const expectOptions = { + isNot: this.isNot, + }; + + const message = pass + ? () => this.utils.matcherHint('toBe', actual, expected, expectOptions) + + '\n\n' + + `Expected: ${this.isNot ? 'not' : ''}${this.utils.printExpected(expected)}\n` + + (matcherResult ? `Received: ${this.utils.printReceived(matcherResult.actual)}` : '') + : () => this.utils.matcherHint('toBe', actual, expected, expectOptions) + + '\n\n' + + `Expected: ${this.utils.printExpected(expected)}\n` + + (matcherResult ? `Received: ${this.utils.printReceived(matcherResult.actual)}` : ''); + + return { + name: 'toThrowErrorMatching', + expected, + message, + pass, + actual: matcherResult?.actual, + }; +} + +export const expect = baseExpect.extend({ + toMatchSnapshot(message: string, expected?: string) { + return checkExpectation.call(this, message, expected); + }, + + toThrowErrorMatchingSnapshot(callback: () => any, expected?: string) { + try { + callback(); + } catch (e) { + return checkExpectation.call(this, e.message, expected); + } + throw new Error('Expected function to throw, but it did not'); + }, + + async toThrowErrorMatchingSnapshotAsync(callback: () => Promise, expected?: string) { + try { + await callback(); + } catch (e) { + return checkExpectation.call(this, e.message, expected); + } + throw new Error('Expected function to throw, but it did not'); + } +}); diff --git a/tests/expect/matchers.snapshots.js b/tests/expect/matchers.snapshots.js new file mode 100644 index 0000000000..0f8a5a5030 --- /dev/null +++ b/tests/expect/matchers.snapshots.js @@ -0,0 +1,3614 @@ +module.exports[".rejects fails non-promise value \"a\""] = `expect(received).rejects.toBeDefined() + +Matcher error: received value must be a promise or a function returning a promise + +Received has type: string +Received has value: "a"`; + +module.exports[".rejects fails non-promise value [1]"] = `expect(received).rejects.toBeDefined() + +Matcher error: received value must be a promise or a function returning a promise + +Received has type: array +Received has value: [1]`; + +module.exports[".rejects fails non-promise value [Function anonymous]"] = `expect(received).rejects.toBeDefined() + +Matcher error: received value must be a promise or a function returning a promise + +Received has type: function +Received has value: [Function anonymous]`; + +module.exports[".rejects fails non-promise value {\"a\": 1}"] = `expect(received).rejects.toBeDefined() + +Matcher error: received value must be a promise or a function returning a promise + +Received has type: object +Received has value: {"a": 1}`; + +module.exports[".rejects fails non-promise value 4"] = `expect(received).rejects.not.toBeDefined() + +Matcher error: received value must be a promise or a function returning a promise + +Received has type: number +Received has value: 4`; + +module.exports[".rejects fails non-promise value null"] = `expect(received).rejects.not.toBeDefined() + +Matcher error: received value must be a promise or a function returning a promise + +Received has value: null`; + +module.exports[".rejects fails non-promise value true"] = `expect(received).rejects.not.toBeDefined() + +Matcher error: received value must be a promise or a function returning a promise + +Received has type: boolean +Received has value: true`; + +module.exports[".rejects fails non-promise value undefined"] = `expect(received).rejects.not.toBeDefined() + +Matcher error: received value must be a promise or a function returning a promise + +Received has value: undefined`; + +module.exports[".rejects fails for promise that resolves"] = `expect(received).rejects.toBe() + +Received promise resolved instead of rejected +Resolved to value: 4`; + +module.exports[".resolves fails non-promise value \"a\" synchronously"] = `expect(received).resolves.toBeDefined() + +Matcher error: received value must be a promise + +Received has type: string +Received has value: "a"`; + +module.exports[".resolves fails non-promise value \"a\""] = `expect(received).resolves.toBeDefined() + +Matcher error: received value must be a promise + +Received has type: string +Received has value: "a"`; + +module.exports[".resolves fails non-promise value [1] synchronously"] = `expect(received).resolves.toBeDefined() + +Matcher error: received value must be a promise + +Received has type: array +Received has value: [1]`; + +module.exports[".resolves fails non-promise value [1]"] = `expect(received).resolves.toBeDefined() + +Matcher error: received value must be a promise + +Received has type: array +Received has value: [1]`; + +module.exports[".resolves fails non-promise value [Function anonymous] synchronously"] = `expect(received).resolves.toBeDefined() + +Matcher error: received value must be a promise + +Received has type: function +Received has value: [Function anonymous]`; + +module.exports[".resolves fails non-promise value [Function anonymous]"] = `expect(received).resolves.toBeDefined() + +Matcher error: received value must be a promise + +Received has type: function +Received has value: [Function anonymous]`; + +module.exports[".resolves fails non-promise value {\"a\": 1} synchronously"] = `expect(received).resolves.toBeDefined() + +Matcher error: received value must be a promise + +Received has type: object +Received has value: {"a": 1}`; + +module.exports[".resolves fails non-promise value {\"a\": 1}"] = `expect(received).resolves.toBeDefined() + +Matcher error: received value must be a promise + +Received has type: object +Received has value: {"a": 1}`; + +module.exports[".resolves fails non-promise value 4 synchronously"] = `expect(received).resolves.not.toBeDefined() + +Matcher error: received value must be a promise + +Received has type: number +Received has value: 4`; + +module.exports[".resolves fails non-promise value 4"] = `expect(received).resolves.not.toBeDefined() + +Matcher error: received value must be a promise + +Received has type: number +Received has value: 4`; + +module.exports[".resolves fails non-promise value null synchronously"] = `expect(received).resolves.not.toBeDefined() + +Matcher error: received value must be a promise + +Received has value: null`; + +module.exports[".resolves fails non-promise value null"] = `expect(received).resolves.not.toBeDefined() + +Matcher error: received value must be a promise + +Received has value: null`; + +module.exports[".resolves fails non-promise value true synchronously"] = `expect(received).resolves.not.toBeDefined() + +Matcher error: received value must be a promise + +Received has type: boolean +Received has value: true`; + +module.exports[".resolves fails non-promise value true"] = `expect(received).resolves.not.toBeDefined() + +Matcher error: received value must be a promise + +Received has type: boolean +Received has value: true`; + +module.exports[".resolves fails non-promise value undefined synchronously"] = `expect(received).resolves.not.toBeDefined() + +Matcher error: received value must be a promise + +Received has value: undefined`; + +module.exports[".resolves fails non-promise value undefined"] = `expect(received).resolves.not.toBeDefined() + +Matcher error: received value must be a promise + +Received has value: undefined`; + +module.exports[".resolves fails for promise that rejects"] = `expect(received).resolves.toBe() + +Received promise rejected instead of resolved +Rejected to value: 4`; + +module.exports[".toBe() fails for: 1 and 2 (0)"] = `expect(received).toBe(expected) // Object.is equality + +Expected: 2 +Received: 1`; + +module.exports[".toBe() fails for: true and false (1)"] = `expect(received).toBe(expected) // Object.is equality + +Expected: false +Received: true`; + +module.exports[".toBe() fails for: [Function anonymous] and [Function anonymous] (2)"] = `expect(received).toBe(expected) // Object.is equality + +Expected: [Function anonymous] +Received: serializes to the same string`; + +module.exports[".toBe() fails for: {} and {} (3)"] = `expect(received).toBe(expected) // Object.is equality + +If it should pass with deep equality, replace "toBe" with "toStrictEqual" + +Expected: {} +Received: serializes to the same string`; + +module.exports[".toBe() fails for: {\"a\": 1} and {\"a\": 1} (4)"] = `expect(received).toBe(expected) // Object.is equality + +If it should pass with deep equality, replace "toBe" with "toStrictEqual" + +Expected: {"a": 1} +Received: serializes to the same string`; + +module.exports[".toBe() fails for: {\"a\": 1} and {\"a\": 5} (5)"] = `expect(received).toBe(expected) // Object.is equality + +- Expected - 1 ++ Received + 1 + + Object { +- "a": 5, ++ "a": 1, + }`; + +module.exports[".toBe() fails for: {\"a\": [Function a], \"b\": 2} and {\"a\": Any, \"b\": 2} (6)"] = `expect(received).toBe(expected) // Object.is equality + +If it should pass with deep equality, replace "toBe" with "toStrictEqual" + +Expected: {"a": Any, "b": 2} +Received: {"a": [Function a], "b": 2}`; + +module.exports[".toBe() fails for: {\"a\": undefined, \"b\": 2} and {\"b\": 2} (7)"] = `expect(received).toBe(expected) // Object.is equality + +If it should pass with deep equality, replace "toBe" with "toEqual" + +- Expected - 0 ++ Received + 1 + + Object { ++ "a": undefined, + "b": 2, + }`; + +module.exports[".toBe() fails for: 2020-02-20T00:00:00.000Z and 2020-02-20T00:00:00.000Z (8)"] = `expect(received).toBe(expected) // Object.is equality + +If it should pass with deep equality, replace "toBe" with "toStrictEqual" + +Expected: 2020-02-20T00:00:00.000Z +Received: serializes to the same string`; + +module.exports[".toBe() fails for: 2020-02-21T00:00:00.000Z and 2020-02-20T00:00:00.000Z (9)"] = `expect(received).toBe(expected) // Object.is equality + +Expected: 2020-02-20T00:00:00.000Z +Received: 2020-02-21T00:00:00.000Z`; + +module.exports[".toBe() fails for: /received/ and /expected/ (10)"] = `expect(received).toBe(expected) // Object.is equality + +Expected: /expected/ +Received: /received/`; + +module.exports[".toBe() fails for: Symbol(received) and Symbol(expected) (11)"] = `expect(received).toBe(expected) // Object.is equality + +Expected: Symbol(expected) +Received: Symbol(received)`; + +module.exports[".toBe() fails for: [Error: received] and [Error: expected] (12)"] = `expect(received).toBe(expected) // Object.is equality + +Expected: [Error: expected] +Received: [Error: received]`; + +module.exports[".toBe() fails for: \"abc\" and \"cde\" (13)"] = `expect(received).toBe(expected) // Object.is equality + +Expected: "cde" +Received: "abc"`; + +module.exports[".toBe() fails for: \"painless JavaScript testing\" and \"delightful JavaScript testing\" (14)"] = `expect(received).toBe(expected) // Object.is equality + +Expected: "delightful JavaScript testing" +Received: "painless JavaScript testing"`; + +module.exports[".toBe() fails for: \"\" and \"compare one-line string to empty string\" (15)"] = `expect(received).toBe(expected) // Object.is equality + +Expected: "compare one-line string to empty string" +Received: ""`; + +module.exports[".toBe() fails for: \"with \ntrailing space\" and \"without trailing space\" (16)"] = `expect(received).toBe(expected) // Object.is equality + +- Expected - 1 ++ Received + 2 + +- without trailing space ++ with ++ trailing space`; + +module.exports[".toBe() fails for: \"four\n4\nline\nstring\" and \"3\nline\nstring\" (17)"] = `expect(received).toBe(expected) // Object.is equality + +- Expected - 1 ++ Received + 2 + +- 3 ++ four ++ 4 + line + string`; + +module.exports[".toBe() fails for: [] and [] (18)"] = `expect(received).toBe(expected) // Object.is equality + +If it should pass with deep equality, replace "toBe" with "toStrictEqual" + +Expected: [] +Received: serializes to the same string`; + +module.exports[".toBe() fails for: null and undefined (19)"] = `expect(received).toBe(expected) // Object.is equality + +Expected: undefined +Received: null`; + +module.exports[".toBe() fails for: -0 and 0 (20)"] = `expect(received).toBe(expected) // Object.is equality + +Expected: 0 +Received: -0`; + +module.exports[".toBe() fails for 'false' with '.not'"] = `expect(received).not.toBe(expected) // Object.is equality + +Expected: not false`; + +module.exports[".toBe() fails for '1' with '.not'"] = `expect(received).not.toBe(expected) // Object.is equality + +Expected: not 1`; + +module.exports[".toBe() fails for '\"a\"' with '.not'"] = `expect(received).not.toBe(expected) // Object.is equality + +Expected: not "a"`; + +module.exports[".toBe() fails for 'undefined' with '.not'"] = `expect(received).not.toBe(expected) // Object.is equality + +Expected: not undefined`; + +module.exports[".toBe() fails for 'null' with '.not'"] = `expect(received).not.toBe(expected) // Object.is equality + +Expected: not null`; + +module.exports[".toBe() fails for '{}' with '.not'"] = `expect(received).not.toBe(expected) // Object.is equality + +Expected: not {}`; + +module.exports[".toBe() fails for '[]' with '.not'"] = `expect(received).not.toBe(expected) // Object.is equality + +Expected: not []`; + +module.exports[".toBe() does not crash on circular references"] = `expect(received).toBe(expected) // Object.is equality + +- Expected - 1 ++ Received + 3 + +- Object {} ++ Object { ++ "circular": [Circular], ++ }`; + +module.exports[".toStrictEqual() matches the expected snapshot when it fails"] = `expect(received).toStrictEqual(expected) // deep equality + +- Expected - 4 ++ Received + 1 + + Object { +- "test": TestClassA { +- "a": 1, +- "b": 2, +- }, ++ "test": 2, + }`; + +module.exports[".toStrictEqual() matches the expected snapshot when it fails #1"] = `expect(received).not.toStrictEqual(expected) // deep equality + +Expected: not {"test": {"a": 1, "b": 2}} +`; + +module.exports[".toStrictEqual() displays substring diff"] = `expect(received).toStrictEqual(expected) // deep equality + +Expected: "Another caveat is that Jest will not typecheck your tests." +Received: "Because TypeScript support in Babel is just transpilation, Jest will not type-check your tests as they run."`; + +module.exports[".toStrictEqual() displays substring diff for multiple lines"] = `expect(received).toStrictEqual(expected) // deep equality + +- Expected - 7 ++ Received + 7 + +- 69 | ++ 68 | +- 70 | test('assert.doesNotThrow', () => { ++ 69 | test('assert.doesNotThrow', () => { +- > 71 | assert.doesNotThrow(() => { ++ > 70 | assert.doesNotThrow(() => { + | ^ +- 72 | throw Error('err!'); ++ 71 | throw Error('err!'); +- 73 | }); ++ 72 | }); +- 74 | }); ++ 73 | }); +- at Object.doesNotThrow (__tests__/assertionError.test.js:71:10) ++ at Object.doesNotThrow (__tests__/assertionError.test.js:70:10)`; + +module.exports[".toEqual() {pass: false} expect(true).toEqual(false (0))"] = `expect(received).toEqual(expected) // deep equality + +Expected: false +Received: true`; + +module.exports[".toEqual() {pass: false} expect(1).toEqual(2 (1))"] = `expect(received).toEqual(expected) // deep equality + +Expected: 2 +Received: 1`; + +module.exports[".toEqual() {pass: false} expect(0).toEqual(-0 (2))"] = `expect(received).toEqual(expected) // deep equality + +Expected: -0 +Received: 0`; + +module.exports[".toEqual() {pass: false} expect(0).toEqual(5e-324 (3))"] = `expect(received).toEqual(expected) // deep equality + +Expected: 5e-324 +Received: 0`; + +module.exports[".toEqual() {pass: false} expect(5e-324).toEqual(0 (4))"] = `expect(received).toEqual(expected) // deep equality + +Expected: 0 +Received: 5e-324`; + +module.exports[".toEqual() {pass: false} expect(0).toEqual({} (5))"] = `expect(received).toEqual(expected) // deep equality + +Expected: {} +Received: 0`; + +module.exports[".toEqual() {pass: false} expect({}).toEqual(0 (6))"] = `expect(received).toEqual(expected) // deep equality + +Expected: 0 +Received: {}`; + +module.exports[".toEqual() {pass: false} expect({}).toEqual({} (7))"] = `expect(received).toEqual(expected) // deep equality + +Expected: {} +Received: serializes to the same string`; + +module.exports[".toEqual() {pass: false} expect(\"abc\").toEqual({\"0\": \"a\", \"1\": \"b\", \"2\": \"c\"} (8))"] = `expect(received).toEqual(expected) // deep equality + +Expected: {"0": "a", "1": "b", "2": "c"} +Received: "abc"`; + +module.exports[".toEqual() {pass: false} expect({\"0\": \"a\", \"1\": \"b\", \"2\": \"c\"}).toEqual(\"abc\" (9))"] = `expect(received).toEqual(expected) // deep equality + +Expected: "abc" +Received: {"0": "a", "1": "b", "2": "c"}`; + +module.exports[".toEqual() {pass: false} expect(/abc/gsy).toEqual(/abc/g (10))"] = `expect(received).toEqual(expected) // deep equality + +Expected: /abc/g +Received: /abc/gsy`; + +module.exports[".toEqual() {pass: false} expect({\"a\": 1}).toEqual({\"a\": 2} (11))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Object { +- "a": 2, ++ "a": 1, + }`; + +module.exports[".toEqual() {pass: false} expect({\"a\": 5}).toEqual({\"b\": 6} (12))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Object { +- "b": 6, ++ "a": 5, + }`; + +module.exports[".toEqual() {pass: false} expect({\"foo\": {\"bar\": 1}}).toEqual({\"foo\": {}} (13))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 3 + + Object { +- "foo": Object {}, ++ "foo": Object { ++ "bar": 1, ++ }, + }`; + +module.exports[".toEqual() {pass: false} expect({\"getterAndSetter\": {}}).toEqual({\"getterAndSetter\": {\"foo\": \"bar\"}} (14))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 3 ++ Received + 1 + + Object { +- "getterAndSetter": Object { +- "foo": "bar", +- }, ++ "getterAndSetter": Object {}, + }`; + +module.exports[".toEqual() {pass: false} expect({\"frozenGetterAndSetter\": {}}).toEqual({\"frozenGetterAndSetter\": {\"foo\": \"bar\"}} (15))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 3 ++ Received + 1 + + Object { +- "frozenGetterAndSetter": Object { +- "foo": "bar", +- }, ++ "frozenGetterAndSetter": Object {}, + }`; + +module.exports[".toEqual() {pass: false} expect({\"getter\": {}}).toEqual({\"getter\": {\"foo\": \"bar\"}} (16))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 3 ++ Received + 1 + + Object { +- "getter": Object { +- "foo": "bar", +- }, ++ "getter": Object {}, + }`; + +module.exports[".toEqual() {pass: false} expect({\"frozenGetter\": {}}).toEqual({\"frozenGetter\": {\"foo\": \"bar\"}} (17))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 3 ++ Received + 1 + + Object { +- "frozenGetter": Object { +- "foo": "bar", +- }, ++ "frozenGetter": Object {}, + }`; + +module.exports[".toEqual() {pass: false} expect({\"setter\": undefined}).toEqual({\"setter\": {\"foo\": \"bar\"}} (18))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 3 ++ Received + 1 + + Object { +- "setter": Object { +- "foo": "bar", +- }, ++ "setter": undefined, + }`; + +module.exports[".toEqual() {pass: false} expect({\"frozenSetter\": undefined}).toEqual({\"frozenSetter\": {\"foo\": \"bar\"}} (19))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 3 ++ Received + 1 + + Object { +- "frozenSetter": Object { +- "foo": "bar", +- }, ++ "frozenSetter": undefined, + }`; + +module.exports[".toEqual() {pass: false} expect(\"banana\").toEqual(\"apple\" (20))"] = `expect(received).toEqual(expected) // deep equality + +Expected: "apple" +Received: "banana"`; + +module.exports[".toEqual() {pass: false} expect(\"1 234,57 $\").toEqual(\"1 234,57 $\" (21))"] = `expect(received).toEqual(expected) // deep equality + +Expected: "1 234,57 $" +Received: "1 234,57 $"`; + +module.exports[".toEqual() {pass: false} expect(\"type TypeName = T extends Function ? \\\"function\\\" : \\\"object\\\";\").toEqual(\"type TypeName = T extends Function\n? \\\"function\\\"\n: \\\"object\\\";\" (22))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 3 ++ Received + 1 + +- type TypeName = T extends Function +- ? "function" +- : "object"; ++ type TypeName = T extends Function ? "function" : "object";`; + +module.exports[".toEqual() {pass: false} expect(null).toEqual(undefined (23))"] = `expect(received).toEqual(expected) // deep equality + +Expected: undefined +Received: null`; + +module.exports[".toEqual() {pass: false} expect([1]).toEqual([2] (24))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Array [ +- 2, ++ 1, + ]`; + +module.exports[".toEqual() {pass: false} expect([1, 2]).toEqual([2, 1] (25))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Array [ +- 2, + 1, ++ 2, + ]`; + +module.exports[".toEqual() {pass: false} expect(Immutable.List [1]).toEqual(Immutable.List [2] (26))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Immutable.List [ +- 2, ++ 1, + ]`; + +module.exports[".toEqual() {pass: false} expect(Immutable.List [1, 2]).toEqual(Immutable.List [2, 1] (27))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Immutable.List [ +- 2, + 1, ++ 2, + ]`; + +module.exports[".toEqual() {pass: false} expect(Map {}).toEqual(Set {} (28))"] = `expect(received).toEqual(expected) // deep equality + +Expected: Set {} +Received: Map {}`; + +module.exports[".toEqual() {pass: false} expect(Set {1, 2}).toEqual(Set {} (29))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 4 + +- Set {} ++ Set { ++ 1, ++ 2, ++ }`; + +module.exports[".toEqual() {pass: false} expect(Set {1, 2}).toEqual(Set {1, 2, 3} (30))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 0 + + Set { + 1, + 2, +- 3, + }`; + +module.exports[".toEqual() {pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], [3]} (31))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 3 ++ Received + 0 + +@@ -3,9 +3,6 @@ + 1, + ], + Array [ + 2, + ], +- Array [ +- 3, +- ], + }`; + +module.exports[".toEqual() {pass: false} expect(Set {[1], [2]}).toEqual(Set {[1], [2], [2]} (32))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 3 ++ Received + 0 + +@@ -3,9 +3,6 @@ + 1, + ], + Array [ + 2, + ], +- Array [ +- 2, +- ], + }`; + +module.exports[".toEqual() {pass: false} expect(Set {Set {1}, Set {2}}).toEqual(Set {Set {1}, Set {3}} (33))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Set { + Set { + 1, + }, + Set { +- 3, ++ 2, + }, + }`; + +module.exports[".toEqual() {pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable.Set [] (34))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 4 + +- Immutable.Set [] ++ Immutable.Set [ ++ 1, ++ 2, ++ ]`; + +module.exports[".toEqual() {pass: false} expect(Immutable.Set [1, 2]).toEqual(Immutable.Set [1, 2, 3] (35))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 0 + + Immutable.Set [ + 1, + 2, +- 3, + ]`; + +module.exports[".toEqual() {pass: false} expect(Immutable.OrderedSet [1, 2]).toEqual(Immutable.OrderedSet [2, 1] (36))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Immutable.OrderedSet [ +- 2, + 1, ++ 2, + ]`; + +module.exports[".toEqual() {pass: false} expect(Map {1 => \"one\", 2 => \"two\"}).toEqual(Map {1 => \"one\"} (37))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 0 ++ Received + 1 + + Map { + 1 => "one", ++ 2 => "two", + }`; + +module.exports[".toEqual() {pass: false} expect(Map {\"a\" => 0}).toEqual(Map {\"b\" => 0} (38))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Map { +- "b" => 0, ++ "a" => 0, + }`; + +module.exports[".toEqual() {pass: false} expect(Map {\"v\" => 1}).toEqual(Map {\"v\" => 2} (39))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Map { +- "v" => 2, ++ "v" => 1, + }`; + +module.exports[".toEqual() {pass: false} expect(Map {[\"v\"] => 1}).toEqual(Map {[\"v\"] => 2} (40))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Map { + Array [ + "v", +- ] => 2, ++ ] => 1, + }`; + +module.exports[".toEqual() {pass: false} expect(Map {[1] => Map {[1] => \"one\"}}).toEqual(Map {[1] => Map {[1] => \"two\"}} (41))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + +@@ -2,8 +2,8 @@ + Array [ + 1, + ] => Map { + Array [ + 1, +- ] => "two", ++ ] => "one", + }, + }`; + +module.exports[".toEqual() {pass: false} expect(Immutable.Map {\"a\": 0}).toEqual(Immutable.Map {\"b\": 0} (42))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Immutable.Map { +- "b": 0, ++ "a": 0, + }`; + +module.exports[".toEqual() {pass: false} expect(Immutable.Map {\"v\": 1}).toEqual(Immutable.Map {\"v\": 2} (43))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Immutable.Map { +- "v": 2, ++ "v": 1, + }`; + +module.exports[".toEqual() {pass: false} expect(Immutable.OrderedMap {1: \"one\", 2: \"two\"}).toEqual(Immutable.OrderedMap {2: \"two\", 1: \"one\"} (44))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Immutable.OrderedMap { +- 2: "two", + 1: "one", ++ 2: "two", + }`; + +module.exports[".toEqual() {pass: false} expect(Immutable.Map {\"1\": Immutable.Map {\"2\": {\"a\": 99}}}).toEqual(Immutable.Map {\"1\": Immutable.Map {\"2\": {\"a\": 11}}} (45))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Immutable.Map { + "1": Immutable.Map { + "2": Object { +- "a": 11, ++ "a": 99, + }, + }, + }`; + +module.exports[".toEqual() {pass: false} expect([97, 98, 99]).toEqual([97, 98, 100] (46))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Uint8Array [ + 97, + 98, +- 100, ++ 99, + ]`; + +module.exports[".toEqual() {pass: false} expect({\"a\": 1, \"b\": 2}).toEqual(ObjectContaining {\"a\": 2} (47))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 2 ++ Received + 3 + +- ObjectContaining { +- "a": 2, ++ Object { ++ "a": 1, ++ "b": 2, + }`; + +module.exports[".toEqual() {pass: false} expect(false).toEqual(ObjectContaining {\"a\": 2} (48))"] = `expect(received).toEqual(expected) // deep equality + +Expected: ObjectContaining {"a": 2} +Received: false`; + +module.exports[".toEqual() {pass: false} expect([1, 3]).toEqual(ArrayContaining [1, 2] (49))"] = `expect(received).toEqual(expected) // deep equality + +Expected: ArrayContaining [1, 2] +Received: [1, 3]`; + +module.exports[".toEqual() {pass: false} expect(1).toEqual(ArrayContaining [1, 2] (50))"] = `expect(received).toEqual(expected) // deep equality + +Expected: ArrayContaining [1, 2] +Received: 1`; + +module.exports[".toEqual() {pass: false} expect(\"abd\").toEqual(StringContaining \"bc\" (51))"] = `expect(received).toEqual(expected) // deep equality + +Expected: StringContaining "bc" +Received: "abd"`; + +module.exports[".toEqual() {pass: false} expect(\"abd\").toEqual(StringMatching /bc/i (52))"] = `expect(received).toEqual(expected) // deep equality + +Expected: StringMatching /bc/i +Received: "abd"`; + +module.exports[".toEqual() {pass: false} expect(undefined).toEqual(Anything (53))"] = `expect(received).toEqual(expected) // deep equality + +Expected: Anything +Received: undefined`; + +module.exports[".toEqual() {pass: false} expect(undefined).toEqual(Any (54))"] = `expect(received).toEqual(expected) // deep equality + +Expected: Any +Received: undefined`; + +module.exports[".toEqual() {pass: false} expect(\"Eve\").toEqual({\"asymmetricMatch\": [Function asymmetricMatch]} (55))"] = `expect(received).toEqual(expected) // deep equality + +Expected: {"asymmetricMatch": [Function asymmetricMatch]} +Received: "Eve"`; + +module.exports[".toEqual() {pass: false} expect({\"target\": {\"nodeType\": 1, \"value\": \"a\"}}).toEqual({\"target\": {\"nodeType\": 1, \"value\": \"b\"}} (56))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Object { + "target": Object { + "nodeType": 1, +- "value": "b", ++ "value": "a", + }, + }`; + +module.exports[".toEqual() {pass: false} expect({\"nodeName\": \"div\", \"nodeType\": 1}).toEqual({\"nodeName\": \"p\", \"nodeType\": 1} (57))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Object { +- "nodeName": "p", ++ "nodeName": "div", + "nodeType": 1, + }`; + +module.exports[".toEqual() {pass: false} expect({Symbol(foo): 1, Symbol(bar): 2}).toEqual({Symbol(foo): Any, Symbol(bar): 1} (58))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Object { + Symbol(foo): Any, +- Symbol(bar): 1, ++ Symbol(bar): 2, + }`; + +module.exports[".toEqual() {pass: false} expect([, , 1, ]).toEqual([, , 2, ] (59))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 1 ++ Received + 1 + + Array [ + undefined, + undefined, +- 2, ++ 1, + undefined, + ]`; + +module.exports[".toEqual() {pass: false} expect([]).toEqual([] (60))"] = `expect(received).toEqual(expected) // deep equality + +Expected: [] +Received: serializes to the same string`; + +module.exports[".toEqual() {pass: false} expect([]).toEqual([1] (61))"] = `expect(received).toEqual(expected) // deep equality + +- Expected - 3 ++ Received + 1 + +- Array [ +- 1, +- ] ++ Array []`; + +module.exports[".toEqual() {pass: false} expect([]).toEqual([] (62))"] = `expect(received).toEqual(expected) // deep equality + +Expected: [] +Received: serializes to the same string`; + +module.exports[".toEqual() {pass: false} expect([]).toEqual([] (63))"] = `expect(received).toEqual(expected) // deep equality + +Expected: [] +Received: serializes to the same string`; + +module.exports[".toEqual() {pass: true} expect(true).not.toEqual(true) (0)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not true +`; + +module.exports[".toEqual() {pass: true} expect(1).not.toEqual(1) (1)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not 1 +`; + +module.exports[".toEqual() {pass: true} expect(NaN).not.toEqual(NaN) (2)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not NaN +`; + +module.exports[".toEqual() {pass: true} expect(0).not.toEqual(0) (3)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not 0 +`; + +module.exports[".toEqual() {pass: true} expect(0).not.toEqual(0) (4)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not 0 +`; + +module.exports[".toEqual() {pass: true} expect({}).not.toEqual({}) (5)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not {} +`; + +module.exports[".toEqual() {pass: true} expect(\"abc\").not.toEqual(\"abc\") (6)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not "abc" +`; + +module.exports[".toEqual() {pass: true} expect(\"abc\").not.toEqual(\"abc\") (7)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not "abc" +`; + +module.exports[".toEqual() {pass: true} expect(\"abc\").not.toEqual(\"abc\") (8)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not "abc" +`; + +module.exports[".toEqual() {pass: true} expect([1]).not.toEqual([1]) (9)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not [1] +`; + +module.exports[".toEqual() {pass: true} expect([1, 2]).not.toEqual([1, 2]) (10)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not [1, 2] +`; + +module.exports[".toEqual() {pass: true} expect(Immutable.List [1]).not.toEqual(Immutable.List [1]) (11)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.List [1] +`; + +module.exports[".toEqual() {pass: true} expect(Immutable.List [1, 2]).not.toEqual(Immutable.List [1, 2]) (12)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.List [1, 2] +`; + +module.exports[".toEqual() {pass: true} expect({}).not.toEqual({}) (13)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not {} +`; + +module.exports[".toEqual() {pass: true} expect({\"a\": 99}).not.toEqual({\"a\": 99}) (14)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not {"a": 99} +`; + +module.exports[".toEqual() {pass: true} expect(Set {}).not.toEqual(Set {}) (15)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Set {} +`; + +module.exports[".toEqual() {pass: true} expect(Set {1, 2}).not.toEqual(Set {1, 2}) (16)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Set {1, 2} +`; + +module.exports[".toEqual() {pass: true} expect(Set {1, 2}).not.toEqual(Set {2, 1}) (17)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Set {2, 1} +Received: Set {1, 2}`; + +module.exports[".toEqual() {pass: true} expect(Set {[1], [2]}).not.toEqual(Set {[2], [1]}) (18)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Set {[2], [1]} +Received: Set {[1], [2]}`; + +module.exports[".toEqual() {pass: true} expect(Set {Set {[1]}, Set {[2]}}).not.toEqual(Set {Set {[2]}, Set {[1]}}) (19)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Set {Set {[2]}, Set {[1]}} +Received: Set {Set {[1]}, Set {[2]}}`; + +module.exports[".toEqual() {pass: true} expect(Set {[1], [2], [3], [3]}).not.toEqual(Set {[3], [3], [2], [1]}) (20)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Set {[3], [3], [2], [1]} +Received: Set {[1], [2], [3], [3]}`; + +module.exports[".toEqual() {pass: true} expect(Set {{\"a\": 1}, {\"b\": 2}}).not.toEqual(Set {{\"b\": 2}, {\"a\": 1}}) (21)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Set {{"b": 2}, {"a": 1}} +Received: Set {{"a": 1}, {"b": 2}}`; + +module.exports[".toEqual() {pass: true} expect(Immutable.Set []).not.toEqual(Immutable.Set []) (22)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.Set [] +`; + +module.exports[".toEqual() {pass: true} expect(Immutable.Set [1, 2]).not.toEqual(Immutable.Set [1, 2]) (23)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.Set [1, 2] +`; + +module.exports[".toEqual() {pass: true} expect(Immutable.Set [1, 2]).not.toEqual(Immutable.Set [2, 1]) (24)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.Set [2, 1] +Received: Immutable.Set [1, 2]`; + +module.exports[".toEqual() {pass: true} expect(Immutable.OrderedSet []).not.toEqual(Immutable.OrderedSet []) (25)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.OrderedSet [] +`; + +module.exports[".toEqual() {pass: true} expect(Immutable.OrderedSet [1, 2]).not.toEqual(Immutable.OrderedSet [1, 2]) (26)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.OrderedSet [1, 2] +`; + +module.exports[".toEqual() {pass: true} expect(Map {}).not.toEqual(Map {}) (27)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Map {} +`; + +module.exports[".toEqual() {pass: true} expect(Map {1 => \"one\", 2 => \"two\"}).not.toEqual(Map {1 => \"one\", 2 => \"two\"}) (28)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Map {1 => "one", 2 => "two"} +`; + +module.exports[".toEqual() {pass: true} expect(Map {1 => \"one\", 2 => \"two\"}).not.toEqual(Map {2 => \"two\", 1 => \"one\"}) (29)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Map {2 => "two", 1 => "one"} +Received: Map {1 => "one", 2 => "two"}`; + +module.exports[".toEqual() {pass: true} expect(Map {[1] => \"one\", [2] => \"two\", [3] => \"three\", [3] => \"four\"}).not.toEqual(Map {[3] => \"three\", [3] => \"four\", [2] => \"two\", [1] => \"one\"}) (30)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Map {[3] => "three", [3] => "four", [2] => "two", [1] => "one"} +Received: Map {[1] => "one", [2] => "two", [3] => "three", [3] => "four"}`; + +module.exports[".toEqual() {pass: true} expect(Map {[1] => Map {[1] => \"one\"}, [2] => Map {[2] => \"two\"}}).not.toEqual(Map {[2] => Map {[2] => \"two\"}, [1] => Map {[1] => \"one\"}}) (31)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Map {[2] => Map {[2] => "two"}, [1] => Map {[1] => "one"}} +Received: Map {[1] => Map {[1] => "one"}, [2] => Map {[2] => "two"}}`; + +module.exports[".toEqual() {pass: true} expect(Map {[1] => \"one\", [2] => \"two\"}).not.toEqual(Map {[2] => \"two\", [1] => \"one\"}) (32)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Map {[2] => "two", [1] => "one"} +Received: Map {[1] => "one", [2] => "two"}`; + +module.exports[".toEqual() {pass: true} expect(Map {{\"a\": 1} => \"one\", {\"b\": 2} => \"two\"}).not.toEqual(Map {{\"b\": 2} => \"two\", {\"a\": 1} => \"one\"}) (33)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Map {{"b": 2} => "two", {"a": 1} => "one"} +Received: Map {{"a": 1} => "one", {"b": 2} => "two"}`; + +module.exports[".toEqual() {pass: true} expect(Map {1 => [\"one\"], 2 => [\"two\"]}).not.toEqual(Map {2 => [\"two\"], 1 => [\"one\"]}) (34)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Map {2 => ["two"], 1 => ["one"]} +Received: Map {1 => ["one"], 2 => ["two"]}`; + +module.exports[".toEqual() {pass: true} expect(Immutable.Map {}).not.toEqual(Immutable.Map {}) (35)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.Map {} +`; + +module.exports[".toEqual() {pass: true} expect(Immutable.Map {1: \"one\", 2: \"two\"}).not.toEqual(Immutable.Map {1: \"one\", 2: \"two\"}) (36)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.Map {1: "one", 2: "two"} +`; + +module.exports[".toEqual() {pass: true} expect(Immutable.Map {1: \"one\", 2: \"two\"}).not.toEqual(Immutable.Map {2: \"two\", 1: \"one\"}) (37)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.Map {2: "two", 1: "one"} +Received: Immutable.Map {1: "one", 2: "two"}`; + +module.exports[".toEqual() {pass: true} expect(Immutable.OrderedMap {1: \"one\", 2: \"two\"}).not.toEqual(Immutable.OrderedMap {1: \"one\", 2: \"two\"}) (38)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.OrderedMap {1: "one", 2: "two"} +`; + +module.exports[".toEqual() {pass: true} expect(Immutable.Map {\"1\": Immutable.Map {\"2\": {\"a\": 99}}}).not.toEqual(Immutable.Map {\"1\": Immutable.Map {\"2\": {\"a\": 99}}}) (39)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Immutable.Map {"1": Immutable.Map {"2": {"a": 99}}} +`; + +module.exports[".toEqual() {pass: true} expect([97, 98, 99]).not.toEqual([97, 98, 99]) (40)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not [97, 98, 99] +`; + +module.exports[".toEqual() {pass: true} expect({\"a\": 1, \"b\": 2}).not.toEqual(ObjectContaining {\"a\": 1}) (41)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not ObjectContaining {"a": 1} +Received: {"a": 1, "b": 2}`; + +module.exports[".toEqual() {pass: true} expect([1, 2, 3]).not.toEqual(ArrayContaining [2, 3]) (42)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not ArrayContaining [2, 3] +Received: [1, 2, 3]`; + +module.exports[".toEqual() {pass: true} expect(\"abcd\").not.toEqual(StringContaining \"bc\") (43)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not StringContaining "bc" +Received: "abcd"`; + +module.exports[".toEqual() {pass: true} expect(\"abcd\").not.toEqual(StringMatching /bc/) (44)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not StringMatching /bc/ +Received: "abcd"`; + +module.exports[".toEqual() {pass: true} expect(true).not.toEqual(Anything) (45)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Anything +Received: true`; + +module.exports[".toEqual() {pass: true} expect([Function anonymous]).not.toEqual(Any) (46)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not Any +Received: [Function anonymous]`; + +module.exports[".toEqual() {pass: true} expect({\"a\": 1, \"b\": [Function b], \"c\": true}).not.toEqual({\"a\": 1, \"b\": Any, \"c\": Anything}) (47)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not {"a": 1, "b": Any, "c": Anything} +Received: {"a": 1, "b": [Function b], "c": true}`; + +module.exports[".toEqual() {pass: true} expect(\"Alice\").not.toEqual({\"asymmetricMatch\": [Function asymmetricMatch]}) (48)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not {"asymmetricMatch": [Function asymmetricMatch]} +Received: "Alice"`; + +module.exports[".toEqual() {pass: true} expect({\"nodeName\": \"div\", \"nodeType\": 1}).not.toEqual({\"nodeName\": \"div\", \"nodeType\": 1}) (49)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not {"nodeName": "div", "nodeType": 1} +`; + +module.exports[".toEqual() {pass: true} expect({Symbol(foo): 1, Symbol(bar): 2}).not.toEqual({Symbol(foo): Any, Symbol(bar): 2}) (50)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not {Symbol(foo): Any, Symbol(bar): 2} +Received: {Symbol(foo): 1, Symbol(bar): 2}`; + +module.exports[".toEqual() {pass: true} expect([, , 1, ]).not.toEqual([, , 1, ]) (51)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not [, , 1, ] +`; + +module.exports[".toEqual() {pass: true} expect([, , 1, , ]).not.toEqual([, , 1, undefined, ]) (52)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not [, , 1, undefined, ] +Received: [, , 1, , ]`; + +module.exports[".toEqual() {pass: true} expect({\"a\": 1, \"b\": [Function b]}).not.toEqual({\"a\": 1, \"b\": optionalFn<>}) (53)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not {"a": 1, "b": optionalFn<>} +Received: {"a": 1, "b": [Function b]}`; + +module.exports[".toEqual() {pass: true} expect({\"a\": 1, \"b\": optionalFn<>}).not.toEqual({\"a\": 1, \"b\": [Function b]}) (54)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not {"a": 1, "b": [Function b]} +Received: {"a": 1, "b": optionalFn<>}`; + +module.exports[".toEqual() {pass: true} expect([1, [Function anonymous]]).not.toEqual([1, optionalFn<>]) (55)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not [1, optionalFn<>] +Received: [1, [Function anonymous]]`; + +module.exports[".toEqual() {pass: true} expect([1, optionalFn<>]).not.toEqual([1, [Function anonymous]]) (56)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not [1, [Function anonymous]] +Received: [1, optionalFn<>]`; + +module.exports[".toEqual() {pass: true} expect({\"a\": 1, \"b\": undefined}).not.toEqual({\"a\": 1, \"b\": optionalFn<>}) (57)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not {"a": 1, "b": optionalFn<>} +Received: {"a": 1, "b": undefined}`; + +module.exports[".toEqual() {pass: true} expect({\"a\": 1, \"b\": optionalFn<>}).not.toEqual({\"a\": 1, \"b\": undefined}) (58)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not {"a": 1, "b": undefined} +Received: {"a": 1, "b": optionalFn<>}`; + +module.exports[".toEqual() {pass: true} expect([1, undefined]).not.toEqual([1, optionalFn<>]) (59)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not [1, optionalFn<>] +Received: [1, undefined]`; + +module.exports[".toEqual() {pass: true} expect([1, optionalFn<>]).not.toEqual([1, undefined]) (60)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not [1, undefined] +Received: [1, optionalFn<>]`; + +module.exports[".toEqual() {pass: true} expect({\"a\": 1}).not.toEqual({\"a\": 1, \"b\": optionalFn<>}) (61)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not {"a": 1, "b": optionalFn<>} +Received: {"a": 1}`; + +module.exports[".toEqual() {pass: true} expect({\"a\": 1, \"b\": optionalFn<>}).not.toEqual({\"a\": 1}) (62)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not {"a": 1} +Received: {"a": 1, "b": optionalFn<>}`; + +module.exports[".toEqual() {pass: true} expect([1]).not.toEqual([1, optionalFn<>]) (63)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not [1, optionalFn<>] +Received: [1]`; + +module.exports[".toEqual() {pass: true} expect([1, optionalFn<>]).not.toEqual([1]) (64)"] = `expect(received).not.toEqual(expected) // deep equality + +Expected: not [1] +Received: [1, optionalFn<>]`; + +module.exports[".toBeInstanceOf() passing Map {} and [Function Map] (0)"] = `expect(received).not.toBeInstanceOf(expected) + +Expected constructor: not Map +`; + +module.exports[".toBeInstanceOf() passing [] and [Function Array] (1)"] = `expect(received).not.toBeInstanceOf(expected) + +Expected constructor: not Array +`; + +module.exports[".toBeInstanceOf() passing {} and [Function A] (2)"] = `expect(received).not.toBeInstanceOf(expected) + +Expected constructor: not A +`; + +module.exports[".toBeInstanceOf() passing {} and [Function B] (3)"] = `expect(received).not.toBeInstanceOf(expected) + +Expected constructor: not B +Received constructor: C extends B +`; + +module.exports[".toBeInstanceOf() passing {} and [Function B] (4)"] = `expect(received).not.toBeInstanceOf(expected) + +Expected constructor: not B +Received constructor: E extends … extends B +`; + +module.exports[".toBeInstanceOf() passing {} and [Function anonymous] (5)"] = `expect(received).not.toBeInstanceOf(expected) + +Expected constructor name is an empty string +Received constructor: SubHasNameProp +`; + +module.exports[".toBeInstanceOf() passing {} and [Function B] (6)"] = `expect(received).not.toBeInstanceOf(expected) + +Expected constructor: not B +Received constructor name is not a string +`; + +module.exports[".toBeInstanceOf() passing {} and [Function name() {}] (7)"] = `expect(received).not.toBeInstanceOf(expected) + +Expected constructor name is not a string +`; + +module.exports[".toBeInstanceOf() failing \"a\" and [Function String] (0)"] = `expect(received).toBeInstanceOf(expected) + +Expected constructor: String + +Received value has no prototype +Received value: "a"`; + +module.exports[".toBeInstanceOf() failing 1 and [Function Number] (1)"] = `expect(received).toBeInstanceOf(expected) + +Expected constructor: Number + +Received value has no prototype +Received value: 1`; + +module.exports[".toBeInstanceOf() failing true and [Function Boolean] (2)"] = `expect(received).toBeInstanceOf(expected) + +Expected constructor: Boolean + +Received value has no prototype +Received value: true`; + +module.exports[".toBeInstanceOf() failing {} and [Function B] (3)"] = `expect(received).toBeInstanceOf(expected) + +Expected constructor: B +Received constructor: A +`; + +module.exports[".toBeInstanceOf() failing {} and [Function A] (4)"] = `expect(received).toBeInstanceOf(expected) + +Expected constructor: A + +Received value has no prototype +Received value: {}`; + +module.exports[".toBeInstanceOf() failing undefined and [Function String] (5)"] = `expect(received).toBeInstanceOf(expected) + +Expected constructor: String + +Received value has no prototype +Received value: undefined`; + +module.exports[".toBeInstanceOf() failing null and [Function String] (6)"] = `expect(received).toBeInstanceOf(expected) + +Expected constructor: String + +Received value has no prototype +Received value: null`; + +module.exports[".toBeInstanceOf() failing /\\w+/ and [Function anonymous] (7)"] = `expect(received).toBeInstanceOf(expected) + +Expected constructor name is an empty string +Received constructor: RegExp +`; + +module.exports[".toBeInstanceOf() failing {} and [Function RegExp] (8)"] = `expect(received).toBeInstanceOf(expected) + +Expected constructor: RegExp +Received constructor name is an empty string +`; + +module.exports[".toBeInstanceOf() throws if constructor is not a function"] = `expect(received).toBeInstanceOf(expected) + +Matcher error: expected value must be a function + +Expected has type: number +Expected has value: 4`; + +module.exports[".toBeTruthy(), .toBeFalsy() does not accept arguments"] = `expect(received).toBeTruthy() + +Matcher error: this matcher must not have an expected argument + +Expected has value: null`; + +module.exports[".toBeTruthy(), .toBeFalsy() does not accept arguments #1"] = `expect(received).not.toBeFalsy() + +Matcher error: this matcher must not have an expected argument + +Expected has value: null`; + +module.exports[".toBeTruthy(), .toBeFalsy() '{}' is truthy"] = `expect(received).not.toBeTruthy() + +Received: {}`; + +module.exports[".toBeTruthy(), .toBeFalsy() '{}' is truthy #1"] = `expect(received).toBeFalsy() + +Received: {}`; + +module.exports[".toBeTruthy(), .toBeFalsy() '[]' is truthy"] = `expect(received).not.toBeTruthy() + +Received: []`; + +module.exports[".toBeTruthy(), .toBeFalsy() '[]' is truthy #1"] = `expect(received).toBeFalsy() + +Received: []`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'true' is truthy"] = `expect(received).not.toBeTruthy() + +Received: true`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'true' is truthy #1"] = `expect(received).toBeFalsy() + +Received: true`; + +module.exports[".toBeTruthy(), .toBeFalsy() '1' is truthy"] = `expect(received).not.toBeTruthy() + +Received: 1`; + +module.exports[".toBeTruthy(), .toBeFalsy() '1' is truthy #1"] = `expect(received).toBeFalsy() + +Received: 1`; + +module.exports[".toBeTruthy(), .toBeFalsy() '\"a\"' is truthy"] = `expect(received).not.toBeTruthy() + +Received: "a"`; + +module.exports[".toBeTruthy(), .toBeFalsy() '\"a\"' is truthy #1"] = `expect(received).toBeFalsy() + +Received: "a"`; + +module.exports[".toBeTruthy(), .toBeFalsy() '0.5' is truthy"] = `expect(received).not.toBeTruthy() + +Received: 0.5`; + +module.exports[".toBeTruthy(), .toBeFalsy() '0.5' is truthy #1"] = `expect(received).toBeFalsy() + +Received: 0.5`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'Map {}' is truthy"] = `expect(received).not.toBeTruthy() + +Received: Map {}`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'Map {}' is truthy #1"] = `expect(received).toBeFalsy() + +Received: Map {}`; + +module.exports[".toBeTruthy(), .toBeFalsy() '[Function anonymous]' is truthy"] = `expect(received).not.toBeTruthy() + +Received: [Function anonymous]`; + +module.exports[".toBeTruthy(), .toBeFalsy() '[Function anonymous]' is truthy #1"] = `expect(received).toBeFalsy() + +Received: [Function anonymous]`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'Infinity' is truthy"] = `expect(received).not.toBeTruthy() + +Received: Infinity`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'Infinity' is truthy #1"] = `expect(received).toBeFalsy() + +Received: Infinity`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'false' is falsy"] = `expect(received).toBeTruthy() + +Received: false`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'false' is falsy #1"] = `expect(received).not.toBeFalsy() + +Received: false`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'null' is falsy"] = `expect(received).toBeTruthy() + +Received: null`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'null' is falsy #1"] = `expect(received).not.toBeFalsy() + +Received: null`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'NaN' is falsy"] = `expect(received).toBeTruthy() + +Received: NaN`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'NaN' is falsy #1"] = `expect(received).not.toBeFalsy() + +Received: NaN`; + +module.exports[".toBeTruthy(), .toBeFalsy() '0' is falsy"] = `expect(received).toBeTruthy() + +Received: 0`; + +module.exports[".toBeTruthy(), .toBeFalsy() '0' is falsy #1"] = `expect(received).not.toBeFalsy() + +Received: 0`; + +module.exports[".toBeTruthy(), .toBeFalsy() '\"\"' is falsy"] = `expect(received).toBeTruthy() + +Received: ""`; + +module.exports[".toBeTruthy(), .toBeFalsy() '\"\"' is falsy #1"] = `expect(received).not.toBeFalsy() + +Received: ""`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'undefined' is falsy"] = `expect(received).toBeTruthy() + +Received: undefined`; + +module.exports[".toBeTruthy(), .toBeFalsy() 'undefined' is falsy #1"] = `expect(received).not.toBeFalsy() + +Received: undefined`; + +module.exports[".toBeNaN() {pass: true} expect(NaN).toBeNaN()"] = `expect(received).not.toBeNaN() + +Received: NaN`; + +module.exports[".toBeNaN() {pass: true} expect(NaN).toBeNaN() #1"] = `expect(received).not.toBeNaN() + +Received: NaN`; + +module.exports[".toBeNaN() {pass: true} expect(NaN).toBeNaN() #2"] = `expect(received).not.toBeNaN() + +Received: NaN`; + +module.exports[".toBeNaN() {pass: true} expect(NaN).toBeNaN() #3"] = `expect(received).not.toBeNaN() + +Received: NaN`; + +module.exports[".toBeNaN() throws"] = `expect(received).toBeNaN() + +Received: 1`; + +module.exports[".toBeNaN() throws #1"] = `expect(received).toBeNaN() + +Received: ""`; + +module.exports[".toBeNaN() throws #2"] = `expect(received).toBeNaN() + +Received: null`; + +module.exports[".toBeNaN() throws #3"] = `expect(received).toBeNaN() + +Received: undefined`; + +module.exports[".toBeNaN() throws #4"] = `expect(received).toBeNaN() + +Received: {}`; + +module.exports[".toBeNaN() throws #5"] = `expect(received).toBeNaN() + +Received: []`; + +module.exports[".toBeNaN() throws #6"] = `expect(received).toBeNaN() + +Received: 0.2`; + +module.exports[".toBeNaN() throws #7"] = `expect(received).toBeNaN() + +Received: 0`; + +module.exports[".toBeNaN() throws #8"] = `expect(received).toBeNaN() + +Received: Infinity`; + +module.exports[".toBeNaN() throws #9"] = `expect(received).toBeNaN() + +Received: -Infinity`; + +module.exports[".toBeNull() fails for '{}'"] = `expect(received).toBeNull() + +Received: {}`; + +module.exports[".toBeNull() fails for '[]'"] = `expect(received).toBeNull() + +Received: []`; + +module.exports[".toBeNull() fails for 'true'"] = `expect(received).toBeNull() + +Received: true`; + +module.exports[".toBeNull() fails for '1'"] = `expect(received).toBeNull() + +Received: 1`; + +module.exports[".toBeNull() fails for '\"a\"'"] = `expect(received).toBeNull() + +Received: "a"`; + +module.exports[".toBeNull() fails for '0.5'"] = `expect(received).toBeNull() + +Received: 0.5`; + +module.exports[".toBeNull() fails for 'Map {}'"] = `expect(received).toBeNull() + +Received: Map {}`; + +module.exports[".toBeNull() fails for '[Function anonymous]'"] = `expect(received).toBeNull() + +Received: [Function anonymous]`; + +module.exports[".toBeNull() fails for 'Infinity'"] = `expect(received).toBeNull() + +Received: Infinity`; + +module.exports[".toBeNull() fails for null with .not"] = `expect(received).not.toBeNull() + +Received: null`; + +module.exports[".toBeDefined(), .toBeUndefined() '{}' is defined"] = `expect(received).not.toBeDefined() + +Received: {}`; + +module.exports[".toBeDefined(), .toBeUndefined() '{}' is defined #1"] = `expect(received).toBeUndefined() + +Received: {}`; + +module.exports[".toBeDefined(), .toBeUndefined() '[]' is defined"] = `expect(received).not.toBeDefined() + +Received: []`; + +module.exports[".toBeDefined(), .toBeUndefined() '[]' is defined #1"] = `expect(received).toBeUndefined() + +Received: []`; + +module.exports[".toBeDefined(), .toBeUndefined() 'true' is defined"] = `expect(received).not.toBeDefined() + +Received: true`; + +module.exports[".toBeDefined(), .toBeUndefined() 'true' is defined #1"] = `expect(received).toBeUndefined() + +Received: true`; + +module.exports[".toBeDefined(), .toBeUndefined() '1' is defined"] = `expect(received).not.toBeDefined() + +Received: 1`; + +module.exports[".toBeDefined(), .toBeUndefined() '1' is defined #1"] = `expect(received).toBeUndefined() + +Received: 1`; + +module.exports[".toBeDefined(), .toBeUndefined() '\"a\"' is defined"] = `expect(received).not.toBeDefined() + +Received: "a"`; + +module.exports[".toBeDefined(), .toBeUndefined() '\"a\"' is defined #1"] = `expect(received).toBeUndefined() + +Received: "a"`; + +module.exports[".toBeDefined(), .toBeUndefined() '0.5' is defined"] = `expect(received).not.toBeDefined() + +Received: 0.5`; + +module.exports[".toBeDefined(), .toBeUndefined() '0.5' is defined #1"] = `expect(received).toBeUndefined() + +Received: 0.5`; + +module.exports[".toBeDefined(), .toBeUndefined() 'Map {}' is defined"] = `expect(received).not.toBeDefined() + +Received: Map {}`; + +module.exports[".toBeDefined(), .toBeUndefined() 'Map {}' is defined #1"] = `expect(received).toBeUndefined() + +Received: Map {}`; + +module.exports[".toBeDefined(), .toBeUndefined() '[Function anonymous]' is defined"] = `expect(received).not.toBeDefined() + +Received: [Function anonymous]`; + +module.exports[".toBeDefined(), .toBeUndefined() '[Function anonymous]' is defined #1"] = `expect(received).toBeUndefined() + +Received: [Function anonymous]`; + +module.exports[".toBeDefined(), .toBeUndefined() 'Infinity' is defined"] = `expect(received).not.toBeDefined() + +Received: Infinity`; + +module.exports[".toBeDefined(), .toBeUndefined() 'Infinity' is defined #1"] = `expect(received).toBeUndefined() + +Received: Infinity`; + +module.exports[".toBeDefined(), .toBeUndefined() undefined is undefined"] = `expect(received).toBeDefined() + +Received: undefined`; + +module.exports[".toBeDefined(), .toBeUndefined() undefined is undefined #1"] = `expect(received).not.toBeUndefined() + +Received: undefined`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2]"] = `expect(received).toBeGreaterThan(expected) + +Expected: > 2 +Received: 1`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] #1"] = `expect(received).not.toBeLessThan(expected) + +Expected: not < 2 +Received: 1`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] #2"] = `expect(received).not.toBeGreaterThan(expected) + +Expected: not > 1 +Received: 2`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] #3"] = `expect(received).toBeLessThan(expected) + +Expected: < 1 +Received: 2`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] #4"] = `expect(received).toBeGreaterThanOrEqual(expected) + +Expected: >= 2 +Received: 1`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] #5"] = `expect(received).not.toBeLessThanOrEqual(expected) + +Expected: not <= 2 +Received: 1`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] #6"] = `expect(received).not.toBeGreaterThanOrEqual(expected) + +Expected: not >= 1 +Received: 2`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [1, 2] #7"] = `expect(received).toBeLessThanOrEqual(expected) + +Expected: <= 1 +Received: 2`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity]"] = `expect(received).toBeGreaterThan(expected) + +Expected: > Infinity +Received: -Infinity`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] #1"] = `expect(received).not.toBeLessThan(expected) + +Expected: not < Infinity +Received: -Infinity`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] #2"] = `expect(received).not.toBeGreaterThan(expected) + +Expected: not > -Infinity +Received: Infinity`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] #3"] = `expect(received).toBeLessThan(expected) + +Expected: < -Infinity +Received: Infinity`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] #4"] = `expect(received).toBeGreaterThanOrEqual(expected) + +Expected: >= Infinity +Received: -Infinity`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] #5"] = `expect(received).not.toBeLessThanOrEqual(expected) + +Expected: not <= Infinity +Received: -Infinity`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] #6"] = `expect(received).not.toBeGreaterThanOrEqual(expected) + +Expected: not >= -Infinity +Received: Infinity`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [-Infinity, Infinity] #7"] = `expect(received).toBeLessThanOrEqual(expected) + +Expected: <= -Infinity +Received: Infinity`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308]"] = `expect(received).toBeGreaterThan(expected) + +Expected: > 1.7976931348623157e+308 +Received: 5e-324`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] #1"] = `expect(received).not.toBeLessThan(expected) + +Expected: not < 1.7976931348623157e+308 +Received: 5e-324`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] #2"] = `expect(received).not.toBeGreaterThan(expected) + +Expected: not > 5e-324 +Received: 1.7976931348623157e+308`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] #3"] = `expect(received).toBeLessThan(expected) + +Expected: < 5e-324 +Received: 1.7976931348623157e+308`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] #4"] = `expect(received).toBeGreaterThanOrEqual(expected) + +Expected: >= 1.7976931348623157e+308 +Received: 5e-324`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] #5"] = `expect(received).not.toBeLessThanOrEqual(expected) + +Expected: not <= 1.7976931348623157e+308 +Received: 5e-324`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] #6"] = `expect(received).not.toBeGreaterThanOrEqual(expected) + +Expected: not >= 5e-324 +Received: 1.7976931348623157e+308`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [5e-324, 1.7976931348623157e+308] #7"] = `expect(received).toBeLessThanOrEqual(expected) + +Expected: <= 5e-324 +Received: 1.7976931348623157e+308`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34]"] = `expect(received).toBeGreaterThan(expected) + +Expected: > 34 +Received: 17`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] #1"] = `expect(received).not.toBeLessThan(expected) + +Expected: not < 34 +Received: 17`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] #2"] = `expect(received).not.toBeGreaterThan(expected) + +Expected: not > 17 +Received: 34`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] #3"] = `expect(received).toBeLessThan(expected) + +Expected: < 17 +Received: 34`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] #4"] = `expect(received).toBeGreaterThanOrEqual(expected) + +Expected: >= 34 +Received: 17`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] #5"] = `expect(received).not.toBeLessThanOrEqual(expected) + +Expected: not <= 34 +Received: 17`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] #6"] = `expect(received).not.toBeGreaterThanOrEqual(expected) + +Expected: not >= 17 +Received: 34`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [17, 34] #7"] = `expect(received).toBeLessThanOrEqual(expected) + +Expected: <= 17 +Received: 34`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7]"] = `expect(received).toBeGreaterThan(expected) + +Expected: > 7 +Received: 3`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] #1"] = `expect(received).not.toBeLessThan(expected) + +Expected: not < 7 +Received: 3`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] #2"] = `expect(received).not.toBeGreaterThan(expected) + +Expected: not > 3 +Received: 7`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] #3"] = `expect(received).toBeLessThan(expected) + +Expected: < 3 +Received: 7`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] #4"] = `expect(received).toBeGreaterThanOrEqual(expected) + +Expected: >= 7 +Received: 3`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] #5"] = `expect(received).not.toBeLessThanOrEqual(expected) + +Expected: not <= 7 +Received: 3`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] #6"] = `expect(received).not.toBeGreaterThanOrEqual(expected) + +Expected: not >= 3 +Received: 7`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [3, 7] #7"] = `expect(received).toBeLessThanOrEqual(expected) + +Expected: <= 3 +Received: 7`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18]"] = `expect(received).toBeGreaterThan(expected) + +Expected: > 18 +Received: 9`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] #1"] = `expect(received).not.toBeLessThan(expected) + +Expected: not < 18 +Received: 9`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] #2"] = `expect(received).not.toBeGreaterThan(expected) + +Expected: not > 9 +Received: 18`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] #3"] = `expect(received).toBeLessThan(expected) + +Expected: < 9 +Received: 18`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] #4"] = `expect(received).toBeGreaterThanOrEqual(expected) + +Expected: >= 18 +Received: 9`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] #5"] = `expect(received).not.toBeLessThanOrEqual(expected) + +Expected: not <= 18 +Received: 9`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] #6"] = `expect(received).not.toBeGreaterThanOrEqual(expected) + +Expected: not >= 9 +Received: 18`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [9, 18] #7"] = `expect(received).toBeLessThanOrEqual(expected) + +Expected: <= 9 +Received: 18`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2]"] = `expect(received).toBeGreaterThan(expected) + +Expected: > 0.2 +Received: 0.1`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] #1"] = `expect(received).not.toBeLessThan(expected) + +Expected: not < 0.2 +Received: 0.1`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] #2"] = `expect(received).not.toBeGreaterThan(expected) + +Expected: not > 0.1 +Received: 0.2`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] #3"] = `expect(received).toBeLessThan(expected) + +Expected: < 0.1 +Received: 0.2`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] #4"] = `expect(received).toBeGreaterThanOrEqual(expected) + +Expected: >= 0.2 +Received: 0.1`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] #5"] = `expect(received).not.toBeLessThanOrEqual(expected) + +Expected: not <= 0.2 +Received: 0.1`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] #6"] = `expect(received).not.toBeGreaterThanOrEqual(expected) + +Expected: not >= 0.1 +Received: 0.2`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() throws: [0.1, 0.2] #7"] = `expect(received).toBeLessThanOrEqual(expected) + +Expected: <= 0.1 +Received: 0.2`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [1, 1]"] = `expect(received).not.toBeGreaterThanOrEqual(expected) + +Expected: not >= 1 +Received: 1`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [1, 1] #1"] = `expect(received).not.toBeLessThanOrEqual(expected) + +Expected: not <= 1 +Received: 1`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [5e-324, 5e-324]"] = `expect(received).not.toBeGreaterThanOrEqual(expected) + +Expected: not >= 5e-324 +Received: 5e-324`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [5e-324, 5e-324] #1"] = `expect(received).not.toBeLessThanOrEqual(expected) + +Expected: not <= 5e-324 +Received: 5e-324`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [1.7976931348623157e+308, 1.7976931348623157e+308]"] = `expect(received).not.toBeGreaterThanOrEqual(expected) + +Expected: not >= 1.7976931348623157e+308 +Received: 1.7976931348623157e+308`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [1.7976931348623157e+308, 1.7976931348623157e+308] #1"] = `expect(received).not.toBeLessThanOrEqual(expected) + +Expected: not <= 1.7976931348623157e+308 +Received: 1.7976931348623157e+308`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [Infinity, Infinity]"] = `expect(received).not.toBeGreaterThanOrEqual(expected) + +Expected: not >= Infinity +Received: Infinity`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [Infinity, Infinity] #1"] = `expect(received).not.toBeLessThanOrEqual(expected) + +Expected: not <= Infinity +Received: Infinity`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [-Infinity, -Infinity]"] = `expect(received).not.toBeGreaterThanOrEqual(expected) + +Expected: not >= -Infinity +Received: -Infinity`; + +module.exports[".toBeGreaterThan(), .toBeLessThan(), .toBeGreaterThanOrEqual(), .toBeLessThanOrEqual() equal numbers: [-Infinity, -Infinity] #1"] = `expect(received).not.toBeLessThanOrEqual(expected) + +Expected: not <= -Infinity +Received: -Infinity`; + +module.exports[".toContain(), .toContainEqual() '[1, 2, 3, 4]' contains '1'"] = `expect(received).not.toContain(expected) // indexOf + +Expected value: not 1 +Received array: [1, 2, 3, 4]`; + +module.exports[".toContain(), .toContainEqual() '[\"a\", \"b\", \"c\", \"d\"]' contains '\"a\"'"] = `expect(received).not.toContain(expected) // indexOf + +Expected value: not "a" +Received array: ["a", "b", "c", "d"]`; + +module.exports[".toContain(), .toContainEqual() '[undefined, null]' contains 'null'"] = `expect(received).not.toContain(expected) // indexOf + +Expected value: not null +Received array: [undefined, null]`; + +module.exports[".toContain(), .toContainEqual() '[undefined, null]' contains 'undefined'"] = `expect(received).not.toContain(expected) // indexOf + +Expected value: not undefined +Received array: [undefined, null]`; + +module.exports[".toContain(), .toContainEqual() '[Symbol(a)]' contains 'Symbol(a)'"] = `expect(received).not.toContain(expected) // indexOf + +Expected value: not Symbol(a) +Received array: [Symbol(a)]`; + +module.exports[".toContain(), .toContainEqual() '\"abcdef\"' contains '\"abc\"'"] = `expect(received).not.toContain(expected) // indexOf + +Expected substring: not "abc" +Received string: "abcdef"`; + +module.exports[".toContain(), .toContainEqual() '\"11112111\"' contains '\"2\"'"] = `expect(received).not.toContain(expected) // indexOf + +Expected substring: not "2" +Received string: "11112111"`; + +module.exports[".toContain(), .toContainEqual() 'Set {\"abc\", \"def\"}' contains '\"abc\"'"] = `expect(received).not.toContain(expected) // indexOf + +Expected value: not "abc" +Received set: Set {"abc", "def"}`; + +module.exports[".toContain(), .toContainEqual() '[0, 1]' contains '1'"] = `expect(received).not.toContain(expected) // indexOf + +Expected value: not 1 +Received object: [0, 1]`; + +module.exports[".toContain(), .toContainEqual() '[1, 2, 3]' does not contain '4'"] = `expect(received).toContain(expected) // indexOf + +Expected value: 4 +Received array: [1, 2, 3]`; + +module.exports[".toContain(), .toContainEqual() '[null, undefined]' does not contain '1'"] = `expect(received).toContain(expected) // indexOf + +Expected value: 1 +Received array: [null, undefined]`; + +module.exports[".toContain(), .toContainEqual() '[{}, []]' does not contain '[]'"] = `expect(received).toContain(expected) // indexOf + +Expected value: [] +Received array: [{}, []] + +Looks like you wanted to test for object/array equality with the stricter \`toContain\` matcher. You probably need to use \`toContainEqual\` instead.`; + +module.exports[".toContain(), .toContainEqual() '[{}, []]' does not contain '{}'"] = `expect(received).toContain(expected) // indexOf + +Expected value: {} +Received array: [{}, []] + +Looks like you wanted to test for object/array equality with the stricter \`toContain\` matcher. You probably need to use \`toContainEqual\` instead.`; + +module.exports[".toContain(), .toContainEqual() error cases"] = `expect(received).toContain(expected) // indexOf + +Matcher error: received value must not be null nor undefined + +Received has value: null`; + +module.exports[".toContain(), .toContainEqual() error cases #1"] = `expect(-0).toContain(0) // indexOf + +Matcher error: expected value must be a string if received value is a string + +Expected has type: number +Expected has value: -0 +Received has type: string +Received has value: "-0"`; + +module.exports[".toContain(), .toContainEqual() error cases #2"] = `expect(null).toContain(null) // indexOf + +Matcher error: expected value must be a string if received value is a string + +Expected has value: null +Received has type: string +Received has value: "null"`; + +module.exports[".toContain(), .toContainEqual() error cases #3"] = `expect(undefined).toContain(undefined) // indexOf + +Matcher error: expected value must be a string if received value is a string + +Expected has value: undefined +Received has type: string +Received has value: "undefined"`; + +module.exports[".toContain(), .toContainEqual() error cases #4"] = `expect(false).toContain(false) // indexOf + +Matcher error: expected value must be a string if received value is a string + +Expected has type: boolean +Expected has value: false +Received has type: string +Received has value: "false"`; + +module.exports[".toContain(), .toContainEqual() '[1, 2, 3, 4]' contains a value equal to '1'"] = `expect(received).not.toContainEqual(expected) // deep equality + +Expected value: not 1 +Received array: [1, 2, 3, 4]`; + +module.exports[".toContain(), .toContainEqual() '[\"a\", \"b\", \"c\", \"d\"]' contains a value equal to '\"a\"'"] = `expect(received).not.toContainEqual(expected) // deep equality + +Expected value: not "a" +Received array: ["a", "b", "c", "d"]`; + +module.exports[".toContain(), .toContainEqual() '[undefined, null]' contains a value equal to 'null'"] = `expect(received).not.toContainEqual(expected) // deep equality + +Expected value: not null +Received array: [undefined, null]`; + +module.exports[".toContain(), .toContainEqual() '[undefined, null]' contains a value equal to 'undefined'"] = `expect(received).not.toContainEqual(expected) // deep equality + +Expected value: not undefined +Received array: [undefined, null]`; + +module.exports[".toContain(), .toContainEqual() '[Symbol(a)]' contains a value equal to 'Symbol(a)'"] = `expect(received).not.toContainEqual(expected) // deep equality + +Expected value: not Symbol(a) +Received array: [Symbol(a)]`; + +module.exports[".toContain(), .toContainEqual() '[{\"a\": \"b\"}, {\"a\": \"c\"}]' contains a value equal to '{\"a\": \"b\"}'"] = `expect(received).not.toContainEqual(expected) // deep equality + +Expected value: not {"a": "b"} +Received array: [{"a": "b"}, {"a": "c"}]`; + +module.exports[".toContain(), .toContainEqual() 'Set {1, 2, 3, 4}' contains a value equal to '1'"] = `expect(received).not.toContainEqual(expected) // deep equality + +Expected value: not 1 +Received set: Set {1, 2, 3, 4}`; + +module.exports[".toContain(), .toContainEqual() '[0, 1]' contains a value equal to '1'"] = `expect(received).not.toContainEqual(expected) // deep equality + +Expected value: not 1 +Received object: [0, 1]`; + +module.exports[".toContain(), .toContainEqual() '[{\"a\": \"b\"}, {\"a\": \"c\"}]' does not contain a value equal to'{\"a\": \"d\"}'"] = `expect(received).toContainEqual(expected) // deep equality + +Expected value: {"a": "d"} +Received array: [{"a": "b"}, {"a": "c"}]`; + +module.exports[".toContain(), .toContainEqual() error cases for toContainEqual"] = `expect(received).toContainEqual(expected) // deep equality + +Matcher error: received value must not be null nor undefined + +Received has value: null`; + +module.exports[".toBeCloseTo {pass: true} expect(0).toBeCloseTo(0)"] = `expect(received).not.toBeCloseTo(expected) + +Expected: not 0 +`; + +module.exports[".toBeCloseTo {pass: true} expect(0).toBeCloseTo(0.001)"] = `expect(received).not.toBeCloseTo(expected) + +Expected: not 0.001 +Received: 0 + +Expected precision: 2 +Expected difference: not < 0.005 +Received difference: 0.001`; + +module.exports[".toBeCloseTo {pass: true} expect(1.23).toBeCloseTo(1.229)"] = `expect(received).not.toBeCloseTo(expected) + +Expected: not 1.229 +Received: 1.23 + +Expected precision: 2 +Expected difference: not < 0.005 +Received difference: 0.0009999999999998899`; + +module.exports[".toBeCloseTo {pass: true} expect(1.23).toBeCloseTo(1.226)"] = `expect(received).not.toBeCloseTo(expected) + +Expected: not 1.226 +Received: 1.23 + +Expected precision: 2 +Expected difference: not < 0.005 +Received difference: 0.0040000000000000036`; + +module.exports[".toBeCloseTo {pass: true} expect(1.23).toBeCloseTo(1.225)"] = `expect(received).not.toBeCloseTo(expected) + +Expected: not 1.225 +Received: 1.23 + +Expected precision: 2 +Expected difference: not < 0.005 +Received difference: 0.004999999999999893`; + +module.exports[".toBeCloseTo {pass: true} expect(1.23).toBeCloseTo(1.234)"] = `expect(received).not.toBeCloseTo(expected) + +Expected: not 1.234 +Received: 1.23 + +Expected precision: 2 +Expected difference: not < 0.005 +Received difference: 0.0040000000000000036`; + +module.exports[".toBeCloseTo {pass: true} expect(Infinity).toBeCloseTo(Infinity)"] = `expect(received).not.toBeCloseTo(expected) + +Expected: not Infinity +`; + +module.exports[".toBeCloseTo {pass: true} expect(-Infinity).toBeCloseTo(-Infinity)"] = `expect(received).not.toBeCloseTo(expected) + +Expected: not -Infinity +`; + +module.exports[".toBeCloseTo {pass: false} expect(0).toBeCloseTo(0.01)"] = `expect(received).toBeCloseTo(expected) + +Expected: 0.01 +Received: 0 + +Expected precision: 2 +Expected difference: < 0.005 +Received difference: 0.01`; + +module.exports[".toBeCloseTo {pass: false} expect(1).toBeCloseTo(1.23)"] = `expect(received).toBeCloseTo(expected) + +Expected: 1.23 +Received: 1 + +Expected precision: 2 +Expected difference: < 0.005 +Received difference: 0.22999999999999998`; + +module.exports[".toBeCloseTo {pass: false} expect(1.23).toBeCloseTo(1.2249999)"] = `expect(received).toBeCloseTo(expected) + +Expected: 1.2249999 +Received: 1.23 + +Expected precision: 2 +Expected difference: < 0.005 +Received difference: 0.005000099999999952`; + +module.exports[".toBeCloseTo {pass: false} expect(Infinity).toBeCloseTo(-Infinity)"] = `expect(received).toBeCloseTo(expected) + +Expected: -Infinity +Received: Infinity + +Expected precision: 2 +Expected difference: < 0.005 +Received difference: Infinity`; + +module.exports[".toBeCloseTo {pass: false} expect(Infinity).toBeCloseTo(1.23)"] = `expect(received).toBeCloseTo(expected) + +Expected: 1.23 +Received: Infinity + +Expected precision: 2 +Expected difference: < 0.005 +Received difference: Infinity`; + +module.exports[".toBeCloseTo {pass: false} expect(-Infinity).toBeCloseTo(-1.23)"] = `expect(received).toBeCloseTo(expected) + +Expected: -1.23 +Received: -Infinity + +Expected precision: 2 +Expected difference: < 0.005 +Received difference: Infinity`; + +module.exports[".toBeCloseTo {pass: false} expect(3.141592e-7).toBeCloseTo(3e-7, 8)"] = `expect(received).toBeCloseTo(expected, precision) + +Expected: 3e-7 +Received: 3.141592e-7 + +Expected precision: 8 +Expected difference: < 5e-9 +Received difference: 1.4159200000000025e-8`; + +module.exports[".toBeCloseTo {pass: false} expect(56789).toBeCloseTo(51234, -4)"] = `expect(received).toBeCloseTo(expected, precision) + +Expected: 51234 +Received: 56789 + +Expected precision: -4 +Expected difference: < 5000 +Received difference: 5555`; + +module.exports[".toBeCloseTo {pass: true} expect(0).toBeCloseTo(0.1, 0)"] = `expect(received).not.toBeCloseTo(expected, precision) + +Expected: not 0.1 +Received: 0 + +Expected precision: 0 +Expected difference: not < 0.5 +Received difference: 0.1`; + +module.exports[".toBeCloseTo {pass: true} expect(0).toBeCloseTo(0.0001, 3)"] = `expect(received).not.toBeCloseTo(expected, precision) + +Expected: not 0.0001 +Received: 0 + +Expected precision: 3 +Expected difference: not < 0.0005 +Received difference: 0.0001`; + +module.exports[".toBeCloseTo {pass: true} expect(0).toBeCloseTo(0.000004, 5)"] = `expect(received).not.toBeCloseTo(expected, precision) + +Expected: not 0.000004 +Received: 0 + +Expected precision: 5 +Expected difference: not < 0.000005 +Received difference: 0.000004`; + +module.exports[".toBeCloseTo {pass: true} expect(2.0000002).toBeCloseTo(2, 5)"] = `expect(received).not.toBeCloseTo(expected, precision) + +Expected: not 2 +Received: 2.0000002 + +Expected precision: 5 +Expected difference: not < 5e-6 +Received difference: 2.0000000011677344e-7`; + +module.exports[".toBeCloseTo throws: Matcher error promise empty isNot false received"] = `expect(received).toBeCloseTo(expected, precision) + +Matcher error: received value must be a number + +Received has type: string +Received has value: ""`; + +module.exports[".toBeCloseTo throws: Matcher error promise empty isNot true expected"] = `expect(received).not.toBeCloseTo(expected) + +Matcher error: expected value must be a number + +Expected has value: undefined`; + +module.exports[".toBeCloseTo throws: Matcher error promise rejects isNot false expected"] = `callback is not a function`; + +module.exports[".toBeCloseTo throws: Matcher error promise rejects isNot true received"] = `callback is not a function`; + +module.exports[".toBeCloseTo throws: Matcher error promise resolves isNot false received"] = `callback is not a function`; + +module.exports[".toBeCloseTo throws: Matcher error promise resolves isNot true expected"] = `callback is not a function`; + +module.exports[".toMatch() {pass: true} expect(foo).toMatch(foo)"] = `expect(received).not.toMatch(expected) + +Expected substring: not "foo" +Received string: "foo"`; + +module.exports[".toMatch() {pass: true} expect(Foo bar).toMatch(/^foo/i)"] = `expect(received).not.toMatch(expected) + +Expected pattern: not /^foo/i +Received string: "Foo bar"`; + +module.exports[".toMatch() throws: [bar, foo]"] = `expect(received).toMatch(expected) + +Expected substring: "foo" +Received string: "bar"`; + +module.exports[".toMatch() throws: [bar, /foo/]"] = `expect(received).toMatch(expected) + +Expected pattern: /foo/ +Received string: "bar"`; + +module.exports[".toMatch() throws if non String actual value passed: [1, \"foo\"]"] = `expect(received).toMatch(expected) + +Matcher error: received value must be a string + +Received has type: number +Received has value: 1`; + +module.exports[".toMatch() throws if non String actual value passed: [{}, \"foo\"]"] = `expect(received).toMatch(expected) + +Matcher error: received value must be a string + +Received has type: object +Received has value: {}`; + +module.exports[".toMatch() throws if non String actual value passed: [[], \"foo\"]"] = `expect(received).toMatch(expected) + +Matcher error: received value must be a string + +Received has type: array +Received has value: []`; + +module.exports[".toMatch() throws if non String actual value passed: [true, \"foo\"]"] = `expect(received).toMatch(expected) + +Matcher error: received value must be a string + +Received has type: boolean +Received has value: true`; + +module.exports[".toMatch() throws if non String actual value passed: [/foo/i, \"foo\"]"] = `expect(received).toMatch(expected) + +Matcher error: received value must be a string + +Received has type: regexp +Received has value: /foo/i`; + +module.exports[".toMatch() throws if non String actual value passed: [[Function anonymous], \"foo\"]"] = `expect(received).toMatch(expected) + +Matcher error: received value must be a string + +Received has type: function +Received has value: [Function anonymous]`; + +module.exports[".toMatch() throws if non String actual value passed: [undefined, \"foo\"]"] = `expect(received).toMatch(expected) + +Matcher error: received value must be a string + +Received has value: undefined`; + +module.exports[".toMatch() throws if non String/RegExp expected value passed: [\"foo\", 1]"] = `expect(received).toMatch(expected) + +Matcher error: expected value must be a string or regular expression + +Expected has type: number +Expected has value: 1`; + +module.exports[".toMatch() throws if non String/RegExp expected value passed: [\"foo\", {}]"] = `expect(received).toMatch(expected) + +Matcher error: expected value must be a string or regular expression + +Expected has type: object +Expected has value: {}`; + +module.exports[".toMatch() throws if non String/RegExp expected value passed: [\"foo\", []]"] = `expect(received).toMatch(expected) + +Matcher error: expected value must be a string or regular expression + +Expected has type: array +Expected has value: []`; + +module.exports[".toMatch() throws if non String/RegExp expected value passed: [\"foo\", true]"] = `expect(received).toMatch(expected) + +Matcher error: expected value must be a string or regular expression + +Expected has type: boolean +Expected has value: true`; + +module.exports[".toMatch() throws if non String/RegExp expected value passed: [\"foo\", [Function anonymous]]"] = `expect(received).toMatch(expected) + +Matcher error: expected value must be a string or regular expression + +Expected has type: function +Expected has value: [Function anonymous]`; + +module.exports[".toMatch() throws if non String/RegExp expected value passed: [\"foo\", undefined]"] = `expect(received).toMatch(expected) + +Matcher error: expected value must be a string or regular expression + +Expected has value: undefined`; + +module.exports[".toHaveLength {pass: true} expect([1, 2]).toHaveLength(2)"] = `expect(received).not.toHaveLength(expected) + +Expected length: not 2 +Received array: [1, 2]`; + +module.exports[".toHaveLength {pass: true} expect([]).toHaveLength(0)"] = `expect(received).not.toHaveLength(expected) + +Expected length: not 0 +Received array: []`; + +module.exports[".toHaveLength {pass: true} expect([\"a\", \"b\"]).toHaveLength(2)"] = `expect(received).not.toHaveLength(expected) + +Expected length: not 2 +Received array: ["a", "b"]`; + +module.exports[".toHaveLength {pass: true} expect(\"abc\").toHaveLength(3)"] = `expect(received).not.toHaveLength(expected) + +Expected length: not 3 +Received string: "abc"`; + +module.exports[".toHaveLength {pass: true} expect(\"\").toHaveLength(0)"] = `expect(received).not.toHaveLength(expected) + +Expected length: not 0 +Received string: ""`; + +module.exports[".toHaveLength {pass: true} expect([Function anonymous]).toHaveLength(0)"] = `expect(received).not.toHaveLength(expected) + +Expected length: not 0 +Received function: [Function anonymous]`; + +module.exports[".toHaveLength {pass: false} expect([1, 2]).toHaveLength(3)"] = `expect(received).toHaveLength(expected) + +Expected length: 3 +Received length: 2 +Received array: [1, 2]`; + +module.exports[".toHaveLength {pass: false} expect([]).toHaveLength(1)"] = `expect(received).toHaveLength(expected) + +Expected length: 1 +Received length: 0 +Received array: []`; + +module.exports[".toHaveLength {pass: false} expect([\"a\", \"b\"]).toHaveLength(99)"] = `expect(received).toHaveLength(expected) + +Expected length: 99 +Received length: 2 +Received array: ["a", "b"]`; + +module.exports[".toHaveLength {pass: false} expect(\"abc\").toHaveLength(66)"] = `expect(received).toHaveLength(expected) + +Expected length: 66 +Received length: 3 +Received string: "abc"`; + +module.exports[".toHaveLength {pass: false} expect(\"\").toHaveLength(1)"] = `expect(received).toHaveLength(expected) + +Expected length: 1 +Received length: 0 +Received string: ""`; + +module.exports[".toHaveLength error cases"] = `expect(received).toHaveLength(expected) + +Matcher error: received value must have a length property whose value must be a number + +Received has type: object +Received has value: {"a": 9}`; + +module.exports[".toHaveLength error cases #1"] = `expect(received).toHaveLength(expected) + +Matcher error: received value must have a length property whose value must be a number + +Received has type: number +Received has value: 0`; + +module.exports[".toHaveLength error cases #2"] = `expect(received).not.toHaveLength(expected) + +Matcher error: received value must have a length property whose value must be a number + +Received has value: undefined`; + +module.exports[".toHaveLength matcher error expected length not number"] = `expect(received).not.toHaveLength(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: string +Expected has value: "3"`; + +module.exports[".toHaveLength matcher error expected length number Infinity"] = `callback is not a function`; + +module.exports[".toHaveLength matcher error expected length number NaN"] = `callback is not a function`; + +module.exports[".toHaveLength matcher error expected length number float"] = `callback is not a function`; + +module.exports[".toHaveLength matcher error expected length number negative integer"] = `callback is not a function`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": {\"b\": {\"c\": {\"d\": 1}}}}).toHaveProperty('a.b.c.d', 1)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "a.b.c.d" + +Expected value: not 1`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": {\"b\": {\"c\": {\"d\": 1}}}}).toHaveProperty('a,b,c,d', 1)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: ["a", "b", "c", "d"] + +Expected value: not 1`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a.b.c.d\": 1}).toHaveProperty('a.b.c.d', 1)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: ["a.b.c.d"] + +Expected value: not 1`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": {\"b\": [1, 2, 3]}}).toHaveProperty('a,b,1', 2)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: ["a", "b", 1] + +Expected value: not 2`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": {\"b\": [1, 2, 3]}}).toHaveProperty('a,b,1', Any)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: ["a", "b", 1] + +Expected value: not Any +Received value: 2`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": 0}).toHaveProperty('a', 0)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "a" + +Expected value: not 0`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": {\"b\": undefined}}).toHaveProperty('a.b', undefined)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "a.b" + +Expected value: not undefined`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": {\"b\": {\"c\": 5}}}).toHaveProperty('a.b', {\"c\": 5})"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "a.b" + +Expected value: not {"c": 5}`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": {\"b\": [{\"c\": [{\"d\": 1}]}]}}).toHaveProperty('a.b[0].c[0].d', 1)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "a.b[0].c[0].d" + +Expected value: not 1`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": {\"b\": [{\"c\": {\"d\": [{\"e\": 1}, {\"f\": 2}]}}]}}).toHaveProperty('a.b[0].c.d[1].f', 2)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "a.b[0].c.d[1].f" + +Expected value: not 2`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": {\"b\": [[{\"c\": [{\"d\": 1}]}]]}}).toHaveProperty('a.b[0][0].c[0].d', 1)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "a.b[0][0].c[0].d" + +Expected value: not 1`; + +module.exports[".toHaveProperty() {pass: true} expect({\"property\": 1}).toHaveProperty('property', 1)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "property" + +Expected value: not 1`; + +module.exports[".toHaveProperty() {pass: true} expect({\"val\": undefined}).toHaveProperty('a', undefined)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "a" + +Expected value: not undefined`; + +module.exports[".toHaveProperty() {pass: true} expect({\"val\": undefined}).toHaveProperty('b', \"b\")"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "b" + +Expected value: not "b"`; + +module.exports[".toHaveProperty() {pass: true} expect({\"val\": undefined}).toHaveProperty('setter', undefined)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "setter" + +Expected value: not undefined`; + +module.exports[".toHaveProperty() {pass: true} expect({\"val\": true}).toHaveProperty('a', undefined)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "a" + +Expected value: not undefined`; + +module.exports[".toHaveProperty() {pass: true} expect({\"val\": true}).toHaveProperty('c', \"c\")"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "c" + +Expected value: not "c"`; + +module.exports[".toHaveProperty() {pass: true} expect({\"val\": true}).toHaveProperty('val', true)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "val" + +Expected value: not true`; + +module.exports[".toHaveProperty() {pass: true} expect({\"nodeName\": \"DIV\"}).toHaveProperty('nodeType', 1)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "nodeType" + +Expected value: not 1`; + +module.exports[".toHaveProperty() {pass: true} expect(\"\").toHaveProperty('length', 0)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "length" + +Expected value: not 0`; + +module.exports[".toHaveProperty() {pass: true} expect([Function memoized]).toHaveProperty('memo', [])"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "memo" + +Expected value: not []`; + +module.exports[".toHaveProperty() {pass: true} expect({\"\": 1}).toHaveProperty('', 1)"] = `expect(received).not.toHaveProperty(path, value) + +Expected path: "" + +Expected value: not 1`; + +module.exports[".toHaveProperty() {pass: false} expect({\"a\": {\"b\": {\"c\": {\"d\": 1}}}}).toHaveProperty('a.b.ttt.d', 1) (0)"] = `expect(received).toHaveProperty(path, value) + +Expected path: "a.b.ttt.d" +Received path: "a.b" + +Expected value: 1 +Received value: {"c": {"d": 1}}`; + +module.exports[".toHaveProperty() {pass: false} expect({\"a\": {\"b\": {\"c\": {\"d\": 1}}}}).toHaveProperty('a.b.c.d', 2) (1)"] = `expect(received).toHaveProperty(path, value) + +Expected path: "a.b.c.d" + +Expected value: 2 +Received value: 1`; + +module.exports[".toHaveProperty() {pass: false} expect({\"a.b.c.d\": 1}).toHaveProperty('a.b.c.d', 2) (2)"] = `expect(received).toHaveProperty(path, value) + +Expected path: "a.b.c.d" +Received path: [] + +Expected value: 2 +Received value: {"a.b.c.d": 1}`; + +module.exports[".toHaveProperty() {pass: false} expect({\"a.b.c.d\": 1}).toHaveProperty('a.b.c.d', 2) (3)"] = `expect(received).toHaveProperty(path, value) + +Expected path: ["a.b.c.d"] + +Expected value: 2 +Received value: 1`; + +module.exports[".toHaveProperty() {pass: false} expect({\"children\": [\"\\\"That cartoon\\\"\"], \"props\": null, \"type\": \"p\"}).toHaveProperty('children,0', \"\\\"That cat cartoon\\\"\") (4)"] = `expect(received).toHaveProperty(path, value) + +Expected path: ["children", 0] + +Expected value: "\\"That cat cartoon\\"" +Received value: "\\"That cartoon\\""`; + +module.exports[".toHaveProperty() {pass: false} expect({\"children\": [\"Roses are red.\nViolets are blue.\nTesting with Jest is good for you.\"], \"props\": null, \"type\": \"pre\"}).toHaveProperty('children,0', \"Roses are red, violets are blue.\nTesting with Jest\nIs good for you.\") (5)"] = `expect(received).toHaveProperty(path, value) + +Expected path: ["children", 0] + +- Expected value - 3 ++ Received value + 3 + +- Roses are red, violets are blue. ++ Roses are red. ++ Violets are blue. +- Testing with Jest +- Is good for you. ++ Testing with Jest is good for you.`; + +module.exports[".toHaveProperty() {pass: false} expect({\"a\": {\"b\": {\"c\": {\"d\": 1}}}}).toHaveProperty('a,b,c,d', 2) (6)"] = `expect(received).toHaveProperty(path, value) + +Expected path: ["a", "b", "c", "d"] + +Expected value: 2 +Received value: 1`; + +module.exports[".toHaveProperty() {pass: false} expect({\"a\": {\"b\": {\"c\": {}}}}).toHaveProperty('a.b.c.d', 1) (7)"] = `expect(received).toHaveProperty(path, value) + +Expected path: "a.b.c.d" +Received path: "a.b.c" + +Expected value: 1 +Received value: {}`; + +module.exports[".toHaveProperty() {pass: false} expect({\"a\": 1}).toHaveProperty('a.b.c.d', 5) (8)"] = `expect(received).toHaveProperty(path, value) + +Expected path: "a.b.c.d" +Received path: "a" + +Expected value: 5 +Received value: 1`; + +module.exports[".toHaveProperty() {pass: false} expect({}).toHaveProperty('a', \"test\") (9)"] = `expect(received).toHaveProperty(path, value) + +Expected path: "a" +Received path: [] + +Expected value: "test" +Received value: {}`; + +module.exports[".toHaveProperty() {pass: false} expect({\"a\": {\"b\": 3}}).toHaveProperty('a.b', undefined) (10)"] = `expect(received).toHaveProperty(path, value) + +Expected path: "a.b" + +Expected value: undefined +Received value: 3`; + +module.exports[".toHaveProperty() {pass: false} expect(1).toHaveProperty('a.b.c', \"test\") (11)"] = `expect(received).toHaveProperty(path, value) + +Expected path: "a.b.c" +Received path: [] + +Expected value: "test" +Received value: 1`; + +module.exports[".toHaveProperty() {pass: false} expect(\"abc\").toHaveProperty('a.b.c', {\"a\": 5}) (12)"] = `expect(received).toHaveProperty(path, value) + +Expected path: "a.b.c" +Received path: [] + +Expected value: {"a": 5} +Received value: "abc"`; + +module.exports[".toHaveProperty() {pass: false} expect({\"a\": {\"b\": {\"c\": 5}}}).toHaveProperty('a.b', {\"c\": 4}) (13)"] = `expect(received).toHaveProperty(path, value) + +Expected path: "a.b" + +- Expected value - 1 ++ Received value + 1 + + Object { +- "c": 4, ++ "c": 5, + }`; + +module.exports[".toHaveProperty() {pass: false} expect({\"val\": undefined}).toHaveProperty('a', \"a\") (14)"] = `expect(received).toHaveProperty(path, value) + +Expected path: "a" + +Expected value: "a" +Received value: undefined`; + +module.exports[".toHaveProperty() {pass: false} expect({\"val\": undefined}).toHaveProperty('b', undefined) (15)"] = `expect(received).toHaveProperty(path, value) + +Expected path: "b" + +Expected value: undefined +Received value: "b"`; + +module.exports[".toHaveProperty() {pass: false} expect({\"a\": {}}).toHaveProperty('a.b', undefined) (16)"] = `expect(received).toHaveProperty(path, value) + +Expected path: "a.b" +Received path: "a" + +Expected value: undefined +Received value: {}`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": {\"b\": {\"c\": {\"d\": 1}}}}).toHaveProperty('a.b.c.d')"] = `expect(received).not.toHaveProperty(path) + +Expected path: not "a.b.c.d" + +Received value: 1`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": {\"b\": {\"c\": {\"d\": 1}}}}).toHaveProperty('a,b,c,d')"] = `expect(received).not.toHaveProperty(path) + +Expected path: not ["a", "b", "c", "d"] + +Received value: 1`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a.b.c.d\": 1}).toHaveProperty('a.b.c.d')"] = `expect(received).not.toHaveProperty(path) + +Expected path: not ["a.b.c.d"] + +Received value: 1`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": {\"b\": [1, 2, 3]}}).toHaveProperty('a,b,1')"] = `expect(received).not.toHaveProperty(path) + +Expected path: not ["a", "b", 1] + +Received value: 2`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": 0}).toHaveProperty('a')"] = `expect(received).not.toHaveProperty(path) + +Expected path: not "a" + +Received value: 0`; + +module.exports[".toHaveProperty() {pass: true} expect({\"a\": {\"b\": undefined}}).toHaveProperty('a.b')"] = `expect(received).not.toHaveProperty(path) + +Expected path: not "a.b" + +Received value: undefined`; + +module.exports[".toHaveProperty() {pass: false} expect({\"a\": {\"b\": {\"c\": {}}}}).toHaveProperty('a.b.c.d')"] = `expect(received).toHaveProperty(path) + +Expected path: "a.b.c.d" +Received path: "a.b.c" + +Received value: {}`; + +module.exports[".toHaveProperty() {pass: false} expect({\"a\": {\"b\": {\"c\": {}}}}).toHaveProperty('.a.b.c')"] = `expect(received).toHaveProperty(path) + +Expected path: ".a.b.c" +Received path: [] + +Received value: {"a": {"b": {"c": {}}}}`; + +module.exports[".toHaveProperty() {pass: false} expect({\"a\": 1}).toHaveProperty('a.b.c.d')"] = `expect(received).toHaveProperty(path) + +Expected path: "a.b.c.d" +Received path: "a" + +Received value: 1`; + +module.exports[".toHaveProperty() {pass: false} expect({}).toHaveProperty('a')"] = `expect(received).toHaveProperty(path) + +Expected path: "a" +Received path: [] + +Received value: {}`; + +module.exports[".toHaveProperty() {pass: false} expect(1).toHaveProperty('a.b.c')"] = `expect(received).toHaveProperty(path) + +Expected path: "a.b.c" +Received path: [] + +Received value: 1`; + +module.exports[".toHaveProperty() {pass: false} expect(\"abc\").toHaveProperty('a.b.c')"] = `expect(received).toHaveProperty(path) + +Expected path: "a.b.c" +Received path: [] + +Received value: "abc"`; + +module.exports[".toHaveProperty() {pass: false} expect(false).toHaveProperty('key')"] = `expect(received).toHaveProperty(path) + +Expected path: "key" +Received path: [] + +Received value: false`; + +module.exports[".toHaveProperty() {pass: false} expect(0).toHaveProperty('key')"] = `expect(received).toHaveProperty(path) + +Expected path: "key" +Received path: [] + +Received value: 0`; + +module.exports[".toHaveProperty() {pass: false} expect(\"\").toHaveProperty('key')"] = `expect(received).toHaveProperty(path) + +Expected path: "key" +Received path: [] + +Received value: ""`; + +module.exports[".toHaveProperty() {pass: false} expect(Symbol()).toHaveProperty('key')"] = `expect(received).toHaveProperty(path) + +Expected path: "key" +Received path: [] + +Received value: Symbol()`; + +module.exports[".toHaveProperty() {pass: false} expect({\"key\": 1}).toHaveProperty('not')"] = `expect(received).toHaveProperty(path) + +Expected path: "not" +Received path: [] + +Received value: {"key": 1}`; + +module.exports[".toHaveProperty() {error} expect(null).toHaveProperty('a.b')"] = `expect(received).toHaveProperty(path) + +Matcher error: received value must not be null nor undefined + +Received has value: null`; + +module.exports[".toHaveProperty() {error} expect(undefined).toHaveProperty('a')"] = `expect(received).toHaveProperty(path) + +Matcher error: received value must not be null nor undefined + +Received has value: undefined`; + +module.exports[".toHaveProperty() {error} expect({\"a\": {\"b\": {}}}).toHaveProperty('undefined')"] = `expect(received).toHaveProperty(path) + +Matcher error: expected path must be a string or array + +Expected has value: undefined`; + +module.exports[".toHaveProperty() {error} expect({\"a\": {\"b\": {}}}).toHaveProperty('null')"] = `expect(received).toHaveProperty(path) + +Matcher error: expected path must be a string or array + +Expected has value: null`; + +module.exports[".toHaveProperty() {error} expect({\"a\": {\"b\": {}}}).toHaveProperty('1')"] = `expect(received).toHaveProperty(path) + +Matcher error: expected path must be a string or array + +Expected has type: number +Expected has value: 1`; + +module.exports[".toHaveProperty() {error} expect({}).toHaveProperty('')"] = `expect(received).toHaveProperty(path) + +Matcher error: expected path must not be an empty array + +Expected has type: array +Expected has value: []`; + +module.exports["toMatchObject() circular references simple circular references {pass: true} expect({\"a\": \"hello\", \"ref\": [Circular]}).toMatchObject({})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {} +Received: {"a": "hello", "ref": [Circular]}`; + +module.exports["toMatchObject() circular references simple circular references {pass: true} expect({\"a\": \"hello\", \"ref\": [Circular]}).toMatchObject({\"a\": \"hello\", \"ref\": [Circular]})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": "hello", "ref": [Circular]}`; + +module.exports["toMatchObject() circular references simple circular references {pass: false} expect({}).toMatchObject({\"a\": \"hello\", \"ref\": [Circular]})"] = `expect(received).toMatchObject(expected) + +- Expected - 4 ++ Received + 1 + +- Object { +- "a": "hello", +- "ref": [Circular], +- } ++ Object {}`; + +module.exports["toMatchObject() circular references simple circular references {pass: false} expect({\"a\": \"hello\", \"ref\": [Circular]}).toMatchObject({\"a\": \"world\", \"ref\": [Circular]})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Object { +- "a": "world", ++ "a": "hello", + "ref": [Circular], + }`; + +module.exports["toMatchObject() circular references simple circular references {pass: false} expect({\"ref\": \"not a ref\"}).toMatchObject({\"a\": \"hello\", \"ref\": [Circular]})"] = `expect(received).toMatchObject(expected) + +- Expected - 2 ++ Received + 1 + + Object { +- "a": "hello", +- "ref": [Circular], ++ "ref": "not a ref", + }`; + +module.exports["toMatchObject() circular references transitive circular references {pass: true} expect({\"a\": \"hello\", \"nestedObj\": {\"parentObj\": [Circular]}}).toMatchObject({})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {} +Received: {"a": "hello", "nestedObj": {"parentObj": [Circular]}}`; + +module.exports["toMatchObject() circular references transitive circular references {pass: true} expect({\"a\": \"hello\", \"nestedObj\": {\"parentObj\": [Circular]}}).toMatchObject({\"a\": \"hello\", \"nestedObj\": {\"parentObj\": [Circular]}})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": "hello", "nestedObj": {"parentObj": [Circular]}}`; + +module.exports["toMatchObject() circular references transitive circular references {pass: false} expect({}).toMatchObject({\"a\": \"hello\", \"nestedObj\": {\"parentObj\": [Circular]}})"] = `expect(received).toMatchObject(expected) + +- Expected - 6 ++ Received + 1 + +- Object { +- "a": "hello", +- "nestedObj": Object { +- "parentObj": [Circular], +- }, +- } ++ Object {}`; + +module.exports["toMatchObject() circular references transitive circular references {pass: false} expect({\"a\": \"world\", \"nestedObj\": {\"parentObj\": [Circular]}}).toMatchObject({\"a\": \"hello\", \"nestedObj\": {\"parentObj\": [Circular]}})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Object { +- "a": "hello", ++ "a": "world", + "nestedObj": Object { + "parentObj": [Circular], + }, + }`; + +module.exports["toMatchObject() circular references transitive circular references {pass: false} expect({\"nestedObj\": {\"parentObj\": \"not the parent ref\"}}).toMatchObject({\"a\": \"hello\", \"nestedObj\": {\"parentObj\": [Circular]}})"] = `expect(received).toMatchObject(expected) + +- Expected - 2 ++ Received + 1 + + Object { +- "a": "hello", + "nestedObj": Object { +- "parentObj": [Circular], ++ "parentObj": "not the parent ref", + }, + }`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": \"b\", \"c\": \"d\"}).toMatchObject({\"a\": \"b\"})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": "b"} +Received: {"a": "b", "c": "d"}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": \"b\", \"c\": \"d\"}).toMatchObject({\"a\": \"b\", \"c\": \"d\"})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": "b", "c": "d"}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": \"b\", \"t\": {\"x\": {\"r\": \"r\"}, \"z\": \"z\"}}).toMatchObject({\"a\": \"b\", \"t\": {\"z\": \"z\"}})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": "b", "t": {"z": "z"}} +Received: {"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": \"b\", \"t\": {\"x\": {\"r\": \"r\"}, \"z\": \"z\"}}).toMatchObject({\"t\": {\"x\": {\"r\": \"r\"}}})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"t": {"x": {"r": "r"}}} +Received: {"a": "b", "t": {"x": {"r": "r"}, "z": "z"}}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": [3, 4, 5], \"b\": \"b\"}).toMatchObject({\"a\": [3, 4, 5]})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": [3, 4, 5]} +Received: {"a": [3, 4, 5], "b": "b"}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": [3, 4, 5, \"v\"], \"b\": \"b\"}).toMatchObject({\"a\": [3, 4, 5, \"v\"]})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": [3, 4, 5, "v"]} +Received: {"a": [3, 4, 5, "v"], "b": "b"}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": 1, \"c\": 2}).toMatchObject({\"a\": Any})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": Any} +Received: {"a": 1, "c": 2}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": {\"x\": \"x\", \"y\": \"y\"}}).toMatchObject({\"a\": {\"x\": Any}})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": {"x": Any}} +Received: {"a": {"x": "x", "y": "y"}}`; + +module.exports["toMatchObject() {pass: true} expect(Set {1, 2}).toMatchObject(Set {1, 2})"] = `expect(received).not.toMatchObject(expected) + +Expected: not Set {1, 2}`; + +module.exports["toMatchObject() {pass: true} expect(Set {1, 2}).toMatchObject(Set {2, 1})"] = `expect(received).not.toMatchObject(expected) + +Expected: not Set {2, 1} +Received: Set {1, 2}`; + +module.exports["toMatchObject() {pass: true} expect(2015-11-30T00:00:00.000Z).toMatchObject(2015-11-30T00:00:00.000Z)"] = `expect(received).not.toMatchObject(expected) + +Expected: not 2015-11-30T00:00:00.000Z`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": 2015-11-30T00:00:00.000Z, \"b\": \"b\"}).toMatchObject({\"a\": 2015-11-30T00:00:00.000Z})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": 2015-11-30T00:00:00.000Z} +Received: {"a": 2015-11-30T00:00:00.000Z, "b": "b"}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": null, \"b\": \"b\"}).toMatchObject({\"a\": null})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": null} +Received: {"a": null, "b": "b"}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": undefined, \"b\": \"b\"}).toMatchObject({\"a\": undefined})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": undefined} +Received: {"a": undefined, "b": "b"}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": [{\"a\": \"a\", \"b\": \"b\"}]}).toMatchObject({\"a\": [{\"a\": \"a\"}]})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": [{"a": "a"}]} +Received: {"a": [{"a": "a", "b": "b"}]}`; + +module.exports["toMatchObject() {pass: true} expect([1, 2]).toMatchObject([1, 2])"] = `expect(received).not.toMatchObject(expected) + +Expected: not [1, 2]`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": undefined}).toMatchObject({\"a\": undefined})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": undefined}`; + +module.exports["toMatchObject() {pass: true} expect([]).toMatchObject([])"] = `expect(received).not.toMatchObject(expected) + +Expected: not []`; + +module.exports["toMatchObject() {pass: true} expect([Error: foo]).toMatchObject([Error: foo])"] = `expect(received).not.toMatchObject(expected) + +Expected: not [Error: foo]`; + +module.exports["toMatchObject() {pass: true} expect([Error: bar]).toMatchObject({\"message\": \"bar\"})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"message": "bar"} +Received: [Error: bar]`; + +module.exports["toMatchObject() {pass: true} expect({}).toMatchObject({\"a\": undefined, \"b\": \"b\"})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": undefined, "b": "b"} +Received: {}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": \"b\"}).toMatchObject({\"a\": \"b\"})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": "b"}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": \"b\", \"c\": \"d\", Symbol(jest): \"jest\"}).toMatchObject({\"a\": \"b\", Symbol(jest): \"jest\"})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": "b", Symbol(jest): "jest"} +Received: {"a": "b", "c": "d", Symbol(jest): "jest"}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": \"b\", \"c\": \"d\", Symbol(jest): \"jest\"}).toMatchObject({\"a\": \"b\", \"c\": \"d\", Symbol(jest): \"jest\"})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": "b", "c": "d", Symbol(jest): "jest"}`; + +module.exports["toMatchObject() {pass: true} expect({}).toMatchObject({\"a\": undefined, \"b\": \"b\", \"c\": \"c\"})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"a": undefined, "b": "b", "c": "c"} +Received: {}`; + +module.exports["toMatchObject() {pass: true} expect({}).toMatchObject({\"d\": 4})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"d": 4} +Received: {}`; + +module.exports["toMatchObject() {pass: true} expect({\"a\": \"b\", \"toString\": [Function toString]}).toMatchObject({\"toString\": Any})"] = `expect(received).not.toMatchObject(expected) + +Expected: not {"toString": Any} +Received: {"a": "b", "toString": [Function toString]}`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": \"b\", \"c\": \"d\"}).toMatchObject({\"e\": \"b\"})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 2 + + Object { +- "e": "b", ++ "a": "b", ++ "c": "d", + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": \"b\", \"c\": \"d\"}).toMatchObject({\"a\": \"b!\", \"c\": \"d\"})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Object { +- "a": "b!", ++ "a": "b", + "c": "d", + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": \"a\", \"c\": \"d\"}).toMatchObject({\"a\": Any})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Object { +- "a": Any, ++ "a": "a", + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": \"b\", \"t\": {\"x\": {\"r\": \"r\"}, \"z\": \"z\"}}).toMatchObject({\"a\": \"b\", \"t\": {\"z\": [3]}})"] = `expect(received).toMatchObject(expected) + +- Expected - 3 ++ Received + 1 + + Object { + "a": "b", + "t": Object { +- "z": Array [ +- 3, +- ], ++ "z": "z", + }, + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": \"b\", \"t\": {\"x\": {\"r\": \"r\"}, \"z\": \"z\"}}).toMatchObject({\"t\": {\"l\": {\"r\": \"r\"}}})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 2 + + Object { + "t": Object { +- "l": Object { ++ "x": Object { + "r": "r", + }, ++ "z": "z", + }, + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": [3, 4, 5], \"b\": \"b\"}).toMatchObject({\"a\": [3, 4, 5, 6]})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 0 + + Object { + "a": Array [ + 3, + 4, + 5, +- 6, + ], + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": [3, 4, 5], \"b\": \"b\"}).toMatchObject({\"a\": [3, 4]})"] = `expect(received).toMatchObject(expected) + +- Expected - 0 ++ Received + 1 + + Object { + "a": Array [ + 3, + 4, ++ 5, + ], + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": [3, 4, \"v\"], \"b\": \"b\"}).toMatchObject({\"a\": [\"v\"]})"] = `expect(received).toMatchObject(expected) + +- Expected - 0 ++ Received + 2 + + Object { + "a": Array [ ++ 3, ++ 4, + "v", + ], + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": [3, 4, 5], \"b\": \"b\"}).toMatchObject({\"a\": {\"b\": 4}})"] = `expect(received).toMatchObject(expected) + +- Expected - 3 ++ Received + 5 + + Object { +- "a": Object { +- "b": 4, +- }, ++ "a": Array [ ++ 3, ++ 4, ++ 5, ++ ], + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": [3, 4, 5], \"b\": \"b\"}).toMatchObject({\"a\": {\"b\": Any}})"] = `expect(received).toMatchObject(expected) + +- Expected - 3 ++ Received + 5 + + Object { +- "a": Object { +- "b": Any, +- }, ++ "a": Array [ ++ 3, ++ 4, ++ 5, ++ ], + }`; + +module.exports["toMatchObject() {pass: false} expect([1, 2]).toMatchObject([1, 3])"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Array [ + 1, +- 3, ++ 2, + ]`; + +module.exports["toMatchObject() {pass: false} expect([0]).toMatchObject([-0])"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Array [ +- -0, ++ 0, + ]`; + +module.exports["toMatchObject() {pass: false} expect(Set {1, 2}).toMatchObject(Set {2})"] = `expect(received).toMatchObject(expected) + +- Expected - 0 ++ Received + 1 + + Set { ++ 1, + 2, + }`; + +module.exports["toMatchObject() {pass: false} expect(2015-11-30T00:00:00.000Z).toMatchObject(2015-10-10T00:00:00.000Z)"] = `expect(received).toMatchObject(expected) + +Expected: 2015-10-10T00:00:00.000Z +Received: 2015-11-30T00:00:00.000Z`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": 2015-11-30T00:00:00.000Z, \"b\": \"b\"}).toMatchObject({\"a\": 2015-10-10T00:00:00.000Z})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Object { +- "a": 2015-10-10T00:00:00.000Z, ++ "a": 2015-11-30T00:00:00.000Z, + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": null, \"b\": \"b\"}).toMatchObject({\"a\": \"4\"})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Object { +- "a": "4", ++ "a": null, + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": null, \"b\": \"b\"}).toMatchObject({\"a\": undefined})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Object { +- "a": undefined, ++ "a": null, + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": undefined}).toMatchObject({\"a\": null})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Object { +- "a": null, ++ "a": undefined, + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": [{\"a\": \"a\", \"b\": \"b\"}]}).toMatchObject({\"a\": [{\"a\": \"c\"}]})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Object { + "a": Array [ + Object { +- "a": "c", ++ "a": "a", + }, + ], + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": 1, \"b\": 1, \"c\": 1, \"d\": {\"e\": {\"f\": 555}}}).toMatchObject({\"d\": {\"e\": {\"f\": 222}}})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Object { + "d": Object { + "e": Object { +- "f": 222, ++ "f": 555, + }, + }, + }`; + +module.exports["toMatchObject() {pass: false} expect({}).toMatchObject({\"a\": undefined})"] = `expect(received).toMatchObject(expected) + +- Expected - 3 ++ Received + 1 + +- Object { +- "a": undefined, +- } ++ Object {}`; + +module.exports["toMatchObject() {pass: false} expect([1, 2, 3]).toMatchObject([2, 3, 1])"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Array [ ++ 1, + 2, + 3, +- 1, + ]`; + +module.exports["toMatchObject() {pass: false} expect([1, 2, 3]).toMatchObject([1, 2, 2])"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Array [ + 1, + 2, +- 2, ++ 3, + ]`; + +module.exports["toMatchObject() {pass: false} expect([Error: foo]).toMatchObject([Error: bar])"] = `expect(received).toMatchObject(expected) + +Expected: [Error: bar] +Received: [Error: foo]`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": \"b\"}).toMatchObject({\"c\": \"d\"})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Object { +- "c": "d", ++ "a": "b", + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": \"b\", \"c\": \"d\", Symbol(jest): \"jest\"}).toMatchObject({\"a\": \"c\", Symbol(jest): Any})"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 1 + + Object { +- "a": "c", ++ "a": "b", + Symbol(jest): Any, + }`; + +module.exports["toMatchObject() {pass: false} expect({\"a\": \"b\"}).toMatchObject({\"toString\": Any})"] = `expect(received).toMatchObject(expected) + +- Expected - 0 ++ Received + 1 + + Object { ++ "a": "b", + "toString": Any, + }`; + +module.exports["toMatchObject() throws expect(null).toMatchObject({})"] = `expect(received).toMatchObject(expected) + +Matcher error: received value must be a non-null object + +Received has value: null`; + +module.exports["toMatchObject() throws expect(4).toMatchObject({})"] = `expect(received).toMatchObject(expected) + +Matcher error: received value must be a non-null object + +Received has type: number +Received has value: 4`; + +module.exports["toMatchObject() throws expect(\"44\").toMatchObject({})"] = `expect(received).toMatchObject(expected) + +Matcher error: received value must be a non-null object + +Received has type: string +Received has value: "44"`; + +module.exports["toMatchObject() throws expect(true).toMatchObject({})"] = `expect(received).toMatchObject(expected) + +Matcher error: received value must be a non-null object + +Received has type: boolean +Received has value: true`; + +module.exports["toMatchObject() throws expect(undefined).toMatchObject({})"] = `expect(received).toMatchObject(expected) + +Matcher error: received value must be a non-null object + +Received has value: undefined`; + +module.exports["toMatchObject() throws expect({}).toMatchObject(null)"] = `expect(received).toMatchObject(expected) + +Matcher error: expected value must be a non-null object + +Expected has value: null`; + +module.exports["toMatchObject() throws expect({}).toMatchObject(4)"] = `expect(received).toMatchObject(expected) + +Matcher error: expected value must be a non-null object + +Expected has type: number +Expected has value: 4`; + +module.exports["toMatchObject() throws expect({}).toMatchObject(\"some string\")"] = `expect(received).toMatchObject(expected) + +Matcher error: expected value must be a non-null object + +Expected has type: string +Expected has value: "some string"`; + +module.exports["toMatchObject() throws expect({}).toMatchObject(true)"] = `expect(received).toMatchObject(expected) + +Matcher error: expected value must be a non-null object + +Expected has type: boolean +Expected has value: true`; + +module.exports["toMatchObject() throws expect({}).toMatchObject(undefined)"] = `expect(received).toMatchObject(expected) + +Matcher error: expected value must be a non-null object + +Expected has value: undefined`; + +module.exports["toMatchObject() does not match properties up in the prototype chain"] = `expect(received).toMatchObject(expected) + +- Expected - 1 ++ Received + 0 + + Object { + "other": "child", +- "ref": [Circular], + }`; + diff --git a/tests/expect/matchers.test.ts b/tests/expect/matchers.test.ts new file mode 100644 index 0000000000..8824039bab --- /dev/null +++ b/tests/expect/matchers.test.ts @@ -0,0 +1,2338 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { test, expect } from './fixtures'; +import { expect as expectUnderTest, matcherUtils } from '../../packages/playwright/bundles/expect/src/expectBundleImpl'; +import Immutable from 'immutable'; + +const { stringify } = matcherUtils; + +const expectUnderTestAsAny = expectUnderTest as any; + +expectUnderTest.extend({ + optionalFn(fn) { + const pass = fn === undefined || typeof fn === 'function'; + return { message: () => 'expect either a function or undefined', pass }; + }, +}); + +test('should throw if passed two arguments', () => { + expect(() => expectUnderTestAsAny('foo', 'bar')).toThrow( + new Error('Expect takes at most one argument.'), + ); +}); + +test.describe('.rejects', () => { + test('should reject', async () => { + await expectUnderTest(Promise.reject(4)).rejects.toBe(4); + await expectUnderTest(Promise.reject(4)).rejects.not.toBe(5); + await expectUnderTest(Promise.reject(4.2)).rejects.toBeCloseTo(4.2, 5); + await expectUnderTest(Promise.reject(3)).rejects.not.toBeCloseTo(4.2, 5); + await expectUnderTest(Promise.reject({ a: 1, b: 2 })).rejects.toMatchObject({ + a: 1, + }); + await expectUnderTest(Promise.reject({ a: 1, b: 2 })).rejects.not.toMatchObject({ + c: 1, + }); + await expectUnderTest( + Promise.reject(new Error('rejectMessage')), + ).rejects.toMatchObject({ message: 'rejectMessage' }); + await expectUnderTest(Promise.reject(new Error())).rejects.toThrow(); + }); + + test('should reject with toThrow', async () => { + async function fn() { + throw new Error('some error'); + } + await expectUnderTest(fn()).rejects.toThrow('some error'); + }); + + test('should reject async function to toThrow', async () => { + await expectUnderTest(async () => { + throw new Error('Test'); + }).rejects.toThrow('Test'); + }); + + ['a', [1], () => { }, { a: 1 }].forEach(value => { + test(`fails non-promise value ${stringify(value)} synchronously`, () => { + let error; + try { + // eslint-disable-next-line @typescript-eslint/no-floating-promises + expectUnderTest(value).rejects.toBe(111); + } catch (e) { + error = e; + } + expect(error).toBeDefined(); + }); + + test(`fails non-promise value ${stringify(value)}`, async () => { + let error; + try { + await expectUnderTest(value).rejects.toBeDefined(); + } catch (e) { + error = e; + } + expect(error).toBeDefined(); + expect(error.message).toMatchSnapshot(); + }); + }); + + [4, null, true, undefined].forEach(value => { + test(`fails non-promise value ${stringify(value)} synchronously`, () => { + let error; + try { + // eslint-disable-next-line @typescript-eslint/no-floating-promises + expectUnderTest(value).rejects.not.toBe(111); + } catch (e) { + error = e; + } + expect(error).toBeDefined(); + }); + + test(`fails non-promise value ${stringify(value)}`, async () => { + let error; + try { + await expectUnderTest(value).rejects.not.toBeDefined(); + } catch (e) { + error = e; + } + expect(error).toBeDefined(); + expect(error.message).toMatchSnapshot(); + }); + }); + + test('fails for promise that resolves', async () => { + let error; + try { + await expectUnderTest(Promise.resolve(4)).rejects.toBe(4); + } catch (e) { + error = e; + } + expect(error).toBeDefined(); + expect(error.message).toMatchSnapshot(); + }); +}); + +test.describe('.resolves', () => { + test('should resolve', async () => { + await expectUnderTest(Promise.resolve(4)).resolves.toBe(4); + await expectUnderTest(Promise.resolve(4)).resolves.not.toBe(5); + await expectUnderTest(Promise.resolve(4.2)).resolves.toBeCloseTo(4.2, 5); + await expectUnderTest(Promise.resolve(3)).resolves.not.toBeCloseTo(4.2, 5); + await expectUnderTest(Promise.resolve({ a: 1, b: 2 })).resolves.toMatchObject({ + a: 1, + }); + await expectUnderTest(Promise.resolve({ a: 1, b: 2 })).resolves.not.toMatchObject({ + c: 1, + }); + await expectUnderTest( + Promise.resolve(() => { + throw new Error(); + }), + ).resolves.toThrow(); + }); + + ['a', [1], () => { }, { a: 1 }].forEach(value => { + test(`fails non-promise value ${stringify(value)} synchronously`, () => { + let error; + try { + // eslint-disable-next-line @typescript-eslint/no-floating-promises + expectUnderTest(value).resolves.toBeDefined(); + } catch (e) { + error = e; + } + expect(error).toBeDefined(); + expect(error.message).toMatchSnapshot(); + }); + + test(`fails non-promise value ${stringify(value)}`, async () => { + let error; + try { + await expectUnderTest(value).resolves.toBeDefined(); + } catch (e) { + error = e; + } + expect(error).toBeDefined(); + expect(error.message).toMatchSnapshot(); + }); + }); + + [4, null, true, undefined].forEach(value => { + test(`fails non-promise value ${stringify(value)} synchronously`, () => { + let error; + try { + // eslint-disable-next-line @typescript-eslint/no-floating-promises + expectUnderTest(value).resolves.not.toBeDefined(); + } catch (e) { + error = e; + } + expect(error).toBeDefined(); + expect(error.message).toMatchSnapshot(); + }); + + test(`fails non-promise value ${stringify(value)}`, async () => { + let error; + try { + await expectUnderTest(value).resolves.not.toBeDefined(); + } catch (e) { + error = e; + } + expect(error).toBeDefined(); + expect(error.message).toMatchSnapshot(); + }); + }); + + test('fails for promise that rejects', async () => { + let error; + try { + await expectUnderTest(Promise.reject(4)).resolves.toBe(4); + } catch (e) { + error = e; + } + expect(error).toBeDefined(); + expect(error.message).toMatchSnapshot(); + }); +}); + +test.describe('.toBe()', () => { + test('does not throw', () => { + expectUnderTest('a').not.toBe('b'); + expectUnderTest('a').toBe('a'); + expectUnderTest(1).not.toBe(2); + expectUnderTest(1).toBe(1); + expectUnderTest(null).not.toBe(undefined); + expectUnderTest(null).toBe(null); + expectUnderTest(undefined).toBe(undefined); + expectUnderTest(NaN).toBe(NaN); + expectUnderTest(BigInt(1)).not.toBe(BigInt(2)); + expectUnderTest(BigInt(1)).not.toBe(1); + expectUnderTest(BigInt(1)).toBe(BigInt(1)); + }); + + [ + [1, 2], + [true, false], + [() => { }, () => { }], + [{}, {}], + [{ a: 1 }, { a: 1 }], + [{ a: 1 }, { a: 5 }], + [ + { a: () => { }, b: 2 }, + { a: expect.any(Function), b: 2 }, + ], + [{ a: undefined, b: 2 }, { b: 2 }], + [new Date('2020-02-20'), new Date('2020-02-20')], + [new Date('2020-02-21'), new Date('2020-02-20')], + [/received/, /expected/], + [Symbol('received'), Symbol('expected')], + [new Error('received'), new Error('expected')], + ['abc', 'cde'], + ['painless JavaScript testing', 'delightful JavaScript testing'], + ['', 'compare one-line string to empty string'], + ['with \ntrailing space', 'without trailing space'], + ['four\n4\nline\nstring', '3\nline\nstring'], + [[], []], + [null, undefined], + [-0, +0], + ].forEach(([a, b]: [a: any, b: any], index) => { + test(`fails for: ${stringify(a)} and ${stringify(b)} (${index})`, () => { + expect(() => expectUnderTest(a).toBe(b)).toThrowErrorMatchingSnapshot(); + }); + }); + + [ + [BigInt(1), BigInt(2)], + [{ a: BigInt(1) }, { a: BigInt(1) }], + ].forEach(([a, b]) => { + test(`fails for: ${stringify(a)} and ${stringify(b)}`, () => { + expect(() => expectUnderTest(a).toBe(b)).toThrow('toBe'); + }); + }); + + [false, 1, 'a', undefined, null, {}, []].forEach(v => { + test(`fails for '${stringify(v)}' with '.not'`, () => { + expect(() => expectUnderTest(v).not.toBe(v)).toThrowErrorMatchingSnapshot(); + }); + }); + + [BigInt(1), BigInt('1')].forEach((v, index) => { + test(`fails for '${stringify(v)}' with '.not' (${index})}`, () => { + expect(() => expectUnderTest(v).not.toBe(v)).toThrow('toBe'); + }); + }); + + test('does not crash on circular references', () => { + const obj: any = {}; + obj.circular = obj; + + expect(() => expectUnderTest(obj).toBe({})).toThrowErrorMatchingSnapshot(); + }); + + test('assertion error matcherResult property contains matcher name, expected and actual values', () => { + const actual = { a: 1 }; + const expected = { a: 2 }; + try { + expectUnderTest(actual).toBe(expected); + } catch (error) { + expect(error.matcherResult).toEqual( + expect.objectContaining({ + actual, + expected, + name: 'toBe', + }), + ); + } + }); +}); + +test.describe('.toStrictEqual()', () => { + class TestClassA { + constructor(public a, public b) { } + } + + class TestClassB { + constructor(public a, public b) { } + } + + const TestClassC = class Child extends TestClassA { + constructor(a, b) { + super(a, b); + } + }; + + const TestClassD = class Child extends TestClassB { + constructor(a, b) { + super(a, b); + } + }; + + test('does not ignore keys with undefined values', () => { + expect({ + a: undefined, + b: 2, + }).not.toStrictEqual({ b: 2 }); + }); + + test('does not ignore keys with undefined values inside an array', () => { + expect([{ a: undefined }]).not.toStrictEqual([{}]); + }); + + test('does not ignore keys with undefined values deep inside an object', () => { + expect([{ a: [{ a: undefined }] }]).not.toStrictEqual([{ a: [{}] }]); + }); + + test('does not consider holes as undefined in sparse arrays', () => { + + expect([, , , 1, , ,]).not.toStrictEqual([, , , 1, undefined, ,]); + }); + + test('passes when comparing same type', () => { + expect({ + test: new TestClassA(1, 2), + }).toStrictEqual({ test: new TestClassA(1, 2) }); + }); + + test('matches the expected snapshot when it fails', () => { + expect(() => + expectUnderTest({ + test: 2, + }).toStrictEqual({ test: new TestClassA(1, 2) }), + ).toThrowErrorMatchingSnapshot(); + + expect(() => + expectUnderTest({ + test: new TestClassA(1, 2), + }).not.toStrictEqual({ test: new TestClassA(1, 2) }), + ).toThrowErrorMatchingSnapshot(); + }); + + test('displays substring diff', () => { + const expected = + 'Another caveat is that Jest will not typecheck your tests.'; + const received = + 'Because TypeScript support in Babel is just transpilation, Jest will not type-check your tests as they run.'; + expect(() => + expectUnderTest(received).toStrictEqual(expected), + ).toThrowErrorMatchingSnapshot(); + }); + + test('displays substring diff for multiple lines', () => { + const expected = [ + ' 69 | ', + " 70 | test('assert.doesNotThrow', () => {", + ' > 71 | assert.doesNotThrow(() => {', + ' | ^', + " 72 | throw Error('err!');", + ' 73 | });', + ' 74 | });', + ' at Object.doesNotThrow (__tests__/assertionError.test.js:71:10)', + ].join('\n'); + const received = [ + ' 68 | ', + " 69 | test('assert.doesNotThrow', () => {", + ' > 70 | assert.doesNotThrow(() => {', + ' | ^', + " 71 | throw Error('err!');", + ' 72 | });', + ' 73 | });', + ' at Object.doesNotThrow (__tests__/assertionError.test.js:70:10)', + ].join('\n'); + expect(() => + expectUnderTest(received).toStrictEqual(expected), + ).toThrowErrorMatchingSnapshot(); + }); + + test('does not pass for different types', () => { + expect({ + test: new TestClassA(1, 2), + }).not.toStrictEqual({ test: new TestClassB(1, 2) }); + }); + + test('does not simply compare constructor names', () => { + const c = new TestClassC(1, 2); + const d = new TestClassD(1, 2); + expect(c.constructor.name).toEqual(d.constructor.name); + expect({ test: c }).not.toStrictEqual({ test: d }); + }); + + + test('passes for matching sparse arrays', () => { + expect([, 1]).toStrictEqual([, 1]); + }); + + test('does not pass when sparseness of arrays do not match', () => { + expect([, 1]).not.toStrictEqual([undefined, 1]); + expect([undefined, 1]).not.toStrictEqual([, 1]); + expect([, , , 1]).not.toStrictEqual([, 1]); + }); + + test('does not pass when equally sparse arrays have different values', () => { + expect([, 1]).not.toStrictEqual([, 2]); + }); + + test('does not pass when ArrayBuffers are not equal', () => { + expect(Uint8Array.from([1, 2]).buffer).not.toStrictEqual( + Uint8Array.from([0, 0]).buffer, + ); + expect(Uint8Array.from([2, 1]).buffer).not.toStrictEqual( + Uint8Array.from([2, 2]).buffer, + ); + expect(Uint8Array.from([]).buffer).not.toStrictEqual( + Uint8Array.from([1]).buffer, + ); + }); + + test('passes for matching buffers', () => { + expect(Uint8Array.from([1]).buffer).toStrictEqual( + Uint8Array.from([1]).buffer, + ); + expect(Uint8Array.from([]).buffer).toStrictEqual( + Uint8Array.from([]).buffer, + ); + expect(Uint8Array.from([9, 3]).buffer).toStrictEqual( + Uint8Array.from([9, 3]).buffer, + ); + }); + + test('fails for missing keys even if backed by an asymmetric matcher accepting them', () => { + // issue 12463 + expect({ a: 1 }).not.toStrictEqual({ a: 1, b: expectUnderTestAsAny.optionalFn() }); + expect({ a: 1, b: expectUnderTestAsAny.optionalFn() }).not.toStrictEqual({ a: 1 }); + expect([1]).not.toStrictEqual([1, expectUnderTestAsAny.optionalFn()]); + expect([1, expectUnderTestAsAny.optionalFn()]).not.toStrictEqual([1]); + }); + + test('passes if keys are present and asymmetric matcher accept them', () => { + // issue 12463 + // with a proper function + expect({ a: 1, b: () => { } }).toStrictEqual({ + a: 1, + b: expectUnderTestAsAny.optionalFn(), + }); + expect({ a: 1, b: expectUnderTestAsAny.optionalFn() }).toStrictEqual({ + a: 1, + b: () => { }, + }); + expect([1, () => { }]).toStrictEqual([1, expectUnderTestAsAny.optionalFn()]); + expect([1, expectUnderTestAsAny.optionalFn()]).toStrictEqual([1, () => { }]); + // with undefined + expect({ a: 1, b: undefined }).toStrictEqual({ + a: 1, + b: expectUnderTestAsAny.optionalFn(), + }); + expect({ a: 1, b: expectUnderTestAsAny.optionalFn() }).toStrictEqual({ + a: 1, + b: undefined, + }); + expect([1, undefined]).toStrictEqual([1, expectUnderTestAsAny.optionalFn()]); + expect([1, expectUnderTestAsAny.optionalFn()]).toStrictEqual([1, undefined]); + }); + +}); + +test.describe('.toEqual()', () => { + + [ + [true, false], + [1, 2], + [0, -0], + [0, Number.MIN_VALUE], // issues/7941 + [Number.MIN_VALUE, 0], + [0, new Number(0)], + [new Number(0), 0], + [new Number(0), new Number(1)], + ['abc', new String('abc')], + [new String('abc'), 'abc'], + // @ts-ignore + [/abc/gsy, /abc/g], + [{ a: 1 }, { a: 2 }], + [{ a: 5 }, { b: 6 }], + [Object.freeze({ foo: { bar: 1 } }), { foo: {} }], + [ + { + get getterAndSetter() { + return {}; + }, + set getterAndSetter(value) { + throw new Error('noo'); + }, + }, + { getterAndSetter: { foo: 'bar' } }, + ], + [ + Object.freeze({ + get frozenGetterAndSetter() { + return {}; + }, + set frozenGetterAndSetter(value) { + throw new Error('noo'); + }, + }), + { frozenGetterAndSetter: { foo: 'bar' } }, + ], + [ + { + get getter() { + return {}; + }, + }, + { getter: { foo: 'bar' } }, + ], + [ + Object.freeze({ + get frozenGetter() { + return {}; + }, + }), + { frozenGetter: { foo: 'bar' } }, + ], + [ + { + + set setter(value) { + throw new Error('noo'); + }, + }, + { setter: { foo: 'bar' } }, + ], + [ + Object.freeze({ + + set frozenSetter(value) { + throw new Error('noo'); + }, + }), + { frozenSetter: { foo: 'bar' } }, + ], + ['banana', 'apple'], + ['1\u{00A0}234,57\u{00A0}$', '1 234,57 $'], // issues/6881 + [ + 'type TypeName = T extends Function ? "function" : "object";', + 'type TypeName = T extends Function\n? "function"\n: "object";', + ], + [null, undefined], + [[1], [2]], + [ + [1, 2], + [2, 1], + ], + [Immutable.List([1]), Immutable.List([2])], + [Immutable.List([1, 2]), Immutable.List([2, 1])], + [new Map(), new Set()], + [new Set([1, 2]), new Set()], + [new Set([1, 2]), new Set([1, 2, 3])], + [new Set([[1], [2]]), new Set([[1], [2], [3]])], + [new Set([[1], [2]]), new Set([[1], [2], [2]])], + [ + new Set([new Set([1]), new Set([2])]), + new Set([new Set([1]), new Set([3])]), + ], + [Immutable.Set([1, 2]), Immutable.Set()], + [Immutable.Set([1, 2]), Immutable.Set([1, 2, 3])], + [Immutable.OrderedSet([1, 2]), Immutable.OrderedSet([2, 1])], + [ + new Map([ + [1, 'one'], + [2, 'two'], + ]), + new Map([[1, 'one']]), + ], + [new Map([['a', 0]]), new Map([['b', 0]])], + [new Map([['v', 1]]), new Map([['v', 2]])], + [new Map([[['v'], 1]]), new Map([[['v'], 2]])], + [ + new Map([[[1], new Map([[[1], 'one']])]]), + new Map([[[1], new Map([[[1], 'two']])]]), + ], + [Immutable.Map({ a: 0 }), Immutable.Map({ b: 0 })], + [Immutable.Map({ v: 1 }), Immutable.Map({ v: 2 })], + [ + Immutable.OrderedMap().set(1, 'one').set(2, 'two'), + Immutable.OrderedMap().set(2, 'two').set(1, 'one'), + ], + [ + Immutable.Map({ 1: Immutable.Map({ 2: { a: 99 } }) }), + Immutable.Map({ 1: Immutable.Map({ 2: { a: 11 } }) }), + ], + [new Uint8Array([97, 98, 99]), new Uint8Array([97, 98, 100])], + [{ a: 1, b: 2 }, expectUnderTest.objectContaining({ a: 2 })], + [false, expectUnderTest.objectContaining({ a: 2 })], + [[1, 3], expectUnderTest.arrayContaining([1, 2])], + [1, expectUnderTest.arrayContaining([1, 2])], + ['abd', expectUnderTest.stringContaining('bc')], + ['abd', expectUnderTest.stringMatching(/bc/i)], + [undefined, expectUnderTest.anything()], + [undefined, expectUnderTest.any(Function)], + [ + 'Eve', + { + asymmetricMatch: function asymmetricMatch(who) { + return who === 'Alice' || who === 'Bob'; + }, + }, + ], + [ + { + target: { + nodeType: 1, + value: 'a', + }, + }, + { + target: { + nodeType: 1, + value: 'b', + }, + }, + ], + [ + { + nodeName: 'div', + nodeType: 1, + }, + { + nodeName: 'p', + nodeType: 1, + }, + ], + [ + { + [Symbol.for('foo')]: 1, + [Symbol.for('bar')]: 2, + }, + { + [Symbol.for('foo')]: expectUnderTest.any(Number), + [Symbol.for('bar')]: 1, + }, + ], + [ + + [, , 1, ,], + + [, , 2, ,], + ], + [ + Object.assign([], { 4294967295: 1 }), + Object.assign([], { 4294967295: 2 }), // issue 11056 + ], + [ + + Object.assign([], { ['-0']: 1 }), + + Object.assign([], { ['0']: 1 }), // issue 11056: also check (-0, 0) + ], + [ + Object.assign([], { a: 1 }), + Object.assign([], { b: 1 }), // issue 11056: also check strings + ], + [ + Object.assign([], { [Symbol()]: 1 }), + Object.assign([], { [Symbol()]: 1 }), // issue 11056: also check symbols + ], + ].forEach(([a, b], index) => { + test(`{pass: false} expect(${stringify(a)}).toEqual(${stringify( + b, + )} (${index}))`, () => { + expect(() => expectUnderTest(a).toEqual(b)).toThrowErrorMatchingSnapshot(); + expectUnderTest(a).not.toEqual(b); + }); + }); + + [ + [BigInt(1), BigInt(2)], + [BigInt(1), 1], + ].forEach(([a, b]) => { + test(`{pass: false} expect(${stringify(a)}).toEqual(${stringify( + b, + )})`, () => { + expect(() => expectUnderTest(a).toEqual(b)).toThrow('toEqual'); + expectUnderTest(a).not.toEqual(b); + }); + }); + + [ + [true, true], + [1, 1], + [NaN, NaN], + [0, Number(0)], + [Number(0), 0], + [new Number(0), new Number(0)], + ['abc', 'abc'], + [String('abc'), 'abc'], + ['abc', String('abc')], + [[1], [1]], + [ + [1, 2], + [1, 2], + ], + [Immutable.List([1]), Immutable.List([1])], + [Immutable.List([1, 2]), Immutable.List([1, 2])], + [{}, {}], + [{ a: 99 }, { a: 99 }], + [new Set(), new Set()], + [new Set([1, 2]), new Set([1, 2])], + [new Set([1, 2]), new Set([2, 1])], + [new Set([[1], [2]]), new Set([[2], [1]])], + [ + new Set([new Set([[1]]), new Set([[2]])]), + new Set([new Set([[2]]), new Set([[1]])]), + ], + [new Set([[1], [2], [3], [3]]), new Set([[3], [3], [2], [1]])], + [new Set([{ a: 1 }, { b: 2 }]), new Set([{ b: 2 }, { a: 1 }])], + [Immutable.Set(), Immutable.Set()], + [Immutable.Set([1, 2]), Immutable.Set([1, 2])], + [Immutable.Set([1, 2]), Immutable.Set([2, 1])], + [Immutable.OrderedSet(), Immutable.OrderedSet()], + [Immutable.OrderedSet([1, 2]), Immutable.OrderedSet([1, 2])], + [new Map(), new Map()], + [ + new Map([ + [1, 'one'], + [2, 'two'], + ]), + new Map([ + [1, 'one'], + [2, 'two'], + ]), + ], + [ + new Map([ + [1, 'one'], + [2, 'two'], + ]), + new Map([ + [2, 'two'], + [1, 'one'], + ]), + ], + [ + new Map([ + [[1], 'one'], + [[2], 'two'], + [[3], 'three'], + [[3], 'four'], + ]), + new Map([ + [[3], 'three'], + [[3], 'four'], + [[2], 'two'], + [[1], 'one'], + ]), + ], + [ + new Map([ + [[1], new Map([[[1], 'one']])], + [[2], new Map([[[2], 'two']])], + ]), + new Map([ + [[2], new Map([[[2], 'two']])], + [[1], new Map([[[1], 'one']])], + ]), + ], + [ + new Map([ + [[1], 'one'], + [[2], 'two'], + ]), + new Map([ + [[2], 'two'], + [[1], 'one'], + ]), + ], + [ + new Map([ + [{ a: 1 }, 'one'], + [{ b: 2 }, 'two'], + ]), + new Map([ + [{ b: 2 }, 'two'], + [{ a: 1 }, 'one'], + ]), + ], + [ + new Map([ + [1, ['one']], + [2, ['two']], + ]), + new Map([ + [2, ['two']], + [1, ['one']], + ]), + ], + [Immutable.Map(), Immutable.Map()], + [ + Immutable.Map().set(1, 'one').set(2, 'two'), + Immutable.Map().set(1, 'one').set(2, 'two'), + ], + [ + Immutable.Map().set(1, 'one').set(2, 'two'), + Immutable.Map().set(2, 'two').set(1, 'one'), + ], + [ + Immutable.OrderedMap().set(1, 'one').set(2, 'two'), + Immutable.OrderedMap().set(1, 'one').set(2, 'two'), + ], + [ + Immutable.Map({ 1: Immutable.Map({ 2: { a: 99 } }) }), + Immutable.Map({ 1: Immutable.Map({ 2: { a: 99 } }) }), + ], + [new Uint8Array([97, 98, 99]), new Uint8Array([97, 98, 99])], + [{ a: 1, b: 2 }, expectUnderTest.objectContaining({ a: 1 })], + [[1, 2, 3], expectUnderTest.arrayContaining([2, 3])], + ['abcd', expectUnderTest.stringContaining('bc')], + ['abcd', expectUnderTest.stringMatching('bc')], + [true, expectUnderTest.anything()], + [() => { }, expectUnderTest.any(Function)], + [ + { + a: 1, + b: function b() { }, + c: true, + }, + { + a: 1, + b: expectUnderTest.any(Function), + c: expectUnderTest.anything(), + }, + ], + [ + 'Alice', + { + asymmetricMatch: function asymmetricMatch(who) { + return who === 'Alice' || who === 'Bob'; + }, + }, + ], + [ + { + nodeName: 'div', + nodeType: 1, + }, + { + nodeName: 'div', + nodeType: 1, + }, + ], + [ + { + [Symbol.for('foo')]: 1, + [Symbol.for('bar')]: 2, + }, + { + [Symbol.for('foo')]: expectUnderTest.any(Number), + [Symbol.for('bar')]: 2, + }, + ], + [ + + [, , 1, ,], + + [, , 1, ,], + ], + [ + + [, , 1, , ,], + + [, , 1, undefined, ,], // same length but hole replaced by undefined + ], + // issue 12463 - "matcher" vs "proper function" + [ + { a: 1, b: () => { } }, + { a: 1, b: expectUnderTestAsAny.optionalFn() }, + ], + [ + { a: 1, b: expectUnderTestAsAny.optionalFn() }, + { a: 1, b: () => { } }, + ], + [ + [1, () => { }], + [1, expectUnderTestAsAny.optionalFn()], + ], + [ + [1, expectUnderTestAsAny.optionalFn()], + [1, () => { }], + ], + // issue 12463 - "matcher" vs "undefined" + [ + { a: 1, b: undefined }, + { a: 1, b: expectUnderTestAsAny.optionalFn() }, + ], + [ + { a: 1, b: expectUnderTestAsAny.optionalFn() }, + { a: 1, b: undefined }, + ], + [ + [1, undefined], + [1, expectUnderTestAsAny.optionalFn()], + ], + [ + [1, expectUnderTestAsAny.optionalFn()], + [1, undefined], + ], + // issue 12463 - "matcher" vs "missing" + [{ a: 1 }, { a: 1, b: expectUnderTestAsAny.optionalFn() }], + [{ a: 1, b: expectUnderTestAsAny.optionalFn() }, { a: 1 }], + [[1], [1, expectUnderTestAsAny.optionalFn()]], + [[1, expectUnderTestAsAny.optionalFn()], [1]], + ].forEach(([a, b], index) => { + test(`{pass: true} expect(${stringify(a)}).not.toEqual(${stringify( + b, + )}) (${index})`, () => { + expectUnderTest(a).toEqual(b); + expect(() => expectUnderTest(a).not.toEqual(b)).toThrowErrorMatchingSnapshot(); + }); + }); + + [ + [BigInt(1), BigInt(1)], + [BigInt(0), BigInt('0')], + [[BigInt(1)], [BigInt(1)]], + [ + [BigInt(1), 2], + [BigInt(1), 2], + ], + [Immutable.List([BigInt(1)]), Immutable.List([BigInt(1)])], + [{ a: BigInt(99) }, { a: BigInt(99) }], + [new Set([BigInt(1), BigInt(2)]), new Set([BigInt(1), BigInt(2)])], + ].forEach(([a, b]) => { + test(`{pass: true} expect(${stringify(a)}).not.toEqual(${stringify( + b, + )})`, () => { + expectUnderTest(a).toEqual(b); + expect(() => expectUnderTest(a).not.toEqual(b)).toThrow('toEqual'); + }); + }); + + test('assertion error matcherResult property contains matcher name, expected and actual values', () => { + const actual = { a: 1 }; + const expected = { a: 2 }; + try { + expectUnderTest(actual).toEqual(expected); + } catch (error) { + expect(error.matcherResult).toEqual( + expect.objectContaining({ + actual, + expected, + name: 'toEqual', + }), + ); + } + }); + + test('symbol based keys in arrays are processed correctly', () => { + const mySymbol = Symbol('test'); + const actual1 = []; + actual1[mySymbol] = 3; + const actual2 = []; + actual2[mySymbol] = 4; + const expected = []; + expected[mySymbol] = 3; + + expect(actual1).toEqual(expected); + expect(actual2).not.toEqual(expected); + }); + + test('non-enumerable members should be skipped during equal', () => { + const actual = { + x: 3, + }; + Object.defineProperty(actual, 'test', { + enumerable: false, + value: 5, + }); + expect(actual).toEqual({ x: 3 }); + }); + + test('non-enumerable symbolic members should be skipped during equal', () => { + const actual = { + x: 3, + }; + const mySymbol = Symbol('test'); + Object.defineProperty(actual, mySymbol, { + enumerable: false, + value: 5, + }); + expect(actual).toEqual({ x: 3 }); + }); + + test.describe('cyclic object equality', () => { + test('properties with the same circularity are equal', () => { + const a: any = {}; + a.x = a; + const b: any = {}; + b.x = b; + expect(a).toEqual(b); + expect(b).toEqual(a); + + const c: any = {}; + c.x = a; + const d: any = {}; + d.x = b; + expect(c).toEqual(d); + expect(d).toEqual(c); + }); + + test('properties with different circularity are not equal', () => { + const a: any = {}; + a.x = { y: a }; + const b: any = {}; + const bx: any = {}; + b.x = bx; + bx.y = bx; + expect(a).not.toEqual(b); + expect(b).not.toEqual(a); + + const c: any = {}; + c.x = a; + const d: any = {}; + d.x = b; + expect(c).not.toEqual(d); + expect(d).not.toEqual(c); + }); + + test('are not equal if circularity is not on the same property', () => { + const a: any = {}; + const b: any = {}; + a.a = a; + b.a = {}; + b.a.a = a; + expect(a).not.toEqual(b); + expect(b).not.toEqual(a); + + const c: any = {}; + c.x = { x: c }; + const d: any = {}; + d.x = d; + expect(c).not.toEqual(d); + expect(d).not.toEqual(c); + }); + }); + +}); + +test.describe('.toBeInstanceOf()', () => { + class A { } + class B { } + class C extends B { } + class D extends C { } + class E extends D { } + + class SubHasStaticNameMethod extends B { + constructor() { + super(); + } + static name() { } + } + + class HasStaticNameMethod { + constructor() { } + static name() { } + } + + function DefinesNameProp() { } + Object.defineProperty(DefinesNameProp, 'name', { + configurable: true, + enumerable: false, + value: '', + writable: true, + }); + // @ts-ignore + class SubHasNameProp extends DefinesNameProp { } + + [ + [new Map(), Map], + [[], Array], + [new A(), A], + [new C(), B], // C extends B + [new E(), B], // E extends … extends B + [new SubHasNameProp(), DefinesNameProp], // omit extends + [new SubHasStaticNameMethod(), B], // Received + [new HasStaticNameMethod(), HasStaticNameMethod], // Expected + ].forEach(([a, b], index) => { + test(`passing ${stringify(a)} and ${stringify(b)} (${index})`, () => { + expect(() => + expectUnderTest(a).not.toBeInstanceOf(b), + ).toThrowErrorMatchingSnapshot(); + + expectUnderTest(a).toBeInstanceOf(b); + }); + }); + + [ + ['a', String], + [1, Number], + [true, Boolean], + [new A(), B], + [Object.create(null), A], + [undefined, String], + [null, String], + [/\w+/, function() { }], + [new DefinesNameProp(), RegExp], + ].forEach(([a, b], index) => { + test(`failing ${stringify(a)} and ${stringify(b)} (${index})`, () => { + expect(() => + expectUnderTest(a).toBeInstanceOf(b), + ).toThrowErrorMatchingSnapshot(); + + expectUnderTest(a).not.toBeInstanceOf(b); + }); + }); + + test('throws if constructor is not a function', () => { + expect(() => + expectUnderTest({}).toBeInstanceOf(4), + ).toThrowErrorMatchingSnapshot(); + }); +}); + +test.describe('.toBeTruthy(), .toBeFalsy()', () => { + test('does not accept arguments', () => { + expect(() => expectUnderTestAsAny(0).toBeTruthy(null)).toThrowErrorMatchingSnapshot(); + + expect(() => + expectUnderTestAsAny(0).not.toBeFalsy(null), + ).toThrowErrorMatchingSnapshot(); + }); + + [{}, [], true, 1, 'a', 0.5, new Map(), () => { }, Infinity].forEach(v => { + test(`'${stringify(v)}' is truthy`, () => { + expectUnderTest(v).toBeTruthy(); + expectUnderTest(v).not.toBeFalsy(); + + expect(() => + expectUnderTest(v).not.toBeTruthy(), + ).toThrowErrorMatchingSnapshot(); + + expect(() => expectUnderTest(v).toBeFalsy()).toThrowErrorMatchingSnapshot(); + }); + }); + + [BigInt(1)].forEach(v => { + test(`'${stringify(v)}' is truthy`, () => { + expectUnderTest(v).toBeTruthy(); + expectUnderTest(v).not.toBeFalsy(); + + expect(() => expectUnderTest(v).not.toBeTruthy()).toThrow('toBeTruthy'); + + expect(() => expectUnderTest(v).toBeFalsy()).toThrow('toBeFalsy'); + }); + }); + + [false, null, NaN, 0, '', undefined].forEach(v => { + test(`'${stringify(v)}' is falsy`, () => { + expectUnderTest(v).toBeFalsy(); + expectUnderTest(v).not.toBeTruthy(); + + expect(() => expectUnderTest(v).toBeTruthy()).toThrowErrorMatchingSnapshot(); + + expect(() => + expectUnderTest(v).not.toBeFalsy(), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + [BigInt(0)].forEach(v => { + test(`'${stringify(v)}' is falsy`, () => { + expectUnderTest(v).toBeFalsy(); + expectUnderTest(v).not.toBeTruthy(); + + expect(() => expectUnderTest(v).toBeTruthy()).toThrow('toBeTruthy'); + + expect(() => expectUnderTest(v).not.toBeFalsy()).toThrow('toBeFalsy'); + }); + }); +}); + +test.describe('.toBeNaN()', () => { + test('{pass: true} expect(NaN).toBeNaN()', () => { + [NaN, Math.sqrt(-1), Infinity - Infinity, 0 / 0].forEach(v => { + expectUnderTest(v).toBeNaN(); + + expect(() => expectUnderTest(v).not.toBeNaN()).toThrowErrorMatchingSnapshot(); + }); + }); + + test('throws', () => { + [1, '', null, undefined, {}, [], 0.2, 0, Infinity, -Infinity].forEach(v => { + expect(() => expectUnderTest(v).toBeNaN()).toThrowErrorMatchingSnapshot(); + + expectUnderTest(v).not.toBeNaN(); + }); + }); +}); + +test.describe('.toBeNull()', () => { + [{}, [], true, 1, 'a', 0.5, new Map(), () => { }, Infinity].forEach(v => { + test(`fails for '${stringify(v)}'`, () => { + expectUnderTest(v).not.toBeNull(); + + expect(() => expectUnderTest(v).toBeNull()).toThrowErrorMatchingSnapshot(); + }); + }); + + test('fails for null with .not', () => { + expect(() => + expectUnderTest(null).not.toBeNull(), + ).toThrowErrorMatchingSnapshot(); + }); + + test('pass for null', () => { + expectUnderTest(null).toBeNull(); + }); +}); + +test.describe('.toBeDefined(), .toBeUndefined()', () => { + [{}, [], true, 1, 'a', 0.5, new Map(), () => { }, Infinity].forEach(v => { + test(`'${stringify(v)}' is defined`, () => { + expectUnderTest(v).toBeDefined(); + expectUnderTest(v).not.toBeUndefined(); + + expect(() => + expectUnderTest(v).not.toBeDefined(), + ).toThrowErrorMatchingSnapshot(); + + expect(() => + expectUnderTest(v).toBeUndefined(), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + [BigInt(1)].forEach(v => { + test(`'${stringify(v)}' is defined`, () => { + expectUnderTest(v).toBeDefined(); + expectUnderTest(v).not.toBeUndefined(); + + expect(() => expectUnderTest(v).not.toBeDefined()).toThrow('toBeDefined'); + + expect(() => expectUnderTest(v).toBeUndefined()).toThrow('toBeUndefined'); + }); + }); + + test('undefined is undefined', () => { + expectUnderTest(undefined).toBeUndefined(); + expectUnderTest(undefined).not.toBeDefined(); + + expect(() => + expectUnderTest(undefined).toBeDefined(), + ).toThrowErrorMatchingSnapshot(); + + expect(() => + expectUnderTest(undefined).not.toBeUndefined(), + ).toThrowErrorMatchingSnapshot(); + }); +}); + +test.describe( + '.toBeGreaterThan(), .toBeLessThan(), ' + + '.toBeGreaterThanOrEqual(), .toBeLessThanOrEqual()', + () => { + [ + [1, 2], + [-Infinity, Infinity], + [Number.MIN_VALUE, Number.MAX_VALUE], + [0x11, 0x22], + [0b11, 0b111], + [0o11, 0o22], + [0.1, 0.2], + ].forEach(([small, big]) => { + test(`{pass: true} expect(${small}).toBeLessThan(${big})`, () => { + expectUnderTest(small).toBeLessThan(big); + }); + + test(`{pass: false} expect(${big}).toBeLessThan(${small})`, () => { + expectUnderTest(big).not.toBeLessThan(small); + }); + + test(`{pass: true} expect(${big}).toBeGreaterThan(${small})`, () => { + expectUnderTest(big).toBeGreaterThan(small); + }); + + test(`{pass: false} expect(${small}).toBeGreaterThan(${big})`, () => { + expectUnderTest(small).not.toBeGreaterThan(big); + }); + + test(`{pass: true} expect(${small}).toBeLessThanOrEqual(${big})`, () => { + expectUnderTest(small).toBeLessThanOrEqual(big); + }); + + test(`{pass: false} expect(${big}).toBeLessThanOrEqual(${small})`, () => { + expectUnderTest(big).not.toBeLessThanOrEqual(small); + }); + + test(`{pass: true} expect(${big}).toBeGreaterThanOrEqual(${small})`, () => { + expectUnderTest(big).toBeGreaterThanOrEqual(small); + }); + + test(`{pass: false} expect(${small}).toBeGreaterThanOrEqual(${big})`, () => { + expectUnderTest(small).not.toBeGreaterThanOrEqual(big); + }); + + test(`throws: [${small}, ${big}]`, () => { + expect(() => + expectUnderTest(small).toBeGreaterThan(big), + ).toThrowErrorMatchingSnapshot(); + + expect(() => + expectUnderTest(small).not.toBeLessThan(big), + ).toThrowErrorMatchingSnapshot(); + + expect(() => + expectUnderTest(big).not.toBeGreaterThan(small), + ).toThrowErrorMatchingSnapshot(); + + expect(() => + expectUnderTest(big).toBeLessThan(small), + ).toThrowErrorMatchingSnapshot(); + + expect(() => + expectUnderTest(small).toBeGreaterThanOrEqual(big), + ).toThrowErrorMatchingSnapshot(); + + expect(() => + expectUnderTest(small).not.toBeLessThanOrEqual(big), + ).toThrowErrorMatchingSnapshot(); + + expect(() => + expectUnderTest(big).not.toBeGreaterThanOrEqual(small), + ).toThrowErrorMatchingSnapshot(); + + expect(() => + expectUnderTest(big).toBeLessThanOrEqual(small), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + test('can compare BigInt to Numbers', () => { + const a = BigInt(2); + expectUnderTest(a).toBeGreaterThan(1); + expectUnderTest(a).toBeGreaterThanOrEqual(2); + expectUnderTest(2).toBeLessThanOrEqual(a); + expectUnderTest(a).toBeLessThan(3); + expectUnderTest(a).toBeLessThanOrEqual(2); + }); + [ + [BigInt(1), BigInt(2)], + [BigInt(0x11), BigInt(0x22)], + [-1, BigInt(2)], + ].forEach(([small, big]) => { + test(`{pass: true} expect(${stringify(small)}).toBeLessThan(${stringify( + big, + )})`, () => { + expectUnderTest(small).toBeLessThan(big); + }); + + test(`{pass: false} expect(${stringify(big)}).toBeLessThan(${stringify( + small, + )})`, () => { + expectUnderTest(big).not.toBeLessThan(small); + }); + + test(`{pass: true} expect(${stringify(big)}).toBeGreaterThan(${stringify( + small, + )})`, () => { + expectUnderTest(big).toBeGreaterThan(small); + }); + + test(`{pass: false} expect(${stringify(small)}).toBeGreaterThan(${stringify( + big, + )})`, () => { + expectUnderTest(small).not.toBeGreaterThan(big); + }); + + test(`{pass: true} expect(${stringify( + small, + )}).toBeLessThanOrEqual(${stringify(big)})`, () => { + expectUnderTest(small).toBeLessThanOrEqual(big); + }); + + test(`{pass: false} expect(${stringify( + big, + )}).toBeLessThanOrEqual(${stringify(small)})`, () => { + expectUnderTest(big).not.toBeLessThanOrEqual(small); + }); + + test(`{pass: true} expect(${stringify( + big, + )}).toBeGreaterThanOrEqual(${stringify(small)})`, () => { + expectUnderTest(big).toBeGreaterThanOrEqual(small); + }); + + test(`{pass: false} expect(${stringify( + small, + )}).toBeGreaterThanOrEqual(${stringify(big)})`, () => { + expectUnderTest(small).not.toBeGreaterThanOrEqual(big); + }); + + test(`throws: [${stringify(small)}, ${stringify(big)}]`, () => { + expect(() => expectUnderTest(small).toBeGreaterThan(big)).toThrow( + 'toBeGreaterThan', + ); + + expect(() => expectUnderTest(small).not.toBeLessThan(big)).toThrow( + 'toBeLessThan', + ); + + expect(() => expectUnderTest(big).not.toBeGreaterThan(small)).toThrow( + 'toBeGreaterThan', + ); + + expect(() => expectUnderTest(big).toBeLessThan(small)).toThrow( + 'toBeLessThan', + ); + + expect(() => expectUnderTest(small).toBeGreaterThanOrEqual(big)).toThrow( + 'toBeGreaterThanOrEqual', + ); + + expect(() => expectUnderTest(small).not.toBeLessThanOrEqual(big)).toThrow( + 'toBeLessThanOrEqual', + ); + + expect(() => expectUnderTest(big).not.toBeGreaterThanOrEqual(small)).toThrow( + 'toBeGreaterThanOrEqual', + ); + + expect(() => expectUnderTest(big).toBeLessThanOrEqual(small)).toThrow( + 'toBeLessThanOrEqual', + ); + }); + }); + + [ + [1, 1], + [Number.MIN_VALUE, Number.MIN_VALUE], + [Number.MAX_VALUE, Number.MAX_VALUE], + [Infinity, Infinity], + [-Infinity, -Infinity], + ].forEach(([n1, n2]) => { + test(`equal numbers: [${n1}, ${n2}]`, () => { + expectUnderTest(n1).toBeGreaterThanOrEqual(n2); + expectUnderTest(n1).toBeLessThanOrEqual(n2); + + expect(() => + expectUnderTest(n1).not.toBeGreaterThanOrEqual(n2), + ).toThrowErrorMatchingSnapshot(); + + expect(() => + expectUnderTest(n1).not.toBeLessThanOrEqual(n2), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + [ + [BigInt(1), BigInt(1)], + [BigInt(Number.MAX_SAFE_INTEGER), BigInt(Number.MAX_SAFE_INTEGER)], + ].forEach(([n1, n2], index) => { + test(`equal numbers: [${n1}, ${n2}] (${index})`, () => { + expectUnderTest(n1).toBeGreaterThanOrEqual(n2); + expectUnderTest(n1).toBeLessThanOrEqual(n2); + + expect(() => expectUnderTest(n1).not.toBeGreaterThanOrEqual(n2)).toThrow( + 'toBeGreaterThanOrEqual', + ); + + expect(() => expectUnderTest(n1).not.toBeLessThanOrEqual(n2)).toThrow( + 'toBeLessThanOrEqual', + ); + }); + }); + }, +); + +test.describe('.toContain(), .toContainEqual()', () => { + const typedArray = new Int8Array(2); + typedArray[0] = 0; + typedArray[1] = 1; + + test('iterable', () => { + // different node versions print iterable differently, so we can't + // use snapshots here. + const iterable = { + *[Symbol.iterator]() { + yield 1; + yield 2; + yield 3; + }, + }; + + expectUnderTest(iterable).toContain(2); + expectUnderTest(iterable).toContainEqual(2); + expect(() => expectUnderTest(iterable).not.toContain(1)).toThrow('toContain'); + expect(() => expectUnderTest(iterable).not.toContainEqual(1)).toThrow( + 'toContainEqual', + ); + }); + + [ + [[1, 2, 3, 4], 1], + [['a', 'b', 'c', 'd'], 'a'], + [[undefined, null], null], + [[undefined, null], undefined], + [[Symbol.for('a')], Symbol.for('a')], + ['abcdef', 'abc'], + ['11112111', '2'], + [new Set(['abc', 'def']), 'abc'], + [typedArray, 1], + ].forEach(([list, v]) => { + test(`'${stringify(list)}' contains '${stringify(v)}'`, () => { + expectUnderTest(list).toContain(v); + + expect(() => + expectUnderTest(list).not.toContain(v), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + [ + [[BigInt(1), BigInt(2), BigInt(3), BigInt(4)], BigInt(1)], + [[1, 2, 3, BigInt(3), 4], BigInt(3)], + ].forEach(([list, v]) => { + test(`'${stringify(list)}' contains '${stringify(v)}'`, () => { + expectUnderTest(list).toContain(v); + + expect(() => expectUnderTest(list).not.toContain(v)).toThrow('toContain'); + }); + }); + + [ + [[1, 2, 3], 4], + [[null, undefined], 1], + [[{}, []], []], + [[{}, []], {}], + ].forEach(([list, v]) => { + test(`'${stringify(list)}' does not contain '${stringify(v)}'`, () => { + expectUnderTest(list).not.toContain(v); + + expect(() => + expectUnderTest(list).toContain(v), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + [[[BigInt(1), BigInt(2), BigInt(3)], 3]].forEach(([list, v]) => { + test(`'${stringify(list)}' does not contain '${stringify(v)}'`, () => { + expectUnderTest(list).not.toContain(v); + + expect(() => expectUnderTest(list).toContain(v)).toThrow('toContain'); + }); + }); + + test('error cases', () => { + expect(() => expectUnderTest(null).toContain(1)).toThrowErrorMatchingSnapshot(); + expect(() => expectUnderTest('-0').toContain(-0)).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest('null').toContain(null), + ).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest('undefined').toContain(undefined), + ).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest('false').toContain(false), + ).toThrowErrorMatchingSnapshot(); + expect(() => expectUnderTest('1').toContain(BigInt(1))).toThrow('toContain'); + }); + + [ + [[1, 2, 3, 4], 1], + [['a', 'b', 'c', 'd'], 'a'], + [[undefined, null], null], + [[undefined, null], undefined], + [[Symbol.for('a')], Symbol.for('a')], + [[{ a: 'b' }, { a: 'c' }], { a: 'b' }], + [new Set([1, 2, 3, 4]), 1], + [typedArray, 1], + ].forEach(([list, v]) => { + test(`'${stringify(list)}' contains a value equal to '${stringify( + v, + )}'`, () => { + expectUnderTest(list).toContainEqual(v); + expect(() => + expectUnderTest(list).not.toContainEqual(v), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + [[[{ a: 'b' }, { a: 'c' }], { a: 'd' }]].forEach(([list, v]) => { + test(`'${stringify(list)}' does not contain a value equal to'${stringify( + v, + )}'`, () => { + expectUnderTest(list).not.toContainEqual(v); + + expect(() => + expectUnderTest(list).toContainEqual(v), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + test('error cases for toContainEqual', () => { + expect(() => + expectUnderTest(null).toContainEqual(1), + ).toThrowErrorMatchingSnapshot(); + }); +}); + +test.describe('.toBeCloseTo', () => { + [ + [0, 0], + [0, 0.001], + [1.23, 1.229], + [1.23, 1.226], + [1.23, 1.225], + [1.23, 1.234], + [Infinity, Infinity], + [-Infinity, -Infinity], + ].forEach(([n1, n2]) => { + test(`{pass: true} expect(${n1}).toBeCloseTo(${n2})`, () => { + expectUnderTest(n1).toBeCloseTo(n2); + + expect(() => + expectUnderTest(n1).not.toBeCloseTo(n2), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + [ + [0, 0.01], + [1, 1.23], + [1.23, 1.2249999], + [Infinity, -Infinity], + [Infinity, 1.23], + [-Infinity, -1.23], + ].forEach(([n1, n2]) => { + test(`{pass: false} expect(${n1}).toBeCloseTo(${n2})`, () => { + expectUnderTest(n1).not.toBeCloseTo(n2); + + expect(() => + expectUnderTest(n1).toBeCloseTo(n2), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + [ + [3.141592e-7, 3e-7, 8], + [56789, 51234, -4], + ].forEach(([n1, n2, p]) => { + test(`{pass: false} expect(${n1}).toBeCloseTo(${n2}, ${p})`, () => { + expectUnderTest(n1).not.toBeCloseTo(n2, p); + + expect(() => + expectUnderTest(n1).toBeCloseTo(n2, p), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + [ + [0, 0.1, 0], + [0, 0.0001, 3], + [0, 0.000004, 5], + [2.0000002, 2, 5], + ].forEach(([n1, n2, p]) => { + test(`{pass: true} expect(${n1}).toBeCloseTo(${n2}, ${p})`, () => { + expectUnderTest(n1).toBeCloseTo(n2, p); + + expect(() => + expectUnderTest(n1).not.toBeCloseTo(n2, p), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + test.describe('throws: Matcher error', () => { + test('promise empty isNot false received', () => { + const precision = 3; + const expected = 0; + const received = ''; + expect(() => { + expectUnderTest(received).toBeCloseTo(expected, precision); + }).toThrowErrorMatchingSnapshot(); + }); + + test('promise empty isNot true expected', () => { + const received = 0.1; + // expected is undefined + expect(() => { + expectUnderTestAsAny(received).not.toBeCloseTo(); + }).toThrowErrorMatchingSnapshot(); + }); + + test('promise rejects isNot false expected', () => { + const expected = '0'; + const received = Promise.reject(0.01); + return expect( + expectUnderTestAsAny(received).rejects.toBeCloseTo(expected), + // @ts-ignore + ).rejects.toThrowErrorMatchingSnapshotAsync(); + }); + + test('promise rejects isNot true received', () => { + const expected = 0; + const received = Promise.reject(Symbol('0.1')); + return expect( + expectUnderTest(received).rejects.not.toBeCloseTo(expected), + // @ts-ignore + ).rejects.toThrowErrorMatchingSnapshotAsync(); + }); + + test('promise resolves isNot false received', () => { + const precision = 3; + const expected = 0; + const received = Promise.resolve(false); + return expect( + expectUnderTest(received).resolves.toBeCloseTo(expected, precision), + // @ts-ignore + ).rejects.toThrowErrorMatchingSnapshotAsync(); + }); + + test('promise resolves isNot true expected', () => { + const precision = 3; + const expected = null; + const received = Promise.resolve(0.1); + return expect( + expectUnderTest(received).resolves.not.toBeCloseTo(expected, precision), + // @ts-ignore + ).rejects.toThrowErrorMatchingSnapshotAsync(); + }); + }); +}); + +test.describe('.toMatch()', () => { + [ + ['foo', 'foo'], + ['Foo bar', /^foo/i], + ].forEach(([n1, n2]) => { + test(`{pass: true} expect(${n1}).toMatch(${n2})`, () => { + expectUnderTest(n1).toMatch(n2); + + expect(() => + expectUnderTest(n1).not.toMatch(n2), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + [ + ['bar', 'foo'], + ['bar', /foo/], + ].forEach(([n1, n2]) => { + test(`throws: [${n1}, ${n2}]`, () => { + expect(() => expectUnderTest(n1).toMatch(n2)).toThrowErrorMatchingSnapshot(); + }); + }); + + [ + [1, 'foo'], + [{}, 'foo'], + [[], 'foo'], + [true, 'foo'], + [/foo/i, 'foo'], + [() => { }, 'foo'], + [undefined, 'foo'], + ].forEach(([n1, n2]) => { + test( + 'throws if non String actual value passed:' + + ` [${stringify(n1)}, ${stringify(n2)}]`, + () => { + // @ts-ignore + expect(() => expectUnderTest(n1).toMatch(n2)).toThrowErrorMatchingSnapshot(); + }, + ); + }); + + [ + ['foo', 1], + ['foo', {}], + ['foo', []], + ['foo', true], + ['foo', () => { }], + ['foo', undefined], + ].forEach(([n1, n2]) => { + test( + 'throws if non String/RegExp expected value passed:' + + ` [${stringify(n1)}, ${stringify(n2)}]`, + () => { + // @ts-ignore + expect(() => expectUnderTest(n1).toMatch(n2)).toThrowErrorMatchingSnapshot(); + }, + ); + }); + + test('escapes strings properly', () => { + expectUnderTest('this?: throws').toMatch('this?: throws'); + }); + + test('does not maintain RegExp state between calls', () => { + const regex = /[f]\d+/gi; + expectUnderTest('f123').toMatch(regex); + expectUnderTest('F456').toMatch(regex); + expectUnderTest(regex.lastIndex).toBe(0); + }); +}); + +test.describe('.toHaveLength', () => { + [ + [[1, 2], 2], + [[], 0], + [['a', 'b'], 2], + ['abc', 3], + ['', 0], + [() => { }, 0], + ].forEach(([received, length]) => { + test(`{pass: true} expect(${stringify( + received, + )}).toHaveLength(${length})`, () => { + expectUnderTestAsAny(received).toHaveLength(length); + expect(() => + expectUnderTestAsAny(received).not.toHaveLength(length), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + [ + [[1, 2], 3], + [[], 1], + [['a', 'b'], 99], + ['abc', 66], + ['', 1], + ].forEach(([received, length]) => { + test(`{pass: false} expect(${stringify( + received, + )}).toHaveLength(${length})`, () => { + expectUnderTestAsAny(received).not.toHaveLength(length); + expect(() => + expectUnderTestAsAny(received).toHaveLength(length), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + test('error cases', () => { + expect(() => + expectUnderTest({ a: 9 }).toHaveLength(1), + ).toThrowErrorMatchingSnapshot(); + expect(() => expectUnderTest(0).toHaveLength(1)).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest(undefined).not.toHaveLength(1), + ).toThrowErrorMatchingSnapshot(); + }); + + test.describe('matcher error expected length', () => { + test('not number', () => { + const expected = '3'; + const received = 'abc'; + expect(() => { + expectUnderTestAsAny(received).not.toHaveLength(expected); + }).toThrowErrorMatchingSnapshot(); + }); + + test('number Infinity', () => { + const expected = Infinity; + const received = Promise.reject('abc'); + return expect( + expectUnderTest(received).rejects.toHaveLength(expected), + // @ts-ignore + ).rejects.toThrowErrorMatchingSnapshotAsync(); + }); + + test('number NaN', () => { + const expected = NaN; + const received = Promise.reject('abc'); + return expect( + expectUnderTest(received).rejects.not.toHaveLength(expected), + // @ts-ignore + ).rejects.toThrowErrorMatchingSnapshotAsync(); + }); + + test('number float', () => { + const expected = 0.5; + const received = Promise.resolve('abc'); + return expect( + expectUnderTest(received).resolves.toHaveLength(expected), + // @ts-ignore + ).rejects.toThrowErrorMatchingSnapshotAsync(); + }); + + test('number negative integer', () => { + const expected = -3; + const received = Promise.resolve('abc'); + return expect( + expectUnderTest(received).resolves.not.toHaveLength(expected), + // @ts-ignore + ).rejects.toThrowErrorMatchingSnapshotAsync(); + }); + }); +}); + +test.describe('.toHaveProperty()', () => { + class Foo { + val: any; + get a() { + return undefined; + } + get b() { + return 'b'; + } + + set setter(val) { + this.val = val; + } + } + + class Foo2 extends Foo { + get c() { + return 'c'; + } + } + const foo2 = new Foo2(); + foo2.setter = true; + + function E(nodeName) { + this.nodeName = nodeName.toUpperCase(); + } + E.prototype.nodeType = 1; + + const memoized = function() { }; + memoized.memo = []; + + const pathDiff = ['children', 0]; + + const receivedDiffSingle = { + children: ['"That cartoon"'], + props: null, + type: 'p', + }; + const valueDiffSingle = '"That cat cartoon"'; + + const receivedDiffMultiple = { + children: [ + 'Roses are red.\nViolets are blue.\nTesting with Jest is good for you.', + ], + props: null, + type: 'pre', + }; + const valueDiffMultiple = + 'Roses are red, violets are blue.\nTesting with Jest\nIs good for you.'; + + [ + [{ a: { b: { c: { d: 1 } } } }, 'a.b.c.d', 1], + [{ a: { b: { c: { d: 1 } } } }, ['a', 'b', 'c', 'd'], 1], + [{ 'a.b.c.d': 1 }, ['a.b.c.d'], 1], + [{ a: { b: [1, 2, 3] } }, ['a', 'b', 1], 2], + [{ a: { b: [1, 2, 3] } }, ['a', 'b', 1], expect.any(Number)], + [{ a: 0 }, 'a', 0], + [{ a: { b: undefined } }, 'a.b', undefined], + [{ a: { b: { c: 5 } } }, 'a.b', { c: 5 }], + [{ a: { b: [{ c: [{ d: 1 }] }] } }, 'a.b[0].c[0].d', 1], + [{ a: { b: [{ c: { d: [{ e: 1 }, { f: 2 }] } }] } }, 'a.b[0].c.d[1].f', 2], + [{ a: { b: [[{ c: [{ d: 1 }] }]] } }, 'a.b[0][0].c[0].d', 1], + [Object.assign(Object.create(null), { property: 1 }), 'property', 1], + [new Foo(), 'a', undefined], + [new Foo(), 'b', 'b'], + [new Foo(), 'setter', undefined], + [foo2, 'a', undefined], + [foo2, 'c', 'c'], + [foo2, 'val', true], + [new E('div'), 'nodeType', 1], + ['', 'length', 0], + [memoized, 'memo', []], + [{ '': 1 }, '', 1], + ].forEach(([obj, keyPath, value]) => { + test(`{pass: true} expect(${stringify( + obj, + )}).toHaveProperty('${keyPath}', ${stringify(value)})`, () => { + expectUnderTestAsAny(obj).toHaveProperty(keyPath, value); + expect(() => + expectUnderTestAsAny(obj).not.toHaveProperty(keyPath, value), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + [ + [{ a: { b: { c: { d: 1 } } } }, 'a.b.ttt.d', 1], + [{ a: { b: { c: { d: 1 } } } }, 'a.b.c.d', 2], + [{ 'a.b.c.d': 1 }, 'a.b.c.d', 2], + [{ 'a.b.c.d': 1 }, ['a.b.c.d'], 2], + [receivedDiffSingle, pathDiff, valueDiffSingle], + [receivedDiffMultiple, pathDiff, valueDiffMultiple], + [{ a: { b: { c: { d: 1 } } } }, ['a', 'b', 'c', 'd'], 2], + [{ a: { b: { c: {} } } }, 'a.b.c.d', 1], + [{ a: 1 }, 'a.b.c.d', 5], + [{}, 'a', 'test'], + [{ a: { b: 3 } }, 'a.b', undefined], + [1, 'a.b.c', 'test'], + ['abc', 'a.b.c', { a: 5 }], + [{ a: { b: { c: 5 } } }, 'a.b', { c: 4 }], + [new Foo(), 'a', 'a'], + [new Foo(), 'b', undefined], + [{ a: {} }, 'a.b', undefined], + ].forEach(([obj, keyPath, value], index) => { + test(`{pass: false} expect(${stringify( + obj, + )}).toHaveProperty('${keyPath}', ${stringify(value)}) (${index})`, () => { + expect(() => + expectUnderTestAsAny(obj).toHaveProperty(keyPath, value), + ).toThrowErrorMatchingSnapshot(); + expectUnderTestAsAny(obj).not.toHaveProperty(keyPath, value); + }); + }); + + [ + [{ a: { b: { c: { d: 1 } } } }, 'a.b.c.d'], + [{ a: { b: { c: { d: 1 } } } }, ['a', 'b', 'c', 'd']], + [{ 'a.b.c.d': 1 }, ['a.b.c.d']], + [{ a: { b: [1, 2, 3] } }, ['a', 'b', 1]], + [{ a: 0 }, 'a'], + [{ a: { b: undefined } }, 'a.b'], + ].forEach(([obj, keyPath]) => { + test(`{pass: true} expect(${stringify( + obj, + )}).toHaveProperty('${keyPath}')`, () => { + expectUnderTestAsAny(obj).toHaveProperty(keyPath); + expect(() => + expectUnderTestAsAny(obj).not.toHaveProperty(keyPath), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + [ + [{ a: { b: { c: {} } } }, 'a.b.c.d'], + [{ a: { b: { c: {} } } }, '.a.b.c'], + [{ a: 1 }, 'a.b.c.d'], + [{}, 'a'], + [1, 'a.b.c'], + ['abc', 'a.b.c'], + [false, 'key'], + [0, 'key'], + ['', 'key'], + [Symbol(), 'key'], + [Object.assign(Object.create(null), { key: 1 }), 'not'], + ].forEach(([obj, keyPath]) => { + test(`{pass: false} expect(${stringify( + obj, + )}).toHaveProperty('${keyPath}')`, () => { + expect(() => + expectUnderTest(obj).toHaveProperty(keyPath), + ).toThrowErrorMatchingSnapshot(); + expectUnderTest(obj).not.toHaveProperty(keyPath); + }); + }); + + [ + [null, 'a.b'], + [undefined, 'a'], + [{ a: { b: {} } }, undefined], + [{ a: { b: {} } }, null], + [{ a: { b: {} } }, 1], + [{}, []], // Residue: pass must be initialized + ].forEach(([obj, keyPath]) => { + test(`{error} expect(${stringify( + obj, + )}).toHaveProperty('${keyPath}')`, () => { + expect(() => + expectUnderTestAsAny(obj).toHaveProperty(keyPath), + ).toThrowErrorMatchingSnapshot(); + }); + }); +}); + +test.describe('toMatchObject()', () => { + class Foo { + get a() { + return undefined; + } + get b() { + return 'b'; + } + } + + class Sub extends Foo { + get c() { + return 'c'; + } + } + + const withDefineProperty = (obj, key, val) => { + Object.defineProperty(obj, key, { + get() { + return val; + }, + }); + + return obj; + }; + + const testNotToMatchSnapshots = tuples => { + tuples.forEach(([n1, n2]) => { + test(`{pass: true} expect(${stringify(n1)}).toMatchObject(${stringify( + n2, + )})`, () => { + expectUnderTest(n1).toMatchObject(n2); + expect(() => + expectUnderTest(n1).not.toMatchObject(n2), + ).toThrowErrorMatchingSnapshot(); + }); + }); + }; + + const testToMatchSnapshots = tuples => { + tuples.forEach(([n1, n2]) => { + test(`{pass: false} expect(${stringify(n1)}).toMatchObject(${stringify( + n2, + )})`, () => { + expectUnderTest(n1).not.toMatchObject(n2); + expect(() => + expectUnderTest(n1).toMatchObject(n2), + ).toThrowErrorMatchingSnapshot(); + }); + }); + }; + + test.describe('circular references', () => { + test.describe('simple circular references', () => { + const circularObjA1: any = { a: 'hello' }; + circularObjA1.ref = circularObjA1; + + const circularObjB: any = { a: 'world' }; + circularObjB.ref = circularObjB; + + const circularObjA2: any = { a: 'hello' }; + circularObjA2.ref = circularObjA2; + + const primitiveInsteadOfRef: any = {}; + primitiveInsteadOfRef.ref = 'not a ref'; + + testNotToMatchSnapshots([ + [circularObjA1, {}], + [circularObjA2, circularObjA1], + ]); + + testToMatchSnapshots([ + [{}, circularObjA1], + [circularObjA1, circularObjB], + [primitiveInsteadOfRef, circularObjA1], + ]); + }); + + test.describe('transitive circular references', () => { + const transitiveCircularObjA1: any = { a: 'hello' }; + transitiveCircularObjA1.nestedObj = { parentObj: transitiveCircularObjA1 }; + + const transitiveCircularObjA2: any = { a: 'hello' }; + transitiveCircularObjA2.nestedObj = { + parentObj: transitiveCircularObjA2, + }; + + const transitiveCircularObjB: any = { a: 'world' }; + transitiveCircularObjB.nestedObj = { + parentObj: transitiveCircularObjB, + }; + + const primitiveInsteadOfRef: any = {}; + primitiveInsteadOfRef.nestedObj = { + parentObj: 'not the parent ref', + }; + + testNotToMatchSnapshots([ + [transitiveCircularObjA1, {}], + [transitiveCircularObjA2, transitiveCircularObjA1], + ]); + + testToMatchSnapshots([ + [{}, transitiveCircularObjA1], + [transitiveCircularObjB, transitiveCircularObjA1], + [primitiveInsteadOfRef, transitiveCircularObjA1], + ]); + }); + }); + + testNotToMatchSnapshots([ + [{ a: 'b', c: 'd' }, { a: 'b' }], + [ + { a: 'b', c: 'd' }, + { a: 'b', c: 'd' }, + ], + [ + { a: 'b', t: { x: { r: 'r' }, z: 'z' } }, + { a: 'b', t: { z: 'z' } }, + ], + [{ a: 'b', t: { x: { r: 'r' }, z: 'z' } }, { t: { x: { r: 'r' } } }], + [{ a: [3, 4, 5], b: 'b' }, { a: [3, 4, 5] }], + [{ a: [3, 4, 5, 'v'], b: 'b' }, { a: [3, 4, 5, 'v'] }], + [{ a: 1, c: 2 }, { a: expectUnderTest.any(Number) }], + [{ a: { x: 'x', y: 'y' } }, { a: { x: expectUnderTest.any(String) } }], + [new Set([1, 2]), new Set([1, 2])], + [new Set([1, 2]), new Set([2, 1])], + [new Date('2015-11-30'), new Date('2015-11-30')], + [{ a: new Date('2015-11-30'), b: 'b' }, { a: new Date('2015-11-30') }], + [{ a: null, b: 'b' }, { a: null }], + [{ a: undefined, b: 'b' }, { a: undefined }], + [{ a: [{ a: 'a', b: 'b' }] }, { a: [{ a: 'a' }] }], + [ + [1, 2], + [1, 2], + ], + [{ a: undefined }, { a: undefined }], + [[], []], + [new Error('foo'), new Error('foo')], + [new Error('bar'), { message: 'bar' }], + [new Foo(), { a: undefined, b: 'b' }], + [Object.assign(Object.create(null), { a: 'b' }), { a: 'b' }], + [ + { a: 'b', c: 'd', [Symbol.for('jest')]: 'jest' }, + { a: 'b', [Symbol.for('jest')]: 'jest' }, + ], + [ + { a: 'b', c: 'd', [Symbol.for('jest')]: 'jest' }, + { a: 'b', c: 'd', [Symbol.for('jest')]: 'jest' }, + ], + // These snapshots will show {} as the object because the properties + // are not enumerable. We will need to somehow make the serialization of + // these keys a little smarter before reporting accurately. + [new Sub(), { a: undefined, b: 'b', c: 'c' }], + [withDefineProperty(new Sub(), 'd', 4), { d: 4 }], + [{ a: 'b', toString() { } }, { toString: expectUnderTest.any(Function) }], + ]); + + testToMatchSnapshots([ + [{ a: 'b', c: 'd' }, { e: 'b' }], + [ + { a: 'b', c: 'd' }, + { a: 'b!', c: 'd' }, + ], + [{ a: 'a', c: 'd' }, { a: expectUnderTest.any(Number) }], + [ + { a: 'b', t: { x: { r: 'r' }, z: 'z' } }, + { a: 'b', t: { z: [3] } }, + ], + [{ a: 'b', t: { x: { r: 'r' }, z: 'z' } }, { t: { l: { r: 'r' } } }], + [{ a: [3, 4, 5], b: 'b' }, { a: [3, 4, 5, 6] }], + [{ a: [3, 4, 5], b: 'b' }, { a: [3, 4] }], + [{ a: [3, 4, 'v'], b: 'b' }, { a: ['v'] }], + [{ a: [3, 4, 5], b: 'b' }, { a: { b: 4 } }], + [{ a: [3, 4, 5], b: 'b' }, { a: { b: expectUnderTest.any(String) } }], + [ + [1, 2], + [1, 3], + ], + [[0], [-0]], + [new Set([1, 2]), new Set([2])], + [new Date('2015-11-30'), new Date('2015-10-10')], + [{ a: new Date('2015-11-30'), b: 'b' }, { a: new Date('2015-10-10') }], + [{ a: null, b: 'b' }, { a: '4' }], + [{ a: null, b: 'b' }, { a: undefined }], + [{ a: undefined }, { a: null }], + [{ a: [{ a: 'a', b: 'b' }] }, { a: [{ a: 'c' }] }], + [{ a: 1, b: 1, c: 1, d: { e: { f: 555 } } }, { d: { e: { f: 222 } } }], + [{}, { a: undefined }], + [ + [1, 2, 3], + [2, 3, 1], + ], + [ + [1, 2, 3], + [1, 2, 2], + ], + [new Error('foo'), new Error('bar')], + [Object.assign(Object.create(null), { a: 'b' }), { c: 'd' }], + [ + { a: 'b', c: 'd', [Symbol.for('jest')]: 'jest' }, + { a: 'c', [Symbol.for('jest')]: expect.any(String) }, + ], + [{ a: 'b' }, { toString: expectUnderTest.any(Function) }], + ]); + + [ + [null, {}], + [4, {}], + ['44', {}], + [true, {}], + [undefined, {}], + [{}, null], + [{}, 4], + [{}, 'some string'], + [{}, true], + [{}, undefined], + ].forEach(([n1, n2]: [any, any, string]) => { + test(`throws expect(${stringify(n1)}).toMatchObject(${stringify( + n2, + )})`, () => { + expect(() => + expectUnderTest(n1).toMatchObject(n2), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + test('does not match properties up in the prototype chain', () => { + const a: any = {}; + a.ref = a; + + const b = Object.create(a); + b.other = 'child'; + + const matcher: any = { other: 'child' }; + matcher.ref = matcher; + + expectUnderTest(b).not.toMatchObject(matcher); + expect(() => + expectUnderTest(b).toMatchObject(matcher), + ).toThrowErrorMatchingSnapshot(); + }); + + test('toMatchObject ignores symbol key properties', () => { + // issue 13638 + const sym = Symbol('foo'); + const sym2 = Symbol('foo2'); + expectUnderTestAsAny({}).not.toMatchObject({ [sym]: true }); + expectUnderTestAsAny({ [sym]: true }).not.toMatchObject({ [sym2]: true }); + expectUnderTestAsAny({ [sym]: true }).not.toMatchObject({ [sym]: false }); + expectUnderTestAsAny({ example: 10, [sym]: true }).not.toMatchObject({ + example: 12, + [sym]: true, + }); + expectUnderTestAsAny({ [sym]: true }).toMatchObject({ [sym]: true }); + expectUnderTestAsAny({ example: 10, [sym]: true }).toMatchObject({ + example: 10, + [sym]: true, + }); + }); +}); diff --git a/tests/expect/spyMatchers.snapshots.js b/tests/expect/spyMatchers.snapshots.js new file mode 100644 index 0000000000..720620fae6 --- /dev/null +++ b/tests/expect/spyMatchers.snapshots.js @@ -0,0 +1,2600 @@ +module.exports["toBeCalled works only on spies or mock.fn"] = `expect(received).toBeCalled() + +Matcher error: received value must be a mock or spy function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toBeCalled passes when called"] = `expect(jest.fn()).not.toBeCalled() + +Expected number of calls: 0 +Received number of calls: 1 + +1: "arg0", "arg1", "arg2"`; + +module.exports["toBeCalled .not passes when called"] = `expect(spy).toBeCalled() + +Expected number of calls: >= 1 +Received number of calls: 0`; + +module.exports["toBeCalled fails with any argument passed"] = `expect(received).toBeCalled() + +Matcher error: this matcher must not have an expected argument + +Expected has type: number +Expected has value: 555`; + +module.exports["toBeCalled .not fails with any argument passed"] = `expect(received).not.toBeCalled() + +Matcher error: this matcher must not have an expected argument + +Expected has type: number +Expected has value: 555`; + +module.exports["toBeCalled includes the custom mock name in the error message"] = `expect(named-mock).not.toBeCalled() + +Expected number of calls: 0 +Received number of calls: 1 + +1: called with 0 arguments`; + +module.exports["toHaveBeenCalled works only on spies or mock.fn"] = `expect(received).toHaveBeenCalled() + +Matcher error: received value must be a mock or spy function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toHaveBeenCalled passes when called"] = `expect(jest.fn()).not.toHaveBeenCalled() + +Expected number of calls: 0 +Received number of calls: 1 + +1: "arg0", "arg1", "arg2"`; + +module.exports["toHaveBeenCalled .not passes when called"] = `expect(spy).toHaveBeenCalled() + +Expected number of calls: >= 1 +Received number of calls: 0`; + +module.exports["toHaveBeenCalled fails with any argument passed"] = `expect(received).toHaveBeenCalled() + +Matcher error: this matcher must not have an expected argument + +Expected has type: number +Expected has value: 555`; + +module.exports["toHaveBeenCalled .not fails with any argument passed"] = `expect(received).not.toHaveBeenCalled() + +Matcher error: this matcher must not have an expected argument + +Expected has type: number +Expected has value: 555`; + +module.exports["toHaveBeenCalled includes the custom mock name in the error message"] = `expect(named-mock).not.toHaveBeenCalled() + +Expected number of calls: 0 +Received number of calls: 1 + +1: called with 0 arguments`; + +module.exports["toBeCalledTimes .not works only on spies or mock.fn"] = `expect(received).not.toBeCalledTimes(expected) + +Matcher error: received value must be a mock or spy function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toBeCalledTimes only accepts a number argument"] = `expect(received).toBeCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: object +Expected has value: {}`; + +module.exports["toBeCalledTimes only accepts a number argument #1"] = `expect(received).toBeCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: array +Expected has value: []`; + +module.exports["toBeCalledTimes only accepts a number argument #2"] = `expect(received).toBeCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: boolean +Expected has value: true`; + +module.exports["toBeCalledTimes only accepts a number argument #3"] = `expect(received).toBeCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: string +Expected has value: "a"`; + +module.exports["toBeCalledTimes only accepts a number argument #4"] = `expect(received).toBeCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: map +Expected has value: Map {}`; + +module.exports["toBeCalledTimes only accepts a number argument #5"] = `expect(received).toBeCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: function +Expected has value: [Function anonymous]`; + +module.exports["toBeCalledTimes .not only accepts a number argument"] = `expect(received).not.toBeCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: object +Expected has value: {}`; + +module.exports["toBeCalledTimes .not only accepts a number argument #1"] = `expect(received).not.toBeCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: array +Expected has value: []`; + +module.exports["toBeCalledTimes .not only accepts a number argument #2"] = `expect(received).not.toBeCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: boolean +Expected has value: true`; + +module.exports["toBeCalledTimes .not only accepts a number argument #3"] = `expect(received).not.toBeCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: string +Expected has value: "a"`; + +module.exports["toBeCalledTimes .not only accepts a number argument #4"] = `expect(received).not.toBeCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: map +Expected has value: Map {}`; + +module.exports["toBeCalledTimes .not only accepts a number argument #5"] = `expect(received).not.toBeCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: function +Expected has value: [Function anonymous]`; + +module.exports["toBeCalledTimes passes if function called equal to expected times"] = `expect(spy).not.toBeCalledTimes(expected) + +Expected number of calls: not 2`; + +module.exports["toBeCalledTimes .not passes if function called more than expected times"] = `expect(jest.fn()).toBeCalledTimes(expected) + +Expected number of calls: 2 +Received number of calls: 3`; + +module.exports["toBeCalledTimes .not passes if function called less than expected times"] = `expect(jest.fn()).toBeCalledTimes(expected) + +Expected number of calls: 2 +Received number of calls: 1`; + +module.exports["toBeCalledTimes includes the custom mock name in the error message"] = `expect(named-mock).toBeCalledTimes(expected) + +Expected number of calls: 2 +Received number of calls: 1`; + +module.exports["toHaveBeenCalledTimes .not works only on spies or mock.fn"] = `expect(received).not.toHaveBeenCalledTimes(expected) + +Matcher error: received value must be a mock or spy function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toHaveBeenCalledTimes only accepts a number argument"] = `expect(received).toHaveBeenCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: object +Expected has value: {}`; + +module.exports["toHaveBeenCalledTimes only accepts a number argument #1"] = `expect(received).toHaveBeenCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: array +Expected has value: []`; + +module.exports["toHaveBeenCalledTimes only accepts a number argument #2"] = `expect(received).toHaveBeenCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: boolean +Expected has value: true`; + +module.exports["toHaveBeenCalledTimes only accepts a number argument #3"] = `expect(received).toHaveBeenCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: string +Expected has value: "a"`; + +module.exports["toHaveBeenCalledTimes only accepts a number argument #4"] = `expect(received).toHaveBeenCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: map +Expected has value: Map {}`; + +module.exports["toHaveBeenCalledTimes only accepts a number argument #5"] = `expect(received).toHaveBeenCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: function +Expected has value: [Function anonymous]`; + +module.exports["toHaveBeenCalledTimes .not only accepts a number argument"] = `expect(received).not.toHaveBeenCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: object +Expected has value: {}`; + +module.exports["toHaveBeenCalledTimes .not only accepts a number argument #1"] = `expect(received).not.toHaveBeenCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: array +Expected has value: []`; + +module.exports["toHaveBeenCalledTimes .not only accepts a number argument #2"] = `expect(received).not.toHaveBeenCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: boolean +Expected has value: true`; + +module.exports["toHaveBeenCalledTimes .not only accepts a number argument #3"] = `expect(received).not.toHaveBeenCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: string +Expected has value: "a"`; + +module.exports["toHaveBeenCalledTimes .not only accepts a number argument #4"] = `expect(received).not.toHaveBeenCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: map +Expected has value: Map {}`; + +module.exports["toHaveBeenCalledTimes .not only accepts a number argument #5"] = `expect(received).not.toHaveBeenCalledTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: function +Expected has value: [Function anonymous]`; + +module.exports["toHaveBeenCalledTimes passes if function called equal to expected times"] = `expect(spy).not.toHaveBeenCalledTimes(expected) + +Expected number of calls: not 2`; + +module.exports["toHaveBeenCalledTimes .not passes if function called more than expected times"] = `expect(jest.fn()).toHaveBeenCalledTimes(expected) + +Expected number of calls: 2 +Received number of calls: 3`; + +module.exports["toHaveBeenCalledTimes .not passes if function called less than expected times"] = `expect(jest.fn()).toHaveBeenCalledTimes(expected) + +Expected number of calls: 2 +Received number of calls: 1`; + +module.exports["toHaveBeenCalledTimes includes the custom mock name in the error message"] = `expect(named-mock).toHaveBeenCalledTimes(expected) + +Expected number of calls: 2 +Received number of calls: 1`; + +module.exports["lastCalledWith works only on spies or mock.fn"] = `expect(received).lastCalledWith(...expected) + +Matcher error: received value must be a mock or spy function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["lastCalledWith works when not called"] = `expect(jest.fn()).lastCalledWith(...expected) + +Expected: "foo", "bar" + +Number of calls: 0`; + +module.exports["lastCalledWith works with arguments that don't match"] = `expect(jest.fn()).lastCalledWith(...expected) + +Expected: "foo", "bar" +Received: "foo", "bar1" + +Number of calls: 1`; + +module.exports["lastCalledWith works with arguments that don't match in number of arguments"] = `expect(jest.fn()).lastCalledWith(...expected) + +Expected: "foo", "bar" +Received: "foo", "bar", "plop" + +Number of calls: 1`; + +module.exports["lastCalledWith works with arguments that don't match with matchers"] = `expect(jest.fn()).lastCalledWith(...expected) + +Expected: Any, Any +Received: "foo", "bar" + +Number of calls: 1`; + +module.exports["lastCalledWith works with arguments that don't match with matchers even when argument is undefined"] = `expect(jest.fn()).lastCalledWith(...expected) + +Expected: "foo", Any +Received: "foo", undefined + +Number of calls: 1`; + +module.exports["lastCalledWith works with arguments that don't match in size even if one is an optional matcher"] = `expect(jest.fn()).lastCalledWith(...expected) + +Expected: "foo", optionalFn<> +Received: "foo" + +Number of calls: 1`; + +module.exports["lastCalledWith works with arguments that match"] = `expect(jest.fn()).not.lastCalledWith(...expected) + +Expected: not "foo", "bar" + +Number of calls: 1`; + +module.exports["lastCalledWith works with arguments that match with matchers"] = `expect(jest.fn()).not.lastCalledWith(...expected) + +Expected: not Any, Any +Received: 0, ["foo", "bar"] + +Number of calls: 1`; + +module.exports["lastCalledWith works with trailing undefined arguments"] = `expect(jest.fn()).lastCalledWith(...expected) + +Expected: "foo" +Received: "foo", undefined + +Number of calls: 1`; + +module.exports["lastCalledWith works with trailing undefined arguments if requested by the match query"] = `expect(jest.fn()).not.lastCalledWith(...expected) + +Expected: not "foo", undefined + +Number of calls: 1`; + +module.exports["lastCalledWith works with trailing undefined arguments when explicitly requested as optional by matcher"] = `expect(jest.fn()).not.lastCalledWith(...expected) + +Expected: not "foo", optionalFn<> +Received: 0, ["foo", undefined] + +Number of calls: 1`; + +module.exports["lastCalledWith works with Map"] = `expect(jest.fn()).not.lastCalledWith(...expected) + +Expected: not Map {1 => 2, 2 => 1} + +Number of calls: 1`; + +module.exports["lastCalledWith works with Map #1"] = `expect(jest.fn()).lastCalledWith(...expected) + +- Expected ++ Received + + Map { +- "a" => "b", +- "b" => "a", ++ 1 => 2, ++ 2 => 1, + }, + +Number of calls: 1`; + +module.exports["lastCalledWith works with Set"] = `expect(jest.fn()).not.lastCalledWith(...expected) + +Expected: not Set {1, 2} + +Number of calls: 1`; + +module.exports["lastCalledWith works with Set #1"] = `expect(jest.fn()).lastCalledWith(...expected) + +- Expected ++ Received + + Set { +- 3, +- 4, ++ 1, ++ 2, + }, + +Number of calls: 1`; + +module.exports["lastCalledWith works with Immutable.js objects"] = `expect(jest.fn()).not.lastCalledWith(...expected) + +Expected: not Immutable.Map {"a": {"b": "c"}}, Immutable.Map {"a": {"b": "c"}} + +Number of calls: 1`; + +module.exports["lastCalledWith works with many arguments"] = `expect(jest.fn()).not.lastCalledWith(...expected) + +Expected: not "foo", "bar" +Received + 2: "foo", "bar1" +-> 3: "foo", "bar" + +Number of calls: 3`; + +module.exports["lastCalledWith works with many arguments that don't match"] = `expect(jest.fn()).lastCalledWith(...expected) + +Expected: "foo", "bar" +Received + 2: "foo", "bar2" +-> 3: "foo", "bar3" + +Number of calls: 3`; + +module.exports["lastCalledWith includes the custom mock name in the error message"] = `expect(named-mock).not.lastCalledWith(...expected) + +Expected: not "foo", "bar" + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works only on spies or mock.fn"] = `expect(received).toHaveBeenLastCalledWith(...expected) + +Matcher error: received value must be a mock or spy function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toHaveBeenLastCalledWith works when not called"] = `expect(jest.fn()).toHaveBeenLastCalledWith(...expected) + +Expected: "foo", "bar" + +Number of calls: 0`; + +module.exports["toHaveBeenLastCalledWith works with arguments that don't match"] = `expect(jest.fn()).toHaveBeenLastCalledWith(...expected) + +Expected: "foo", "bar" +Received: "foo", "bar1" + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with arguments that don't match in number of arguments"] = `expect(jest.fn()).toHaveBeenLastCalledWith(...expected) + +Expected: "foo", "bar" +Received: "foo", "bar", "plop" + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with arguments that don't match with matchers"] = `expect(jest.fn()).toHaveBeenLastCalledWith(...expected) + +Expected: Any, Any +Received: "foo", "bar" + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with arguments that don't match with matchers even when argument is undefined"] = `expect(jest.fn()).toHaveBeenLastCalledWith(...expected) + +Expected: "foo", Any +Received: "foo", undefined + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with arguments that don't match in size even if one is an optional matcher"] = `expect(jest.fn()).toHaveBeenLastCalledWith(...expected) + +Expected: "foo", optionalFn<> +Received: "foo" + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with arguments that match"] = `expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) + +Expected: not "foo", "bar" + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with arguments that match with matchers"] = `expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) + +Expected: not Any, Any +Received: 0, ["foo", "bar"] + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with trailing undefined arguments"] = `expect(jest.fn()).toHaveBeenLastCalledWith(...expected) + +Expected: "foo" +Received: "foo", undefined + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with trailing undefined arguments if requested by the match query"] = `expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) + +Expected: not "foo", undefined + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with trailing undefined arguments when explicitly requested as optional by matcher"] = `expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) + +Expected: not "foo", optionalFn<> +Received: 0, ["foo", undefined] + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with Map"] = `expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) + +Expected: not Map {1 => 2, 2 => 1} + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with Map #1"] = `expect(jest.fn()).toHaveBeenLastCalledWith(...expected) + +- Expected ++ Received + + Map { +- "a" => "b", +- "b" => "a", ++ 1 => 2, ++ 2 => 1, + }, + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with Set"] = `expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) + +Expected: not Set {1, 2} + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with Set #1"] = `expect(jest.fn()).toHaveBeenLastCalledWith(...expected) + +- Expected ++ Received + + Set { +- 3, +- 4, ++ 1, ++ 2, + }, + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with Immutable.js objects"] = `expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) + +Expected: not Immutable.Map {"a": {"b": "c"}}, Immutable.Map {"a": {"b": "c"}} + +Number of calls: 1`; + +module.exports["toHaveBeenLastCalledWith works with many arguments"] = `expect(jest.fn()).not.toHaveBeenLastCalledWith(...expected) + +Expected: not "foo", "bar" +Received + 2: "foo", "bar1" +-> 3: "foo", "bar" + +Number of calls: 3`; + +module.exports["toHaveBeenLastCalledWith works with many arguments that don't match"] = `expect(jest.fn()).toHaveBeenLastCalledWith(...expected) + +Expected: "foo", "bar" +Received + 2: "foo", "bar2" +-> 3: "foo", "bar3" + +Number of calls: 3`; + +module.exports["toHaveBeenLastCalledWith includes the custom mock name in the error message"] = `expect(named-mock).not.toHaveBeenLastCalledWith(...expected) + +Expected: not "foo", "bar" + +Number of calls: 1`; + +module.exports["nthCalledWith works only on spies or mock.fn"] = `expect(received).nthCalledWith(n, ...expected) + +Matcher error: received value must be a mock or spy function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["nthCalledWith works when not called"] = `expect(jest.fn()).nthCalledWith(n, ...expected) + +n: 1 +Expected: "foo", "bar" + +Number of calls: 0`; + +module.exports["nthCalledWith works with arguments that don't match"] = `expect(jest.fn()).nthCalledWith(n, ...expected) + +n: 1 +Expected: "foo", "bar" +Received: "foo", "bar1" + +Number of calls: 1`; + +module.exports["nthCalledWith works with arguments that don't match in number of arguments"] = `expect(jest.fn()).nthCalledWith(n, ...expected) + +n: 1 +Expected: "foo", "bar" +Received: "foo", "bar", "plop" + +Number of calls: 1`; + +module.exports["nthCalledWith works with arguments that don't match with matchers"] = `expect(jest.fn()).nthCalledWith(n, ...expected) + +n: 1 +Expected: Any, Any +Received: "foo", "bar" + +Number of calls: 1`; + +module.exports["nthCalledWith works with arguments that don't match with matchers even when argument is undefined"] = `expect(jest.fn()).nthCalledWith(n, ...expected) + +n: 1 +Expected: "foo", Any +Received: "foo", undefined + +Number of calls: 1`; + +module.exports["nthCalledWith works with arguments that don't match in size even if one is an optional matcher"] = `expect(jest.fn()).nthCalledWith(n, ...expected) + +n: 1 +Expected: "foo", optionalFn<> +Received: "foo" + +Number of calls: 1`; + +module.exports["nthCalledWith works with arguments that match"] = `expect(jest.fn()).not.nthCalledWith(n, ...expected) + +n: 1 +Expected: not "foo", "bar" + +Number of calls: 1`; + +module.exports["nthCalledWith works with arguments that match with matchers"] = `expect(jest.fn()).not.nthCalledWith(n, ...expected) + +n: 1 +Expected: not Any, Any +Received: 0, ["foo", "bar"] + +Number of calls: 1`; + +module.exports["nthCalledWith works with trailing undefined arguments"] = `expect(jest.fn()).nthCalledWith(n, ...expected) + +n: 1 +Expected: "foo" +Received: "foo", undefined + +Number of calls: 1`; + +module.exports["nthCalledWith works with trailing undefined arguments if requested by the match query"] = `expect(jest.fn()).not.nthCalledWith(n, ...expected) + +n: 1 +Expected: not "foo", undefined + +Number of calls: 1`; + +module.exports["nthCalledWith works with trailing undefined arguments when explicitly requested as optional by matcher"] = `expect(jest.fn()).not.nthCalledWith(n, ...expected) + +n: 1 +Expected: not "foo", optionalFn<> +Received: 0, ["foo", undefined] + +Number of calls: 1`; + +module.exports["nthCalledWith works with Map"] = `expect(jest.fn()).not.nthCalledWith(n, ...expected) + +n: 1 +Expected: not Map {1 => 2, 2 => 1} + +Number of calls: 1`; + +module.exports["nthCalledWith works with Map #1"] = `expect(jest.fn()).nthCalledWith(n, ...expected) + +n: 1 +- Expected ++ Received + + Map { +- "a" => "b", +- "b" => "a", ++ 1 => 2, ++ 2 => 1, + }, + +Number of calls: 1`; + +module.exports["nthCalledWith works with Set"] = `expect(jest.fn()).not.nthCalledWith(n, ...expected) + +n: 1 +Expected: not Set {1, 2} + +Number of calls: 1`; + +module.exports["nthCalledWith works with Set #1"] = `expect(jest.fn()).nthCalledWith(n, ...expected) + +n: 1 +- Expected ++ Received + + Set { +- 3, +- 4, ++ 1, ++ 2, + }, + +Number of calls: 1`; + +module.exports["nthCalledWith works with Immutable.js objects"] = `expect(jest.fn()).not.nthCalledWith(n, ...expected) + +n: 1 +Expected: not Immutable.Map {"a": {"b": "c"}}, Immutable.Map {"a": {"b": "c"}} + +Number of calls: 1`; + +module.exports["nthCalledWith works with three calls"] = `expect(jest.fn()).not.nthCalledWith(n, ...expected) + +n: 1 +Expected: not "foo1", "bar" +Received +-> 1: "foo1", "bar" + 2: "foo", "bar1" + +Number of calls: 3`; + +module.exports["nthCalledWith positive throw matcher error for n that is not positive integer"] = `expect(received).nthCalledWith(n, ...expected) + +Matcher error: n must be a positive integer + +n has type: number +n has value: 0`; + +module.exports["nthCalledWith positive throw matcher error for n that is not integer"] = `expect(received).nthCalledWith(n, ...expected) + +Matcher error: n must be a positive integer + +n has type: number +n has value: 0.1`; + +module.exports["nthCalledWith negative throw matcher error for n that is not integer"] = `expect(received).not.nthCalledWith(n, ...expected) + +Matcher error: n must be a positive integer + +n has type: number +n has value: Infinity`; + +module.exports["nthCalledWith includes the custom mock name in the error message"] = `expect(named-mock).not.nthCalledWith(n, ...expected) + +n: 1 +Expected: not "foo", "bar" + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works only on spies or mock.fn"] = `expect(received).toHaveBeenNthCalledWith(n, ...expected) + +Matcher error: received value must be a mock or spy function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toHaveBeenNthCalledWith works when not called"] = `expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: "foo", "bar" + +Number of calls: 0`; + +module.exports["toHaveBeenNthCalledWith works with arguments that don't match"] = `expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: "foo", "bar" +Received: "foo", "bar1" + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with arguments that don't match in number of arguments"] = `expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: "foo", "bar" +Received: "foo", "bar", "plop" + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with arguments that don't match with matchers"] = `expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: Any, Any +Received: "foo", "bar" + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with arguments that don't match with matchers even when argument is undefined"] = `expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: "foo", Any +Received: "foo", undefined + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with arguments that don't match in size even if one is an optional matcher"] = `expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: "foo", optionalFn<> +Received: "foo" + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with arguments that match"] = `expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: not "foo", "bar" + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with arguments that match with matchers"] = `expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: not Any, Any +Received: 0, ["foo", "bar"] + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with trailing undefined arguments"] = `expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: "foo" +Received: "foo", undefined + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with trailing undefined arguments if requested by the match query"] = `expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: not "foo", undefined + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with trailing undefined arguments when explicitly requested as optional by matcher"] = `expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: not "foo", optionalFn<> +Received: 0, ["foo", undefined] + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with Map"] = `expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: not Map {1 => 2, 2 => 1} + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with Map #1"] = `expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +- Expected ++ Received + + Map { +- "a" => "b", +- "b" => "a", ++ 1 => 2, ++ 2 => 1, + }, + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with Set"] = `expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: not Set {1, 2} + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with Set #1"] = `expect(jest.fn()).toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +- Expected ++ Received + + Set { +- 3, +- 4, ++ 1, ++ 2, + }, + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with Immutable.js objects"] = `expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: not Immutable.Map {"a": {"b": "c"}}, Immutable.Map {"a": {"b": "c"}} + +Number of calls: 1`; + +module.exports["toHaveBeenNthCalledWith works with three calls"] = `expect(jest.fn()).not.toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: not "foo1", "bar" +Received +-> 1: "foo1", "bar" + 2: "foo", "bar1" + +Number of calls: 3`; + +module.exports["toHaveBeenNthCalledWith positive throw matcher error for n that is not positive integer"] = `expect(received).toHaveBeenNthCalledWith(n, ...expected) + +Matcher error: n must be a positive integer + +n has type: number +n has value: 0`; + +module.exports["toHaveBeenNthCalledWith positive throw matcher error for n that is not integer"] = `expect(received).toHaveBeenNthCalledWith(n, ...expected) + +Matcher error: n must be a positive integer + +n has type: number +n has value: 0.1`; + +module.exports["toHaveBeenNthCalledWith negative throw matcher error for n that is not integer"] = `expect(received).not.toHaveBeenNthCalledWith(n, ...expected) + +Matcher error: n must be a positive integer + +n has type: number +n has value: Infinity`; + +module.exports["toHaveBeenNthCalledWith includes the custom mock name in the error message"] = `expect(named-mock).not.toHaveBeenNthCalledWith(n, ...expected) + +n: 1 +Expected: not "foo", "bar" + +Number of calls: 1`; + +module.exports["toBeCalledWith works only on spies or mock.fn"] = `expect(received).toBeCalledWith(...expected) + +Matcher error: received value must be a mock or spy function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toBeCalledWith works when not called"] = `expect(jest.fn()).toBeCalledWith(...expected) + +Expected: "foo", "bar" + +Number of calls: 0`; + +module.exports["toBeCalledWith works with arguments that don't match"] = `expect(jest.fn()).toBeCalledWith(...expected) + +Expected: "foo", "bar" +Received: "foo", "bar1" + +Number of calls: 1`; + +module.exports["toBeCalledWith works with arguments that don't match in number of arguments"] = `expect(jest.fn()).toBeCalledWith(...expected) + +Expected: "foo", "bar" +Received: "foo", "bar", "plop" + +Number of calls: 1`; + +module.exports["toBeCalledWith works with arguments that don't match with matchers"] = `expect(jest.fn()).toBeCalledWith(...expected) + +Expected: Any, Any +Received: "foo", "bar" + +Number of calls: 1`; + +module.exports["toBeCalledWith works with arguments that don't match with matchers even when argument is undefined"] = `expect(jest.fn()).toBeCalledWith(...expected) + +Expected: "foo", Any +Received: "foo", undefined + +Number of calls: 1`; + +module.exports["toBeCalledWith works with arguments that don't match in size even if one is an optional matcher"] = `expect(jest.fn()).toBeCalledWith(...expected) + +Expected: "foo", optionalFn<> +Received: "foo" + +Number of calls: 1`; + +module.exports["toBeCalledWith works with arguments that match"] = `expect(jest.fn()).not.toBeCalledWith(...expected) + +Expected: not "foo", "bar" + +Number of calls: 1`; + +module.exports["toBeCalledWith works with arguments that match with matchers"] = `expect(jest.fn()).not.toBeCalledWith(...expected) + +Expected: not Any, Any +Received: 0, ["foo", "bar"] + +Number of calls: 1`; + +module.exports["toBeCalledWith works with trailing undefined arguments"] = `expect(jest.fn()).toBeCalledWith(...expected) + +Expected: "foo" +Received: "foo", undefined + +Number of calls: 1`; + +module.exports["toBeCalledWith works with trailing undefined arguments if requested by the match query"] = `expect(jest.fn()).not.toBeCalledWith(...expected) + +Expected: not "foo", undefined + +Number of calls: 1`; + +module.exports["toBeCalledWith works with trailing undefined arguments when explicitly requested as optional by matcher"] = `expect(jest.fn()).not.toBeCalledWith(...expected) + +Expected: not "foo", optionalFn<> +Received: 0, ["foo", undefined] + +Number of calls: 1`; + +module.exports["toBeCalledWith works with Map"] = `expect(jest.fn()).not.toBeCalledWith(...expected) + +Expected: not Map {1 => 2, 2 => 1} + +Number of calls: 1`; + +module.exports["toBeCalledWith works with Map #1"] = `expect(jest.fn()).toBeCalledWith(...expected) + +- Expected ++ Received + + Map { +- "a" => "b", +- "b" => "a", ++ 1 => 2, ++ 2 => 1, + }, + +Number of calls: 1`; + +module.exports["toBeCalledWith works with Set"] = `expect(jest.fn()).not.toBeCalledWith(...expected) + +Expected: not Set {1, 2} + +Number of calls: 1`; + +module.exports["toBeCalledWith works with Set #1"] = `expect(jest.fn()).toBeCalledWith(...expected) + +- Expected ++ Received + + Set { +- 3, +- 4, ++ 1, ++ 2, + }, + +Number of calls: 1`; + +module.exports["toBeCalledWith works with Immutable.js objects"] = `expect(jest.fn()).not.toBeCalledWith(...expected) + +Expected: not Immutable.Map {"a": {"b": "c"}}, Immutable.Map {"a": {"b": "c"}} + +Number of calls: 1`; + +module.exports["toBeCalledWith works with many arguments"] = `expect(jest.fn()).not.toBeCalledWith(...expected) + +Expected: not "foo", "bar" +Received + 3: "foo", "bar" + +Number of calls: 3`; + +module.exports["toBeCalledWith works with many arguments that don't match"] = `expect(jest.fn()).toBeCalledWith(...expected) + +Expected: "foo", "bar" +Received + 1: "foo", "bar1" + 2: "foo", "bar2" + 3: "foo", "bar3" + +Number of calls: 3`; + +module.exports["toBeCalledWith includes the custom mock name in the error message"] = `expect(named-mock).not.toBeCalledWith(...expected) + +Expected: not "foo", "bar" + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works only on spies or mock.fn"] = `expect(received).toHaveBeenCalledWith(...expected) + +Matcher error: received value must be a mock or spy function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toHaveBeenCalledWith works when not called"] = `expect(jest.fn()).toHaveBeenCalledWith(...expected) + +Expected: "foo", "bar" + +Number of calls: 0`; + +module.exports["toHaveBeenCalledWith works with arguments that don't match"] = `expect(jest.fn()).toHaveBeenCalledWith(...expected) + +Expected: "foo", "bar" +Received: "foo", "bar1" + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with arguments that don't match in number of arguments"] = `expect(jest.fn()).toHaveBeenCalledWith(...expected) + +Expected: "foo", "bar" +Received: "foo", "bar", "plop" + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with arguments that don't match with matchers"] = `expect(jest.fn()).toHaveBeenCalledWith(...expected) + +Expected: Any, Any +Received: "foo", "bar" + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with arguments that don't match with matchers even when argument is undefined"] = `expect(jest.fn()).toHaveBeenCalledWith(...expected) + +Expected: "foo", Any +Received: "foo", undefined + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with arguments that don't match in size even if one is an optional matcher"] = `expect(jest.fn()).toHaveBeenCalledWith(...expected) + +Expected: "foo", optionalFn<> +Received: "foo" + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with arguments that match"] = `expect(jest.fn()).not.toHaveBeenCalledWith(...expected) + +Expected: not "foo", "bar" + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with arguments that match with matchers"] = `expect(jest.fn()).not.toHaveBeenCalledWith(...expected) + +Expected: not Any, Any +Received: 0, ["foo", "bar"] + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with trailing undefined arguments"] = `expect(jest.fn()).toHaveBeenCalledWith(...expected) + +Expected: "foo" +Received: "foo", undefined + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with trailing undefined arguments if requested by the match query"] = `expect(jest.fn()).not.toHaveBeenCalledWith(...expected) + +Expected: not "foo", undefined + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with trailing undefined arguments when explicitly requested as optional by matcher"] = `expect(jest.fn()).not.toHaveBeenCalledWith(...expected) + +Expected: not "foo", optionalFn<> +Received: 0, ["foo", undefined] + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with Map"] = `expect(jest.fn()).not.toHaveBeenCalledWith(...expected) + +Expected: not Map {1 => 2, 2 => 1} + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with Map #1"] = `expect(jest.fn()).toHaveBeenCalledWith(...expected) + +- Expected ++ Received + + Map { +- "a" => "b", +- "b" => "a", ++ 1 => 2, ++ 2 => 1, + }, + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with Set"] = `expect(jest.fn()).not.toHaveBeenCalledWith(...expected) + +Expected: not Set {1, 2} + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with Set #1"] = `expect(jest.fn()).toHaveBeenCalledWith(...expected) + +- Expected ++ Received + + Set { +- 3, +- 4, ++ 1, ++ 2, + }, + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with Immutable.js objects"] = `expect(jest.fn()).not.toHaveBeenCalledWith(...expected) + +Expected: not Immutable.Map {"a": {"b": "c"}}, Immutable.Map {"a": {"b": "c"}} + +Number of calls: 1`; + +module.exports["toHaveBeenCalledWith works with many arguments"] = `expect(jest.fn()).not.toHaveBeenCalledWith(...expected) + +Expected: not "foo", "bar" +Received + 3: "foo", "bar" + +Number of calls: 3`; + +module.exports["toHaveBeenCalledWith works with many arguments that don't match"] = `expect(jest.fn()).toHaveBeenCalledWith(...expected) + +Expected: "foo", "bar" +Received + 1: "foo", "bar1" + 2: "foo", "bar2" + 3: "foo", "bar3" + +Number of calls: 3`; + +module.exports["toHaveBeenCalledWith includes the custom mock name in the error message"] = `expect(named-mock).not.toHaveBeenCalledWith(...expected) + +Expected: not "foo", "bar" + +Number of calls: 1`; + +module.exports["toReturn .not works only on mock.fn"] = `expect(received).not.toReturn() + +Matcher error: received value must be a mock function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toReturn throw matcher error if received is spy"] = `expect(received).toReturn() + +Matcher error: received value must be a mock function + +Received has type: function +Received has value: [Function spy]`; + +module.exports["toReturn passes when returned"] = `expect(jest.fn()).not.toReturn() + +Expected number of returns: 0 +Received number of returns: 1 + +1: 42`; + +module.exports["toReturn passes when undefined is returned"] = `expect(jest.fn()).not.toReturn() + +Expected number of returns: 0 +Received number of returns: 1 + +1: undefined`; + +module.exports["toReturn passes when at least one call does not throw"] = `expect(jest.fn()).not.toReturn() + +Expected number of returns: 0 +Received number of returns: 2 + +1: 42 +3: 42 + +Received number of calls: 3`; + +module.exports["toReturn .not passes when not returned"] = `expect(jest.fn()).toReturn() + +Expected number of returns: >= 1 +Received number of returns: 0`; + +module.exports["toReturn .not passes when all calls throw"] = `expect(jest.fn()).toReturn() + +Expected number of returns: >= 1 +Received number of returns: 0 +Received number of calls: 2`; + +module.exports["toReturn .not passes when a call throws undefined"] = `expect(jest.fn()).toReturn() + +Expected number of returns: >= 1 +Received number of returns: 0 +Received number of calls: 1`; + +module.exports["toReturn fails with any argument passed"] = `expect(received).toReturn() + +Matcher error: this matcher must not have an expected argument + +Expected has type: number +Expected has value: 555`; + +module.exports["toReturn .not fails with any argument passed"] = `expect(received).not.toReturn() + +Matcher error: this matcher must not have an expected argument + +Expected has type: number +Expected has value: 555`; + +module.exports["toReturn includes the custom mock name in the error message"] = `expect(named-mock).not.toReturn() + +Expected number of returns: 0 +Received number of returns: 1 + +1: 42`; + +module.exports["toReturn incomplete recursive calls are handled properly"] = `expect(jest.fn()).toReturn() + +Expected number of returns: >= 1 +Received number of returns: 0 +Received number of calls: 4`; + +module.exports["toHaveReturned .not works only on mock.fn"] = `expect(received).not.toHaveReturned() + +Matcher error: received value must be a mock function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toHaveReturned throw matcher error if received is spy"] = `expect(received).toHaveReturned() + +Matcher error: received value must be a mock function + +Received has type: function +Received has value: [Function spy]`; + +module.exports["toHaveReturned passes when returned"] = `expect(jest.fn()).not.toHaveReturned() + +Expected number of returns: 0 +Received number of returns: 1 + +1: 42`; + +module.exports["toHaveReturned passes when undefined is returned"] = `expect(jest.fn()).not.toHaveReturned() + +Expected number of returns: 0 +Received number of returns: 1 + +1: undefined`; + +module.exports["toHaveReturned passes when at least one call does not throw"] = `expect(jest.fn()).not.toHaveReturned() + +Expected number of returns: 0 +Received number of returns: 2 + +1: 42 +3: 42 + +Received number of calls: 3`; + +module.exports["toHaveReturned .not passes when not returned"] = `expect(jest.fn()).toHaveReturned() + +Expected number of returns: >= 1 +Received number of returns: 0`; + +module.exports["toHaveReturned .not passes when all calls throw"] = `expect(jest.fn()).toHaveReturned() + +Expected number of returns: >= 1 +Received number of returns: 0 +Received number of calls: 2`; + +module.exports["toHaveReturned .not passes when a call throws undefined"] = `expect(jest.fn()).toHaveReturned() + +Expected number of returns: >= 1 +Received number of returns: 0 +Received number of calls: 1`; + +module.exports["toHaveReturned fails with any argument passed"] = `expect(received).toHaveReturned() + +Matcher error: this matcher must not have an expected argument + +Expected has type: number +Expected has value: 555`; + +module.exports["toHaveReturned .not fails with any argument passed"] = `expect(received).not.toHaveReturned() + +Matcher error: this matcher must not have an expected argument + +Expected has type: number +Expected has value: 555`; + +module.exports["toHaveReturned includes the custom mock name in the error message"] = `expect(named-mock).not.toHaveReturned() + +Expected number of returns: 0 +Received number of returns: 1 + +1: 42`; + +module.exports["toHaveReturned incomplete recursive calls are handled properly"] = `expect(jest.fn()).toHaveReturned() + +Expected number of returns: >= 1 +Received number of returns: 0 +Received number of calls: 4`; + +module.exports["toReturnTimes throw matcher error if received is spy"] = `expect(received).not.toReturnTimes(expected) + +Matcher error: received value must be a mock function + +Received has type: function +Received has value: [Function spy]`; + +module.exports["toReturnTimes only accepts a number argument"] = `expect(received).toReturnTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: object +Expected has value: {}`; + +module.exports["toReturnTimes only accepts a number argument #1"] = `expect(received).toReturnTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: array +Expected has value: []`; + +module.exports["toReturnTimes only accepts a number argument #2"] = `expect(received).toReturnTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: boolean +Expected has value: true`; + +module.exports["toReturnTimes only accepts a number argument #3"] = `expect(received).toReturnTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: string +Expected has value: "a"`; + +module.exports["toReturnTimes only accepts a number argument #4"] = `expect(received).toReturnTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: map +Expected has value: Map {}`; + +module.exports["toReturnTimes only accepts a number argument #5"] = `expect(received).toReturnTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: function +Expected has value: [Function anonymous]`; + +module.exports["toReturnTimes .not only accepts a number argument"] = `expect(received).not.toReturnTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: object +Expected has value: {}`; + +module.exports["toReturnTimes .not only accepts a number argument #1"] = `expect(received).not.toReturnTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: array +Expected has value: []`; + +module.exports["toReturnTimes .not only accepts a number argument #2"] = `expect(received).not.toReturnTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: boolean +Expected has value: true`; + +module.exports["toReturnTimes .not only accepts a number argument #3"] = `expect(received).not.toReturnTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: string +Expected has value: "a"`; + +module.exports["toReturnTimes .not only accepts a number argument #4"] = `expect(received).not.toReturnTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: map +Expected has value: Map {}`; + +module.exports["toReturnTimes .not only accepts a number argument #5"] = `expect(received).not.toReturnTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: function +Expected has value: [Function anonymous]`; + +module.exports["toReturnTimes passes if function returned equal to expected times"] = `expect(jest.fn()).not.toReturnTimes(expected) + +Expected number of returns: not 2`; + +module.exports["toReturnTimes calls that return undefined are counted as returns"] = `expect(jest.fn()).not.toReturnTimes(expected) + +Expected number of returns: not 2`; + +module.exports["toReturnTimes .not passes if function returned more than expected times"] = `expect(jest.fn()).toReturnTimes(expected) + +Expected number of returns: 2 +Received number of returns: 3`; + +module.exports["toReturnTimes .not passes if function called less than expected times"] = `expect(jest.fn()).toReturnTimes(expected) + +Expected number of returns: 2 +Received number of returns: 1`; + +module.exports["toReturnTimes calls that throw are not counted"] = `expect(jest.fn()).toReturnTimes(expected) + +Expected number of returns: 3 +Received number of returns: 2 +Received number of calls: 3`; + +module.exports["toReturnTimes calls that throw undefined are not counted"] = `expect(jest.fn()).not.toReturnTimes(expected) + +Expected number of returns: not 2 + +Received number of calls: 3`; + +module.exports["toReturnTimes includes the custom mock name in the error message"] = `expect(named-mock).toReturnTimes(expected) + +Expected number of returns: 1 +Received number of returns: 2`; + +module.exports["toReturnTimes incomplete recursive calls are handled properly"] = `expect(jest.fn()).not.toReturnTimes(expected) + +Expected number of returns: not 2 + +Received number of calls: 4`; + +module.exports["toHaveReturnedTimes throw matcher error if received is spy"] = `expect(received).not.toHaveReturnedTimes(expected) + +Matcher error: received value must be a mock function + +Received has type: function +Received has value: [Function spy]`; + +module.exports["toHaveReturnedTimes only accepts a number argument"] = `expect(received).toHaveReturnedTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: object +Expected has value: {}`; + +module.exports["toHaveReturnedTimes only accepts a number argument #1"] = `expect(received).toHaveReturnedTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: array +Expected has value: []`; + +module.exports["toHaveReturnedTimes only accepts a number argument #2"] = `expect(received).toHaveReturnedTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: boolean +Expected has value: true`; + +module.exports["toHaveReturnedTimes only accepts a number argument #3"] = `expect(received).toHaveReturnedTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: string +Expected has value: "a"`; + +module.exports["toHaveReturnedTimes only accepts a number argument #4"] = `expect(received).toHaveReturnedTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: map +Expected has value: Map {}`; + +module.exports["toHaveReturnedTimes only accepts a number argument #5"] = `expect(received).toHaveReturnedTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: function +Expected has value: [Function anonymous]`; + +module.exports["toHaveReturnedTimes .not only accepts a number argument"] = `expect(received).not.toHaveReturnedTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: object +Expected has value: {}`; + +module.exports["toHaveReturnedTimes .not only accepts a number argument #1"] = `expect(received).not.toHaveReturnedTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: array +Expected has value: []`; + +module.exports["toHaveReturnedTimes .not only accepts a number argument #2"] = `expect(received).not.toHaveReturnedTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: boolean +Expected has value: true`; + +module.exports["toHaveReturnedTimes .not only accepts a number argument #3"] = `expect(received).not.toHaveReturnedTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: string +Expected has value: "a"`; + +module.exports["toHaveReturnedTimes .not only accepts a number argument #4"] = `expect(received).not.toHaveReturnedTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: map +Expected has value: Map {}`; + +module.exports["toHaveReturnedTimes .not only accepts a number argument #5"] = `expect(received).not.toHaveReturnedTimes(expected) + +Matcher error: expected value must be a non-negative integer + +Expected has type: function +Expected has value: [Function anonymous]`; + +module.exports["toHaveReturnedTimes passes if function returned equal to expected times"] = `expect(jest.fn()).not.toHaveReturnedTimes(expected) + +Expected number of returns: not 2`; + +module.exports["toHaveReturnedTimes calls that return undefined are counted as returns"] = `expect(jest.fn()).not.toHaveReturnedTimes(expected) + +Expected number of returns: not 2`; + +module.exports["toHaveReturnedTimes .not passes if function returned more than expected times"] = `expect(jest.fn()).toHaveReturnedTimes(expected) + +Expected number of returns: 2 +Received number of returns: 3`; + +module.exports["toHaveReturnedTimes .not passes if function called less than expected times"] = `expect(jest.fn()).toHaveReturnedTimes(expected) + +Expected number of returns: 2 +Received number of returns: 1`; + +module.exports["toHaveReturnedTimes calls that throw are not counted"] = `expect(jest.fn()).toHaveReturnedTimes(expected) + +Expected number of returns: 3 +Received number of returns: 2 +Received number of calls: 3`; + +module.exports["toHaveReturnedTimes calls that throw undefined are not counted"] = `expect(jest.fn()).not.toHaveReturnedTimes(expected) + +Expected number of returns: not 2 + +Received number of calls: 3`; + +module.exports["toHaveReturnedTimes includes the custom mock name in the error message"] = `expect(named-mock).toHaveReturnedTimes(expected) + +Expected number of returns: 1 +Received number of returns: 2`; + +module.exports["toHaveReturnedTimes incomplete recursive calls are handled properly"] = `expect(jest.fn()).not.toHaveReturnedTimes(expected) + +Expected number of returns: not 2 + +Received number of calls: 4`; + +module.exports["lastReturnedWith works only on spies or mock.fn"] = `expect(received).lastReturnedWith(expected) + +Matcher error: received value must be a mock function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["lastReturnedWith works when not called"] = `expect(jest.fn()).lastReturnedWith(expected) + +Expected: "foo" + +Number of returns: 0`; + +module.exports["lastReturnedWith works with argument that does not match"] = `expect(jest.fn()).lastReturnedWith(expected) + +Expected: "bar" +Received: "foo" + +Number of returns: 1`; + +module.exports["lastReturnedWith works with argument that does match"] = `expect(jest.fn()).not.lastReturnedWith(expected) + +Expected: not "foo" + +Number of returns: 1`; + +module.exports["lastReturnedWith works with undefined"] = `expect(jest.fn()).not.lastReturnedWith(expected) + +Expected: not undefined + +Number of returns: 1`; + +module.exports["lastReturnedWith works with Map"] = `expect(jest.fn()).not.lastReturnedWith(expected) + +Expected: not Map {1 => 2, 2 => 1} + +Number of returns: 1`; + +module.exports["lastReturnedWith works with Map #1"] = `expect(jest.fn()).lastReturnedWith(expected) + +Expected: Map {"a" => "b", "b" => "a"} +Received: Map {1 => 2, 2 => 1} + +Number of returns: 1`; + +module.exports["lastReturnedWith works with Set"] = `expect(jest.fn()).not.lastReturnedWith(expected) + +Expected: not Set {1, 2} + +Number of returns: 1`; + +module.exports["lastReturnedWith works with Set #1"] = `expect(jest.fn()).lastReturnedWith(expected) + +Expected: Set {3, 4} +Received: Set {1, 2} + +Number of returns: 1`; + +module.exports["lastReturnedWith works with Immutable.js objects directly created"] = `expect(jest.fn()).not.lastReturnedWith(expected) + +Expected: not Immutable.Map {"a": {"b": "c"}} + +Number of returns: 1`; + +module.exports["lastReturnedWith works with Immutable.js objects indirectly created"] = `expect(jest.fn()).not.lastReturnedWith(expected) + +Expected: not Immutable.Map {"a": {"b": "c"}} + +Number of returns: 1`; + +module.exports["lastReturnedWith a call that throws is not considered to have returned"] = `expect(jest.fn()).lastReturnedWith(expected) + +Expected: undefined +Received: function call threw an error + +Number of returns: 0 +Number of calls: 1`; + +module.exports["lastReturnedWith a call that throws undefined is not considered to have returned"] = `expect(jest.fn()).lastReturnedWith(expected) + +Expected: undefined +Received: function call threw an error + +Number of returns: 0 +Number of calls: 1`; + +module.exports["lastReturnedWith returnedWith works with more calls than the limit"] = `expect(jest.fn()).lastReturnedWith(expected) + +Expected: "bar" +Received + 5: "foo5" +-> 6: "foo6" + +Number of returns: 6`; + +module.exports["lastReturnedWith returnedWith incomplete recursive calls are handled properly"] = `expect(jest.fn()).lastReturnedWith(expected) + +Expected: undefined +Received + 3: function call has not returned yet +-> 4: function call has not returned yet + +Number of returns: 0 +Number of calls: 4`; + +module.exports["lastReturnedWith lastReturnedWith works with three calls"] = `expect(jest.fn()).not.lastReturnedWith(expected) + +Expected: not "foo3" +Received + 2: "foo2" +-> 3: "foo3" + +Number of returns: 3`; + +module.exports["lastReturnedWith lastReturnedWith incomplete recursive calls are handled properly"] = `expect(jest.fn()).lastReturnedWith(expected) + +Expected: 0 +Received + 3: function call has not returned yet +-> 4: function call has not returned yet + +Number of returns: 0 +Number of calls: 4`; + +module.exports["lastReturnedWith includes the custom mock name in the error message"] = `expect(named-mock).lastReturnedWith(expected) + +Expected: "foo" + +Number of returns: 0`; + +module.exports["toHaveLastReturnedWith works only on spies or mock.fn"] = `expect(received).toHaveLastReturnedWith(expected) + +Matcher error: received value must be a mock function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toHaveLastReturnedWith works when not called"] = `expect(jest.fn()).toHaveLastReturnedWith(expected) + +Expected: "foo" + +Number of returns: 0`; + +module.exports["toHaveLastReturnedWith works with argument that does not match"] = `expect(jest.fn()).toHaveLastReturnedWith(expected) + +Expected: "bar" +Received: "foo" + +Number of returns: 1`; + +module.exports["toHaveLastReturnedWith works with argument that does match"] = `expect(jest.fn()).not.toHaveLastReturnedWith(expected) + +Expected: not "foo" + +Number of returns: 1`; + +module.exports["toHaveLastReturnedWith works with undefined"] = `expect(jest.fn()).not.toHaveLastReturnedWith(expected) + +Expected: not undefined + +Number of returns: 1`; + +module.exports["toHaveLastReturnedWith works with Map"] = `expect(jest.fn()).not.toHaveLastReturnedWith(expected) + +Expected: not Map {1 => 2, 2 => 1} + +Number of returns: 1`; + +module.exports["toHaveLastReturnedWith works with Map #1"] = `expect(jest.fn()).toHaveLastReturnedWith(expected) + +Expected: Map {"a" => "b", "b" => "a"} +Received: Map {1 => 2, 2 => 1} + +Number of returns: 1`; + +module.exports["toHaveLastReturnedWith works with Set"] = `expect(jest.fn()).not.toHaveLastReturnedWith(expected) + +Expected: not Set {1, 2} + +Number of returns: 1`; + +module.exports["toHaveLastReturnedWith works with Set #1"] = `expect(jest.fn()).toHaveLastReturnedWith(expected) + +Expected: Set {3, 4} +Received: Set {1, 2} + +Number of returns: 1`; + +module.exports["toHaveLastReturnedWith works with Immutable.js objects directly created"] = `expect(jest.fn()).not.toHaveLastReturnedWith(expected) + +Expected: not Immutable.Map {"a": {"b": "c"}} + +Number of returns: 1`; + +module.exports["toHaveLastReturnedWith works with Immutable.js objects indirectly created"] = `expect(jest.fn()).not.toHaveLastReturnedWith(expected) + +Expected: not Immutable.Map {"a": {"b": "c"}} + +Number of returns: 1`; + +module.exports["toHaveLastReturnedWith a call that throws is not considered to have returned"] = `expect(jest.fn()).toHaveLastReturnedWith(expected) + +Expected: undefined +Received: function call threw an error + +Number of returns: 0 +Number of calls: 1`; + +module.exports["toHaveLastReturnedWith a call that throws undefined is not considered to have returned"] = `expect(jest.fn()).toHaveLastReturnedWith(expected) + +Expected: undefined +Received: function call threw an error + +Number of returns: 0 +Number of calls: 1`; + +module.exports["toHaveLastReturnedWith returnedWith works with more calls than the limit"] = `expect(jest.fn()).toHaveLastReturnedWith(expected) + +Expected: "bar" +Received + 5: "foo5" +-> 6: "foo6" + +Number of returns: 6`; + +module.exports["toHaveLastReturnedWith returnedWith incomplete recursive calls are handled properly"] = `expect(jest.fn()).toHaveLastReturnedWith(expected) + +Expected: undefined +Received + 3: function call has not returned yet +-> 4: function call has not returned yet + +Number of returns: 0 +Number of calls: 4`; + +module.exports["toHaveLastReturnedWith lastReturnedWith works with three calls"] = `expect(jest.fn()).not.toHaveLastReturnedWith(expected) + +Expected: not "foo3" +Received + 2: "foo2" +-> 3: "foo3" + +Number of returns: 3`; + +module.exports["toHaveLastReturnedWith lastReturnedWith incomplete recursive calls are handled properly"] = `expect(jest.fn()).toHaveLastReturnedWith(expected) + +Expected: 0 +Received + 3: function call has not returned yet +-> 4: function call has not returned yet + +Number of returns: 0 +Number of calls: 4`; + +module.exports["toHaveLastReturnedWith includes the custom mock name in the error message"] = `expect(named-mock).toHaveLastReturnedWith(expected) + +Expected: "foo" + +Number of returns: 0`; + +module.exports["nthReturnedWith works only on spies or mock.fn"] = `expect(received).nthReturnedWith(n, expected) + +Matcher error: received value must be a mock function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["nthReturnedWith works when not called"] = `expect(jest.fn()).nthReturnedWith(n, expected) + +n: 1 +Expected: "foo" + +Number of returns: 0`; + +module.exports["nthReturnedWith works with argument that does not match"] = `expect(jest.fn()).nthReturnedWith(n, expected) + +n: 1 +Expected: "bar" +Received: "foo" + +Number of returns: 1`; + +module.exports["nthReturnedWith works with argument that does match"] = `expect(jest.fn()).not.nthReturnedWith(n, expected) + +n: 1 +Expected: not "foo" + +Number of returns: 1`; + +module.exports["nthReturnedWith works with undefined"] = `expect(jest.fn()).not.nthReturnedWith(n, expected) + +n: 1 +Expected: not undefined + +Number of returns: 1`; + +module.exports["nthReturnedWith works with Map"] = `expect(jest.fn()).not.nthReturnedWith(n, expected) + +n: 1 +Expected: not Map {1 => 2, 2 => 1} + +Number of returns: 1`; + +module.exports["nthReturnedWith works with Map #1"] = `expect(jest.fn()).nthReturnedWith(n, expected) + +n: 1 +Expected: Map {"a" => "b", "b" => "a"} +Received: Map {1 => 2, 2 => 1} + +Number of returns: 1`; + +module.exports["nthReturnedWith works with Set"] = `expect(jest.fn()).not.nthReturnedWith(n, expected) + +n: 1 +Expected: not Set {1, 2} + +Number of returns: 1`; + +module.exports["nthReturnedWith works with Set #1"] = `expect(jest.fn()).nthReturnedWith(n, expected) + +n: 1 +Expected: Set {3, 4} +Received: Set {1, 2} + +Number of returns: 1`; + +module.exports["nthReturnedWith works with Immutable.js objects directly created"] = `expect(jest.fn()).not.nthReturnedWith(n, expected) + +n: 1 +Expected: not Immutable.Map {"a": {"b": "c"}} + +Number of returns: 1`; + +module.exports["nthReturnedWith works with Immutable.js objects indirectly created"] = `expect(jest.fn()).not.nthReturnedWith(n, expected) + +n: 1 +Expected: not Immutable.Map {"a": {"b": "c"}} + +Number of returns: 1`; + +module.exports["nthReturnedWith a call that throws is not considered to have returned"] = `expect(jest.fn()).nthReturnedWith(n, expected) + +n: 1 +Expected: undefined +Received: function call threw an error + +Number of returns: 0 +Number of calls: 1`; + +module.exports["nthReturnedWith a call that throws undefined is not considered to have returned"] = `expect(jest.fn()).nthReturnedWith(n, expected) + +n: 1 +Expected: undefined +Received: function call threw an error + +Number of returns: 0 +Number of calls: 1`; + +module.exports["nthReturnedWith nthReturnedWith works with three calls"] = `expect(jest.fn()).not.nthReturnedWith(n, expected) + +n: 1 +Expected: not "foo1" +Received +-> 1: "foo1" + 2: "foo2" + +Number of returns: 3`; + +module.exports["nthReturnedWith nthReturnedWith should replace 1st, 2nd, 3rd with first, second, third"] = `expect(jest.fn()).nthReturnedWith(n, expected) + +n: 1 +Expected: "bar1" +Received +-> 1: "foo1" + 2: "foo2" + +Number of returns: 3`; + +module.exports["nthReturnedWith nthReturnedWith should replace 1st, 2nd, 3rd with first, second, third #1"] = `expect(jest.fn()).not.nthReturnedWith(n, expected) + +n: 1 +Expected: not "foo1" +Received +-> 1: "foo1" + 2: "foo2" + +Number of returns: 3`; + +module.exports["nthReturnedWith nthReturnedWith positive throw matcher error for n that is not positive integer"] = `expect(received).nthReturnedWith(n, expected) + +Matcher error: n must be a positive integer + +n has type: number +n has value: 0`; + +module.exports["nthReturnedWith nthReturnedWith should reject nth value greater than number of calls"] = `expect(jest.fn()).nthReturnedWith(n, expected) + +n: 4 +Expected: "foo" +Received + 3: "foo" + +Number of returns: 3`; + +module.exports["nthReturnedWith nthReturnedWith positive throw matcher error for n that is not integer"] = `expect(received).nthReturnedWith(n, expected) + +Matcher error: n must be a positive integer + +n has type: number +n has value: 0.1`; + +module.exports["nthReturnedWith nthReturnedWith negative throw matcher error for n that is not number"] = `expect(received).not.nthReturnedWith(n, expected) + +Matcher error: n must be a positive integer + +n has value: undefined`; + +module.exports["nthReturnedWith nthReturnedWith incomplete recursive calls are handled properly"] = `expect(jest.fn()).nthReturnedWith(n, expected) + +n: 1 +Expected: 6 +Received +-> 1: function call has not returned yet + 2: function call has not returned yet + +Number of returns: 2 +Number of calls: 4`; + +module.exports["nthReturnedWith nthReturnedWith incomplete recursive calls are handled properly #1"] = `expect(jest.fn()).nthReturnedWith(n, expected) + +n: 2 +Expected: 3 +Received + 1: function call has not returned yet +-> 2: function call has not returned yet + 3: 1 + +Number of returns: 2 +Number of calls: 4`; + +module.exports["nthReturnedWith nthReturnedWith incomplete recursive calls are handled properly #2"] = `expect(jest.fn()).not.nthReturnedWith(n, expected) + +n: 3 +Expected: not 1 +Received + 2: function call has not returned yet +-> 3: 1 + 4: 0 + +Number of returns: 2 +Number of calls: 4`; + +module.exports["nthReturnedWith nthReturnedWith incomplete recursive calls are handled properly #3"] = `expect(jest.fn()).not.nthReturnedWith(n, expected) + +n: 4 +Expected: not 0 +Received + 3: 1 +-> 4: 0 + +Number of returns: 2 +Number of calls: 4`; + +module.exports["nthReturnedWith includes the custom mock name in the error message"] = `expect(named-mock).nthReturnedWith(n, expected) + +n: 1 +Expected: "foo" + +Number of returns: 0`; + +module.exports["toHaveNthReturnedWith works only on spies or mock.fn"] = `expect(received).toHaveNthReturnedWith(n, expected) + +Matcher error: received value must be a mock function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toHaveNthReturnedWith works when not called"] = `expect(jest.fn()).toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: "foo" + +Number of returns: 0`; + +module.exports["toHaveNthReturnedWith works with argument that does not match"] = `expect(jest.fn()).toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: "bar" +Received: "foo" + +Number of returns: 1`; + +module.exports["toHaveNthReturnedWith works with argument that does match"] = `expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: not "foo" + +Number of returns: 1`; + +module.exports["toHaveNthReturnedWith works with undefined"] = `expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: not undefined + +Number of returns: 1`; + +module.exports["toHaveNthReturnedWith works with Map"] = `expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: not Map {1 => 2, 2 => 1} + +Number of returns: 1`; + +module.exports["toHaveNthReturnedWith works with Map #1"] = `expect(jest.fn()).toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: Map {"a" => "b", "b" => "a"} +Received: Map {1 => 2, 2 => 1} + +Number of returns: 1`; + +module.exports["toHaveNthReturnedWith works with Set"] = `expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: not Set {1, 2} + +Number of returns: 1`; + +module.exports["toHaveNthReturnedWith works with Set #1"] = `expect(jest.fn()).toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: Set {3, 4} +Received: Set {1, 2} + +Number of returns: 1`; + +module.exports["toHaveNthReturnedWith works with Immutable.js objects directly created"] = `expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: not Immutable.Map {"a": {"b": "c"}} + +Number of returns: 1`; + +module.exports["toHaveNthReturnedWith works with Immutable.js objects indirectly created"] = `expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: not Immutable.Map {"a": {"b": "c"}} + +Number of returns: 1`; + +module.exports["toHaveNthReturnedWith a call that throws is not considered to have returned"] = `expect(jest.fn()).toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: undefined +Received: function call threw an error + +Number of returns: 0 +Number of calls: 1`; + +module.exports["toHaveNthReturnedWith a call that throws undefined is not considered to have returned"] = `expect(jest.fn()).toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: undefined +Received: function call threw an error + +Number of returns: 0 +Number of calls: 1`; + +module.exports["toHaveNthReturnedWith nthReturnedWith works with three calls"] = `expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: not "foo1" +Received +-> 1: "foo1" + 2: "foo2" + +Number of returns: 3`; + +module.exports["toHaveNthReturnedWith nthReturnedWith should replace 1st, 2nd, 3rd with first, second, third"] = `expect(jest.fn()).toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: "bar1" +Received +-> 1: "foo1" + 2: "foo2" + +Number of returns: 3`; + +module.exports["toHaveNthReturnedWith nthReturnedWith should replace 1st, 2nd, 3rd with first, second, third #1"] = `expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: not "foo1" +Received +-> 1: "foo1" + 2: "foo2" + +Number of returns: 3`; + +module.exports["toHaveNthReturnedWith nthReturnedWith positive throw matcher error for n that is not positive integer"] = `expect(received).toHaveNthReturnedWith(n, expected) + +Matcher error: n must be a positive integer + +n has type: number +n has value: 0`; + +module.exports["toHaveNthReturnedWith nthReturnedWith should reject nth value greater than number of calls"] = `expect(jest.fn()).toHaveNthReturnedWith(n, expected) + +n: 4 +Expected: "foo" +Received + 3: "foo" + +Number of returns: 3`; + +module.exports["toHaveNthReturnedWith nthReturnedWith positive throw matcher error for n that is not integer"] = `expect(received).toHaveNthReturnedWith(n, expected) + +Matcher error: n must be a positive integer + +n has type: number +n has value: 0.1`; + +module.exports["toHaveNthReturnedWith nthReturnedWith negative throw matcher error for n that is not number"] = `expect(received).not.toHaveNthReturnedWith(n, expected) + +Matcher error: n must be a positive integer + +n has value: undefined`; + +module.exports["toHaveNthReturnedWith nthReturnedWith incomplete recursive calls are handled properly"] = `expect(jest.fn()).toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: 6 +Received +-> 1: function call has not returned yet + 2: function call has not returned yet + +Number of returns: 2 +Number of calls: 4`; + +module.exports["toHaveNthReturnedWith nthReturnedWith incomplete recursive calls are handled properly #1"] = `expect(jest.fn()).toHaveNthReturnedWith(n, expected) + +n: 2 +Expected: 3 +Received + 1: function call has not returned yet +-> 2: function call has not returned yet + 3: 1 + +Number of returns: 2 +Number of calls: 4`; + +module.exports["toHaveNthReturnedWith nthReturnedWith incomplete recursive calls are handled properly #2"] = `expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) + +n: 3 +Expected: not 1 +Received + 2: function call has not returned yet +-> 3: 1 + 4: 0 + +Number of returns: 2 +Number of calls: 4`; + +module.exports["toHaveNthReturnedWith nthReturnedWith incomplete recursive calls are handled properly #3"] = `expect(jest.fn()).not.toHaveNthReturnedWith(n, expected) + +n: 4 +Expected: not 0 +Received + 3: 1 +-> 4: 0 + +Number of returns: 2 +Number of calls: 4`; + +module.exports["toHaveNthReturnedWith includes the custom mock name in the error message"] = `expect(named-mock).toHaveNthReturnedWith(n, expected) + +n: 1 +Expected: "foo" + +Number of returns: 0`; + +module.exports["toReturnWith works only on spies or mock.fn"] = `expect(received).toReturnWith(expected) + +Matcher error: received value must be a mock function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toReturnWith works when not called"] = `expect(jest.fn()).toReturnWith(expected) + +Expected: "foo" + +Number of returns: 0`; + +module.exports["toReturnWith works with argument that does not match"] = `expect(jest.fn()).toReturnWith(expected) + +Expected: "bar" +Received: "foo" + +Number of returns: 1`; + +module.exports["toReturnWith works with argument that does match"] = `expect(jest.fn()).not.toReturnWith(expected) + +Expected: not "foo" + +Number of returns: 1`; + +module.exports["toReturnWith works with undefined"] = `expect(jest.fn()).not.toReturnWith(expected) + +Expected: not undefined + +Number of returns: 1`; + +module.exports["toReturnWith works with Map"] = `expect(jest.fn()).not.toReturnWith(expected) + +Expected: not Map {1 => 2, 2 => 1} + +Number of returns: 1`; + +module.exports["toReturnWith works with Map #1"] = `expect(jest.fn()).toReturnWith(expected) + +Expected: Map {"a" => "b", "b" => "a"} +Received: Map {1 => 2, 2 => 1} + +Number of returns: 1`; + +module.exports["toReturnWith works with Set"] = `expect(jest.fn()).not.toReturnWith(expected) + +Expected: not Set {1, 2} + +Number of returns: 1`; + +module.exports["toReturnWith works with Set #1"] = `expect(jest.fn()).toReturnWith(expected) + +Expected: Set {3, 4} +Received: Set {1, 2} + +Number of returns: 1`; + +module.exports["toReturnWith works with Immutable.js objects directly created"] = `expect(jest.fn()).not.toReturnWith(expected) + +Expected: not Immutable.Map {"a": {"b": "c"}} + +Number of returns: 1`; + +module.exports["toReturnWith works with Immutable.js objects indirectly created"] = `expect(jest.fn()).not.toReturnWith(expected) + +Expected: not Immutable.Map {"a": {"b": "c"}} + +Number of returns: 1`; + +module.exports["toReturnWith a call that throws is not considered to have returned"] = `expect(jest.fn()).toReturnWith(expected) + +Expected: undefined +Received: function call threw an error + +Number of returns: 0 +Number of calls: 1`; + +module.exports["toReturnWith a call that throws undefined is not considered to have returned"] = `expect(jest.fn()).toReturnWith(expected) + +Expected: undefined +Received: function call threw an error + +Number of returns: 0 +Number of calls: 1`; + +module.exports["toReturnWith returnedWith works with more calls than the limit"] = `expect(jest.fn()).toReturnWith(expected) + +Expected: "bar" +Received + 1: "foo1" + 2: "foo2" + 3: "foo3" + +Number of returns: 6`; + +module.exports["toReturnWith returnedWith incomplete recursive calls are handled properly"] = `expect(jest.fn()).toReturnWith(expected) + +Expected: undefined +Received + 1: function call has not returned yet + 2: function call has not returned yet + 3: function call has not returned yet + +Number of returns: 0 +Number of calls: 4`; + +module.exports["toReturnWith includes the custom mock name in the error message"] = `expect(named-mock).toReturnWith(expected) + +Expected: "foo" + +Number of returns: 0`; + +module.exports["toHaveReturnedWith works only on spies or mock.fn"] = `expect(received).toHaveReturnedWith(expected) + +Matcher error: received value must be a mock function + +Received has type: function +Received has value: [Function fn]`; + +module.exports["toHaveReturnedWith works when not called"] = `expect(jest.fn()).toHaveReturnedWith(expected) + +Expected: "foo" + +Number of returns: 0`; + +module.exports["toHaveReturnedWith works with argument that does not match"] = `expect(jest.fn()).toHaveReturnedWith(expected) + +Expected: "bar" +Received: "foo" + +Number of returns: 1`; + +module.exports["toHaveReturnedWith works with argument that does match"] = `expect(jest.fn()).not.toHaveReturnedWith(expected) + +Expected: not "foo" + +Number of returns: 1`; + +module.exports["toHaveReturnedWith works with undefined"] = `expect(jest.fn()).not.toHaveReturnedWith(expected) + +Expected: not undefined + +Number of returns: 1`; + +module.exports["toHaveReturnedWith works with Map"] = `expect(jest.fn()).not.toHaveReturnedWith(expected) + +Expected: not Map {1 => 2, 2 => 1} + +Number of returns: 1`; + +module.exports["toHaveReturnedWith works with Map #1"] = `expect(jest.fn()).toHaveReturnedWith(expected) + +Expected: Map {"a" => "b", "b" => "a"} +Received: Map {1 => 2, 2 => 1} + +Number of returns: 1`; + +module.exports["toHaveReturnedWith works with Set"] = `expect(jest.fn()).not.toHaveReturnedWith(expected) + +Expected: not Set {1, 2} + +Number of returns: 1`; + +module.exports["toHaveReturnedWith works with Set #1"] = `expect(jest.fn()).toHaveReturnedWith(expected) + +Expected: Set {3, 4} +Received: Set {1, 2} + +Number of returns: 1`; + +module.exports["toHaveReturnedWith works with Immutable.js objects directly created"] = `expect(jest.fn()).not.toHaveReturnedWith(expected) + +Expected: not Immutable.Map {"a": {"b": "c"}} + +Number of returns: 1`; + +module.exports["toHaveReturnedWith works with Immutable.js objects indirectly created"] = `expect(jest.fn()).not.toHaveReturnedWith(expected) + +Expected: not Immutable.Map {"a": {"b": "c"}} + +Number of returns: 1`; + +module.exports["toHaveReturnedWith a call that throws is not considered to have returned"] = `expect(jest.fn()).toHaveReturnedWith(expected) + +Expected: undefined +Received: function call threw an error + +Number of returns: 0 +Number of calls: 1`; + +module.exports["toHaveReturnedWith a call that throws undefined is not considered to have returned"] = `expect(jest.fn()).toHaveReturnedWith(expected) + +Expected: undefined +Received: function call threw an error + +Number of returns: 0 +Number of calls: 1`; + +module.exports["toHaveReturnedWith returnedWith works with more calls than the limit"] = `expect(jest.fn()).toHaveReturnedWith(expected) + +Expected: "bar" +Received + 1: "foo1" + 2: "foo2" + 3: "foo3" + +Number of returns: 6`; + +module.exports["toHaveReturnedWith returnedWith incomplete recursive calls are handled properly"] = `expect(jest.fn()).toHaveReturnedWith(expected) + +Expected: undefined +Received + 1: function call has not returned yet + 2: function call has not returned yet + 3: function call has not returned yet + +Number of returns: 0 +Number of calls: 4`; + +module.exports["toHaveReturnedWith includes the custom mock name in the error message"] = `expect(named-mock).toHaveReturnedWith(expected) + +Expected: "foo" + +Number of returns: 0`; + diff --git a/tests/expect/spyMatchers.test.ts b/tests/expect/spyMatchers.test.ts new file mode 100644 index 0000000000..bb3b58107b --- /dev/null +++ b/tests/expect/spyMatchers.test.ts @@ -0,0 +1,1499 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { test, expect } from './fixtures'; +import { expect as expectUnderTest, mock } from '../../packages/playwright/bundles/expect/src/expectBundleImpl'; +import Immutable from 'immutable'; + +const expectUnderTestAsAny = expectUnderTest as any; + +expectUnderTest.extend({ + optionalFn(fn?: unknown) { + const pass = fn === undefined || typeof fn === 'function'; + return { message: () => 'expect either a function or undefined', pass }; + }, +}); + + +// Given a Jest mock function, return a minimal mock of a spy. +const createSpy = (fn: mock.Mock) => { + const spy = function() { }; + + spy.calls = { + all() { + return fn.mock.calls.map(args => ({ args })); + }, + count() { + return fn.mock.calls.length; + }, + }; + + return spy; +}; + +for (const called of ['toBeCalled', 'toHaveBeenCalled']) { + test.describe(called, () => { + test('works only on spies or mock.fn', () => { + const fn = function fn() { }; + + expect(() => expectUnderTest(fn)[called]()).toThrowErrorMatchingSnapshot(); + }); + + test('passes when called', () => { + const fn = mock.fn(); + fn('arg0', 'arg1', 'arg2'); + expectUnderTest(createSpy(fn))[called](); + expectUnderTest(fn)[called](); + expect(() => expectUnderTest(fn).not[called]()).toThrowErrorMatchingSnapshot(); + }); + + test('.not passes when called', () => { + const fn = mock.fn(); + const spy = createSpy(fn); + + expectUnderTest(spy).not[called](); + expectUnderTest(fn).not[called](); + expect(() => expectUnderTest(spy)[called]()).toThrowErrorMatchingSnapshot(); + }); + + test('fails with any argument passed', () => { + const fn = mock.fn(); + + fn(); + expect(() => expectUnderTest(fn)[called](555)).toThrowErrorMatchingSnapshot(); + }); + + test('.not fails with any argument passed', () => { + const fn = mock.fn(); + + expect(() => + expectUnderTest(fn).not[called](555), + ).toThrowErrorMatchingSnapshot(); + }); + + test('includes the custom mock name in the error message', () => { + const fn = mock.fn().mockName('named-mock'); + + fn(); + expectUnderTest(fn)[called](); + expect(() => expectUnderTest(fn).not[called]()).toThrowErrorMatchingSnapshot(); + }); + }); +} + +for (const calledTimes of ['toBeCalledTimes', 'toHaveBeenCalledTimes']) { + test.describe(calledTimes, () => { + test('.not works only on spies or mock.fn', () => { + const fn = function fn() { }; + + expect(() => + expectUnderTest(fn).not[calledTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); + + test('only accepts a number argument', () => { + const fn = mock.fn(); + fn(); + expectUnderTest(fn)[calledTimes](1); + + [{}, [], true, 'a', new Map(), () => { }].forEach(value => { + expect(() => + expectUnderTest(fn)[calledTimes](value), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + test('.not only accepts a number argument', () => { + const fn = mock.fn(); + expectUnderTest(fn).not[calledTimes](1); + + [{}, [], true, 'a', new Map(), () => { }].forEach(value => { + expect(() => + expectUnderTest(fn).not[calledTimes](value), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + test('passes if function called equal to expected times', () => { + const fn = mock.fn(); + fn(); + fn(); + + const spy = createSpy(fn); + expectUnderTest(spy)[calledTimes](2); + expectUnderTest(fn)[calledTimes](2); + + expect(() => + expectUnderTest(spy).not[calledTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); + + test('.not passes if function called more than expected times', () => { + const fn = mock.fn(); + fn(); + fn(); + fn(); + + const spy = createSpy(fn); + expectUnderTest(spy)[calledTimes](3); + expectUnderTest(spy).not[calledTimes](2); + + expectUnderTest(fn)[calledTimes](3); + expectUnderTest(fn).not[calledTimes](2); + + expect(() => + expectUnderTest(fn)[calledTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); + + test('.not passes if function called less than expected times', () => { + const fn = mock.fn(); + fn(); + + const spy = createSpy(fn); + expectUnderTest(spy)[calledTimes](1); + expectUnderTest(spy).not[calledTimes](2); + + expectUnderTest(fn)[calledTimes](1); + expectUnderTest(fn).not[calledTimes](2); + + expect(() => + expectUnderTest(fn)[calledTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); + + test('includes the custom mock name in the error message', () => { + const fn = mock.fn().mockName('named-mock'); + fn(); + + expect(() => + expectUnderTest(fn)[calledTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); + }); +} + +for (const calledWith of [ + 'lastCalledWith', + 'toHaveBeenLastCalledWith', + 'nthCalledWith', + 'toHaveBeenNthCalledWith', + 'toBeCalledWith', + 'toHaveBeenCalledWith', +]) { + test.describe(calledWith, () => { + function isToHaveNth( + calledWith: string, + ): calledWith is 'nthCalledWith' | 'toHaveBeenNthCalledWith' { + return ( + calledWith === 'nthCalledWith' || calledWith === 'toHaveBeenNthCalledWith' + ); + } + + test('works only on spies or mock.fn', () => { + const fn = function fn() { }; + + if (isToHaveNth(calledWith)) { + expect(() => + expectUnderTest(fn)[calledWith](3), + ).toThrowErrorMatchingSnapshot(); + } else { + expect(() => expectUnderTest(fn)[calledWith]()).toThrowErrorMatchingSnapshot(); + } + }); + + test('works when not called', () => { + const fn = mock.fn(); + + if (isToHaveNth(calledWith)) { + expectUnderTest(createSpy(fn)).not[calledWith](1, 'foo', 'bar'); + expectUnderTest(fn).not[calledWith](1, 'foo', 'bar'); + + expect(() => + expectUnderTest(fn)[calledWith](1, 'foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(createSpy(fn)).not[calledWith]('foo', 'bar'); + expectUnderTest(fn).not[calledWith]('foo', 'bar'); + + expect(() => + expectUnderTest(fn)[calledWith]('foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with no arguments', () => { + const fn = mock.fn(); + fn(); + + if (isToHaveNth(calledWith)) { + expectUnderTest(createSpy(fn))[calledWith](1); + expectUnderTest(fn)[calledWith](1); + } else { + expectUnderTest(createSpy(fn))[calledWith](); + expectUnderTest(fn)[calledWith](); + } + }); + + test("works with arguments that don't match", () => { + const fn = mock.fn(); + fn('foo', 'bar1'); + + if (isToHaveNth(calledWith)) { + expectUnderTest(createSpy(fn)).not[calledWith](1, 'foo', 'bar'); + expectUnderTest(fn).not[calledWith](1, 'foo', 'bar'); + + expect(() => + expectUnderTest(fn)[calledWith](1, 'foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(createSpy(fn)).not[calledWith]('foo', 'bar'); + expectUnderTest(fn).not[calledWith]('foo', 'bar'); + + expect(() => + expectUnderTest(fn)[calledWith]('foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test("works with arguments that don't match in number of arguments", () => { + const fn = mock.fn(); + fn('foo', 'bar', 'plop'); + + if (isToHaveNth(calledWith)) { + expectUnderTest(createSpy(fn)).not[calledWith](1, 'foo', 'bar'); + expectUnderTest(fn).not[calledWith](1, 'foo', 'bar'); + + expect(() => + expectUnderTest(fn)[calledWith](1, 'foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(createSpy(fn)).not[calledWith]('foo', 'bar'); + expectUnderTest(fn).not[calledWith]('foo', 'bar'); + + expect(() => + expectUnderTest(fn)[calledWith]('foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test("works with arguments that don't match with matchers", () => { + const fn = mock.fn(); + fn('foo', 'bar'); + + if (isToHaveNth(calledWith)) { + expectUnderTest(createSpy(fn)).not[calledWith]( + 1, + expectUnderTest.any(String), + expectUnderTest.any(Number), + ); + expectUnderTest(fn).not[calledWith]( + 1, + expectUnderTest.any(String), + expectUnderTest.any(Number), + ); + + expect(() => + expectUnderTest(fn)[calledWith]( + 1, + expectUnderTest.any(String), + expectUnderTest.any(Number), + ), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(createSpy(fn)).not[calledWith]( + expectUnderTest.any(String), + expectUnderTest.any(Number), + ); + expectUnderTest(fn).not[calledWith]( + expectUnderTest.any(String), + expectUnderTest.any(Number), + ); + + expect(() => + expectUnderTest(fn)[calledWith]( + expectUnderTest.any(String), + expectUnderTest.any(Number), + ), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test("works with arguments that don't match with matchers even when argument is undefined", () => { + const fn = mock.fn(); + fn('foo', undefined); + + if (isToHaveNth(calledWith)) { + expectUnderTest(createSpy(fn)).not[calledWith]( + 1, + 'foo', + expectUnderTest.any(String), + ); + expectUnderTest(fn).not[calledWith](1, 'foo', expectUnderTest.any(String)); + + expect(() => + expectUnderTest(fn)[calledWith](1, 'foo', expectUnderTest.any(String)), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(createSpy(fn)).not[calledWith]('foo', expectUnderTest.any(String)); + expectUnderTest(fn).not[calledWith]('foo', expectUnderTest.any(String)); + + expect(() => + expectUnderTest(fn)[calledWith]('foo', expectUnderTest.any(String)), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test("works with arguments that don't match in size even if one is an optional matcher", () => { + // issue 12463 + const fn = mock.fn(); + fn('foo'); + + if (isToHaveNth(calledWith)) { + expectUnderTest(fn).not[calledWith](1, 'foo', expectUnderTestAsAny.optionalFn()); + expect(() => + expectUnderTest(fn)[calledWith](1, 'foo', expectUnderTestAsAny.optionalFn()), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn).not[calledWith]('foo', expectUnderTestAsAny.optionalFn()); + expect(() => + expectUnderTest(fn)[calledWith]('foo', expectUnderTestAsAny.optionalFn()), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with arguments that match', () => { + const fn = mock.fn(); + fn('foo', 'bar'); + + if (isToHaveNth(calledWith)) { + expectUnderTest(createSpy(fn))[calledWith](1, 'foo', 'bar'); + expectUnderTest(fn)[calledWith](1, 'foo', 'bar'); + + expect(() => + expectUnderTest(fn).not[calledWith](1, 'foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(createSpy(fn))[calledWith]('foo', 'bar'); + expectUnderTest(fn)[calledWith]('foo', 'bar'); + + expect(() => + expectUnderTest(fn).not[calledWith]('foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with arguments that match with matchers', () => { + const fn = mock.fn(); + fn('foo', 'bar'); + + if (isToHaveNth(calledWith)) { + expectUnderTest(createSpy(fn))[calledWith]( + 1, + expectUnderTest.any(String), + expectUnderTest.any(String), + ); + expectUnderTest(fn)[calledWith]( + 1, + expectUnderTest.any(String), + expectUnderTest.any(String), + ); + + expect(() => + expectUnderTest(fn).not[calledWith]( + 1, + expectUnderTest.any(String), + expectUnderTest.any(String), + ), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(createSpy(fn))[calledWith]( + expectUnderTest.any(String), + expectUnderTest.any(String), + ); + expectUnderTest(fn)[calledWith]( + expectUnderTest.any(String), + expectUnderTest.any(String), + ); + + expect(() => + expectUnderTest(fn).not[calledWith]( + expectUnderTest.any(String), + expectUnderTest.any(String), + ), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with trailing undefined arguments', () => { + const fn = mock.fn(); + fn('foo', undefined); + + if (isToHaveNth(calledWith)) { + expect(() => + expectUnderTest(fn)[calledWith](1, 'foo'), + ).toThrowErrorMatchingSnapshot(); + } else { + expect(() => + expectUnderTest(fn)[calledWith]('foo'), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with trailing undefined arguments if requested by the match query', () => { + const fn = mock.fn(); + fn('foo', undefined); + + if (isToHaveNth(calledWith)) { + expectUnderTest(fn)[calledWith](1, 'foo', undefined); + expect(() => + expectUnderTest(fn).not[calledWith](1, 'foo', undefined), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn)[calledWith]('foo', undefined); + expect(() => + expectUnderTest(fn).not[calledWith]('foo', undefined), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with trailing undefined arguments when explicitly requested as optional by matcher', () => { + // issue 12463 + const fn = mock.fn(); + fn('foo', undefined); + + if (isToHaveNth(calledWith)) { + expectUnderTest(fn)[calledWith](1, 'foo', expectUnderTestAsAny.optionalFn()); + expect(() => + expectUnderTest(fn).not[calledWith](1, 'foo', expectUnderTestAsAny.optionalFn()), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn)[calledWith]('foo', expectUnderTestAsAny.optionalFn()); + expect(() => + expectUnderTest(fn).not[calledWith]('foo', expectUnderTestAsAny.optionalFn()), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with Map', () => { + const fn = mock.fn(); + + const m1 = new Map([ + [1, 2], + [2, 1], + ]); + const m2 = new Map([ + [1, 2], + [2, 1], + ]); + const m3 = new Map([ + ['a', 'b'], + ['b', 'a'], + ]); + + fn(m1); + + if (isToHaveNth(calledWith)) { + expectUnderTest(fn)[calledWith](1, m2); + expectUnderTest(fn).not[calledWith](1, m3); + + expect(() => + expectUnderTest(fn).not[calledWith](1, m2), + ).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest(fn)[calledWith](1, m3), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn)[calledWith](m2); + expectUnderTest(fn).not[calledWith](m3); + + expect(() => + expectUnderTest(fn).not[calledWith](m2), + ).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest(fn)[calledWith](m3), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with Set', () => { + const fn = mock.fn(); + + const s1 = new Set([1, 2]); + const s2 = new Set([1, 2]); + const s3 = new Set([3, 4]); + + fn(s1); + + if (isToHaveNth(calledWith)) { + expectUnderTest(fn)[calledWith](1, s2); + expectUnderTest(fn).not[calledWith](1, s3); + + expect(() => + expectUnderTest(fn).not[calledWith](1, s2), + ).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest(fn)[calledWith](1, s3), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn)[calledWith](s2); + expectUnderTest(fn).not[calledWith](s3); + + expect(() => + expectUnderTest(fn).not[calledWith](s2), + ).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest(fn)[calledWith](s3), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with Immutable.js objects', () => { + const fn = mock.fn(); + const directlyCreated = Immutable.Map([['a', { b: 'c' }]]); + const indirectlyCreated = Immutable.Map().set('a', { b: 'c' }); + fn(directlyCreated, indirectlyCreated); + + if (isToHaveNth(calledWith)) { + expectUnderTest(fn)[calledWith](1, indirectlyCreated, directlyCreated); + + expect(() => + expectUnderTest(fn).not[calledWith](1, indirectlyCreated, directlyCreated), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn)[calledWith](indirectlyCreated, directlyCreated); + + expect(() => + expectUnderTest(fn).not[calledWith](indirectlyCreated, directlyCreated), + ).toThrowErrorMatchingSnapshot(); + } + }); + + if (!isToHaveNth(calledWith)) { + test('works with many arguments', () => { + const fn = mock.fn(); + fn('foo1', 'bar'); + fn('foo', 'bar1'); + fn('foo', 'bar'); + + expectUnderTest(fn)[calledWith]('foo', 'bar'); + + expect(() => + expectUnderTest(fn).not[calledWith]('foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + }); + + test("works with many arguments that don't match", () => { + const fn = mock.fn(); + fn('foo', 'bar1'); + fn('foo', 'bar2'); + fn('foo', 'bar3'); + + expectUnderTest(fn).not[calledWith]('foo', 'bar'); + + expect(() => + expectUnderTest(fn)[calledWith]('foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + }); + } + + if (isToHaveNth(calledWith)) { + test('works with three calls', () => { + const fn = mock.fn(); + fn('foo1', 'bar'); + fn('foo', 'bar1'); + fn('foo', 'bar'); + + expectUnderTest(fn)[calledWith](1, 'foo1', 'bar'); + expectUnderTest(fn)[calledWith](2, 'foo', 'bar1'); + expectUnderTest(fn)[calledWith](3, 'foo', 'bar'); + + expect(() => { + expectUnderTest(fn).not[calledWith](1, 'foo1', 'bar'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('positive throw matcher error for n that is not positive integer', async () => { + const fn = mock.fn(); + fn('foo1', 'bar'); + + expect(() => { + expectUnderTest(fn)[calledWith](0, 'foo1', 'bar'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('positive throw matcher error for n that is not integer', async () => { + const fn = mock.fn(); + fn('foo1', 'bar'); + + expect(() => { + expectUnderTest(fn)[calledWith](0.1, 'foo1', 'bar'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('negative throw matcher error for n that is not integer', async () => { + const fn = mock.fn(); + fn('foo1', 'bar'); + + expect(() => { + expectUnderTest(fn).not[calledWith](Infinity, 'foo1', 'bar'); + }).toThrowErrorMatchingSnapshot(); + }); + } + + test('includes the custom mock name in the error message', () => { + const fn = mock.fn().mockName('named-mock'); + fn('foo', 'bar'); + + if (isToHaveNth(calledWith)) { + expectUnderTest(fn)[calledWith](1, 'foo', 'bar'); + + expect(() => + expectUnderTest(fn).not[calledWith](1, 'foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn)[calledWith]('foo', 'bar'); + + expect(() => + expectUnderTest(fn).not[calledWith]('foo', 'bar'), + ).toThrowErrorMatchingSnapshot(); + } + }); + }); +} + +for (const returned of ['toReturn', 'toHaveReturned']) { + test.describe(returned, () => { + test('.not works only on mock.fn', () => { + const fn = function fn() { }; + + expect(() => expectUnderTest(fn).not[returned]()).toThrowErrorMatchingSnapshot(); + }); + + test('throw matcher error if received is spy', () => { + const spy = createSpy(mock.fn()); + + expect(() => expectUnderTest(spy)[returned]()).toThrowErrorMatchingSnapshot(); + }); + + test('passes when returned', () => { + const fn = mock.fn(() => 42); + fn(); + expectUnderTest(fn)[returned](); + expect(() => expectUnderTest(fn).not[returned]()).toThrowErrorMatchingSnapshot(); + }); + + test('passes when undefined is returned', () => { + const fn = mock.fn(() => undefined); + fn(); + expectUnderTest(fn)[returned](); + expect(() => expectUnderTest(fn).not[returned]()).toThrowErrorMatchingSnapshot(); + }); + + test('passes when at least one call does not throw', () => { + const fn = mock.fn((causeError: boolean) => { + if (causeError) + throw new Error('Error!'); + + + return 42; + }); + + fn(false); + + try { + fn(true); + } catch { + // ignore error + } + + fn(false); + + expectUnderTest(fn)[returned](); + expect(() => expectUnderTest(fn).not[returned]()).toThrowErrorMatchingSnapshot(); + }); + + test('.not passes when not returned', () => { + const fn = mock.fn(); + + expectUnderTest(fn).not[returned](); + expect(() => expectUnderTest(fn)[returned]()).toThrowErrorMatchingSnapshot(); + }); + + test('.not passes when all calls throw', () => { + const fn = mock.fn(() => { + throw new Error('Error!'); + }); + + try { + fn(); + } catch { + // ignore error + } + + try { + fn(); + } catch { + // ignore error + } + + expectUnderTest(fn).not[returned](); + expect(() => expectUnderTest(fn)[returned]()).toThrowErrorMatchingSnapshot(); + }); + + test('.not passes when a call throws undefined', () => { + const fn = mock.fn(() => { + + throw undefined; + }); + + try { + fn(); + } catch { + // ignore error + } + + expectUnderTest(fn).not[returned](); + expect(() => expectUnderTest(fn)[returned]()).toThrowErrorMatchingSnapshot(); + }); + + test('fails with any argument passed', () => { + const fn = mock.fn(); + + fn(); + expect(() => expectUnderTest(fn)[returned](555)).toThrowErrorMatchingSnapshot(); + }); + + test('.not fails with any argument passed', () => { + const fn = mock.fn(); + + expect(() => + expectUnderTest(fn).not[returned](555), + ).toThrowErrorMatchingSnapshot(); + }); + + test('includes the custom mock name in the error message', () => { + const fn = mock.fn(() => 42).mockName('named-mock'); + fn(); + expectUnderTest(fn)[returned](); + expect(() => expectUnderTest(fn).not[returned]()).toThrowErrorMatchingSnapshot(); + }); + + test('incomplete recursive calls are handled properly', () => { + // sums up all integers from 0 -> value, using recursion + const fn: mock.Mock<(value: number) => number> = mock.fn(value => { + if (value === 0) { + // Before returning from the base case of recursion, none of the + // calls have returned yet. + expectUnderTest(fn).not[returned](); + expect(() => expectUnderTest(fn)[returned]()).toThrowErrorMatchingSnapshot(); + return 0; + } else { + return value + fn(value - 1); + } + }); + + fn(3); + }); + }); +} + +for (const returnedTimes of ['toReturnTimes', 'toHaveReturnedTimes']) { + test.describe(returnedTimes, () => { + test('throw matcher error if received is spy', () => { + const spy = createSpy(mock.fn()); + + expect(() => + expectUnderTest(spy).not[returnedTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); + + test('only accepts a number argument', () => { + const fn = mock.fn(() => 42); + fn(); + expectUnderTest(fn)[returnedTimes](1); + + [{}, [], true, 'a', new Map(), () => { }].forEach(value => { + expect(() => + expectUnderTest(fn)[returnedTimes](value), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + test('.not only accepts a number argument', () => { + const fn = mock.fn(() => 42); + expectUnderTest(fn).not[returnedTimes](2); + + [{}, [], true, 'a', new Map(), () => { }].forEach(value => { + expect(() => + expectUnderTest(fn).not[returnedTimes](value), + ).toThrowErrorMatchingSnapshot(); + }); + }); + + test('passes if function returned equal to expected times', () => { + const fn = mock.fn(() => 42); + fn(); + fn(); + + expectUnderTest(fn)[returnedTimes](2); + + expect(() => + expectUnderTest(fn).not[returnedTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); + + test('calls that return undefined are counted as returns', () => { + const fn = mock.fn(() => undefined); + fn(); + fn(); + + expectUnderTest(fn)[returnedTimes](2); + + expect(() => + expectUnderTest(fn).not[returnedTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); + + test('.not passes if function returned more than expected times', () => { + const fn = mock.fn(() => 42); + fn(); + fn(); + fn(); + + expectUnderTest(fn)[returnedTimes](3); + expectUnderTest(fn).not[returnedTimes](2); + + expect(() => + expectUnderTest(fn)[returnedTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); + + test('.not passes if function called less than expected times', () => { + const fn = mock.fn(() => 42); + fn(); + + expectUnderTest(fn)[returnedTimes](1); + expectUnderTest(fn).not[returnedTimes](2); + + expect(() => + expectUnderTest(fn)[returnedTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); + + test('calls that throw are not counted', () => { + const fn = mock.fn((causeError: boolean) => { + if (causeError) + throw new Error('Error!'); + + + return 42; + }); + + fn(false); + + try { + fn(true); + } catch { + // ignore error + } + + fn(false); + + expectUnderTest(fn).not[returnedTimes](3); + + expect(() => + expectUnderTest(fn)[returnedTimes](3), + ).toThrowErrorMatchingSnapshot(); + }); + + test('calls that throw undefined are not counted', () => { + const fn = mock.fn((causeError: boolean) => { + if (causeError) + + throw undefined; + + + return 42; + }); + + fn(false); + + try { + fn(true); + } catch { + // ignore error + } + + fn(false); + + expectUnderTest(fn)[returnedTimes](2); + + expect(() => + expectUnderTest(fn).not[returnedTimes](2), + ).toThrowErrorMatchingSnapshot(); + }); + + test('includes the custom mock name in the error message', () => { + const fn = mock.fn(() => 42).mockName('named-mock'); + fn(); + fn(); + + expectUnderTest(fn)[returnedTimes](2); + + expect(() => + expectUnderTest(fn)[returnedTimes](1), + ).toThrowErrorMatchingSnapshot(); + }); + + test('incomplete recursive calls are handled properly', () => { + // sums up all integers from 0 -> value, using recursion + const fn: mock.Mock<(value: number) => number> = mock.fn(value => { + if (value === 0) { + return 0; + } else { + const recursiveResult = fn(value - 1); + + if (value === 2) { + // Only 2 of the recursive calls have returned at this point + expectUnderTest(fn)[returnedTimes](2); + expect(() => + expectUnderTest(fn).not[returnedTimes](2), + ).toThrowErrorMatchingSnapshot(); + } + + return value + recursiveResult; + } + }); + + fn(3); + }); + }); +} + +for (const returnedWith of [ + 'lastReturnedWith', + 'toHaveLastReturnedWith', + 'nthReturnedWith', + 'toHaveNthReturnedWith', + 'toReturnWith', + 'toHaveReturnedWith', +]) { + test.describe(returnedWith, () => { + function isToHaveNth( + returnedWith: string, + ): returnedWith is 'nthReturnedWith' | 'toHaveNthReturnedWith' { + return ( + returnedWith === 'nthReturnedWith' || + returnedWith === 'toHaveNthReturnedWith' + ); + } + + function isToHaveLast( + returnedWith: string, + ): returnedWith is 'lastReturnedWith' | 'toHaveLastReturnedWith' { + return ( + returnedWith === 'lastReturnedWith' || + returnedWith === 'toHaveLastReturnedWith' + ); + } + test('works only on spies or mock.fn', () => { + const fn = function fn() { }; + + expect(() => expectUnderTest(fn)[returnedWith]()).toThrowErrorMatchingSnapshot(); + }); + + test('works when not called', () => { + const fn = mock.fn(); + + if (isToHaveNth(returnedWith)) { + expectUnderTest(fn).not[returnedWith](1, 'foo'); + + expect(() => + expectUnderTest(fn)[returnedWith](1, 'foo'), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn).not[returnedWith]('foo'); + + expect(() => + expectUnderTest(fn)[returnedWith]('foo'), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with no arguments', () => { + const fn = mock.fn(); + fn(); + + if (isToHaveNth(returnedWith)) + expectUnderTest(fn)[returnedWith](1); + else + expectUnderTest(fn)[returnedWith](); + + }); + + test('works with argument that does not match', () => { + const fn = mock.fn(() => 'foo'); + fn(); + + if (isToHaveNth(returnedWith)) { + expectUnderTest(fn).not[returnedWith](1, 'bar'); + + expect(() => + expectUnderTest(fn)[returnedWith](1, 'bar'), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn).not[returnedWith]('bar'); + + expect(() => + expectUnderTest(fn)[returnedWith]('bar'), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with argument that does match', () => { + const fn = mock.fn(() => 'foo'); + fn(); + + if (isToHaveNth(returnedWith)) { + expectUnderTest(fn)[returnedWith](1, 'foo'); + + expect(() => + expectUnderTest(fn).not[returnedWith](1, 'foo'), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn)[returnedWith]('foo'); + + expect(() => + expectUnderTest(fn).not[returnedWith]('foo'), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with undefined', () => { + const fn = mock.fn(() => undefined); + fn(); + + if (isToHaveNth(returnedWith)) { + expectUnderTest(fn)[returnedWith](1, undefined); + + expect(() => + expectUnderTest(fn).not[returnedWith](1, undefined), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn)[returnedWith](undefined); + + expect(() => + expectUnderTest(fn).not[returnedWith](undefined), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with Map', () => { + const m1 = new Map([ + [1, 2], + [2, 1], + ]); + const m2 = new Map([ + [1, 2], + [2, 1], + ]); + const m3 = new Map([ + ['a', 'b'], + ['b', 'a'], + ]); + + const fn = mock.fn(() => m1); + fn(); + + if (isToHaveNth(returnedWith)) { + expectUnderTest(fn)[returnedWith](1, m2); + expectUnderTest(fn).not[returnedWith](1, m3); + + expect(() => + expectUnderTest(fn).not[returnedWith](1, m2), + ).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest(fn)[returnedWith](1, m3), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn)[returnedWith](m2); + expectUnderTest(fn).not[returnedWith](m3); + + expect(() => + expectUnderTest(fn).not[returnedWith](m2), + ).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest(fn)[returnedWith](m3), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with Set', () => { + const s1 = new Set([1, 2]); + const s2 = new Set([1, 2]); + const s3 = new Set([3, 4]); + + const fn = mock.fn(() => s1); + fn(); + + if (isToHaveNth(returnedWith)) { + expectUnderTest(fn)[returnedWith](1, s2); + expectUnderTest(fn).not[returnedWith](1, s3); + + expect(() => + expectUnderTest(fn).not[returnedWith](1, s2), + ).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest(fn)[returnedWith](1, s3), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn)[returnedWith](s2); + expectUnderTest(fn).not[returnedWith](s3); + + expect(() => + expectUnderTest(fn).not[returnedWith](s2), + ).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest(fn)[returnedWith](s3), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with Immutable.js objects directly created', () => { + const directlyCreated = Immutable.Map([['a', { b: 'c' }]]); + const fn = mock.fn(() => directlyCreated); + fn(); + + if (isToHaveNth(returnedWith)) { + expectUnderTest(fn)[returnedWith](1, directlyCreated); + + expect(() => + expectUnderTest(fn).not[returnedWith](1, directlyCreated), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn)[returnedWith](directlyCreated); + + expect(() => + expectUnderTest(fn).not[returnedWith](directlyCreated), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('works with Immutable.js objects indirectly created', () => { + const indirectlyCreated = Immutable.Map().set('a', { b: 'c' }); + const fn = mock.fn(() => indirectlyCreated); + fn(); + + if (isToHaveNth(returnedWith)) { + expectUnderTest(fn)[returnedWith](1, indirectlyCreated); + + expect(() => + expectUnderTest(fn).not[returnedWith](1, indirectlyCreated), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn)[returnedWith](indirectlyCreated); + + expect(() => + expectUnderTest(fn).not[returnedWith](indirectlyCreated), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('a call that throws is not considered to have returned', () => { + const fn = mock.fn(() => { + throw new Error('Error!'); + }); + + try { + fn(); + } catch { + // ignore error + } + + if (isToHaveNth(returnedWith)) { + // It doesn't matter what return value is tested if the call threw + expectUnderTest(fn).not[returnedWith](1, 'foo'); + expectUnderTest(fn).not[returnedWith](1, null); + expectUnderTest(fn).not[returnedWith](1, undefined); + + expect(() => + expectUnderTest(fn)[returnedWith](1, undefined), + ).toThrowErrorMatchingSnapshot(); + } else { + // It doesn't matter what return value is tested if the call threw + expectUnderTest(fn).not[returnedWith]('foo'); + expectUnderTest(fn).not[returnedWith](null); + expectUnderTest(fn).not[returnedWith](undefined); + + expect(() => + expectUnderTest(fn)[returnedWith](undefined), + ).toThrowErrorMatchingSnapshot(); + } + }); + + test('a call that throws undefined is not considered to have returned', () => { + const fn = mock.fn(() => { + + throw undefined; + }); + + try { + fn(); + } catch { + // ignore error + } + + if (isToHaveNth(returnedWith)) { + // It doesn't matter what return value is tested if the call threw + expectUnderTest(fn).not[returnedWith](1, 'foo'); + expectUnderTest(fn).not[returnedWith](1, null); + expectUnderTest(fn).not[returnedWith](1, undefined); + + expect(() => + expectUnderTest(fn)[returnedWith](1, undefined), + ).toThrowErrorMatchingSnapshot(); + } else { + // It doesn't matter what return value is tested if the call threw + expectUnderTest(fn).not[returnedWith]('foo'); + expectUnderTest(fn).not[returnedWith](null); + expectUnderTest(fn).not[returnedWith](undefined); + + expect(() => + expectUnderTest(fn)[returnedWith](undefined), + ).toThrowErrorMatchingSnapshot(); + } + }); + + if (!isToHaveNth(returnedWith)) { + test.describe('returnedWith', () => { + test('works with more calls than the limit', () => { + const fn = mock.fn<() => string>(); + fn.mockReturnValueOnce('foo1'); + fn.mockReturnValueOnce('foo2'); + fn.mockReturnValueOnce('foo3'); + fn.mockReturnValueOnce('foo4'); + fn.mockReturnValueOnce('foo5'); + fn.mockReturnValueOnce('foo6'); + + fn(); + fn(); + fn(); + fn(); + fn(); + fn(); + + expectUnderTest(fn).not[returnedWith]('bar'); + + expect(() => { + expectUnderTest(fn)[returnedWith]('bar'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('incomplete recursive calls are handled properly', () => { + // sums up all integers from 0 -> value, using recursion + const fn: mock.Mock<(value: number) => number> = mock.fn(value => { + if (value === 0) { + // Before returning from the base case of recursion, none of the + // calls have returned yet. + // This test ensures that the incomplete calls are not incorrectly + // interpreted as have returned undefined + expectUnderTest(fn).not[returnedWith](undefined); + expect(() => + expectUnderTest(fn)[returnedWith](undefined), + ).toThrowErrorMatchingSnapshot(); + + return 0; + } else { + return value + fn(value - 1); + } + }); + + fn(3); + }); + }); + } + + if (isToHaveNth(returnedWith)) { + test.describe('nthReturnedWith', () => { + test('works with three calls', () => { + const fn = mock.fn<() => string>(); + fn.mockReturnValueOnce('foo1'); + fn.mockReturnValueOnce('foo2'); + fn.mockReturnValueOnce('foo3'); + fn(); + fn(); + fn(); + + expectUnderTest(fn)[returnedWith](1, 'foo1'); + expectUnderTest(fn)[returnedWith](2, 'foo2'); + expectUnderTest(fn)[returnedWith](3, 'foo3'); + + expect(() => { + expectUnderTest(fn).not[returnedWith](1, 'foo1'); + expectUnderTest(fn).not[returnedWith](2, 'foo2'); + expectUnderTest(fn).not[returnedWith](3, 'foo3'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('should replace 1st, 2nd, 3rd with first, second, third', async () => { + const fn = mock.fn<() => string>(); + fn.mockReturnValueOnce('foo1'); + fn.mockReturnValueOnce('foo2'); + fn.mockReturnValueOnce('foo3'); + fn(); + fn(); + fn(); + + expect(() => { + expectUnderTest(fn)[returnedWith](1, 'bar1'); + expectUnderTest(fn)[returnedWith](2, 'bar2'); + expectUnderTest(fn)[returnedWith](3, 'bar3'); + }).toThrowErrorMatchingSnapshot(); + + expect(() => { + expectUnderTest(fn).not[returnedWith](1, 'foo1'); + expectUnderTest(fn).not[returnedWith](2, 'foo2'); + expectUnderTest(fn).not[returnedWith](3, 'foo3'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('positive throw matcher error for n that is not positive integer', async () => { + const fn = mock.fn(() => 'foo'); + fn(); + + expect(() => { + expectUnderTest(fn)[returnedWith](0, 'foo'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('should reject nth value greater than number of calls', async () => { + const fn = mock.fn(() => 'foo'); + fn(); + fn(); + fn(); + + expect(() => { + expectUnderTest(fn)[returnedWith](4, 'foo'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('positive throw matcher error for n that is not integer', async () => { + const fn = mock.fn<(a: string) => string>(() => 'foo'); + fn('foo'); + + expect(() => { + expectUnderTest(fn)[returnedWith](0.1, 'foo'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('negative throw matcher error for n that is not number', async () => { + const fn = mock.fn<(a: string) => string>(() => 'foo'); + fn('foo'); + + expect(() => { + // @ts-expect-error: Testing runtime error + expectUnderTest(fn).not[returnedWith](); + }).toThrowErrorMatchingSnapshot(); + }); + + test('incomplete recursive calls are handled properly', () => { + // sums up all integers from 0 -> value, using recursion + const fn: mock.Mock<(value: number) => number> = mock.fn(value => { + if (value === 0) { + return 0; + } else { + const recursiveResult = fn(value - 1); + + if (value === 2) { + // Only 2 of the recursive calls have returned at this point + expectUnderTest(fn).not[returnedWith](1, 6); + expectUnderTest(fn).not[returnedWith](2, 3); + expectUnderTest(fn)[returnedWith](3, 1); + expectUnderTest(fn)[returnedWith](4, 0); + + expect(() => + expectUnderTest(fn)[returnedWith](1, 6), + ).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest(fn)[returnedWith](2, 3), + ).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest(fn).not[returnedWith](3, 1), + ).toThrowErrorMatchingSnapshot(); + expect(() => + expectUnderTest(fn).not[returnedWith](4, 0), + ).toThrowErrorMatchingSnapshot(); + } + + return value + recursiveResult; + } + }); + + fn(3); + }); + }); + } + + if (isToHaveLast(returnedWith)) { + test.describe('lastReturnedWith', () => { + test('works with three calls', () => { + const fn = mock.fn<() => string>(); + fn.mockReturnValueOnce('foo1'); + fn.mockReturnValueOnce('foo2'); + fn.mockReturnValueOnce('foo3'); + fn(); + fn(); + fn(); + + expectUnderTest(fn)[returnedWith]('foo3'); + + expect(() => { + expectUnderTest(fn).not[returnedWith]('foo3'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('incomplete recursive calls are handled properly', () => { + // sums up all integers from 0 -> value, using recursion + const fn: mock.Mock<(value: number) => number> = mock.fn(value => { + if (value === 0) { + // Before returning from the base case of recursion, none of the + // calls have returned yet. + expectUnderTest(fn).not[returnedWith](0); + expect(() => + expectUnderTest(fn)[returnedWith](0), + ).toThrowErrorMatchingSnapshot(); + return 0; + } else { + return value + fn(value - 1); + } + }); + + fn(3); + }); + }); + } + + test('includes the custom mock name in the error message', () => { + const fn = mock.fn().mockName('named-mock'); + + if (isToHaveNth(returnedWith)) { + expectUnderTest(fn).not[returnedWith](1, 'foo'); + + expect(() => + expectUnderTest(fn)[returnedWith](1, 'foo'), + ).toThrowErrorMatchingSnapshot(); + } else { + expectUnderTest(fn).not[returnedWith]('foo'); + + expect(() => + expectUnderTest(fn)[returnedWith]('foo'), + ).toThrowErrorMatchingSnapshot(); + } + }); + }); +} diff --git a/tests/expect/stacktrace.test.ts b/tests/expect/stacktrace.test.ts new file mode 100644 index 0000000000..6f5cf8bcc7 --- /dev/null +++ b/tests/expect/stacktrace.test.ts @@ -0,0 +1,71 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { test, expect } from './fixtures'; +import { expect as expectUnderTest } from '../../packages/playwright/bundles/expect/src/expectBundleImpl'; + +const expectUnderTestAsAny = expectUnderTest as any; + +expectUnderTest.extend({ + toCustomMatch(callback: () => unknown, expected: unknown) { + const actual = callback(); + + if (actual !== expected) { + return { + message: () => `Expected "${expected}" but got "${actual}"`, + pass: false, + }; + } + + return { + message: () => '', + pass: true, + }; + }, + toMatchPredicate(received: unknown, expected: (a: unknown) => void) { + expected(received); + return { + message: () => '', + pass: true, + }; + }, +}); + +test('stack trace points to correct location when using matchers', () => { + try { + expectUnderTest(true).toBe(false); + } catch (error: any) { + expect(error.stack).toContain('stacktrace.test.ts:'); + } +}); + +test('stack trace points to correct location when using nested matchers', () => { + try { + expectUnderTestAsAny(true).toMatchPredicate((value: unknown) => { + expectUnderTest(value).toBe(false); + }); + } catch (error: any) { + expect(error.stack).toContain('stacktrace.test.ts:'); + } +}); + +test('stack trace points to correct location when throwing from a custom matcher', () => { + try { + expectUnderTestAsAny(() => { + const foo = () => bar(); + const bar = () => baz(); + const baz = () => { + throw new Error('Expected'); + }; + + foo(); + }).toCustomMatch('bar'); + } catch (error: any) { + expect(error.stack).toContain('stacktrace.test.ts:'); + } +}); diff --git a/tests/expect/symbolInObjects.test.ts b/tests/expect/symbolInObjects.test.ts new file mode 100644 index 0000000000..011d87e72d --- /dev/null +++ b/tests/expect/symbolInObjects.test.ts @@ -0,0 +1,43 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { test } from './fixtures'; +import { expect as expectUnderTest } from '../../packages/playwright/bundles/expect/src/expectBundleImpl'; + +test.describe('Symbol in objects', () => { + test('should compare objects with Symbol keys', () => { + const sym = Symbol('foo'); + const obj1 = { [sym]: 'one' }; + const obj2 = { [sym]: 'two' }; + const obj3 = { [sym]: 'one' }; + + expectUnderTest(obj1).toEqual(obj3); + expectUnderTest(obj1).not.toEqual(obj2); + }); + + test('should compare objects with mixed keys and Symbol', () => { + const sym = Symbol('foo2'); + const obj1 = { foo: 2, [sym]: 'one' }; + const obj2 = { foo: 2, [sym]: 'two' }; + const obj3 = { foo: 2, [sym]: 'one' }; + + expectUnderTest(obj1).toEqual(obj3); + expectUnderTest(obj1).not.toEqual(obj2); + }); + + test('should compare objects with different Symbol keys', () => { + const sym = Symbol('foo'); + const sym2 = Symbol('foo'); + const obj1 = { [sym]: 'one' }; + const obj2 = { [sym2]: 'one' }; + const obj3 = { [sym]: 'one' }; + + expectUnderTest(obj1).toEqual(obj3); + expectUnderTest(obj1).not.toEqual(obj2); + }); +}); diff --git a/tests/expect/toThrowMatchers.snapshots.js b/tests/expect/toThrowMatchers.snapshots.js new file mode 100644 index 0000000000..c1243e0f0b --- /dev/null +++ b/tests/expect/toThrowMatchers.snapshots.js @@ -0,0 +1,456 @@ +module.exports["toThrowError substring did not throw at all"] = `expect(received).toThrowError(expected) + +Expected substring: "apple" + +Received function did not throw`; + +module.exports["toThrowError substring threw, but message did not match (error)"] = `expect(received).toThrowError(expected) + +Expected substring: "banana" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError substring threw, but message did not match (non-error falsey)"] = `expect(received).toThrowError(expected) + +Expected substring: "Server Error" +Received value: "" +`; + +module.exports["toThrowError substring threw, but message should not match (error)"] = `expect(received).not.toThrowError(expected) + +Expected substring: not "array" +Received message: "Invalid array length" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError substring threw, but message should not match (non-error truthy)"] = `expect(received).not.toThrowError(expected) + +Expected substring: not "Server Error" +Received value: "Internal Server Error" +`; + +module.exports["toThrowError regexp did not throw at all"] = `expect(received).toThrowError(expected) + +Expected pattern: /apple/ + +Received function did not throw`; + +module.exports["toThrowError regexp threw, but message did not match (error)"] = `expect(received).toThrowError(expected) + +Expected pattern: /banana/ +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError regexp threw, but message did not match (non-error falsey)"] = `expect(received).toThrowError(expected) + +Expected pattern: /^[123456789]\\d*/ +Received value: 0 +`; + +module.exports["toThrowError regexp threw, but message should not match (error)"] = `expect(received).not.toThrowError(expected) + +Expected pattern: not / array / +Received message: "Invalid array length" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError regexp threw, but message should not match (non-error truthy)"] = `expect(received).not.toThrowError(expected) + +Expected pattern: not /^[123456789]\\d*/ +Received value: 404 +`; + +module.exports["toThrowError error class did not throw at all"] = `expect(received).toThrowError(expected) + +Expected constructor: Err + +Received function did not throw`; + +module.exports["toThrowError error class threw, but class did not match (error)"] = `expect(received).toThrowError(expected) + +Expected constructor: Err2 +Received constructor: Err + +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError error class threw, but class did not match (non-error falsey)"] = `expect(received).toThrowError(expected) + +Expected constructor: Err2 + +Received value: undefined +`; + +module.exports["toThrowError error class threw, but class should not match (error)"] = `expect(received).not.toThrowError(expected) + +Expected constructor: not Err + +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError error class threw, but class should not match (error subclass)"] = `expect(received).not.toThrowError(expected) + +Expected constructor: not Err +Received constructor: SubErr extends Err + +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError error class threw, but class should not match (error subsubclass)"] = `expect(received).not.toThrowError(expected) + +Expected constructor: not Err +Received constructor: SubSubErr extends … extends Err + +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError error-message fail isNot false"] = `expect(received).toThrowError(expected) + +Expected message: "apple" +Received message: "banana" +`; + +module.exports["toThrowError error-message fail isNot true"] = `expect(received).not.toThrowError(expected) + +Expected message: not "Invalid array length" +`; + +module.exports["toThrowError error-message fail multiline diff highlight incorrect expected space"] = `expect(received).toThrowError(expected) + +- Expected message - 1 ++ Received message + 1 + +- There is no route defined for key Settings. ++ There is no route defined for key Settings. + Must be one of: 'Home' +`; + +module.exports["toThrowError asymmetric any-Class fail isNot false"] = `expect(received).toThrowError(expected) + +Expected asymmetric matcher: Any + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError asymmetric any-Class fail isNot true"] = `expect(received).not.toThrowError(expected) + +Expected asymmetric matcher: not Any + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError asymmetric anything fail isNot false"] = `expect(received).toThrowError(expected) + +Expected asymmetric matcher: Anything + +Thrown value: null +`; + +module.exports["toThrowError asymmetric anything fail isNot true"] = `expect(received).not.toThrowError(expected) + +Expected asymmetric matcher: not Anything + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError asymmetric no-symbol fail isNot false"] = `expect(received).toThrowError(expected) + +Expected asymmetric matcher: {"asymmetricMatch": [Function asymmetricMatch]} + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError asymmetric no-symbol fail isNot true"] = `expect(received).not.toThrowError(expected) + +Expected asymmetric matcher: not {"asymmetricMatch": [Function asymmetricMatch]} + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError asymmetric objectContaining fail isNot false"] = `expect(received).toThrowError(expected) + +Expected asymmetric matcher: ObjectContaining {"name": "NotError"} + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError asymmetric objectContaining fail isNot true"] = `expect(received).not.toThrowError(expected) + +Expected asymmetric matcher: not ObjectContaining {"name": "Error"} + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrowError promise/async throws if Error-like object is returned did not throw at all"] = `callback is not a function`; + +module.exports["toThrowError promise/async throws if Error-like object is returned threw, but class did not match"] = `callback is not a function`; + +module.exports["toThrowError promise/async throws if Error-like object is returned threw, but should not have"] = `callback is not a function`; + +module.exports["toThrowError expected is undefined threw, but should not have (non-error falsey)"] = `expect(received).not.toThrowError() + +Thrown value: null +`; + +module.exports["toThrowError invalid arguments"] = `expect(received).not.toThrowError(expected) + +Matcher error: expected value must be a string or regular expression or class or error + +Expected has type: number +Expected has value: 111`; + +module.exports["toThrowError invalid actual"] = `expect(received).toThrowError() + +Matcher error: received value must be a function + +Received has type: string +Received has value: "a string"`; + +module.exports["toThrow substring did not throw at all"] = `expect(received).toThrow(expected) + +Expected substring: "apple" + +Received function did not throw`; + +module.exports["toThrow substring threw, but message did not match (error)"] = `expect(received).toThrow(expected) + +Expected substring: "banana" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow substring threw, but message did not match (non-error falsey)"] = `expect(received).toThrow(expected) + +Expected substring: "Server Error" +Received value: "" +`; + +module.exports["toThrow substring threw, but message should not match (error)"] = `expect(received).not.toThrow(expected) + +Expected substring: not "array" +Received message: "Invalid array length" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow substring threw, but message should not match (non-error truthy)"] = `expect(received).not.toThrow(expected) + +Expected substring: not "Server Error" +Received value: "Internal Server Error" +`; + +module.exports["toThrow regexp did not throw at all"] = `expect(received).toThrow(expected) + +Expected pattern: /apple/ + +Received function did not throw`; + +module.exports["toThrow regexp threw, but message did not match (error)"] = `expect(received).toThrow(expected) + +Expected pattern: /banana/ +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow regexp threw, but message did not match (non-error falsey)"] = `expect(received).toThrow(expected) + +Expected pattern: /^[123456789]\\d*/ +Received value: 0 +`; + +module.exports["toThrow regexp threw, but message should not match (error)"] = `expect(received).not.toThrow(expected) + +Expected pattern: not / array / +Received message: "Invalid array length" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow regexp threw, but message should not match (non-error truthy)"] = `expect(received).not.toThrow(expected) + +Expected pattern: not /^[123456789]\\d*/ +Received value: 404 +`; + +module.exports["toThrow error class did not throw at all"] = `expect(received).toThrow(expected) + +Expected constructor: Err + +Received function did not throw`; + +module.exports["toThrow error class threw, but class did not match (error)"] = `expect(received).toThrow(expected) + +Expected constructor: Err2 +Received constructor: Err + +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow error class threw, but class did not match (non-error falsey)"] = `expect(received).toThrow(expected) + +Expected constructor: Err2 + +Received value: undefined +`; + +module.exports["toThrow error class threw, but class should not match (error)"] = `expect(received).not.toThrow(expected) + +Expected constructor: not Err + +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow error class threw, but class should not match (error subclass)"] = `expect(received).not.toThrow(expected) + +Expected constructor: not Err +Received constructor: SubErr extends Err + +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow error class threw, but class should not match (error subsubclass)"] = `expect(received).not.toThrow(expected) + +Expected constructor: not Err +Received constructor: SubSubErr extends … extends Err + +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow error-message fail isNot false"] = `expect(received).toThrow(expected) + +Expected message: "apple" +Received message: "banana" +`; + +module.exports["toThrow error-message fail isNot true"] = `expect(received).not.toThrow(expected) + +Expected message: not "Invalid array length" +`; + +module.exports["toThrow error-message fail multiline diff highlight incorrect expected space"] = `expect(received).toThrow(expected) + +- Expected message - 1 ++ Received message + 1 + +- There is no route defined for key Settings. ++ There is no route defined for key Settings. + Must be one of: 'Home' +`; + +module.exports["toThrow asymmetric any-Class fail isNot false"] = `expect(received).toThrow(expected) + +Expected asymmetric matcher: Any + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow asymmetric any-Class fail isNot true"] = `expect(received).not.toThrow(expected) + +Expected asymmetric matcher: not Any + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow asymmetric anything fail isNot false"] = `expect(received).toThrow(expected) + +Expected asymmetric matcher: Anything + +Thrown value: null +`; + +module.exports["toThrow asymmetric anything fail isNot true"] = `expect(received).not.toThrow(expected) + +Expected asymmetric matcher: not Anything + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow asymmetric no-symbol fail isNot false"] = `expect(received).toThrow(expected) + +Expected asymmetric matcher: {"asymmetricMatch": [Function asymmetricMatch]} + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow asymmetric no-symbol fail isNot true"] = `expect(received).not.toThrow(expected) + +Expected asymmetric matcher: not {"asymmetricMatch": [Function asymmetricMatch]} + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow asymmetric objectContaining fail isNot false"] = `expect(received).toThrow(expected) + +Expected asymmetric matcher: ObjectContaining {"name": "NotError"} + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow asymmetric objectContaining fail isNot true"] = `expect(received).not.toThrow(expected) + +Expected asymmetric matcher: not ObjectContaining {"name": "Error"} + +Received name: "Error" +Received message: "apple" + + at expectUnderTest (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)`; + +module.exports["toThrow promise/async throws if Error-like object is returned did not throw at all"] = `callback is not a function`; + +module.exports["toThrow promise/async throws if Error-like object is returned threw, but class did not match"] = `callback is not a function`; + +module.exports["toThrow promise/async throws if Error-like object is returned threw, but should not have"] = `callback is not a function`; + +module.exports["toThrow expected is undefined threw, but should not have (non-error falsey)"] = `expect(received).not.toThrow() + +Thrown value: null +`; + +module.exports["toThrow invalid arguments"] = `expect(received).not.toThrow(expected) + +Matcher error: expected value must be a string or regular expression or class or error + +Expected has type: number +Expected has value: 111`; + +module.exports["toThrow invalid actual"] = `expect(received).toThrow() + +Matcher error: received value must be a function + +Received has type: string +Received has value: "a string"`; + diff --git a/tests/expect/toThrowMatchers.test.ts b/tests/expect/toThrowMatchers.test.ts new file mode 100644 index 0000000000..a5d5e52ba8 --- /dev/null +++ b/tests/expect/toThrowMatchers.test.ts @@ -0,0 +1,591 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { test, expect } from './fixtures'; +import { expect as expectUnderTest } from '../../packages/playwright/bundles/expect/src/expectBundleImpl'; + +const expectUnderTestAsAny = expectUnderTest as any; + +// Custom Error class because node versions have different stack trace strings. +class CustomError extends Error { + constructor(message?: string) { + super(message); + this.name = 'Error'; + this.stack = + 'Error\n' + + ' at expectUnderTest' + + ' (packages/expect/src/__tests__/toThrowMatchers-test.js:24:74)'; + } +} + +for (const toThrow of ['toThrowError', 'toThrow'] as const) { + test.describe(toThrow, () => { + class Err extends CustomError {} + class Err2 extends CustomError {} + + test('to throw or not to throw', () => { + expectUnderTest(() => { + throw new CustomError('apple'); + })[toThrow](); + expectUnderTest(() => {}).not[toThrow](); + }); + + test.describe('substring', () => { + test('passes', () => { + expectUnderTest(() => { + throw new CustomError('apple'); + })[toThrow]('apple'); + expectUnderTest(() => { + throw new CustomError('banana'); + }).not[toThrow]('apple'); + expectUnderTest(() => {}).not[toThrow]('apple'); + }); + + test('did not throw at all', () => { + expect(() => + expectUnderTest(() => {})[toThrow]('apple'), + ).toThrowErrorMatchingSnapshot(); + }); + + test('threw, but message did not match (error)', () => { + expect(() => { + expectUnderTest(() => { + throw new CustomError('apple'); + })[toThrow]('banana'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('threw, but message did not match (non-error falsey)', () => { + expect(() => { + expectUnderTest(() => { + + throw ''; + })[toThrow]('Server Error'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('properly escapes strings when matching against errors', () => { + expectUnderTest(() => { + throw new TypeError('"this"? throws.'); + })[toThrow]('"this"? throws.'); + }); + + test('threw, but message should not match (error)', () => { + expect(() => { + expectUnderTest(() => { + throw new CustomError('Invalid array length'); + }).not[toThrow]('array'); + }).toThrowErrorMatchingSnapshot(); + }); + + test('threw, but message should not match (non-error truthy)', () => { + expect(() => { + expectUnderTest(() => { + + throw 'Internal Server Error'; + }).not[toThrow]('Server Error'); + }).toThrowErrorMatchingSnapshot(); + }); + }); + + test.describe('regexp', () => { + test('passes', () => { + expectUnderTest(() => { + throw new CustomError('apple'); + })[toThrow](/apple/); + expectUnderTest(() => { + throw new CustomError('banana'); + }).not[toThrow](/apple/); + expectUnderTest(() => {}).not[toThrow](/apple/); + }); + + test('did not throw at all', () => { + expect(() => + expectUnderTest(() => {})[toThrow](/apple/), + ).toThrowErrorMatchingSnapshot(); + }); + + test('threw, but message did not match (error)', () => { + expect(() => { + expectUnderTest(() => { + throw new CustomError('apple'); + })[toThrow](/banana/); + }).toThrowErrorMatchingSnapshot(); + }); + + test('threw, but message did not match (non-error falsey)', () => { + expect(() => { + expectUnderTest(() => { + + throw 0; + })[toThrow](/^[123456789]\d*/); + }).toThrowErrorMatchingSnapshot(); + }); + + test('threw, but message should not match (error)', () => { + expect(() => { + expectUnderTest(() => { + throw new CustomError('Invalid array length'); + }).not[toThrow](/ array /); + }).toThrowErrorMatchingSnapshot(); + }); + + test('threw, but message should not match (non-error truthy)', () => { + expect(() => { + expectUnderTest(() => { + + throw 404; + }).not[toThrow](/^[123456789]\d*/); + }).toThrowErrorMatchingSnapshot(); + }); + }); + + test.describe('error class', () => { + class SubErr extends Err { + constructor(message?: string) { + super(message); + // In a carefully written error subclass, + // name property is equal to constructor name. + this.name = this.constructor.name; + } + } + + class SubSubErr extends SubErr { + constructor(message?: string) { + super(message); + // In a carefully written error subclass, + // name property is equal to constructor name. + this.name = this.constructor.name; + } + } + + test('passes', () => { + expectUnderTest(() => { + throw new Err(); + })[toThrow](Err); + expectUnderTest(() => { + throw new Err(); + })[toThrow](CustomError); + expectUnderTest(() => { + throw new Err(); + }).not[toThrow](Err2); + expectUnderTest(() => {}).not[toThrow](Err); + }); + + test('did not throw at all', () => { + expect(() => + expect(() => {})[toThrow](Err), + ).toThrowErrorMatchingSnapshot(); + }); + + test('threw, but class did not match (error)', () => { + expect(() => { + expectUnderTest(() => { + throw new Err('apple'); + })[toThrow](Err2); + }).toThrowErrorMatchingSnapshot(); + }); + + test('threw, but class did not match (non-error falsey)', () => { + expect(() => { + expectUnderTest(() => { + + throw undefined; + })[toThrow](Err2); + }).toThrowErrorMatchingSnapshot(); + }); + + test('threw, but class should not match (error)', () => { + expect(() => { + expectUnderTest(() => { + throw new Err('apple'); + }).not[toThrow](Err); + }).toThrowErrorMatchingSnapshot(); + }); + + test('threw, but class should not match (error subclass)', () => { + expect(() => { + expectUnderTest(() => { + throw new SubErr('apple'); + }).not[toThrow](Err); + }).toThrowErrorMatchingSnapshot(); + }); + + test('threw, but class should not match (error subsubclass)', () => { + expect(() => { + expectUnderTest(() => { + throw new SubSubErr('apple'); + }).not[toThrow](Err); + }).toThrowErrorMatchingSnapshot(); + }); + }); + + test.describe('error-message', () => { + // Received message in report if object has message property. + class ErrorMessage { + // not extending Error! + constructor(public message: string) {} + } + const expected = new ErrorMessage('apple'); + + test.describe('pass', () => { + test('isNot false', () => { + expectUnderTest(() => { + throw new ErrorMessage('apple'); + })[toThrow](expected); + }); + + test('isNot true', () => { + expectUnderTest(() => { + throw new ErrorMessage('banana'); + }).not[toThrow](expected); + }); + }); + + test.describe('fail', () => { + test('isNot false', () => { + expect(() => + expectUnderTest(() => { + throw new ErrorMessage('banana'); + })[toThrow](expected), + ).toThrowErrorMatchingSnapshot(); + }); + + test('isNot true', () => { + const message = 'Invalid array length'; + expect(() => + expectUnderTest(() => { + throw new ErrorMessage(message); + }).not[toThrow]({ message }), + ).toThrowErrorMatchingSnapshot(); + }); + + test('multiline diff highlight incorrect expected space', () => { + // jest/issues/2673 + const a = + "There is no route defined for key Settings. \nMust be one of: 'Home'"; + const b = + "There is no route defined for key Settings.\nMust be one of: 'Home'"; + expect(() => + expectUnderTest(() => { + throw new ErrorMessage(b); + })[toThrow]({ message: a }), + ).toThrowErrorMatchingSnapshot(); + }); + }); + }); + + test.describe('error message and cause', () => { + const errorA = new Error('A'); + const errorB = new Error('B', { cause: errorA }); + const expected = new Error('good', { cause: errorB }); + + test.describe('pass', () => { + test('isNot false', () => { + expectUnderTest(() => { + throw new Error('good', { cause: errorB }); + })[toThrow](expected); + }); + + test('isNot true, incorrect message', () => { + expectUnderTest(() => { + throw new Error('bad', { cause: errorB }); + }).not[toThrow](expected); + }); + + test('isNot true, incorrect cause', () => { + expectUnderTest(() => { + throw new Error('good', { cause: errorA }); + }).not[toThrow](expected); + }); + }); + + test.describe('fail', () => { + test('isNot false, incorrect message', () => { + expect(() => + expectUnderTest(() => { + throw new Error('bad', { cause: errorB }); + })[toThrow](expected), + ).toThrow( + /^(?=.*Expected message and cause: ).*Received message and cause: /s, + ); + }); + + test('isNot true, incorrect cause', () => { + expect(() => + expectUnderTest(() => { + throw new Error('good', { cause: errorA }); + })[toThrow](expected), + ).toThrow( + /^(?=.*Expected message and cause: ).*Received message and cause: /s, + ); + }); + }); + }); + + test.describe('asymmetric', () => { + test.describe('any-Class', () => { + test.describe('pass', () => { + test('isNot false', () => { + expectUnderTest(() => { + throw new Err('apple'); + })[toThrow](expect.any(Err)); + }); + + test('isNot true', () => { + expectUnderTest(() => { + throw new Err('apple'); + }).not[toThrow](expect.any(Err2)); + }); + }); + + test.describe('fail', () => { + test('isNot false', () => { + expect(() => + expectUnderTest(() => { + throw new Err('apple'); + })[toThrow](expect.any(Err2)), + ).toThrowErrorMatchingSnapshot(); + }); + + test('isNot true', () => { + expect(() => + expectUnderTest(() => { + throw new Err('apple'); + }).not[toThrow](expect.any(Err)), + ).toThrowErrorMatchingSnapshot(); + }); + }); + }); + + test.describe('anything', () => { + test.describe('pass', () => { + test('isNot false', () => { + expectUnderTest(() => { + throw new CustomError('apple'); + })[toThrow](expect.anything()); + }); + + test('isNot true', () => { + expectUnderTest(() => {}).not[toThrow](expect.anything()); + expectUnderTest(() => { + + throw null; + }).not[toThrow](expect.anything()); + }); + }); + + test.describe('fail', () => { + test('isNot false', () => { + expect(() => + expectUnderTest(() => { + + throw null; + })[toThrow](expect.anything()), + ).toThrowErrorMatchingSnapshot(); + }); + + test('isNot true', () => { + expect(() => + expectUnderTest(() => { + throw new CustomError('apple'); + }).not[toThrow](expect.anything()), + ).toThrowErrorMatchingSnapshot(); + }); + }); + }); + + test.describe('no-symbol', () => { + // Test serialization of asymmetric matcher which has no property: + // this.$$typeof = Symbol.for('jest.asymmetricMatcher') + const matchError = { + asymmetricMatch(received: Error | null | undefined) { + return ( + received !== null && + received !== undefined && + received.name === 'Error' + ); + }, + }; + const matchNotError = { + asymmetricMatch(received: Error | null | undefined) { + return ( + received !== null && + received !== undefined && + received.name !== 'Error' + ); + }, + }; + + test.describe('pass', () => { + test('isNot false', () => { + expectUnderTest(() => { + throw new CustomError('apple'); + })[toThrow](matchError); + }); + + test('isNot true', () => { + expectUnderTest(() => { + throw new CustomError('apple'); + }).not[toThrow](matchNotError); + }); + }); + + test.describe('fail', () => { + test('isNot false', () => { + expect(() => + expectUnderTest(() => { + throw new CustomError('apple'); + })[toThrow](matchNotError), + ).toThrowErrorMatchingSnapshot(); + }); + + test('isNot true', () => { + expect(() => + expectUnderTest(() => { + throw new CustomError('apple'); + }).not[toThrow](matchError), + ).toThrowErrorMatchingSnapshot(); + }); + }); + }); + + test.describe('objectContaining', () => { + const matchError = expect.objectContaining({ + name: 'Error', + }); + const matchNotError = expect.objectContaining({ + name: 'NotError', + }); + + test.describe('pass', () => { + test('isNot false', () => { + expectUnderTest(() => { + throw new CustomError('apple'); + })[toThrow](matchError); + }); + + test('isNot true', () => { + expectUnderTest(() => { + throw new CustomError('apple'); + }).not[toThrow](matchNotError); + }); + }); + + test.describe('fail', () => { + test('isNot false', () => { + expect(() => + expectUnderTest(() => { + throw new CustomError('apple'); + })[toThrow](matchNotError), + ).toThrowErrorMatchingSnapshot(); + }); + + test('isNot true', () => { + expect(() => + expectUnderTest(() => { + throw new CustomError('apple'); + }).not[toThrow](matchError), + ).toThrowErrorMatchingSnapshot(); + }); + }); + }); + }); + + test.describe('promise/async throws if Error-like object is returned', () => { + const asyncFn = async (shouldThrow?: boolean, resolve?: boolean) => { + let err; + if (shouldThrow) + err = new Err('async apple'); + + if (resolve) + return Promise.resolve(err || 'apple'); + else + return Promise.reject(err || 'apple'); + }; + + test('passes', async () => { + await expectUnderTest(Promise.reject(new Error())).rejects[toThrow](); + + await expectUnderTest(asyncFn(true)).rejects[toThrow](); + await expectUnderTest(asyncFn(true)).rejects[toThrow](Err); + await expectUnderTest(asyncFn(true)).rejects[toThrow](Error); + await expectUnderTest(asyncFn(true)).rejects[toThrow]('apple'); + await expectUnderTest(asyncFn(true)).rejects[toThrow](/app/); + + await expectUnderTest(asyncFn(true)).rejects.not[toThrow](Err2); + await expectUnderTest(asyncFn(true)).rejects.not[toThrow]('banana'); + await expectUnderTest(asyncFn(true)).rejects.not[toThrow](/banana/); + + await expectUnderTest(asyncFn(true, true)).resolves[toThrow](); + + await expectUnderTest(asyncFn(false, true)).resolves.not[toThrow](); + await expectUnderTest(asyncFn(false, true)).resolves.not[toThrow](Error); + await expectUnderTest(asyncFn(false, true)).resolves.not[toThrow]('apple'); + await expectUnderTest(asyncFn(false, true)).resolves.not[toThrow](/apple/); + await expectUnderTest(asyncFn(false, true)).resolves.not[toThrow]('banana'); + await expectUnderTest(asyncFn(false, true)).resolves.not[toThrow](/banana/); + + await expectUnderTest(asyncFn()).rejects.not[toThrow](); + await expectUnderTest(asyncFn()).rejects.not[toThrow](Error); + await expectUnderTest(asyncFn()).rejects.not[toThrow]('apple'); + await expectUnderTest(asyncFn()).rejects.not[toThrow](/apple/); + await expectUnderTest(asyncFn()).rejects.not[toThrow]('banana'); + await expectUnderTest(asyncFn()).rejects.not[toThrow](/banana/); + + // Works with nested functions inside promises + await expectUnderTest( + Promise.reject(() => { + throw new Error(); + }), + ).rejects[toThrow](); + await expectUnderTest(Promise.reject(() => {})).rejects.not[toThrow](); + }); + + test('did not throw at all', async () => { + await expectUnderTestAsAny( + expectUnderTest(asyncFn()).rejects[toThrow](), + ).rejects.toThrowErrorMatchingSnapshot(); + }); + + test('threw, but class did not match', async () => { + await expectUnderTestAsAny( + expectUnderTest(asyncFn(true)).rejects[toThrow](Err2), + ).rejects.toThrowErrorMatchingSnapshot(); + }); + + test('threw, but should not have', async () => { + await expectUnderTestAsAny( + expectUnderTest(asyncFn(true)).rejects.not[toThrow](), + ).rejects.toThrowErrorMatchingSnapshot(); + }); + }); + + test.describe('expected is undefined', () => { + test('threw, but should not have (non-error falsey)', () => { + expect(() => { + expectUnderTest(() => { + + throw null; + }).not[toThrow](); + }).toThrowErrorMatchingSnapshot(); + }); + }); + + test('invalid arguments', () => { + expect(() => + expectUnderTest(() => {}).not[toThrow](111), + ).toThrowErrorMatchingSnapshot(); + }); + + test('invalid actual', () => { + expect(() => + expectUnderTest('a string')[toThrow](), + ).toThrowErrorMatchingSnapshot(); + }); + }); +} \ No newline at end of file diff --git a/tests/playwright-test/playwright.config.ts b/tests/playwright-test/playwright.config.ts index 34d4dc6d9f..0d94a8197d 100644 --- a/tests/playwright-test/playwright.config.ts +++ b/tests/playwright-test/playwright.config.ts @@ -47,6 +47,10 @@ export default defineConfig({ testDir: path.join(__dirname, '../image_tools'), testIgnore: [path.join(__dirname, '../fixtures/**')], }, + { + name: 'expect', + testDir: path.join(__dirname, '../expect'), + }, ], reporter: reporters(), metadata: { diff --git a/utils/check_deps.js b/utils/check_deps.js index 8943ca6800..79eca03062 100644 --- a/utils/check_deps.js +++ b/utils/check_deps.js @@ -79,7 +79,7 @@ async function innerCheckDeps(root) { }); const sourceFiles = program.getSourceFiles(); const errors = []; - sourceFiles.filter(x => !x.fileName.includes('node_modules')).map(x => visit(x, x.fileName, x.getFullText())); + sourceFiles.filter(x => !x.fileName.includes(path.sep + 'node_modules' + path.sep) && !x.fileName.includes(path.sep + 'bundles' + path.sep)).map(x => visit(x, x.fileName, x.getFullText())); if (errors.length) { for (const error of errors) @@ -244,7 +244,7 @@ async function innerCheckDeps(root) { function listAllFiles(dir) { const dirs = fs.readdirSync(dir, { withFileTypes: true }); const result = []; - dirs.map(d => { + dirs.forEach(d => { const res = path.resolve(dir, d.name); if (d.isDirectory()) result.push(...listAllFiles(res)); From e5d6ee5bd81327a26fff312ce055c7c82175483e Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Mon, 9 Sep 2024 22:28:08 +0200 Subject: [PATCH 394/498] chore: merge fetch params on server side (#32518) https://github.com/microsoft/playwright-python/pull/2546#discussion_r1750090592 --- packages/playwright-core/src/client/fetch.ts | 33 ++++--------------- .../playwright-core/src/protocol/validator.ts | 1 + packages/playwright-core/src/server/fetch.ts | 4 ++- packages/protocol/src/channels.ts | 2 ++ packages/protocol/src/protocol.yml | 1 + 5 files changed, 14 insertions(+), 27 deletions(-) diff --git a/packages/playwright-core/src/client/fetch.ts b/packages/playwright-core/src/client/fetch.ts index 7aaa5069c2..87c31579b5 100644 --- a/packages/playwright-core/src/client/fetch.ts +++ b/packages/playwright-core/src/client/fetch.ts @@ -175,8 +175,12 @@ export class APIRequestContext extends ChannelOwner= 0, `'maxRedirects' must be greater than or equal to '0'`); assert(options.maxRetries === undefined || options.maxRetries >= 0, `'maxRetries' must be greater than or equal to '0'`); const url = options.url !== undefined ? options.url : options.request!.url(); - const params = mapParamsToArray(options.params); const method = options.method || options.request?.method(); + let encodedParams = undefined; + if (typeof options.params === 'string') + encodedParams = options.params; + else if (options.params instanceof URLSearchParams) + encodedParams = options.params.toString(); // Cannot call allHeaders() here as the request may be paused inside route handler. const headersObj = options.headers || options.request?.headers(); const headers = headersObj ? headersObjectToArray(headersObj) : undefined; @@ -228,7 +232,8 @@ export class APIRequestContext extends ChannelOwner Date: Mon, 9 Sep 2024 14:00:51 -0700 Subject: [PATCH 395/498] test: fix project filter test (#32525) It was erroneously passing projects separate by comma, which never worked. --- tests/playwright-test/reporter-blob.spec.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/playwright-test/reporter-blob.spec.ts b/tests/playwright-test/reporter-blob.spec.ts index 8f3064a073..91b32e76a2 100644 --- a/tests/playwright-test/reporter-blob.spec.ts +++ b/tests/playwright-test/reporter-blob.spec.ts @@ -2040,12 +2040,15 @@ test('project filter in report name', async ({ runInlineTest }) => { const reportDir = test.info().outputPath('blob-report'); { - await runInlineTest(files, { shard: `2/2`, project: 'foo' }); + const result = await runInlineTest(files, { shard: `2/2`, project: 'foo' }); + expect(result.exitCode).toBe(0); const reportFiles = await fs.promises.readdir(reportDir); expect(reportFiles.sort()).toEqual(['report-foo-2.zip']); } + { - await runInlineTest(files, { shard: `1/2`, project: 'foo,b*r', grep: 'smoke' }); + const result = await runInlineTest(files, { shard: `1/2`, project: ['foo', 'b*r'], grep: 'smoke' }); + expect(result.exitCode).toBe(0); const reportFiles = await fs.promises.readdir(reportDir); expect(reportFiles.sort()).toEqual(['report-foo-b-r-6d9d49e-1.zip']); } From 6bb005db85c047f1a3708c4ec0f10659e7ae0046 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Mon, 9 Sep 2024 14:01:02 -0700 Subject: [PATCH 396/498] fix(test runner): improve error message when not able to parse tsconfig (#32526) --- .../src/third_party/tsconfig-loader.ts | 10 +++++++--- tests/playwright-test/resolver.spec.ts | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/playwright/src/third_party/tsconfig-loader.ts b/packages/playwright/src/third_party/tsconfig-loader.ts index 61ad11a3bd..b654a3b963 100644 --- a/packages/playwright/src/third_party/tsconfig-loader.ts +++ b/packages/playwright/src/third_party/tsconfig-loader.ts @@ -53,9 +53,13 @@ export interface LoadedTsConfig { } export function loadTsConfig(configPath: string): LoadedTsConfig[] { - const references: LoadedTsConfig[] = []; - const config = innerLoadTsConfig(configPath, references); - return [config, ...references]; + try { + const references: LoadedTsConfig[] = []; + const config = innerLoadTsConfig(configPath, references); + return [config, ...references]; + } catch (e) { + throw new Error(`Failed to load tsconfig file at ${configPath}:\n${e.message}`); + } } function resolveConfigFile(baseConfigFile: string, referencedConfigFile: string) { diff --git a/tests/playwright-test/resolver.spec.ts b/tests/playwright-test/resolver.spec.ts index 5a0e91b099..e06959558c 100644 --- a/tests/playwright-test/resolver.spec.ts +++ b/tests/playwright-test/resolver.spec.ts @@ -16,6 +16,24 @@ import { test, expect } from './playwright-test-fixtures'; +test('should print tsconfig parsing error', async ({ runInlineTest }) => { + const files = { + 'a.spec.ts': ` + import { test } from '@playwright/test'; + test('pass', async () => {}); + `, + 'tsconfig.json': ` + "foo": "bar" + `, + }; + + const result = await runInlineTest(files); + expect(result.exitCode).toBe(1); + expect(result.output).toContain(`Failed to load tsconfig file at`); + expect(result.output).toContain(`tsconfig.json`); + expect(result.output).toContain(`JSON5: invalid character ':' at 2:12`); +}); + test('should respect path resolver', async ({ runInlineTest }) => { test.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/11656' }); From ae118674b8d3a42c905058f612703b2ddbc42751 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Mon, 9 Sep 2024 14:01:20 -0700 Subject: [PATCH 397/498] fix(test runner): allow directory imports with path mapping (#32491) We now hopefully align with `moduleResolution: bundler` tsconfig option, allowing directory imports in every scenario, and allowing proper module imports when not going through the type mapping. This regressed in #32078. Fixes #32480, fixes #31811. --- .../playwright/src/transform/transform.ts | 13 +- packages/playwright/src/util.ts | 57 ++- tests/playwright-test/resolver.spec.ts | 460 ++++++++++++++++-- 3 files changed, 484 insertions(+), 46 deletions(-) diff --git a/packages/playwright/src/transform/transform.ts b/packages/playwright/src/transform/transform.ts index 9ca80399fb..f70f385b5b 100644 --- a/packages/playwright/src/transform/transform.ts +++ b/packages/playwright/src/transform/transform.ts @@ -24,7 +24,7 @@ import type { LoadedTsConfig } from '../third_party/tsconfig-loader'; import { loadTsConfig } from '../third_party/tsconfig-loader'; import Module from 'module'; import type { BabelPlugin, BabelTransformFunction } from './babelBundle'; -import { createFileMatcher, fileIsModule, resolveImportSpecifierExtension } from '../util'; +import { createFileMatcher, fileIsModule, resolveImportSpecifierAfterMapping } from '../util'; import type { Matcher } from '../util'; import { getFromCompilationCache, currentFileDepsCollector, belongsToNodeModules, installSourceMapSupport } from './compilationCache'; @@ -136,8 +136,13 @@ export function resolveHook(filename: string, specifier: string): string | undef return; if (isRelativeSpecifier(specifier)) - return resolveImportSpecifierExtension(path.resolve(path.dirname(filename), specifier)); + return resolveImportSpecifierAfterMapping(path.resolve(path.dirname(filename), specifier), false); + /** + * TypeScript discourages path-mapping into node_modules: + * https://www.typescriptlang.org/docs/handbook/modules/reference.html#paths-should-not-point-to-monorepo-packages-or-node_modules-packages + * However, if path-mapping doesn't yield a result, TypeScript falls back to the default resolution through node_modules. + */ const isTypeScript = filename.endsWith('.ts') || filename.endsWith('.tsx'); const tsconfigs = loadAndValidateTsconfigsForFile(filename); for (const tsconfig of tsconfigs) { @@ -179,7 +184,7 @@ export function resolveHook(filename: string, specifier: string): string | undef if (value.includes('*')) candidate = candidate.replace('*', matchedPartOfSpecifier); candidate = path.resolve(tsconfig.pathsBase!, candidate); - const existing = resolveImportSpecifierExtension(candidate); + const existing = resolveImportSpecifierAfterMapping(candidate, true); if (existing) { longestPrefixLength = keyPrefix.length; pathMatchedByLongestPrefix = existing; @@ -193,7 +198,7 @@ export function resolveHook(filename: string, specifier: string): string | undef if (path.isAbsolute(specifier)) { // Handle absolute file paths like `import '/path/to/file'` // Do not handle module imports like `import 'fs'` - return resolveImportSpecifierExtension(specifier); + return resolveImportSpecifierAfterMapping(specifier, false); } } diff --git a/packages/playwright/src/util.ts b/packages/playwright/src/util.ts index 0531f167a0..d25f77947b 100644 --- a/packages/playwright/src/util.ts +++ b/packages/playwright/src/util.ts @@ -307,8 +307,23 @@ function folderIsModule(folder: string): boolean { return require(packageJsonPath).type === 'module'; } -// This follows the --moduleResolution=bundler strategy from tsc. -// https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/#moduleresolution-bundler +const packageJsonMainFieldCache = new Map(); + +function getMainFieldFromPackageJson(packageJsonPath: string) { + if (!packageJsonMainFieldCache.has(packageJsonPath)) { + let mainField: string | undefined; + try { + mainField = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')).main; + } catch { + } + packageJsonMainFieldCache.set(packageJsonPath, mainField); + } + return packageJsonMainFieldCache.get(packageJsonPath); +} + +// This method performs "file extension subsitution" to find the ts, js or similar source file +// based on the import specifier, which might or might not have an extension. See TypeScript docs: +// https://www.typescriptlang.org/docs/handbook/modules/reference.html#file-extension-substitution. const kExtLookups = new Map([ ['.js', ['.jsx', '.ts', '.tsx']], ['.jsx', ['.tsx']], @@ -316,7 +331,7 @@ const kExtLookups = new Map([ ['.mjs', ['.mts']], ['', ['.js', '.ts', '.jsx', '.tsx', '.cjs', '.mjs', '.cts', '.mts']], ]); -export function resolveImportSpecifierExtension(resolved: string): string | undefined { +function resolveImportSpecifierExtension(resolved: string): string | undefined { if (fileExists(resolved)) return resolved; @@ -330,13 +345,45 @@ export function resolveImportSpecifierExtension(resolved: string): string | unde } break; // Do not try '' when a more specific extension like '.jsx' matched. } +} + +// This method resolves directory imports and performs "file extension subsitution". +// It is intended to be called after the path mapping resolution. +// +// Directory imports follow the --moduleResolution=bundler strategy from tsc. +// https://www.typescriptlang.org/docs/handbook/modules/reference.html#directory-modules-index-file-resolution +// https://www.typescriptlang.org/docs/handbook/modules/reference.html#bundler +// +// See also Node.js "folder as module" behavior: +// https://nodejs.org/dist/latest-v20.x/docs/api/modules.html#folders-as-modules. +export function resolveImportSpecifierAfterMapping(resolved: string, afterPathMapping: boolean): string | undefined { + const resolvedFile = resolveImportSpecifierExtension(resolved); + if (resolvedFile) + return resolvedFile; if (dirExists(resolved)) { + const packageJsonPath = path.join(resolved, 'package.json'); + + if (afterPathMapping) { + // Most notably, the module resolution algorithm is not performed after the path mapping. + // This means no node_modules lookup or package.json#exports. + // + // Only the "folder as module" Node.js behavior is respected: + // - consult `package.json#main`; + // - look for `index.js` or similar. + const mainField = getMainFieldFromPackageJson(packageJsonPath); + const mainFieldResolved = mainField ? resolveImportSpecifierExtension(path.resolve(resolved, mainField)) : undefined; + return mainFieldResolved || resolveImportSpecifierExtension(path.join(resolved, 'index')); + } + // If we import a package, let Node.js figure out the correct import based on package.json. - if (fileExists(path.join(resolved, 'package.json'))) + // This also covers the "main" field for "folder as module". + if (fileExists(packageJsonPath)) return resolved; - // Otherwise, try to find a corresponding index file. + // Implement the "folder as module" Node.js behavior. + // Note that we do not delegate to Node.js, because we support this for ESM as well, + // following the TypeScript "bundler" mode. const dirImport = path.join(resolved, 'index'); return resolveImportSpecifierExtension(dirImport); } diff --git a/tests/playwright-test/resolver.spec.ts b/tests/playwright-test/resolver.spec.ts index e06959558c..037ba14f22 100644 --- a/tests/playwright-test/resolver.spec.ts +++ b/tests/playwright-test/resolver.spec.ts @@ -587,43 +587,6 @@ test('should resolve paths relative to the originating config when extending and expect(result.exitCode).toBe(0); }); -test('should import packages with non-index main script through path resolver', async ({ runInlineTest }) => { - const result = await runInlineTest({ - 'app/pkg/main.ts': ` - export const foo = 42; - `, - 'app/pkg/package.json': ` - { "main": "main.ts" } - `, - 'package.json': ` - { "name": "example-project" } - `, - 'playwright.config.ts': ` - export default {}; - `, - 'tsconfig.json': `{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "app/*": ["app/*"], - }, - }, - }`, - 'example.spec.ts': ` - import { foo } from 'app/pkg'; - import { test, expect } from '@playwright/test'; - test('test', ({}) => { - console.log('foo=' + foo); - }); - `, - }); - - expect(result.exitCode).toBe(0); - expect(result.passed).toBe(1); - expect(result.output).not.toContain(`find module`); - expect(result.output).toContain(`foo=42`); -}); - test('should respect tsconfig project references', async ({ runInlineTest }) => { test.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/29256' }); @@ -711,3 +674,426 @@ test('should respect --tsconfig option', async ({ runInlineTest }) => { expect(result.exitCode).toBe(0); expect(result.output).not.toContain(`Could not`); }); + +test.describe('directory imports', () => { + test('should resolve index.js without path mapping in CJS', async ({ runInlineTest, runTSC }) => { + const files = { + 'foo-pkg/index.js': ` + exports.foo = 'bar'; + `, + 'foo-pkg/index.d.ts': ` + export const foo: 'bar'; + `, + 'a.test.ts': ` + import { test, expect } from '@playwright/test'; + import { foo } from './foo-pkg'; + test('pass', async () => { + const bar: 'bar' = foo; + expect(bar).toBe('bar'); + }); + `, + }; + + const result = await runInlineTest(files); + expect(result.passed).toBe(1); + expect(result.exitCode).toBe(0); + + const tscResult = await runTSC(files); + expect(tscResult.exitCode).toBe(0); + }); + + test('should resolve index.js without path mapping in ESM', async ({ runInlineTest, runTSC }) => { + const files = { + 'foo-pkg/index.js': ` + export const foo = 'bar'; + `, + 'foo-pkg/index.d.ts': ` + export const foo: 'bar'; + `, + 'package.json': ` + { "type": "module" } + `, + 'a.test.ts': ` + import { test, expect } from '@playwright/test'; + import { foo } from './foo-pkg'; + test('pass', async () => { + const bar: 'bar' = foo; + expect(bar).toBe('bar'); + }); + `, + }; + + const result = await runInlineTest(files); + expect(result.passed).toBe(1); + expect(result.exitCode).toBe(0); + + const tscResult = await runTSC(files); + expect(tscResult.exitCode).toBe(0); + }); + + test('should resolve index.js after path mapping in CJS', async ({ runInlineTest, runTSC }) => { + test.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/31811' }); + + const files = { + '@acme/lib/index.js': ` + exports.greet = () => 2; + `, + '@acme/lib/index.d.ts': ` + export const greet: () => number; + `, + 'tests/hello.test.ts': ` + import { greet } from '@acme/lib'; + import { test, expect } from '@playwright/test'; + test('hello', async ({}) => { + const foo: number = greet(); + expect(foo).toBe(2); + }); + `, + 'tsconfig.json': ` + { + "compilerOptions": { + "paths": { + "@acme/*": ["./@acme/*"] + }, + "moduleResolution": "bundler", + "module": "preserve", + "noEmit": true, + "noImplicitAny": true + } + } + `, + }; + + const result = await runInlineTest(files); + expect(result.exitCode).toBe(0); + expect(result.passed).toBe(1); + + const tscResult = await runTSC(files); + expect(tscResult.exitCode).toBe(0); + }); + + test('should resolve index.js after path mapping in ESM', async ({ runInlineTest, runTSC }) => { + test.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/31811' }); + + const files = { + '@acme/lib/index.js': ` + export const greet = () => 2; + `, + '@acme/lib/index.d.ts': ` + export const greet: () => number; + `, + 'package.json': ` + { "type": "module" } + `, + 'tests/hello.test.ts': ` + import { greet } from '@acme/lib'; + import { test, expect } from '@playwright/test'; + test('hello', async ({}) => { + const foo: number = greet(); + expect(foo).toBe(2); + }); + `, + 'tsconfig.json': ` + { + "compilerOptions": { + "paths": { + "@acme/*": ["./@acme/*"] + }, + "moduleResolution": "bundler", + "module": "preserve", + "noEmit": true, + "noImplicitAny": true + } + } + `, + }; + + const result = await runInlineTest(files); + expect(result.exitCode).toBe(0); + expect(result.passed).toBe(1); + + const tscResult = await runTSC(files); + expect(tscResult.exitCode).toBe(0); + }); + + test('should respect package.json#main after path mapping in CJS', async ({ runInlineTest, runTSC }) => { + const files = { + 'app/pkg/main.ts': ` + export const foo = 42; + `, + 'app/pkg/package.json': ` + { "main": "main.ts" } + `, + 'package.json': ` + { "name": "example-project" } + `, + 'playwright.config.ts': ` + export default {}; + `, + 'tsconfig.json': ` + { + "compilerOptions": { + "baseUrl": ".", + "paths": { + "app/*": ["app/*"] + }, + "moduleResolution": "bundler", + "module": "preserve", + "noEmit": true, + "noImplicitAny": true + } + } + `, + 'example.spec.ts': ` + import { foo } from 'app/pkg'; + import { test, expect } from '@playwright/test'; + test('test', ({}) => { + const bar: number = foo; + expect(bar).toBe(42); + }); + `, + }; + + const result = await runInlineTest(files); + expect(result.exitCode).toBe(0); + expect(result.passed).toBe(1); + expect(result.output).not.toContain(`find module`); + + const tscResult = await runTSC(files); + expect(tscResult.exitCode).toBe(0); + }); + + test('should respect package.json#main after path mapping in ESM', async ({ runInlineTest, runTSC }) => { + const files = { + 'app/pkg/main.ts': ` + export const foo = 42; + `, + 'app/pkg/package.json': ` + { "main": "main.ts", "type": "module" } + `, + 'package.json': ` + { "name": "example-project", "type": "module" } + `, + 'playwright.config.ts': ` + export default {}; + `, + 'tsconfig.json': ` + { + "compilerOptions": { + "baseUrl": ".", + "paths": { + "app/*": ["app/*"] + }, + "moduleResolution": "bundler", + "module": "preserve", + "noEmit": true, + "noImplicitAny": true + }, + } + `, + 'example.spec.ts': ` + import { foo } from 'app/pkg'; + import { test, expect } from '@playwright/test'; + test('test', ({}) => { + const bar: number = foo; + expect(bar).toBe(42); + }); + `, + }; + + const result = await runInlineTest(files); + expect(result.exitCode).toBe(0); + expect(result.passed).toBe(1); + + const tscResult = await runTSC(files); + expect(tscResult.exitCode).toBe(0); + }); + + test('should respect package.json#exports without path mapping in CJS', async ({ runInlineTest, runTSC }) => { + const files = { + 'node_modules/foo-pkg/package.json': ` + { "name": "foo-pkg", "exports": { ".": "./foo.js" } } + `, + 'node_modules/foo-pkg/foo.js': ` + exports.foo = 'bar'; + `, + 'node_modules/foo-pkg/foo.d.ts': ` + export const foo: 'bar'; + `, + 'package.json': ` + { "name": "test-project" } + `, + 'a.test.ts': ` + import { test, expect } from '@playwright/test'; + import { foo } from 'foo-pkg'; + test('pass', async () => { + const bar: 'bar' = foo; + expect(bar).toBe('bar'); + }); + `, + 'tsconfig.json': ` + { + "compilerOptions": { + "moduleResolution": "bundler", + "module": "preserve", + "noEmit": true, + "noImplicitAny": true + }, + } + `, + }; + + const result = await runInlineTest(files); + expect(result.passed).toBe(1); + expect(result.exitCode).toBe(0); + + const tscResult = await runTSC(files); + expect(tscResult.exitCode).toBe(0); + }); + + test('should respect package.json#exports without path mapping in ESM', async ({ runInlineTest, runTSC }) => { + const files = { + 'node_modules/foo-pkg/package.json': ` + { "name": "foo-pkg", "type": "module", "exports": { "default": "./foo.js" } } + `, + 'node_modules/foo-pkg/foo.js': ` + export const foo = 'bar'; + `, + 'node_modules/foo-pkg/foo.d.ts': ` + export const foo: 'bar'; + `, + 'package.json': ` + { "name": "test-project", "type": "module" } + `, + 'a.test.ts': ` + import { test, expect } from '@playwright/test'; + import { foo } from 'foo-pkg'; + test('pass', async () => { + const bar: 'bar' = foo; + expect(bar).toBe('bar'); + }); + `, + 'tsconfig.json': ` + { + "compilerOptions": { + "moduleResolution": "bundler", + "module": "preserve", + "noEmit": true, + "noImplicitAny": true + }, + } + `, + }; + + const result = await runInlineTest(files); + expect(result.passed).toBe(1); + expect(result.exitCode).toBe(0); + + const tscResult = await runTSC(files); + expect(tscResult.exitCode).toBe(0); + }); + + test('should not respect package.json#exports after type mapping in CJS', async ({ runInlineTest, runTSC }) => { + const files = { + 'app/pkg/main.ts': ` + export const filename: 'main.ts' = 'main.ts'; + `, + 'app/pkg/index.js': ` + export const filename = 'index.js'; + `, + 'app/pkg/index.d.ts': ` + export const filename: 'index.js'; + `, + 'app/pkg/package.json': ` + { "exports": { ".": "./main.ts" } } + `, + 'package.json': ` + { "name": "example-project" } + `, + 'playwright.config.ts': ` + export default {}; + `, + 'tsconfig.json': ` + { + "compilerOptions": { + "baseUrl": ".", + "paths": { + "app/*": ["app/*"] + }, + "moduleResolution": "bundler", + "module": "preserve", + "noEmit": true, + "noImplicitAny": true + } + } + `, + 'example.spec.ts': ` + import { filename } from 'app/pkg'; + import { test, expect } from '@playwright/test'; + test('test', ({}) => { + const foo: 'index.js' = filename; + expect(foo).toBe('index.js'); + }); + `, + }; + + const result = await runInlineTest(files); + expect(result.exitCode).toBe(0); + expect(result.passed).toBe(1); + + const tscResult = await runTSC(files); + expect(tscResult.exitCode).toBe(0); + }); + + test('should not respect package.json#exports after type mapping in ESM', async ({ runInlineTest, runTSC }) => { + const files = { + 'app/pkg/main.ts': ` + export const filename: 'main.ts' = 'main.ts'; + `, + 'app/pkg/index.js': ` + export const filename = 'index.js'; + `, + 'app/pkg/index.d.ts': ` + export const filename: 'index.js'; + `, + 'app/pkg/package.json': ` + { "exports": { ".": "./main.ts" }, "type": "module" } + `, + 'package.json': ` + { "name": "example-project", "type": "module" } + `, + 'playwright.config.ts': ` + export default {}; + `, + 'tsconfig.json': ` + { + "compilerOptions": { + "baseUrl": ".", + "paths": { + "app/*": ["app/*"] + }, + "moduleResolution": "bundler", + "module": "preserve", + "noEmit": true, + "noImplicitAny": true + } + } + `, + 'example.spec.ts': ` + import { filename } from 'app/pkg'; + import { test, expect } from '@playwright/test'; + test('test', ({}) => { + const foo: 'index.js' = filename; + expect(foo).toBe('index.js'); + }); + `, + }; + + const result = await runInlineTest(files); + expect(result.exitCode).toBe(0); + expect(result.passed).toBe(1); + + const tscResult = await runTSC(files); + expect(tscResult.exitCode).toBe(0); + }); +}); From 6d5889a52c2f78ae141b84517e3f0c90b8a0b494 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Mon, 9 Sep 2024 16:44:32 -0700 Subject: [PATCH 398/498] chore: revert the matcherResult in API (#32524) --- .../class-testinfoerror-matcherresult.md | 35 ----- docs/src/test-api/class-testinfoerror.md | 6 - .../class-testerror-matcherresult.md | 35 ----- docs/src/test-reporter-api/class-testerror.md | 6 - packages/playwright/src/reporters/base.ts | 3 - packages/playwright/src/util.ts | 16 +- packages/playwright/types/test.d.ts | 35 ----- packages/playwright/types/testReporter.d.ts | 36 ----- tests/playwright-test/reporter-errors.spec.ts | 145 ------------------ .../overrides-testReporter.d.ts | 1 - 10 files changed, 2 insertions(+), 316 deletions(-) delete mode 100644 docs/src/test-api/class-testinfoerror-matcherresult.md delete mode 100644 docs/src/test-reporter-api/class-testerror-matcherresult.md delete mode 100644 tests/playwright-test/reporter-errors.spec.ts diff --git a/docs/src/test-api/class-testinfoerror-matcherresult.md b/docs/src/test-api/class-testinfoerror-matcherresult.md deleted file mode 100644 index f68e2db1ae..0000000000 --- a/docs/src/test-api/class-testinfoerror-matcherresult.md +++ /dev/null @@ -1,35 +0,0 @@ -# class: TestInfoErrorMatcherResult -* since: v1.48 -* langs: js - -Matcher-specific details for the error thrown during the `expect` call. - -## property: TestInfoErrorMatcherResult.actual -* since: v1.48 -- type: ?<[unknown]> - -Actual value. - -## property: TestInfoErrorMatcherResult.expected -* since: v1.48 -- type: ?<[unknown]> - -Expected value. - -## property: TestInfoErrorMatcherResult.name -* since: v1.48 -- type: ?<[string]> - -Matcher name. - -## property: TestInfoErrorMatcherResult.pass -* since: v1.48 -- type: <[string]> - -Whether the matcher passed. - -## property: TestInfoErrorMatcherResult.timeout -* since: v1.48 -- type: ?<[int]> - -Timeout that was used during matching. diff --git a/docs/src/test-api/class-testinfoerror.md b/docs/src/test-api/class-testinfoerror.md index b084aaf54b..66e78ecabd 100644 --- a/docs/src/test-api/class-testinfoerror.md +++ b/docs/src/test-api/class-testinfoerror.md @@ -4,12 +4,6 @@ Information about an error thrown during test execution. -## property: TestInfoError.matcherResult -* since: v1.48 -- type: ?<[TestInfoErrorMatcherResult]> - -Matcher result details. - ## property: TestInfoError.message * since: v1.10 - type: ?<[string]> diff --git a/docs/src/test-reporter-api/class-testerror-matcherresult.md b/docs/src/test-reporter-api/class-testerror-matcherresult.md deleted file mode 100644 index b8d0f1dce7..0000000000 --- a/docs/src/test-reporter-api/class-testerror-matcherresult.md +++ /dev/null @@ -1,35 +0,0 @@ -# class: TestErrorMatcherResult -* since: v1.48 -* langs: js - -Matcher-specific details for the error thrown during the `expect` call. - -## property: TestErrorMatcherResult.actual -* since: v1.48 -- type: ?<[unknown]> - -Actual value. - -## property: TestErrorMatcherResult.expected -* since: v1.48 -- type: ?<[unknown]> - -Expected value. - -## property: TestErrorMatcherResult.name -* since: v1.48 -- type: ?<[string]> - -Matcher name. - -## property: TestErrorMatcherResult.pass -* since: v1.48 -- type: <[string]> - -Whether the matcher passed. - -## property: TestErrorMatcherResult.timeout -* since: v1.48 -- type: ?<[int]> - -Timeout that was used during matching. diff --git a/docs/src/test-reporter-api/class-testerror.md b/docs/src/test-reporter-api/class-testerror.md index cc59c3a4c6..7a872c63fc 100644 --- a/docs/src/test-reporter-api/class-testerror.md +++ b/docs/src/test-reporter-api/class-testerror.md @@ -4,12 +4,6 @@ Information about an error thrown during test execution. -## property: TestError.matcherResult -* since: v1.48 -- type: ?<[TestErrorMatcherResult]> - -Matcher result details. - ## property: TestError.message * since: v1.10 - type: ?<[string]> diff --git a/packages/playwright/src/reporters/base.ts b/packages/playwright/src/reporters/base.ts index 22470b0954..c9ce2f7bcd 100644 --- a/packages/playwright/src/reporters/base.ts +++ b/packages/playwright/src/reporters/base.ts @@ -32,7 +32,6 @@ type Annotation = { type ErrorDetails = { message: string; location?: Location; - matcherResult?: TestError['matcherResult']; }; type TestSummary = { @@ -400,7 +399,6 @@ export function formatResultFailure(test: TestCase, result: TestResult, initialI errorDetails.push({ message: indent(formattedError.message, initialIndent), location: formattedError.location, - matcherResult: formattedError.matcherResult }); } return errorDetails; @@ -491,7 +489,6 @@ export function formatError(error: TestError, highlightCode: boolean): ErrorDeta return { location, message: tokens.join('\n'), - matcherResult: error.matcherResult }; } diff --git a/packages/playwright/src/util.ts b/packages/playwright/src/util.ts index d25f77947b..460b3de07e 100644 --- a/packages/playwright/src/util.ts +++ b/packages/playwright/src/util.ts @@ -63,20 +63,8 @@ export function filteredStackTrace(rawStack: RawStack): StackFrame[] { } export function serializeError(error: Error | any): TestInfoError { - if (error instanceof Error) { - const result: TestInfoError = filterStackTrace(error); - if ('matcherResult' in error && error.matcherResult) { - const matcherResult = (error.matcherResult as TestInfoError['matcherResult'])!; - result.matcherResult = { - pass: matcherResult.pass, - name: matcherResult.name, - expected: matcherResult.expected, - actual: matcherResult.actual, - timeout: matcherResult.timeout, - }; - } - return result; - } + if (error instanceof Error) + return filterStackTrace(error); return { value: util.inspect(error) }; diff --git a/packages/playwright/types/test.d.ts b/packages/playwright/types/test.d.ts index 09b5c7efdb..74aeb64133 100644 --- a/packages/playwright/types/test.d.ts +++ b/packages/playwright/types/test.d.ts @@ -8222,45 +8222,10 @@ export interface TestInfo { workerIndex: number; } -/** - * Matcher-specific details for the error thrown during the `expect` call. - */ -export interface TestInfoErrorMatcherResult { - /** - * Actual value. - */ - actual?: unknown; - - /** - * Expected value. - */ - expected?: unknown; - - /** - * Matcher name. - */ - name?: string; - - /** - * Whether the matcher passed. - */ - pass: string; - - /** - * Timeout that was used during matching. - */ - timeout?: number; -} - /** * Information about an error thrown during test execution. */ export interface TestInfoError { - /** - * Matcher result details. - */ - matcherResult?: TestInfoErrorMatcherResult; - /** * Error message. Set when [Error] (or its subclass) has been thrown. */ diff --git a/packages/playwright/types/testReporter.d.ts b/packages/playwright/types/testReporter.d.ts index b600e3c801..52073066f0 100644 --- a/packages/playwright/types/testReporter.d.ts +++ b/packages/playwright/types/testReporter.d.ts @@ -284,7 +284,6 @@ export interface JSONReportTest { export interface JSONReportError { message: string; location?: Location; - matcherResult?: TestErrorMatcherResult; } export interface JSONReportTestResult { @@ -568,36 +567,6 @@ export interface TestCase { type: "test"; } -/** - * Matcher-specific details for the error thrown during the `expect` call. - */ -export interface TestErrorMatcherResult { - /** - * Actual value. - */ - actual?: unknown; - - /** - * Expected value. - */ - expected?: unknown; - - /** - * Matcher name. - */ - name?: string; - - /** - * Whether the matcher passed. - */ - pass: string; - - /** - * Timeout that was used during matching. - */ - timeout?: number; -} - /** * Information about an error thrown during test execution. */ @@ -607,11 +576,6 @@ export interface TestError { */ location?: Location; - /** - * Matcher result details. - */ - matcherResult?: TestErrorMatcherResult; - /** * Error message. Set when [Error] (or its subclass) has been thrown. */ diff --git a/tests/playwright-test/reporter-errors.spec.ts b/tests/playwright-test/reporter-errors.spec.ts deleted file mode 100644 index ad09237234..0000000000 --- a/tests/playwright-test/reporter-errors.spec.ts +++ /dev/null @@ -1,145 +0,0 @@ -/** - * Copyright (c) Microsoft Corporation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { test, expect } from './playwright-test-fixtures'; - -test('should report matcherResults for generic matchers', async ({ runInlineTest }) => { - const result = await runInlineTest({ - 'a.test.js': ` - import { test, expect as baseExpect } from '@playwright/test'; - const expect = baseExpect.soft; - test('fail', ({}) => { - expect(1).toBe(2); - expect(1).toBeCloseTo(2); - expect(undefined).toBeDefined(); - expect(1).toBeFalsy(); - expect(1).toBeGreaterThan(2); - expect(1).toBeGreaterThanOrEqual(2); - expect('a').toBeInstanceOf(Number); - expect(2).toBeLessThan(1); - expect(2).toBeLessThanOrEqual(1); - expect(1).toBeNaN(); - expect(1).toBeNull(); - expect(0).toBeTruthy(); - expect(1).toBeUndefined(); - expect([1]).toContain(2); - expect([1]).toContainEqual(2); - expect([1]).toEqual([2]); - expect([1]).toHaveLength(2); - expect({ a: 1 }).toHaveProperty('b'); - expect('a').toMatch(/b/); - expect({ a: 1 }).toMatchObject({ b: 2 }); - expect({ a: 1 }).toStrictEqual({ b: 2 }); - expect(() => {}).toThrow(); - expect(() => {}).toThrowError('a'); - }); - ` - }, { }); - expect(result.exitCode).toBe(1); - - const { errors } = result.report.suites[0].specs[0].tests[0].results[0]; - const matcherResults = errors.map(e => e.matcherResult); - expect(matcherResults).toEqual([ - { name: 'toBe', pass: false, expected: 2, actual: 1 }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { name: 'toEqual', pass: false, expected: [2], actual: [1] }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { name: 'toStrictEqual', pass: false, expected: { b: 2 }, actual: { a: 1 } }, - { pass: false }, - { pass: false }, - ]); -}); - -test('should report matcherResults for web matchers', async ({ runInlineTest }) => { - const result = await runInlineTest({ - 'a.test.js': ` - import { test, expect as baseExpect } from '@playwright/test'; - - const expect = baseExpect.configure({ soft: true, timeout: 1 }); - test('fail', async ({ page }) => { - await page.setContent('Hello
World
'); - await expect(page.locator('input')).toBeChecked(); - await expect(page.locator('input')).toBeDisabled(); - await expect(page.locator('textarea')).not.toBeEditable(); - await expect(page.locator('span')).toBeEmpty(); - await expect(page.locator('button')).not.toBeEnabled(); - await expect(page.locator('button')).toBeFocused(); - await expect(page.locator('span')).toBeHidden(); - await expect(page.locator('div')).not.toBeInViewport(); - await expect(page.locator('div')).not.toBeVisible(); - await expect(page.locator('span')).toContainText('World'); - await expect(page.locator('span')).toHaveAccessibleDescription('World'); - await expect(page.locator('span')).toHaveAccessibleName('World'); - await expect(page.locator('span')).toHaveAttribute('name', 'value'); - await expect(page.locator('span')).toHaveAttribute('name'); - await expect(page.locator('span')).toHaveClass('name'); - await expect(page.locator('span')).toHaveCount(2); - await expect(page.locator('span')).toHaveCSS('width', '10'); - await expect(page.locator('span')).toHaveId('id'); - await expect(page.locator('span')).toHaveJSProperty('name', 'value'); - await expect(page.locator('span')).toHaveRole('role'); - await expect(page.locator('span')).toHaveText('World'); - await expect(page.locator('textarea')).toHaveValue('value'); - await expect(page.locator('select')).toHaveValues(['value']); - }); - ` - }, { }); - expect(result.exitCode).toBe(1); - - const { errors } = result.report.suites[0].specs[0].tests[0].results[0]; - const matcherResults = errors.map(e => e.matcherResult); - expect(matcherResults).toEqual([ - { name: 'toBeChecked', pass: false, expected: 'checked', actual: 'unchecked', timeout: 1 }, - { name: 'toBeDisabled', pass: false, expected: 'disabled', actual: 'enabled', timeout: 1 }, - { name: 'toBeEditable', pass: true, expected: 'editable', actual: 'editable', timeout: 1 }, - { name: 'toBeEmpty', pass: false, expected: 'empty', actual: 'notEmpty', timeout: 1 }, - { name: 'toBeEnabled', pass: true, expected: 'enabled', actual: 'enabled', timeout: 1 }, - { name: 'toBeFocused', pass: false, expected: 'focused', actual: 'inactive', timeout: 1 }, - { name: 'toBeHidden', pass: false, expected: 'hidden', actual: 'visible', timeout: 1 }, - { name: 'toBeInViewport', pass: true, expected: 'in viewport', actual: 'in viewport', timeout: 1 }, - { name: 'toBeVisible', pass: true, expected: 'visible', actual: 'visible', timeout: 1 }, - { name: 'toContainText', pass: false, expected: 'World', actual: 'Hello', timeout: 1 }, - { name: 'toHaveAccessibleDescription', pass: false, expected: 'World', actual: '', timeout: 1 }, - { name: 'toHaveAccessibleName', pass: false, expected: 'World', actual: '', timeout: 1 }, - { name: 'toHaveAttribute', pass: false, expected: 'value', actual: null, timeout: 1 }, - { name: 'toHaveAttribute', pass: false, expected: 'have attribute', actual: 'not have attribute', timeout: 1 }, - { name: 'toHaveClass', pass: false, expected: 'name', actual: '', timeout: 1 }, - { name: 'toHaveCount', pass: false, expected: 2, actual: 1, timeout: 1 }, - { name: 'toHaveCSS', pass: false, expected: '10', actual: 'auto', timeout: 1 }, - { name: 'toHaveId', pass: false, expected: 'id', actual: '', timeout: 1 }, - { name: 'toHaveJSProperty', pass: false, expected: 'value', timeout: 1 }, - { name: 'toHaveRole', pass: false, expected: 'role', actual: '', timeout: 1 }, - { name: 'toHaveText', pass: false, expected: 'World', actual: 'Hello', timeout: 1 }, - { name: 'toHaveValue', pass: false, expected: 'value', actual: '', timeout: 1 }, - { name: 'toHaveValues', pass: false, expected: ['value'], actual: [], timeout: 1 }, - ]); -}); diff --git a/utils/generate_types/overrides-testReporter.d.ts b/utils/generate_types/overrides-testReporter.d.ts index 0b81724373..51eab7e370 100644 --- a/utils/generate_types/overrides-testReporter.d.ts +++ b/utils/generate_types/overrides-testReporter.d.ts @@ -105,7 +105,6 @@ export interface JSONReportTest { export interface JSONReportError { message: string; location?: Location; - matcherResult?: TestErrorMatcherResult; } export interface JSONReportTestResult { From c8a72d63adbfc974925d25b31037e411f157f5d6 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Mon, 9 Sep 2024 17:22:19 -0700 Subject: [PATCH 399/498] chore: run bidi firefox tests on ci (#32527) --- .github/workflows/tests_bidi.yml | 6 +- .../src/server/registry/index.ts | 78 +++++++++++++++++-- tests/bidi/README.md | 23 ++++++ tests/bidi/playwright.config.ts | 4 +- 4 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 tests/bidi/README.md diff --git a/.github/workflows/tests_bidi.yml b/.github/workflows/tests_bidi.yml index 433294dbea..b534a7b747 100644 --- a/.github/workflows/tests_bidi.yml +++ b/.github/workflows/tests_bidi.yml @@ -26,8 +26,7 @@ jobs: strategy: fail-fast: false matrix: - # TODO: add Firefox - channel: [bidi-chrome-stable] + channel: [bidi-chromium, bidi-firefox-beta] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -38,5 +37,8 @@ jobs: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: '1' - run: npm run build - run: npx playwright install --with-deps chromium + if: matrix.channel == 'bidi-chromium' + - run: npx -y @puppeteer/browsers install firefox@beta + if: matrix.channel == 'bidi-firefox-beta' - name: Run tests run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run biditest -- --project=${{ matrix.channel }}* diff --git a/packages/playwright-core/src/server/registry/index.ts b/packages/playwright-core/src/server/registry/index.ts index 058e0bcbc3..4e942967a4 100644 --- a/packages/playwright-core/src/server/registry/index.ts +++ b/packages/playwright-core/src/server/registry/index.ts @@ -354,7 +354,7 @@ function readDescriptors(browsersJSON: BrowsersJSON) { export type BrowserName = 'chromium' | 'firefox' | 'webkit' | 'bidi'; type InternalTool = 'ffmpeg' | 'firefox-beta' | 'chromium-tip-of-tree' | 'android'; -type BidiChannel = 'bidi-firefox-stable' | 'bidi-chrome-canary' | 'bidi-chrome-stable'; +type BidiChannel = 'bidi-firefox-stable' | 'bidi-firefox-beta' | 'bidi-firefox-nightly' | 'bidi-chrome-canary' | 'bidi-chrome-stable' | 'bidi-chromium'; type ChromiumChannel = 'chrome' | 'chrome-beta' | 'chrome-dev' | 'chrome-canary' | 'msedge' | 'msedge-beta' | 'msedge-dev' | 'msedge-canary'; const allDownloadable = ['chromium', 'firefox', 'webkit', 'ffmpeg', 'firefox-beta', 'chromium-tip-of-tree']; @@ -525,11 +525,22 @@ export class Registry { 'win32': `\\Microsoft\\Edge SxS\\Application\\msedge.exe`, })); - this._executables.push(this._createBidiChannel('bidi-firefox-stable', { - 'linux': '/usr/bin/firefox', - 'darwin': '/Applications/Firefox.app/Contents/MacOS/firefox', - 'win32': '\\Mozilla Firefox\\firefox.exe', + this._executables.push(this._createBidiFirefoxChannel('bidi-firefox-stable', { + 'linux': '/firefox/firefox', + 'darwin': '/Firefox.app/Contents/MacOS/firefox', + 'win32': '\\core\\firefox.exe', })); + this._executables.push(this._createBidiFirefoxChannel('bidi-firefox-beta', { + 'linux': '/firefox/firefox', + 'darwin': '/Firefox.app/Contents/MacOS/firefox', + 'win32': '\\core\\firefox.exe', + })); + this._executables.push(this._createBidiFirefoxChannel('bidi-firefox-nightly', { + 'linux': '/firefox/firefox', + 'darwin': '/Firefox Nightly.app/Contents/MacOS/firefox', + 'win32': '\\firefox\\firefox.exe', + })); + this._executables.push(this._createBidiChannel('bidi-chrome-stable', { 'linux': '/opt/google/chrome/chrome', 'darwin': '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', @@ -540,6 +551,21 @@ export class Registry { 'darwin': '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary', 'win32': `\\Google\\Chrome SxS\\Application\\chrome.exe`, })); + this._executables.push({ + type: 'browser', + name: 'bidi-chromium', + browserName: 'bidi', + directory: chromium.dir, + executablePath: () => chromiumExecutable, + executablePathOrDie: (sdkLanguage: string) => executablePathOrDie('chromium', chromiumExecutable, chromium.installByDefault, sdkLanguage), + installType: 'download-on-demand', + _validateHostRequirements: (sdkLanguage: string) => this._validateHostRequirements(sdkLanguage, 'chromium', chromium.dir, ['chrome-linux'], [], ['chrome-win']), + downloadURLs: this._downloadURLs(chromium), + browserVersion: chromium.browserVersion, + _install: () => this._downloadExecutable(chromium, chromiumExecutable), + _dependencyGroup: 'chromium', + _isHermeticInstallation: true, + }); const firefox = descriptors.find(d => d.name === 'firefox')!; const firefoxExecutable = findExecutablePath(firefox.dir, 'firefox'); @@ -691,6 +717,48 @@ export class Registry { }; } + private _createBidiFirefoxChannel(name: BidiChannel, lookAt: Record<'linux' | 'darwin' | 'win32', string>, install?: () => Promise): ExecutableImpl { + const executablePath = (sdkLanguage: string, shouldThrow: boolean) => { + const suffix = lookAt[process.platform as 'linux' | 'darwin' | 'win32']; + if (!suffix) { + if (shouldThrow) + throw new Error(`Firefox distribution '${name}' is not supported on ${process.platform}`); + return undefined; + } + const folder = path.resolve('firefox'); + let channelName = 'stable'; + if (name.includes('beta')) + channelName = 'beta'; + else if (name.includes('nightly')) + channelName = 'nightly'; + const installedVersions = fs.readdirSync(folder); + const found = installedVersions.filter(e => e.includes(channelName)); + if (found.length === 1) + return path.join(folder, found[0], suffix); + if (found.length > 1) { + if (shouldThrow) + throw new Error(`Multiple Firefox installations found for channel '${name}': ${found.join(', ')}`); + else + return undefined; + } + if (shouldThrow) + throw new Error(`Cannot find Firefox installation for channel '${name}' under ${folder}`); + return undefined; + }; + return { + type: 'channel', + name, + browserName: 'bidi', + directory: undefined, + executablePath: (sdkLanguage: string) => executablePath(sdkLanguage, false), + executablePathOrDie: (sdkLanguage: string) => executablePath(sdkLanguage, true)!, + installType: 'none', + _validateHostRequirements: () => Promise.resolve(), + _isHermeticInstallation: true, + _install: install, + }; + } + private _createBidiChannel(name: BidiChannel, lookAt: Record<'linux' | 'darwin' | 'win32', string>, install?: () => Promise): ExecutableImpl { const executablePath = (sdkLanguage: string, shouldThrow: boolean) => { const suffix = lookAt[process.platform as 'linux' | 'darwin' | 'win32']; diff --git a/tests/bidi/README.md b/tests/bidi/README.md new file mode 100644 index 0000000000..caac9288a4 --- /dev/null +++ b/tests/bidi/README.md @@ -0,0 +1,23 @@ +## Running Bidi tests + +To run Playwright tests with Bidi: + +```sh +git clone https://github.com/microsoft/playwright.git +cd playwright +npm run build # call `npm run watch` for watch mode +npx playwright install chromium +npm run biditest -- --project='bidi-firefox-beta-*' +``` + +To install beta channel of Firefox, run the following command in the project root: +```sh +npx -y @puppeteer/browsers install firefox@beta +``` + +You can also pass custom binary path via `BIDIPATH`: +```sh +BIDIPATH='/Users/myself/Downloads/chrome-mac-arm64/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing' +``` + + diff --git a/tests/bidi/playwright.config.ts b/tests/bidi/playwright.config.ts index bc7b29e56b..b04af32253 100644 --- a/tests/bidi/playwright.config.ts +++ b/tests/bidi/playwright.config.ts @@ -63,8 +63,8 @@ if (executablePath && !process.env.TEST_WORKER_INDEX) console.error(`Using executable at ${executablePath}`); const testIgnore: RegExp[] = []; const browserToChannels = { - '_bidiChromium': ['bidi-chrome-stable'], - '_bidiFirefox': ['bidi-firefox-stable'], + '_bidiChromium': ['bidi-chromium', 'bidi-chrome-canary', 'bidi-chrome-stable'], + '_bidiFirefox': ['bidi-firefox-nightly', 'bidi-firefox-beta', 'bidi-firefox-stable'], }; for (const [key, channels] of Object.entries(browserToChannels)) { const browserName: any = key; From 8995ace8253ad25865a04452408967e929911205 Mon Sep 17 00:00:00 2001 From: Playwright Service <89237858+playwrightmachine@users.noreply.github.com> Date: Mon, 9 Sep 2024 23:57:40 -0700 Subject: [PATCH 400/498] feat(firefox-beta): roll to r1463 (#32529) --- packages/playwright-core/browsers.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/playwright-core/browsers.json b/packages/playwright-core/browsers.json index 2b0dc63ce7..906ab12218 100644 --- a/packages/playwright-core/browsers.json +++ b/packages/playwright-core/browsers.json @@ -21,9 +21,9 @@ }, { "name": "firefox-beta", - "revision": "1462", + "revision": "1463", "installByDefault": false, - "browserVersion": "130.0b2" + "browserVersion": "131.0b2" }, { "name": "webkit", From 9fa06be49ef83e65e83ebeb42a3e6aa7487479d9 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Tue, 10 Sep 2024 11:15:20 +0200 Subject: [PATCH 401/498] fix(ct): throw error if inline component is getting mounted (#32531) What was happening? - When we use CT, we go over the test files, look at the imports using `tsxTransform.ts` and store them inside a map, these we feed into the import registry which we build using Vite and have access inside the browser - In case of an inline component in the same file as where the test file is, this is not happening. - jsx-runtime via babel kicks in, transforms every JSX component in something like that: ``` { __pw_type: 'jsx', type: [Function: MyInlineComponent], props: { value: 'Max' }, key: undefined } ``` this then gets passed into `wrapObject` which maps any function from the Node.js side into expose function calls so they work inside the browser. The assumption for `wrapObject` was to do it mostly for callbacks. So it does for `type` - which is actually our component. We then pass this to the React render function, which calls back the exposed function but we never return anything, so it mounts `undefined`. --- While there have been experiments from certain vendors to get the 'client only' code inside a server side file, we should throw for now to not confuse users. We might revisit this in the future since Babel / TSX doesn't support it outside of the box. Fixes https://github.com/microsoft/playwright/issues/32167 --- .../src/injected/serializers.ts | 7 +++++++ .../ct-react-vite/tests/render.spec.tsx | 15 +++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/packages/playwright-ct-core/src/injected/serializers.ts b/packages/playwright-ct-core/src/injected/serializers.ts index d07be7c1f8..be083e27db 100644 --- a/packages/playwright-ct-core/src/injected/serializers.ts +++ b/packages/playwright-ct-core/src/injected/serializers.ts @@ -66,6 +66,13 @@ export function transformObject(value: any, mapping: (v: any) => { result: any } result.push(transformObject(item, mapping)); return result; } + if (value?.__pw_type === 'jsx' && typeof value.type === 'function') { + throw new Error([ + `Component "${value.type.name}" cannot be mounted.`, + `Most likely, this component is defined in the test file. Create a test story instead.`, + `For more information, see https://playwright.dev/docs/test-components#test-stories.`, + ].join('\n')); + } const result2: any = {}; for (const [key, prop] of Object.entries(value)) result2[key] = transformObject(prop, mapping); diff --git a/tests/components/ct-react-vite/tests/render.spec.tsx b/tests/components/ct-react-vite/tests/render.spec.tsx index 1d82d21b3a..d00a313e9e 100644 --- a/tests/components/ct-react-vite/tests/render.spec.tsx +++ b/tests/components/ct-react-vite/tests/render.spec.tsx @@ -2,6 +2,7 @@ import { test, expect } from '@playwright/experimental-ct-react'; import Button from '@/components/Button'; import EmptyFragment from '@/components/EmptyFragment'; import { ComponentAsProp } from '@/components/ComponentAsProp'; +import DefaultChildren from '@/components/DefaultChildren'; test('render props', async ({ mount }) => { const component = await mount(`); + }); + + const traceViewer = await runAndTrace(async () => { + await page.goto(server.PREFIX + '/level-0.html'); + await page.frameLocator('iframe').frameLocator('iframe').locator('button').click({ position: { x: 5, y: 5 } }); + }); + const snapshotFrame = await traceViewer.snapshotFrame('locator.click'); + await expect.soft(snapshotFrame.locator('x-pw-pointer')).not.toBeAttached(); + await expect.soft(snapshotFrame.frameLocator('iframe').locator('x-pw-pointer')).not.toBeAttached(); + await expect.soft(snapshotFrame.frameLocator('iframe').frameLocator('iframe').locator('x-pw-pointer')).toBeVisible(); +}); From aaac57b94856bd59fe4894554dc7c6226ea4cf05 Mon Sep 17 00:00:00 2001 From: Playwright Service <89237858+playwrightmachine@users.noreply.github.com> Date: Wed, 11 Sep 2024 04:02:03 -0700 Subject: [PATCH 408/498] feat(webkit): roll to r2072 (#32550) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- packages/playwright-core/browsers.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/playwright-core/browsers.json b/packages/playwright-core/browsers.json index 906ab12218..4570f3560a 100644 --- a/packages/playwright-core/browsers.json +++ b/packages/playwright-core/browsers.json @@ -27,7 +27,7 @@ }, { "name": "webkit", - "revision": "2071", + "revision": "2072", "installByDefault": true, "revisionOverrides": { "mac10.14": "1446", From 1f0514536e1ca8a0b93ab774c03eef7c6966bd31 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Wed, 11 Sep 2024 08:28:29 -0700 Subject: [PATCH 409/498] chore: add bidi test expectations in separate file (#32549) Based on the expectations the tests that are expected to timeout or fail will be skipped to save resources. The expectations can be manually updated when corresponding feature is fixed. --- tests/bidi/expectationReporter.ts | 76 + tests/bidi/expectationUtil.ts | 50 + .../expectations/bidi-chromium-library.txt | 1910 ++++++++++++++++ .../bidi/expectations/bidi-chromium-page.txt | 1966 +++++++++++++++++ tests/bidi/playwright.config.ts | 3 +- tests/config/browserTest.ts | 17 +- 6 files changed, 4020 insertions(+), 2 deletions(-) create mode 100644 tests/bidi/expectationReporter.ts create mode 100644 tests/bidi/expectationUtil.ts create mode 100644 tests/bidi/expectations/bidi-chromium-library.txt create mode 100644 tests/bidi/expectations/bidi-chromium-page.txt diff --git a/tests/bidi/expectationReporter.ts b/tests/bidi/expectationReporter.ts new file mode 100644 index 0000000000..e83c93a524 --- /dev/null +++ b/tests/bidi/expectationReporter.ts @@ -0,0 +1,76 @@ +/** + * Copyright (c) Microsoft Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { + FullConfig, FullResult, Reporter, Suite, TestCase +} from '@playwright/test/reporter'; +import fs from 'fs'; +import { projectExpectationPath } from './expectationUtil'; + +type ReporterOptions = { + rebase?: boolean; +}; + +class ExpectationReporter implements Reporter { + private _suite: Suite; + private _options: ReporterOptions; + + constructor(options: ReporterOptions) { + this._options = options; + } + + onBegin(config: FullConfig, suite: Suite) { + this._suite = suite; + } + + onEnd(result: FullResult) { + if (!this._options.rebase) + return; + for (const project of this._suite.suites) + this._updateProjectExpectations(project); + } + + private _updateProjectExpectations(project: Suite) { + const results = project.allTests().map(test => { + const outcome = getOutcome(test); + const line = `${test.titlePath().slice(1).join(' › ')} [${outcome}]`; + return line; + }); + const outputFile = projectExpectationPath(project.title); + console.log('Writing new expectations to', outputFile); + fs.writeFileSync(outputFile, results.join('\n')); + } + + printsToStdio(): boolean { + return false; + } +} + +function getOutcome(test: TestCase): 'unknown' | 'flaky' | 'pass' | 'fail' | 'timeout' { + if (test.results.length === 0) + return 'unknown'; + if (test.results.every(r => r.status === 'timedOut')) + return 'timeout'; + if (test.outcome() === 'expected') + return 'pass'; + if (test.outcome() === 'unexpected') + return 'fail'; + if (test.outcome() === 'flaky') + return 'flaky'; + return 'unknown'; +} + +export default ExpectationReporter; \ No newline at end of file diff --git a/tests/bidi/expectationUtil.ts b/tests/bidi/expectationUtil.ts new file mode 100644 index 0000000000..f271a4981c --- /dev/null +++ b/tests/bidi/expectationUtil.ts @@ -0,0 +1,50 @@ +/** + * Copyright (c) Microsoft Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import fs from 'fs'; +import path from 'path'; +import type { TestInfo } from 'playwright/test'; + +type ShouldSkipPredicate = (info: TestInfo) => boolean; + +export async function parseBidiExpectations(projectName: string): Promise { + const filePath = projectExpectationPath(projectName); + try { + await fs.promises.access(filePath); + } catch (e) { + return () => false; + } + const content = await fs.promises.readFile(filePath); + const pairs = content.toString().split('\n').map(line => { + const match = /(?.+) \[(?[^\]]+)\]$/.exec(line); + if (!match) { + console.error('Bad expectation line: ' + line); + return undefined; + } + return [match.groups!.titlePath, match.groups!.expectation]; + }).filter(Boolean) as [string, string][]; + const expectationsMap = new Map(pairs); + + return (info: TestInfo) => { + const key = [info.project.name, ...info.titlePath].join(' › '); + const expectation = expectationsMap.get(key); + return expectation === 'fail' || expectation === 'timeout'; + }; +} + +export function projectExpectationPath(project: string): string { + return path.join(__dirname, 'expectations', project + '.txt'); +} diff --git a/tests/bidi/expectations/bidi-chromium-library.txt b/tests/bidi/expectations/bidi-chromium-library.txt new file mode 100644 index 0000000000..16df95a6d2 --- /dev/null +++ b/tests/bidi/expectations/bidi-chromium-library.txt @@ -0,0 +1,1910 @@ +bidi-chromium-library › library/beforeunload.spec.ts › should close browser with beforeunload page [pass] +bidi-chromium-library › library/beforeunload.spec.ts › should close browsercontext with beforeunload page [pass] +bidi-chromium-library › library/beforeunload.spec.ts › should be able to navigate away from page with beforeunload [pass] +bidi-chromium-library › library/beforeunload.spec.ts › should close page with beforeunload listener [pass] +bidi-chromium-library › library/beforeunload.spec.ts › should run beforeunload if asked for @smoke [timeout] +bidi-chromium-library › library/beforeunload.spec.ts › should access page after beforeunload [timeout] +bidi-chromium-library › library/beforeunload.spec.ts › should not stall on evaluate when dismissing beforeunload [pass] +bidi-chromium-library › library/browser.spec.ts › should return browserType [pass] +bidi-chromium-library › library/browser.spec.ts › should create new page @smoke [pass] +bidi-chromium-library › library/browser.spec.ts › should throw upon second create new page [pass] +bidi-chromium-library › library/browser.spec.ts › version should work [unknown] +bidi-chromium-library › library/browser.spec.ts › should dispatch page.on(close) upon browser.close and reject evaluate [unknown] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should work @smoke [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should work with expires=-1 [unknown] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should add cookies with empty value [unknown] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should roundtrip cookie [unknown] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should send cookie header [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should isolate cookies in browser contexts [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should isolate session cookies [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should isolate persistent cookies [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should isolate send cookie header [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should isolate cookies between launches [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should set multiple cookies [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should have |expires| set to |-1| for session cookies [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should set cookie with reasonable defaults [unknown] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should set a cookie with a path [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should not set a cookie with blank page URL [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should not set a cookie on a data URL page [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should default to setting secure cookie for HTTPS websites [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should be able to set unsecure cookie for HTTP website [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should set a cookie on a different domain [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should set cookies for a frame [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should(not) block third party cookies [pass] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should not block third party SameSite=None cookies [unknown] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should allow unnamed cookies [unknown] +bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should set secure cookies on secure WebSocket [unknown] +bidi-chromium-library › library/browsercontext-add-init-script.spec.ts › should work with browser context scripts @smoke [pass] +bidi-chromium-library › library/browsercontext-add-init-script.spec.ts › should work without navigation, after all bindings [unknown] +bidi-chromium-library › library/browsercontext-add-init-script.spec.ts › should work without navigation in popup [unknown] +bidi-chromium-library › library/browsercontext-add-init-script.spec.ts › should work with browser context scripts with a path [pass] +bidi-chromium-library › library/browsercontext-add-init-script.spec.ts › should work with browser context scripts for already created pages [pass] +bidi-chromium-library › library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browser.newContext is passed to page.goto @smoke [pass] +bidi-chromium-library › library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browser.newPage is passed to page.goto [pass] +bidi-chromium-library › library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browserType.launchPersistentContext is passed to page.goto [unknown] +bidi-chromium-library › library/browsercontext-base-url.spec.ts › should construct the URLs correctly when a baseURL without a trailing slash in browser.newPage is passed to page.goto [pass] +bidi-chromium-library › library/browsercontext-base-url.spec.ts › should construct the URLs correctly when a baseURL with a trailing slash in browser.newPage is passed to page.goto [pass] +bidi-chromium-library › library/browsercontext-base-url.spec.ts › should not construct a new URL when valid URLs are passed [pass] +bidi-chromium-library › library/browsercontext-base-url.spec.ts › should be able to match a URL relative to its given URL with urlMatcher [unknown] +bidi-chromium-library › library/browsercontext-base-url.spec.ts › should not construct a new URL with baseURL when a glob was used [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should create new context @smoke [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should be able to click across browser contexts [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › window.open should use parent tab context [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should isolate localStorage and cookies @smoke [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should propagate default viewport to the page [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should make a copy of default viewport [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should respect deviceScaleFactor [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should not allow deviceScaleFactor with null viewport [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should not allow isMobile with null viewport [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › close() should work for empty context [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › close() should abort waitForEvent [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › close() should be callable twice [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should pass self to close event [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should not report frameless pages on error [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should return all of the pages [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should close all belonging pages once closing context [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should disable javascript [unknown] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should be able to navigate after disabling javascript [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should not hang on promises after disabling javascript [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › setContent should work after disabling javascript [pass] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should work with offline option [unknown] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should emulate navigator.onLine [unknown] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should emulate media in popup [unknown] +bidi-chromium-library › library/browsercontext-basic.spec.ts › should emulate media in cross-process iframe [unknown] +bidi-chromium-library › library/browsercontext-basic.spec.ts › default user agent [pass] +bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should clear cookies [pass] +bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should isolate cookies when clearing [pass] +bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by name [unknown] +bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by name regex [unknown] +bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by domain [unknown] +bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by path [unknown] +bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by name and domain [unknown] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should return no cookies in pristine browser context [pass] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should get a cookie @smoke [unknown] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should get a non-session cookie [fail] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should properly report httpOnly cookie [pass] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should properly report "Strict" sameSite cookie [pass] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should properly report "Lax" sameSite cookie [pass] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should get multiple cookies [unknown] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should get cookies from multiple urls [pass] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should work with subdomain cookie [pass] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should return cookies with empty value [pass] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should return secure cookies based on HTTP(S) protocol [pass] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should add cookies with an expiration [pass] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should be able to send third party cookies via an iframe [fail] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should support requestStorageAccess [fail] +bidi-chromium-library › library/browsercontext-cookies.spec.ts › should parse cookie with large Max-Age correctly [fail] +bidi-chromium-library › library/browsercontext-credentials.spec.ts › should fail without credentials [pass] +bidi-chromium-library › library/browsercontext-credentials.spec.ts › should work with setHTTPCredentials [fail] +bidi-chromium-library › library/browsercontext-credentials.spec.ts › should work with correct credentials @smoke [fail] +bidi-chromium-library › library/browsercontext-credentials.spec.ts › should fail with wrong credentials [fail] +bidi-chromium-library › library/browsercontext-credentials.spec.ts › should return resource body [fail] +bidi-chromium-library › library/browsercontext-credentials.spec.ts › should work with correct credentials and matching origin [fail] +bidi-chromium-library › library/browsercontext-credentials.spec.ts › should work with correct credentials and matching origin case insensitive [fail] +bidi-chromium-library › library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching scheme [fail] +bidi-chromium-library › library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching hostname [fail] +bidi-chromium-library › library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching port [fail] +bidi-chromium-library › library/browsercontext-csp.spec.ts › should bypass CSP meta tag @smoke [fail] +bidi-chromium-library › library/browsercontext-csp.spec.ts › should bypass CSP header [fail] +bidi-chromium-library › library/browsercontext-csp.spec.ts › should bypass after cross-process navigation [fail] +bidi-chromium-library › library/browsercontext-csp.spec.ts › should bypass CSP in iframes as well [fail] +bidi-chromium-library › library/browsercontext-device.spec.ts › device › should work @smoke [fail] +bidi-chromium-library › library/browsercontext-device.spec.ts › device › should support clicking [pass] +bidi-chromium-library › library/browsercontext-device.spec.ts › device › should scroll to click [pass] +bidi-chromium-library › library/browsercontext-device.spec.ts › device › should scroll twice when emulated [pass] +bidi-chromium-library › library/browsercontext-device.spec.ts › device › should reset scroll top after a navigation [pass] +bidi-chromium-library › library/browsercontext-device.spec.ts › device › should scroll to a precise position with mobile scale [pass] +bidi-chromium-library › library/browsercontext-device.spec.ts › device › should emulate viewport and screen size [fail] +bidi-chromium-library › library/browsercontext-device.spec.ts › device › should emulate viewport without screen size [fail] +bidi-chromium-library › library/browsercontext-dsf.spec.ts › should fetch lodpi assets @smoke [pass] +bidi-chromium-library › library/browsercontext-dsf.spec.ts › should fetch hidpi assets [pass] +bidi-chromium-library › library/browsercontext-events.spec.ts › console event should work @smoke [pass] +bidi-chromium-library › library/browsercontext-events.spec.ts › console event should work in popup [pass] +bidi-chromium-library › library/browsercontext-events.spec.ts › console event should work in popup 2 [timeout] +bidi-chromium-library › library/browsercontext-events.spec.ts › console event should work in immediately closed popup [timeout] +bidi-chromium-library › library/browsercontext-events.spec.ts › dialog event should work @smoke [pass] +bidi-chromium-library › library/browsercontext-events.spec.ts › dialog event should work in popup [timeout] +bidi-chromium-library › library/browsercontext-events.spec.ts › dialog event should work in popup 2 [pass] +bidi-chromium-library › library/browsercontext-events.spec.ts › dialog event should work in immediately closed popup [timeout] +bidi-chromium-library › library/browsercontext-events.spec.ts › dialog event should work with inline script tag [timeout] +bidi-chromium-library › library/browsercontext-events.spec.ts › weberror event should work [timeout] +bidi-chromium-library › library/browsercontext-expose-function.spec.ts › expose binding should work [fail] +bidi-chromium-library › library/browsercontext-expose-function.spec.ts › should work [fail] +bidi-chromium-library › library/browsercontext-expose-function.spec.ts › should throw for duplicate registrations [pass] +bidi-chromium-library › library/browsercontext-expose-function.spec.ts › should be callable from-inside addInitScript [fail] +bidi-chromium-library › library/browsercontext-expose-function.spec.ts › exposeBindingHandle should work [fail] +bidi-chromium-library › library/browsercontext-expose-function.spec.ts › should work with CSP [fail] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should support decompression [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail if response content-length header is missing (gzip) [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with chunked responses (without Content-Length header) [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should support decompression [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail if response content-length header is missing (deflate) [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with chunked responses (without Content-Length header) [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should support decompression [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail if response content-length header is missing (br) [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with chunked responses (without Content-Length header) [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] +bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] +bidi-chromium-library › library/browsercontext-fetch-happy-eyeballs.spec.ts › get should work [pass] +bidi-chromium-library › library/browsercontext-fetch-happy-eyeballs.spec.ts › get should work on request fixture [pass] +bidi-chromium-library › library/browsercontext-fetch-happy-eyeballs.spec.ts › https post should work with ignoreHTTPSErrors option [pass] +bidi-chromium-library › library/browsercontext-fetch-happy-eyeballs.spec.ts › should work with ip6 and port as the host [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › get should work @smoke [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetch should work [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw on network error [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw on network error after redirect [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw on network error when sending body [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw on network error when sending body after redirect [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should add session cookies to request [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetch should support params passed as object [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetch should support params passed as URLSearchParams [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetch should support params passed as string [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetch should support failOnStatusCode [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetchshould support ignoreHTTPSErrors option [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › delete should support params passed as object [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › delete should support params passed as URLSearchParams [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › delete should support params passed as string [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › delete should support failOnStatusCode [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › deleteshould support ignoreHTTPSErrors option [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › get should support params passed as object [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › get should support params passed as URLSearchParams [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › get should support params passed as string [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › get should support failOnStatusCode [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › getshould support ignoreHTTPSErrors option [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › head should support params passed as object [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › head should support params passed as URLSearchParams [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › head should support params passed as string [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › head should support failOnStatusCode [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › headshould support ignoreHTTPSErrors option [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › patch should support params passed as object [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › patch should support params passed as URLSearchParams [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › patch should support params passed as string [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › patch should support failOnStatusCode [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › patchshould support ignoreHTTPSErrors option [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › post should support params passed as object [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › post should support params passed as URLSearchParams [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › post should support params passed as string [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › post should support failOnStatusCode [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › postshould support ignoreHTTPSErrors option [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › put should support params passed as object [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › put should support params passed as URLSearchParams [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › put should support params passed as string [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › put should support failOnStatusCode [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › putshould support ignoreHTTPSErrors option [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should not add context cookie if cookie header passed as a parameter [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should follow redirects [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should follow redirects correctly when Location header contains UTF-8 characters [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should add cookies from Set-Cookie header [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should preserve cookie order from Set-Cookie header [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support cookie with empty value [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should not lose body while handling Set-Cookie header [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should remove cookie with negative max-age [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should remove cookie with expires far in the past [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should handle cookies on redirects [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should return raw headers [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should work with http credentials [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should work with setHTTPCredentials [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should return error with wrong credentials [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support HTTPCredentials.send for newContext [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support HTTPCredentials.send for browser.newPage [fail] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › delete should support post data [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › get should support post data [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › head should support post data [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › patch should support post data [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › post should support post data [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › put should support post data [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should add default headers [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should send content-length [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should add default headers to redirects [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should allow to override default headers [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should propagate custom headers with redirects [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should propagate extra http headers with redirects [fail] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw on invalid header value [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw on non-http(s) protocol [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support https [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should inherit ignoreHTTPSErrors from context [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should resolve url relative to baseURL [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support gzip compression [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw informative error on corrupted gzip body [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support brotli compression [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw informative error on corrupted brotli body [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support deflate compression [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw informative error on corrupted deflate body [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support timeout option [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support a timeout of 0 [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should respect timeout after redirects [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should not hang on a brotli encoded Range request [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should dispose [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should dispose when context closes [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should override request parameters [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support application/x-www-form-urlencoded [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should encode to application/json by default [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support multipart/form-data [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support multipart/form-data with ReadStream values [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support multipart/form-data and keep the order [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support repeating names in multipart/form-data [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should serialize data to json regardless of content-type [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw nice error on unsupported data type [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › context request should export same storage state as context [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should send secure cookie over http for localhost [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should accept bool and numeric params [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should abort requests when browser context closes [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should work with connectOverCDP [unknown] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support SameSite cookie attribute over https [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should set domain=localhost cookie [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetch should not throw on long set-cookie value [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support set-cookie with SameSite and without Secure attribute over HTTP [fail] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should update host header on redirect [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should not work after dispose [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should not work after context dispose [pass] +bidi-chromium-library › library/browsercontext-fetch.spec.ts › should retry on ECONNRESET [pass] +bidi-chromium-library › library/browsercontext-har.spec.ts › should context.routeFromHAR, matching the method and following redirects [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should page.routeFromHAR, matching the method and following redirects [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › fallback:continue should continue when not found in har [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › by default should abort requests not found in har [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › fallback:continue should continue requests on bad har [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should only handle requests matching url filter [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should only context.routeFromHAR requests matching url filter [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should only page.routeFromHAR requests matching url filter [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should apply overrides before routing from har [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should support regex filter [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › newPage should fulfill from har, matching the method and following redirects [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should change document URL after redirected navigation [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should change document URL after redirected navigation on click [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should goBack to redirected navigation [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should goForward to redirected navigation [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should reload redirected navigation [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should fulfill from har with content in a file [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should round-trip har.zip [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should produce extracted zip [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should round-trip extracted har.zip [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should round-trip har with postData [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should record overridden requests to har [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should disambiguate by header [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should update har.zip for context [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should ignore boundary when matching multipart/form-data body [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should update har.zip for page [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should update har.zip for page with different options [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should update extracted har.zip for page [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › page.unrouteAll should stop page.routeFromHAR [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › context.unrouteAll should stop context.routeFromHAR [fail] +bidi-chromium-library › library/browsercontext-har.spec.ts › should ignore aborted requests [fail] +bidi-chromium-library › library/browsercontext-locale.spec.ts › should affect accept-language header @smoke [fail] +bidi-chromium-library › library/browsercontext-locale.spec.ts › should affect navigator.language [fail] +bidi-chromium-library › library/browsercontext-locale.spec.ts › should format number [fail] +bidi-chromium-library › library/browsercontext-locale.spec.ts › should format date [fail] +bidi-chromium-library › library/browsercontext-locale.spec.ts › should format number in popups [fail] +bidi-chromium-library › library/browsercontext-locale.spec.ts › should affect navigator.language in popups [fail] +bidi-chromium-library › library/browsercontext-locale.spec.ts › should work for multiple pages sharing same process [pass] +bidi-chromium-library › library/browsercontext-locale.spec.ts › should be isolated between contexts [fail] +bidi-chromium-library › library/browsercontext-locale.spec.ts › should not change default locale in another context [fail] +bidi-chromium-library › library/browsercontext-locale.spec.ts › should format number in workers [timeout] +bidi-chromium-library › library/browsercontext-locale.spec.ts › should affect Intl.DateTimeFormat().resolvedOptions().locale [fail] +bidi-chromium-library › library/browsercontext-network-event.spec.ts › BrowserContext.Events.Request [pass] +bidi-chromium-library › library/browsercontext-network-event.spec.ts › BrowserContext.Events.Response [pass] +bidi-chromium-library › library/browsercontext-network-event.spec.ts › BrowserContext.Events.RequestFailed [fail] +bidi-chromium-library › library/browsercontext-network-event.spec.ts › BrowserContext.Events.RequestFinished [pass] +bidi-chromium-library › library/browsercontext-network-event.spec.ts › should fire events in proper order [pass] +bidi-chromium-library › library/browsercontext-network-event.spec.ts › should not fire events for favicon or favicon redirects [unknown] +bidi-chromium-library › library/browsercontext-page-event.spec.ts › should have url [pass] +bidi-chromium-library › library/browsercontext-page-event.spec.ts › should have url after domcontentloaded [pass] +bidi-chromium-library › library/browsercontext-page-event.spec.ts › should have about:blank url with domcontentloaded [fail] +bidi-chromium-library › library/browsercontext-page-event.spec.ts › should have about:blank for empty url with domcontentloaded [fail] +bidi-chromium-library › library/browsercontext-page-event.spec.ts › should report when a new page is created and closed [fail] +bidi-chromium-library › library/browsercontext-page-event.spec.ts › should report initialized pages [fail] +bidi-chromium-library › library/browsercontext-page-event.spec.ts › should not crash while redirecting of original request was missed [pass] +bidi-chromium-library › library/browsercontext-page-event.spec.ts › should have an opener [pass] +bidi-chromium-library › library/browsercontext-page-event.spec.ts › should fire page lifecycle events [fail] +bidi-chromium-library › library/browsercontext-page-event.spec.ts › should work with Shift-clicking [pass] +bidi-chromium-library › library/browsercontext-page-event.spec.ts › should work with Ctrl-clicking [pass] +bidi-chromium-library › library/browsercontext-page-event.spec.ts › should not hang on ctrl-click during provisional load [timeout] +bidi-chromium-library › library/browsercontext-pages.spec.ts › should not be visible in context.pages [pass] +bidi-chromium-library › library/browsercontext-pages.spec.ts › page.context should return the correct instance [pass] +bidi-chromium-library › library/browsercontext-pages.spec.ts › frame.focus should work multiple times [pass] +bidi-chromium-library › library/browsercontext-pages.spec.ts › should click with disabled javascript [pass] +bidi-chromium-library › library/browsercontext-pages.spec.ts › should not hang with touch-enabled viewports [pass] +bidi-chromium-library › library/browsercontext-pages.spec.ts › should click the button with deviceScaleFactor set [pass] +bidi-chromium-library › library/browsercontext-pages.spec.ts › should click the button with offset with page scale [pass] +bidi-chromium-library › library/browsercontext-pages.spec.ts › should return bounding box with page scale [pass] +bidi-chromium-library › library/browsercontext-pages.spec.ts › should not leak listeners during navigation of 20 pages [fail] +bidi-chromium-library › library/browsercontext-pages.spec.ts › should keep selection in multiple pages [pass] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should work when passing the proxy only on the context level [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should throw for bad server value [pass] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use proxy [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should set cookie for top-level domain [pass] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › localhost [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › loopback address [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › link-local [timeout] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › localhost [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › loopback address [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › link-local [timeout] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use ipv6 proxy [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use proxy twice [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use proxy for second page [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use proxy for https urls [timeout] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should work with IP:PORT notion [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should throw for socks5 authentication [pass] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should throw for socks4 authentication [pass] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should authenticate [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should authenticate with empty password [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should isolate proxy credentials between contexts [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should exclude patterns [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use socks proxy [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use socks proxy in second page [fail] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › does launch without a port [pass] +bidi-chromium-library › library/browsercontext-proxy.spec.ts › should isolate proxy credentials between contexts on navigation [fail] +bidi-chromium-library › library/browsercontext-reuse.spec.ts › should re-add binding after reset [fail] +bidi-chromium-library › library/browsercontext-reuse.spec.ts › should reset serviceworker [fail] +bidi-chromium-library › library/browsercontext-reuse.spec.ts › should reset serviceworker that hangs in importScripts [fail] +bidi-chromium-library › library/browsercontext-reuse.spec.ts › should not cache resources [fail] +bidi-chromium-library › library/browsercontext-reuse.spec.ts › should ignore binding from beforeunload [pass] +bidi-chromium-library › library/browsercontext-reuse.spec.ts › should reset mouse position [pass] +bidi-chromium-library › library/browsercontext-reuse.spec.ts › should reset tracing [pass] +bidi-chromium-library › library/browsercontext-reuse.spec.ts › should work with clock emulation [pass] +bidi-chromium-library › library/browsercontext-reuse.spec.ts › should continue issuing events after closing the reused page [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should intercept [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should unroute [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should yield to page.route [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should fall back to context.route [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should support Set-Cookie header [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should ignore secure Set-Cookie header for insecure requests [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should use Set-Cookie header in future requests [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should work with ignoreHTTPSErrors [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should support the times parameter with route matching [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should work if handler with times parameter was removed from another handler [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should support async handler w/ times [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should overwrite post body with empty string [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should chain fallback [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should chain fallback w/ dynamic URL [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should not chain fulfill [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should not chain abort [pass] +bidi-chromium-library › library/browsercontext-route.spec.ts › should chain fallback into page [fail] +bidi-chromium-library › library/browsercontext-route.spec.ts › should fall back async [fail] +bidi-chromium-library › library/browsercontext-service-worker-policy.spec.ts › should allow service workers by default [pass] +bidi-chromium-library › library/browsercontext-service-worker-policy.spec.ts › block › blocks service worker registration [timeout] +bidi-chromium-library › library/browsercontext-service-worker-policy.spec.ts › block › should not throw error on about:blank [pass] +bidi-chromium-library › library/browsercontext-set-extra-http-headers.spec.ts › should override extra headers from browser context [fail] +bidi-chromium-library › library/browsercontext-set-extra-http-headers.spec.ts › should throw for non-string header values [pass] +bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should capture local storage [fail] +bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should set local storage [fail] +bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should round-trip through the file [fail] +bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should capture cookies [fail] +bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should not emit events about internal page [fail] +bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should not restore localStorage twice [fail] +bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should handle missing file [pass] +bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should handle malformed file [pass] +bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should serialize storageState with lone surrogates [pass] +bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should work when service worker is intefering [pass] +bidi-chromium-library › library/browsercontext-strict.spec.ts › should not fail page.textContent in non-strict mode [pass] +bidi-chromium-library › library/browsercontext-strict.spec.ts › strict context mode › should fail page.textContent in strict mode [fail] +bidi-chromium-library › library/browsercontext-strict.spec.ts › strict context mode › should fail page.click in strict mode [fail] +bidi-chromium-library › library/browsercontext-strict.spec.ts › strict context mode › should opt out of strict mode [pass] +bidi-chromium-library › library/browsercontext-timezone-id.spec.ts › should work @smoke [fail] +bidi-chromium-library › library/browsercontext-timezone-id.spec.ts › should throw for invalid timezone IDs when creating pages [fail] +bidi-chromium-library › library/browsercontext-timezone-id.spec.ts › should work for multiple pages sharing same process [pass] +bidi-chromium-library › library/browsercontext-timezone-id.spec.ts › should not change default timezone in another context [fail] +bidi-chromium-library › library/browsercontext-timezone-id.spec.ts › should affect Intl.DateTimeFormat().resolvedOptions().timeZone [fail] +bidi-chromium-library › library/browsercontext-user-agent.spec.ts › should work [fail] +bidi-chromium-library › library/browsercontext-user-agent.spec.ts › should work for subframes [fail] +bidi-chromium-library › library/browsercontext-user-agent.spec.ts › should emulate device user-agent [fail] +bidi-chromium-library › library/browsercontext-user-agent.spec.ts › should make a copy of default options [fail] +bidi-chromium-library › library/browsercontext-user-agent.spec.ts › custom user agent for download [timeout] +bidi-chromium-library › library/browsercontext-user-agent.spec.ts › should work for navigator.userAgentData and sec-ch-ua headers [unknown] +bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support mobile emulation [pass] +bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support touch emulation [fail] +bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should be detectable [pass] +bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should detect touch when applying viewport with touches [pass] +bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support landscape emulation [pass] +bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support window.orientation emulation [fail] +bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should fire orientationchange event [timeout] +bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › default mobile viewports to 980 width [fail] +bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › respect meta viewport tag [pass] +bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should emulate the hover media feature [fail] +bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › mouse should work with mobile viewports and cross process navigations [pass] +bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should scroll when emulating a mobile viewport [pass] +bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › view scale should reset after navigation [fail] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should get the proper default viewport size [pass] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should set the proper viewport size [pass] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should return correct outerWidth and outerHeight [pass] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should emulate device width [fail] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should emulate device height [fail] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should emulate availWidth and availHeight [fail] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should not have touch by default [pass] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should throw on tap if hasTouch is not enabled [pass] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should support touch with null viewport [fail] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should set both screen and viewport options [fail] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should report null viewportSize when given null viewport [pass] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should drag with high dpi [pass] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › WebKit Windows headed should have a minimal viewport [unknown] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should be able to get correct orientation angle on non-mobile devices [pass] +bidi-chromium-library › library/browsercontext-viewport.spec.ts › should set window.screen.orientation.type for mobile devices [fail] +bidi-chromium-library › library/browsertype-basic.spec.ts › browserType.executablePath should work [unknown] +bidi-chromium-library › library/browsertype-basic.spec.ts › browserType.name should work [fail] +bidi-chromium-library › library/browsertype-basic.spec.ts › should throw when trying to connect with not-chromium [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should connect over wss [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should print HTTP error [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should print ws error [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should print custom ws close error [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should be able to reconnect to a browser [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should be able to visit ipv6 [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should ignore page.pause when headed [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should be able to visit ipv6 through localhost [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should be able to connect two browsers at the same time [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should timeout in socket while connecting [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should timeout in connect while connecting [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should send extra headers with connect request [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should send default User-Agent and X-Playwright-Browser headers with connect request [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should support slowmo option [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › disconnected event should be emitted when browser is closed or server is closed [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › disconnected event should have browser as argument [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should handle exceptions during connect [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should set the browser connected state [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should throw when used after isConnected returns false [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should throw when calling waitForNavigation after disconnect [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should reject navigation when browser closes [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should reject waitForSelector when browser closes [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should emit close events on pages and contexts [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should terminate network waiters [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should reject waitForEvent before browser.close finishes [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should reject waitForEvent before browser.onDisconnect fires [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should respect selectors [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should not throw on close after disconnect [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should saveAs videos from remote browser [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should be able to connect 20 times to a single server without warnings [unknown] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should save download [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should error when saving download after deletion [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should properly disconnect when connection closes from the client side [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should be able to connect when the wsEndpoint is passed as an option [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should save har [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should filter launch options [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should record trace with sources [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should fulfill with global fetch result [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should upload large file [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › setInputFiles should preserve lastModified timestamp [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should connect over http [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should forward non-forwarded requests [unknown] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy localhost requests @smoke [unknown] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy ipv6 localhost requests @smoke [unknown] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy localhost requests from fetch api [unknown] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy local.playwright requests [unknown] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should lead to the error page for forwarded requests when the connection is refused [unknown] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy based on the pattern [unknown] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should check proxy pattern on the client [unknown] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should connect over wss [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should print HTTP error [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should print ws error [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should print custom ws close error [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should be able to reconnect to a browser [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should be able to visit ipv6 [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should ignore page.pause when headed [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should be able to visit ipv6 through localhost [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should be able to connect two browsers at the same time [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should timeout in socket while connecting [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should timeout in connect while connecting [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should send extra headers with connect request [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should send default User-Agent and X-Playwright-Browser headers with connect request [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should support slowmo option [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › disconnected event should be emitted when browser is closed or server is closed [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › disconnected event should have browser as argument [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should handle exceptions during connect [pass] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should set the browser connected state [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should throw when used after isConnected returns false [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should throw when calling waitForNavigation after disconnect [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should reject navigation when browser closes [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should reject waitForSelector when browser closes [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should emit close events on pages and contexts [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should terminate network waiters [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should reject waitForEvent before browser.close finishes [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should reject waitForEvent before browser.onDisconnect fires [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should respect selectors [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should not throw on close after disconnect [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should saveAs videos from remote browser [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should be able to connect 20 times to a single server without warnings [unknown] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should save download [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should error when saving download after deletion [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should properly disconnect when connection closes from the client side [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should be able to connect when the wsEndpoint is passed as an option [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should save har [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should filter launch options [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should record trace with sources [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should fulfill with global fetch result [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should upload large file [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › setInputFiles should preserve lastModified timestamp [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should connect over http [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should forward non-forwarded requests [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy localhost requests @smoke [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy ipv6 localhost requests @smoke [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy localhost requests from fetch api [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy local.playwright requests [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should lead to the error page for forwarded requests when the connection is refused [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy based on the pattern [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should check proxy pattern on the client [fail] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer only › should work with cluster [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer only › should properly disconnect when connection closes from the server side [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer only › should be able to reconnect to a browser 12 times without warnings [timeout] +bidi-chromium-library › library/browsertype-connect.spec.ts › should refuse connecting when versions do not match [pass] +bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone chromium [unknown] +bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 hub + node chromium [unknown] +bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 standalone chromium [unknown] +bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 hub + node chromium [unknown] +bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 standalone chromium broken driver [unknown] +bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone non-chromium [unknown] +bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone chromium through run-driver [unknown] +bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should work [fail] +bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should work with host [fail] +bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should work with port [fail] +bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should work with wsPath [fail] +bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should work when wsPath is missing leading slash [fail] +bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should default to random wsPath [fail] +bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should provide an error when ws endpoint is incorrect [fail] +bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should fire "close" event during kill [fail] +bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should return child_process instance [fail] +bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should fire close event [fail] +bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should log protocol [fail] +bidi-chromium-library › library/browsertype-launch.spec.ts › should reject all promises when browser is closed [fail] +bidi-chromium-library › library/browsertype-launch.spec.ts › should throw if userDataDir option is passed [pass] +bidi-chromium-library › library/browsertype-launch.spec.ts › should throw if userDataDir is passed as an argument [pass] +bidi-chromium-library › library/browsertype-launch.spec.ts › should throw if port option is passed [pass] +bidi-chromium-library › library/browsertype-launch.spec.ts › should throw if port option is passed for persistent context [pass] +bidi-chromium-library › library/browsertype-launch.spec.ts › should throw if page argument is passed [pass] +bidi-chromium-library › library/browsertype-launch.spec.ts › should reject if launched browser fails immediately [fail] +bidi-chromium-library › library/browsertype-launch.spec.ts › should reject if executable path is invalid [pass] +bidi-chromium-library › library/browsertype-launch.spec.ts › should handle timeout [pass] +bidi-chromium-library › library/browsertype-launch.spec.ts › should handle exception [pass] +bidi-chromium-library › library/browsertype-launch.spec.ts › should report launch log [pass] +bidi-chromium-library › library/browsertype-launch.spec.ts › should accept objects as options [pass] +bidi-chromium-library › library/browsertype-launch.spec.ts › should fire close event for all contexts [pass] +bidi-chromium-library › library/browsertype-launch.spec.ts › should be callable twice [pass] +bidi-chromium-library › library/browsertype-launch.spec.ts › should allow await using [pass] +bidi-chromium-library › library/capabilities.spec.ts › SharedArrayBuffer should work @smoke [fail] +bidi-chromium-library › library/capabilities.spec.ts › Web Assembly should work @smoke [pass] +bidi-chromium-library › library/capabilities.spec.ts › WebSocket should work @smoke [pass] +bidi-chromium-library › library/capabilities.spec.ts › should respect CSP @smoke [pass] +bidi-chromium-library › library/capabilities.spec.ts › should play video @smoke [pass] +bidi-chromium-library › library/capabilities.spec.ts › should play webm video @smoke [pass] +bidi-chromium-library › library/capabilities.spec.ts › should play audio @smoke [pass] +bidi-chromium-library › library/capabilities.spec.ts › should support webgl @smoke [pass] +bidi-chromium-library › library/capabilities.spec.ts › should support webgl 2 @smoke [pass] +bidi-chromium-library › library/capabilities.spec.ts › should not crash on page with mp4 @smoke [pass] +bidi-chromium-library › library/capabilities.spec.ts › should not crash on showDirectoryPicker [unknown] +bidi-chromium-library › library/capabilities.spec.ts › should not crash on storage.getDirectory() [pass] +bidi-chromium-library › library/capabilities.spec.ts › navigator.clipboard should be present [pass] +bidi-chromium-library › library/capabilities.spec.ts › should set CloseEvent.wasClean to false when the server terminates a WebSocket connection [pass] +bidi-chromium-library › library/capabilities.spec.ts › serviceWorker should intercept document request [pass] +bidi-chromium-library › library/capabilities.spec.ts › webkit should define window.safari [unknown] +bidi-chromium-library › library/capabilities.spec.ts › make sure that XMLHttpRequest upload events are emitted correctly [pass] +bidi-chromium-library › library/capabilities.spec.ts › loading in HTMLImageElement.prototype [pass] +bidi-chromium-library › library/capabilities.spec.ts › window.GestureEvent in WebKit [pass] +bidi-chromium-library › library/capabilities.spec.ts › requestFullscreen [pass] +bidi-chromium-library › library/capabilities.spec.ts › should send no Content-Length header for GET requests with a Content-Type [pass] +bidi-chromium-library › library/capabilities.spec.ts › Intl.ListFormat should work [pass] +bidi-chromium-library › library/capabilities.spec.ts › service worker should cover the iframe [pass] +bidi-chromium-library › library/capabilities.spec.ts › service worker should register in an iframe [pass] +bidi-chromium-library › library/channels.spec.ts › should scope context handles [pass] +bidi-chromium-library › library/channels.spec.ts › should scope CDPSession handles [unknown] +bidi-chromium-library › library/channels.spec.ts › should scope browser handles [pass] +bidi-chromium-library › library/channels.spec.ts › should not generate dispatchers for subresources w/o listeners [pass] +bidi-chromium-library › library/channels.spec.ts › should work with the domain module [timeout] +bidi-chromium-library › library/channels.spec.ts › exposeFunction should not leak [fail] +bidi-chromium-library › library/chromium/bfcache.spec.ts › bindings should work after restoring from bfcache [fail] +bidi-chromium-library › library/chromium/chromium.spec.ts › should create a worker from a service worker [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › should create a worker from service worker with noop routing [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › should emit new service worker on update [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › http credentials › httpCredentials [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › serviceWorkers() should return current workers [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › should not create a worker from a shared worker [pass] +bidi-chromium-library › library/chromium/chromium.spec.ts › Page.route should work with intervention headers [fail] +bidi-chromium-library › library/chromium/chromium.spec.ts › should close service worker together with the context [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › should pass args with spaces [fail] +bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › serviceWorker(), and fromServiceWorker() work [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker requests (main and within) [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report failure (due to content-type) of main service worker request [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report failure (due to redirect) of main service worker request [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker importScripts [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report intercepted service worker requests in HAR [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept only serviceworker request, not page [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should produce network events, routing, and annotations for Service Worker [fail] +bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should produce network events, routing, and annotations for Service Worker (advanced) [fail] +bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker update requests [unknown] +bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › setOffline [timeout] +bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › setExtraHTTPHeaders [timeout] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should use logger in default context [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should cleanup artifacts dir after connectOverCDP disconnects due to ws close [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connectOverCDP and manage downloads in default context [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session twice [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect to existing page with iframe and navigate [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect to existing service workers [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect over a ws endpoint [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should send extra headers with connect request [timeout] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should send default User-Agent header with connect request [timeout] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should report all pages in an existing browser [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect via https [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should return valid browser from context.browser() [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should report an expected error when the endpointURL returns a non-expected status code [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should report an expected error when the endpoint URL JSON webSocketDebuggerUrl is undefined [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session when passed as a first argument [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should use proxy with connectOverCDP [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should be able to connect via localhost [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › emulate media should not be affected by second connectOverCDP [unknown] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should allow tracing over cdp session [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › setInputFiles should preserve lastModified timestamp [fail] +bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should print custom ws close error [fail] +bidi-chromium-library › library/chromium/css-coverage.spec.ts › should work [fail] +bidi-chromium-library › library/chromium/css-coverage.spec.ts › should report sourceURLs [fail] +bidi-chromium-library › library/chromium/css-coverage.spec.ts › should report multiple stylesheets [fail] +bidi-chromium-library › library/chromium/css-coverage.spec.ts › should report stylesheets that have no coverage [fail] +bidi-chromium-library › library/chromium/css-coverage.spec.ts › should work with media queries [fail] +bidi-chromium-library › library/chromium/css-coverage.spec.ts › should work with complicated usecases [fail] +bidi-chromium-library › library/chromium/css-coverage.spec.ts › should ignore injected stylesheets [fail] +bidi-chromium-library › library/chromium/css-coverage.spec.ts › should report stylesheets across navigations [fail] +bidi-chromium-library › library/chromium/css-coverage.spec.ts › should NOT report scripts across navigations [fail] +bidi-chromium-library › library/chromium/css-coverage.spec.ts › should work with a recently loaded stylesheet [fail] +bidi-chromium-library › library/chromium/disable-web-security.spec.ts › test utility world in popup w/ --disable-web-security [pass] +bidi-chromium-library › library/chromium/disable-web-security.spec.ts › test init script w/ --disable-web-security [fail] +bidi-chromium-library › library/chromium/js-coverage.spec.ts › should work [fail] +bidi-chromium-library › library/chromium/js-coverage.spec.ts › should report sourceURLs [fail] +bidi-chromium-library › library/chromium/js-coverage.spec.ts › should ignore eval() scripts by default [fail] +bidi-chromium-library › library/chromium/js-coverage.spec.ts › shouldn't ignore eval() scripts if reportAnonymousScripts is true [fail] +bidi-chromium-library › library/chromium/js-coverage.spec.ts › should report multiple scripts [fail] +bidi-chromium-library › library/chromium/js-coverage.spec.ts › should report scripts across navigations when disabled [fail] +bidi-chromium-library › library/chromium/js-coverage.spec.ts › should NOT report scripts across navigations when enabled [fail] +bidi-chromium-library › library/chromium/js-coverage.spec.ts › should not hang when there is a debugger statement [fail] +bidi-chromium-library › library/chromium/launcher.spec.ts › should throw with remote-debugging-pipe argument [fail] +bidi-chromium-library › library/chromium/launcher.spec.ts › should not throw with remote-debugging-port argument [fail] +bidi-chromium-library › library/chromium/launcher.spec.ts › should open devtools when "devtools: true" option is given [unknown] +bidi-chromium-library › library/chromium/launcher.spec.ts › should return background pages [fail] +bidi-chromium-library › library/chromium/launcher.spec.ts › should return background pages when recording video [fail] +bidi-chromium-library › library/chromium/launcher.spec.ts › should support request/response events when using backgroundPage() [fail] +bidi-chromium-library › library/chromium/launcher.spec.ts › should not create pages automatically [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › should report oopif frames [pass] +bidi-chromium-library › library/chromium/oopif.spec.ts › should handle oopif detach [pass] +bidi-chromium-library › library/chromium/oopif.spec.ts › should handle remote -> local -> remote transitions [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › should get the proper viewport [unknown] +bidi-chromium-library › library/chromium/oopif.spec.ts › should expose function [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › should emulate media [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › should emulate offline [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › should support context options [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › should respect route [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › should take screenshot [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › should load oopif iframes with subresources and route [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › should report main requests [pass] +bidi-chromium-library › library/chromium/oopif.spec.ts › should support exposeFunction [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › should support addInitScript [pass] +bidi-chromium-library › library/chromium/oopif.spec.ts › should click a button when it overlays oopif [pass] +bidi-chromium-library › library/chromium/oopif.spec.ts › should report google.com frame with headed [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › ElementHandle.boundingBox() should work [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › should click [pass] +bidi-chromium-library › library/chromium/oopif.spec.ts › contentFrame should work [pass] +bidi-chromium-library › library/chromium/oopif.spec.ts › should allow cdp sessions on oopifs [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › should emit filechooser event for iframe [timeout] +bidi-chromium-library › library/chromium/oopif.spec.ts › should be able to click in iframe [pass] +bidi-chromium-library › library/chromium/oopif.spec.ts › should not throw on exposeFunction when oopif detaches [fail] +bidi-chromium-library › library/chromium/oopif.spec.ts › should intercept response body from oopif [fail] +bidi-chromium-library › library/chromium/session.spec.ts › should work [fail] +bidi-chromium-library › library/chromium/session.spec.ts › should send events [fail] +bidi-chromium-library › library/chromium/session.spec.ts › should only accept a page or frame [pass] +bidi-chromium-library › library/chromium/session.spec.ts › should enable and disable domains independently [fail] +bidi-chromium-library › library/chromium/session.spec.ts › should be able to detach session [fail] +bidi-chromium-library › library/chromium/session.spec.ts › should throw nice errors [fail] +bidi-chromium-library › library/chromium/session.spec.ts › should work with main frame [fail] +bidi-chromium-library › library/chromium/session.spec.ts › should throw if target is part of main [fail] +bidi-chromium-library › library/chromium/session.spec.ts › should not break page.close() [fail] +bidi-chromium-library › library/chromium/session.spec.ts › should detach when page closes [fail] +bidi-chromium-library › library/chromium/session.spec.ts › should reject protocol calls when page closes [fail] +bidi-chromium-library › library/chromium/session.spec.ts › should work with newBrowserCDPSession [fail] +bidi-chromium-library › library/chromium/tracing.spec.ts › should output a trace [fail] +bidi-chromium-library › library/chromium/tracing.spec.ts › should create directories as needed [fail] +bidi-chromium-library › library/chromium/tracing.spec.ts › should run with custom categories if provided [fail] +bidi-chromium-library › library/chromium/tracing.spec.ts › should throw if tracing on two pages [fail] +bidi-chromium-library › library/chromium/tracing.spec.ts › should return a buffer [fail] +bidi-chromium-library › library/chromium/tracing.spec.ts › should work without options [fail] +bidi-chromium-library › library/chromium/tracing.spec.ts › should support a buffer without a path [fail] +bidi-chromium-library › library/client-certificates.spec.ts › fetch › validate input [pass] +bidi-chromium-library › library/client-certificates.spec.ts › fetch › should fail with no client certificates provided [pass] +bidi-chromium-library › library/client-certificates.spec.ts › fetch › should keep supporting http [pass] +bidi-chromium-library › library/client-certificates.spec.ts › fetch › should throw with untrusted client certs [pass] +bidi-chromium-library › library/client-certificates.spec.ts › fetch › pass with trusted client certificates [pass] +bidi-chromium-library › library/client-certificates.spec.ts › fetch › pass with trusted client certificates in pfx format [pass] +bidi-chromium-library › library/client-certificates.spec.ts › fetch › should throw a http error if the pfx passphrase is incorect [pass] +bidi-chromium-library › library/client-certificates.spec.ts › fetch › should fail with matching certificates in legacy pfx format [pass] +bidi-chromium-library › library/client-certificates.spec.ts › fetch › should work in the browser with request interception [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › validate input [pass] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should keep supporting http [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should fail with no client certificates [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should fail with self-signed client certificates [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should pass with matching certificates [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should pass with matching certificates when passing as content [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should not hang on tls errors during TLS 1.2 handshake [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should pass with matching certificates in pfx format [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should handle TLS renegotiation with client certificates [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should pass with matching certificates in pfx format when passing as content [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should fail with matching certificates in legacy pfx format [pass] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should throw a http error if the pfx passphrase is incorect [pass] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should pass with matching certificates on context APIRequestContext instance [pass] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should pass with matching certificates and trailing slash [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should have ignoreHTTPSErrors=false by default [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › support http2 [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › support http2 if the browser only supports http1.1 [unknown] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should return target connection errors when using http2 [fail] +bidi-chromium-library › library/client-certificates.spec.ts › browser › should handle rejected certificate in handshake with HTTP/2 [pass] +bidi-chromium-library › library/client-certificates.spec.ts › browser › persistentContext › validate input [pass] +bidi-chromium-library › library/client-certificates.spec.ts › browser › persistentContext › should pass with matching certificates [fail] +bidi-chromium-library › library/clock.spec.ts › setTimeout › throws if no arguments [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › does not throw if |undefined| or |null| is passed as a callback [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › returns numeric id or object with numeric id [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › returns unique id [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › starts id from a large number [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › sets timers on instance [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › parses numeric string times [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › parses no-numeric string times [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › passes setTimeout parameters [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › calls correct timeout on recursive tick [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › does not depend on this [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › is not influenced by forward system clock changes [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › is not influenced by backward system clock changes [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › use of eval when not in node › evals non-function callbacks [pass] +bidi-chromium-library › library/clock.spec.ts › setTimeout › use of eval when not in node › only evals on global scope [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › triggers immediately without specified delay [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › does not trigger without sufficient delay [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › triggers after sufficient delay [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › triggers simultaneous timers [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › triggers multiple simultaneous timers [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › triggers multiple simultaneous timers with zero callAt [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › waits after setTimeout was called [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › mini integration test [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › triggers even when some throw [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › calls function with global object or null (strict mode) as this [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › triggers in the order scheduled [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › creates updated Date while ticking [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › fires timer in intervals of 13 [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › fires timer in intervals of "13" [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › fires timers in correct order [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › triggers timeouts and intervals in the order scheduled [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › does not fire canceled intervals [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › throws for negative minutes [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › fires nested setTimeout calls properly [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › does not silently catch errors [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes 2 [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes when an error is thrown [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes when an error is thrown 2 [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › throws on negative ticks [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › creates updated Date while ticking promises [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › fires promise timers in correct order [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › does not fire intervals canceled in a promise [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › fires nested setTimeout calls in user-created promises properly [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes in promises [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › should settle user-created promises [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › should settle chained user-created promises [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › should settle multiple user-created promises [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › should settle nested user-created promises [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › should settle user-created promises even if some throw [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › should settle user-created promises before calling more timeouts [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › should settle local promises before calling timeouts [pass] +bidi-chromium-library › library/clock.spec.ts › runFor › should settle local nested promises before calling timeouts [pass] +bidi-chromium-library › library/clock.spec.ts › clearTimeout › removes timeout [pass] +bidi-chromium-library › library/clock.spec.ts › clearTimeout › removes interval [pass] +bidi-chromium-library › library/clock.spec.ts › clearTimeout › removes interval with undefined interval [pass] +bidi-chromium-library › library/clock.spec.ts › clearTimeout › ignores null argument [pass] +bidi-chromium-library › library/clock.spec.ts › setInterval › throws if no arguments [pass] +bidi-chromium-library › library/clock.spec.ts › setInterval › does not throw if |undefined| or |null| is passed as a callback [pass] +bidi-chromium-library › library/clock.spec.ts › setInterval › returns numeric id or object with numeric id [pass] +bidi-chromium-library › library/clock.spec.ts › setInterval › returns unique id [pass] +bidi-chromium-library › library/clock.spec.ts › setInterval › schedules recurring timeout [pass] +bidi-chromium-library › library/clock.spec.ts › setInterval › is not influenced by forward system clock changes [pass] +bidi-chromium-library › library/clock.spec.ts › setInterval › is not influenced by backward system clock changes [pass] +bidi-chromium-library › library/clock.spec.ts › setInterval › does not schedule recurring timeout when cleared [pass] +bidi-chromium-library › library/clock.spec.ts › setInterval › passes setTimeout parameters [pass] +bidi-chromium-library › library/clock.spec.ts › clearInterval › removes interval [pass] +bidi-chromium-library › library/clock.spec.ts › clearInterval › removes interval with undefined interval [pass] +bidi-chromium-library › library/clock.spec.ts › clearInterval › removes timeout [pass] +bidi-chromium-library › library/clock.spec.ts › clearInterval › ignores null argument [pass] +bidi-chromium-library › library/clock.spec.ts › date › provides date constructor [pass] +bidi-chromium-library › library/clock.spec.ts › date › creates real Date objects [pass] +bidi-chromium-library › library/clock.spec.ts › date › returns date as string when called as function [pass] +bidi-chromium-library › library/clock.spec.ts › date › creates Date objects representing clock time [pass] +bidi-chromium-library › library/clock.spec.ts › date › returns date as string representing clock time [pass] +bidi-chromium-library › library/clock.spec.ts › date › listens to ticking clock [pass] +bidi-chromium-library › library/clock.spec.ts › date › listens to system clock changes [pass] +bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing timestamp [pass] +bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing a date as string [pass] +bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing a date as RFC 2822 string [pass] +bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing year, month [pass] +bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing y, m, d [pass] +bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing y, m, d, h [pass] +bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m [pass] +bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m, s [pass] +bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m, s, ms [pass] +bidi-chromium-library › library/clock.spec.ts › date › returns date as string when calling with arguments [pass] +bidi-chromium-library › library/clock.spec.ts › date › returns date as string when calling with timestamp [pass] +bidi-chromium-library › library/clock.spec.ts › date › mirrors native Date.prototype [pass] +bidi-chromium-library › library/clock.spec.ts › date › supports now method if present [pass] +bidi-chromium-library › library/clock.spec.ts › date › returns clock.now() [pass] +bidi-chromium-library › library/clock.spec.ts › date › mirrors parse method [pass] +bidi-chromium-library › library/clock.spec.ts › date › mirrors UTC method [pass] +bidi-chromium-library › library/clock.spec.ts › date › mirrors toUTCString method [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › returns clock object [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › takes an object parameter [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › sets initial timestamp [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › replaces global setTimeout [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › global fake setTimeout should return id [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › replaces global clearTimeout [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › replaces global setInterval [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › replaces global clearInterval [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › replaces global performance.now [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › replace Event.prototype.timeStamp [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › uninstalls global performance.now [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › should let performance.mark still be callable after install() (#136) [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › should not alter the global performance properties and methods [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › should replace the getEntries, getEntriesByX methods with noops that return [] [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › deletes global property on uninstall if it was inherited onto the global object [unknown] +bidi-chromium-library › library/clock.spec.ts › stubTimers › fakes Date constructor [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › fake Date constructor should mirror Date's properties [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › mirrors custom Date properties [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › uninstalls Date constructor [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › fakes provided methods [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › resets faked methods [pass] +bidi-chromium-library › library/clock.spec.ts › stubTimers › does not fake methods not provided [pass] +bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › throws if no arguments [pass] +bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › returns numeric id or object with numeric id [pass] +bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › returns unique id [pass] +bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should run every 16ms [pass] +bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should be called with performance.now() when available [pass] +bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should be called with performance.now() even when performance unavailable [pass] +bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should call callback once [pass] +bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should schedule two callbacks before the next frame at the same time [pass] +bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should properly schedule callback for 3rd frame [pass] +bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should schedule for next frame if on current frame [pass] +bidi-chromium-library › library/clock.spec.ts › cancelAnimationFrame › removes animation frame [pass] +bidi-chromium-library › library/clock.spec.ts › cancelAnimationFrame › does not remove timeout [pass] +bidi-chromium-library › library/clock.spec.ts › cancelAnimationFrame › does not remove interval [pass] +bidi-chromium-library › library/clock.spec.ts › cancelAnimationFrame › ignores null argument [pass] +bidi-chromium-library › library/clock.spec.ts › fastForward › ignores timers which wouldn't be run [pass] +bidi-chromium-library › library/clock.spec.ts › fastForward › pushes back execution time for skipped timers [pass] +bidi-chromium-library › library/clock.spec.ts › fastForward › handles multiple pending timers and types [pass] +bidi-chromium-library › library/clock.spec.ts › pauseAt › pause at target time [pass] +bidi-chromium-library › library/clock.spec.ts › pauseAt › fire target timers [pass] +bidi-chromium-library › library/clock.spec.ts › pauseAt › returns consumed clicks [pass] +bidi-chromium-library › library/clock.spec.ts › performance.now() › should start at 0 [pass] +bidi-chromium-library › library/clock.spec.ts › performance.now() › should run along with clock.tick [pass] +bidi-chromium-library › library/clock.spec.ts › performance.now() › should listen to multiple ticks in performance.now [pass] +bidi-chromium-library › library/clock.spec.ts › performance.now() › should run with ticks with timers set [pass] +bidi-chromium-library › library/clock.spec.ts › requestIdleCallback › throws if no arguments [pass] +bidi-chromium-library › library/clock.spec.ts › requestIdleCallback › returns numeric id [pass] +bidi-chromium-library › library/clock.spec.ts › requestIdleCallback › returns unique id [pass] +bidi-chromium-library › library/clock.spec.ts › requestIdleCallback › runs after all timers [pass] +bidi-chromium-library › library/clock.spec.ts › requestIdleCallback › runs no later than timeout option even if there are any timers [pass] +bidi-chromium-library › library/clock.spec.ts › requestIdleCallback › doesn't runs if there are any timers and no timeout option [pass] +bidi-chromium-library › library/clock.spec.ts › cancelIdleCallback › removes idle callback [pass] +bidi-chromium-library › library/clock.spec.ts › Intl API › Executes formatRange like normal [pass] +bidi-chromium-library › library/clock.spec.ts › Intl API › Executes formatRangeToParts like normal [pass] +bidi-chromium-library › library/clock.spec.ts › Intl API › Executes resolvedOptions like normal [pass] +bidi-chromium-library › library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns true when passed a timestamp argument that is first of the month [pass] +bidi-chromium-library › library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns false when passed a timestamp argument that is not first of the month [pass] +bidi-chromium-library › library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns true when passed no timestamp and system time is first of the month [pass] +bidi-chromium-library › library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns false when passed no timestamp and system time is not first of the month [pass] +bidi-chromium-library › library/clock.spec.ts › Intl API › Executes supportedLocalesOf like normal [pass] +bidi-chromium-library › library/clock.spec.ts › Intl API › Creates a RelativeTimeFormat like normal [pass] +bidi-chromium-library › library/clock.spec.ts › works with concurrent runFor calls [pass] +bidi-chromium-library › library/clock.spec.ts › works with slow setTimeout in busy embedder [pass] +bidi-chromium-library › library/clock.spec.ts › works with slow setTimeout in busy embedder when not paused [pass] +bidi-chromium-library › library/component-parser.spec.ts › should parse [pass] +bidi-chromium-library › library/component-parser.spec.ts › should parse short attributes [pass] +bidi-chromium-library › library/component-parser.spec.ts › should parse all operators [pass] +bidi-chromium-library › library/component-parser.spec.ts › should tolerate spacing [pass] +bidi-chromium-library › library/component-parser.spec.ts › should escape [pass] +bidi-chromium-library › library/component-parser.spec.ts › should parse int values [pass] +bidi-chromium-library › library/component-parser.spec.ts › should parse float values [pass] +bidi-chromium-library › library/component-parser.spec.ts › should parse bool [pass] +bidi-chromium-library › library/component-parser.spec.ts › should parse regex [pass] +bidi-chromium-library › library/component-parser.spec.ts › should parse identifiers [pass] +bidi-chromium-library › library/component-parser.spec.ts › should parse unquoted string [pass] +bidi-chromium-library › library/component-parser.spec.ts › should throw on malformed selector [pass] +bidi-chromium-library › library/css-parser.spec.ts › should parse css [pass] +bidi-chromium-library › library/css-parser.spec.ts › should throw on malformed css [pass] +bidi-chromium-library › library/debug-controller.spec.ts › should pick element [fail] +bidi-chromium-library › library/debug-controller.spec.ts › should report pages [fail] +bidi-chromium-library › library/debug-controller.spec.ts › should navigate all [fail] +bidi-chromium-library › library/debug-controller.spec.ts › should reset for reuse [fail] +bidi-chromium-library › library/debug-controller.spec.ts › should highlight all [fail] +bidi-chromium-library › library/debug-controller.spec.ts › should record [fail] +bidi-chromium-library › library/debug-controller.spec.ts › should record custom data-testid [fail] +bidi-chromium-library › library/debug-controller.spec.ts › should reset routes before reuse [fail] +bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › context.cookies() should work @smoke [fail] +bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › context.addCookies() should work [fail] +bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › context.clearCookies() should work [fail] +bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should(not) block third party cookies [fail] +bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support viewport option [fail] +bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support deviceScaleFactor option [fail] +bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support userAgent option [fail] +bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support bypassCSP option [fail] +bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support javascriptEnabled option [fail] +bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support httpCredentials option [fail] +bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support offline option [fail] +bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support acceptDownloads option [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support hasTouch option [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should work in persistent context [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support colorScheme option [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support reducedMotion option [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support forcedColors option [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support timezoneId option [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support locale option [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support geolocation and permissions options [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support ignoreHTTPSErrors option [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support extraHTTPHeaders option [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should accept userDataDir [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should restore state from userDataDir [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should create userDataDir if it does not exist [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should have default URL when launching browser [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should throw if page argument is passed [pass] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should have passed URL when launching with ignoreDefaultArgs: true [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should handle timeout [pass] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should handle exception [timeout] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should fire close event for a persistent context [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › coverage should work [unknown] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should respect selectors [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should connect to a browser with the default page [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support har option [fail] +bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › user agent is up to date [fail] +bidi-chromium-library › library/download.spec.ts › download event › should report download when navigation turns into download @smoke [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should work with Cross-Origin-Opener-Policy [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should report downloads with acceptDownloads: false [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should report downloads with acceptDownloads: true [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should report proper download url when download is from download attribute [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should report downloads for download attribute [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should save to user-specified path without updating original path [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should save to two different paths with multiple saveAs calls [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should save to overwritten filepath [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should create subdirectories when saving to non-existent user-specified path [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should error when saving with downloads disabled [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should error when saving after deletion [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should report non-navigation downloads [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should report download path within page.on('download', …) handler for Files [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should report download path within page.on('download', …) handler for Blobs [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should report alt-click downloads [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should report new window downloads [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should delete file [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should expose stream [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should delete downloads on context destruction [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should delete downloads on browser gone [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should close the context without awaiting the failed download [unknown] +bidi-chromium-library › library/download.spec.ts › download event › should close the context without awaiting the download [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should throw if browser dies [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should download large binary.zip [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should be able to cancel pending downloads [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should not fail explicitly to cancel a download even if that is already finished [timeout] +bidi-chromium-library › library/download.spec.ts › download event › should report downloads with interception [fail] +bidi-chromium-library › library/download.spec.ts › download event › should emit download event from nested iframes [timeout] +bidi-chromium-library › library/download.spec.ts › should be able to download a PDF file [timeout] +bidi-chromium-library › library/download.spec.ts › should be able to download a inline PDF file via response interception [fail] +bidi-chromium-library › library/download.spec.ts › should be able to download a inline PDF file via navigation [timeout] +bidi-chromium-library › library/download.spec.ts › should save to user-specified path [timeout] +bidi-chromium-library › library/download.spec.ts › should download even if there is no "attachment" value [timeout] +bidi-chromium-library › library/download.spec.ts › should convert navigation to a resource with unsupported mime type into download [timeout] +bidi-chromium-library › library/download.spec.ts › should download links with data url [timeout] +bidi-chromium-library › library/download.spec.ts › should download successfully when routing [timeout] +bidi-chromium-library › library/downloads-path.spec.ts › downloads path › should keep downloadsPath folder [timeout] +bidi-chromium-library › library/downloads-path.spec.ts › downloads path › should delete downloads when context closes [timeout] +bidi-chromium-library › library/downloads-path.spec.ts › downloads path › should report downloads in downloadsPath folder [timeout] +bidi-chromium-library › library/downloads-path.spec.ts › downloads path › should report downloads in downloadsPath folder with a relative path [timeout] +bidi-chromium-library › library/downloads-path.spec.ts › downloads path › should accept downloads in persistent context [fail] +bidi-chromium-library › library/downloads-path.spec.ts › downloads path › should delete downloads when persistent context closes [fail] +bidi-chromium-library › library/emulation-focus.spec.ts › should think that it is focused by default [pass] +bidi-chromium-library › library/emulation-focus.spec.ts › should think that all pages are focused @smoke [pass] +bidi-chromium-library › library/emulation-focus.spec.ts › should focus popups by default [fail] +bidi-chromium-library › library/emulation-focus.spec.ts › should provide target for keyboard events [pass] +bidi-chromium-library › library/emulation-focus.spec.ts › should not affect mouse event target page [pass] +bidi-chromium-library › library/emulation-focus.spec.ts › should change document.activeElement [pass] +bidi-chromium-library › library/emulation-focus.spec.ts › should not affect screenshots [fail] +bidi-chromium-library › library/emulation-focus.spec.ts › should change focused iframe [pass] +bidi-chromium-library › library/emulation-focus.spec.ts › should focus with more than one page/context [pass] +bidi-chromium-library › library/emulation-focus.spec.ts › should not fire blur events when interacting with more than one page/context [pass] +bidi-chromium-library › library/emulation-focus.spec.ts › should trigger hover state concurrently [pass] +bidi-chromium-library › library/events/add-listeners.spec.ts › EventEmitter tests › should work [pass] +bidi-chromium-library › library/events/add-listeners.spec.ts › EventEmitter tests › set max listeners test [pass] +bidi-chromium-library › library/events/add-listeners.spec.ts › EventEmitter tests › Listener order [pass] +bidi-chromium-library › library/events/add-listeners.spec.ts › EventEmitter tests › listener type check [pass] +bidi-chromium-library › library/events/check-listener-leaks.spec.ts › defaultMaxListeners [pass] +bidi-chromium-library › library/events/check-listener-leaks.spec.ts › process-wide [pass] +bidi-chromium-library › library/events/check-listener-leaks.spec.ts › _maxListeners still has precedence over defaultMaxListeners [pass] +bidi-chromium-library › library/events/events-list.spec.ts › EventEmitter › should maintain event names correctly [pass] +bidi-chromium-library › library/events/listener-count.spec.ts › Listener count test [pass] +bidi-chromium-library › library/events/listeners-side-effects.spec.ts › listeners empty check [pass] +bidi-chromium-library › library/events/listeners.spec.ts › EventEmitter listeners with one listener [pass] +bidi-chromium-library › library/events/listeners.spec.ts › Array copy modification does not modify orig [pass] +bidi-chromium-library › library/events/listeners.spec.ts › Modify array copy after multiple adds [pass] +bidi-chromium-library › library/events/listeners.spec.ts › listeners and once [pass] +bidi-chromium-library › library/events/listeners.spec.ts › listeners with conflicting types [pass] +bidi-chromium-library › library/events/listeners.spec.ts › EventEmitter with no members [pass] +bidi-chromium-library › library/events/listeners.spec.ts › listeners on prototype [pass] +bidi-chromium-library › library/events/listeners.spec.ts › raw listeners [pass] +bidi-chromium-library › library/events/listeners.spec.ts › raw listeners order [pass] +bidi-chromium-library › library/events/max-listeners.spec.ts › emit maxListeners on e [pass] +bidi-chromium-library › library/events/method-names.spec.ts › EventEmitter prototype test [pass] +bidi-chromium-library › library/events/modify-in-emit.spec.ts › add and remove listeners [pass] +bidi-chromium-library › library/events/modify-in-emit.spec.ts › removing callbacks in emit [pass] +bidi-chromium-library › library/events/num-args.spec.ts › should work [pass] +bidi-chromium-library › library/events/once.spec.ts › should work [pass] +bidi-chromium-library › library/events/once.spec.ts › once() has different code paths based on the number of arguments being emitted [pass] +bidi-chromium-library › library/events/prepend.spec.ts › EventEmitter functionality [pass] +bidi-chromium-library › library/events/prepend.spec.ts › Verify that the listener must be a function [pass] +bidi-chromium-library › library/events/remove-all-listeners-wait.spec.ts › should not throw with ignoreErrors [pass] +bidi-chromium-library › library/events/remove-all-listeners-wait.spec.ts › should wait [pass] +bidi-chromium-library › library/events/remove-all-listeners-wait.spec.ts › should wait all [pass] +bidi-chromium-library › library/events/remove-all-listeners-wait.spec.ts › wait should throw [pass] +bidi-chromium-library › library/events/remove-all-listeners.spec.ts › listeners [pass] +bidi-chromium-library › library/events/remove-all-listeners.spec.ts › removeAllListeners removes all listeners [pass] +bidi-chromium-library › library/events/remove-all-listeners.spec.ts › removeAllListeners with no event type [pass] +bidi-chromium-library › library/events/remove-all-listeners.spec.ts › listener count after removeAllListeners [pass] +bidi-chromium-library › library/events/remove-all-listeners.spec.ts › removeAllListeners returns EventEmitter [pass] +bidi-chromium-library › library/events/remove-all-listeners.spec.ts › removeAllListeners on undefined _events [pass] +bidi-chromium-library › library/events/remove-listeners.spec.ts › First test [pass] +bidi-chromium-library › library/events/remove-listeners.spec.ts › Second test [pass] +bidi-chromium-library › library/events/remove-listeners.spec.ts › Third test [pass] +bidi-chromium-library › library/events/remove-listeners.spec.ts › Fourth test [pass] +bidi-chromium-library › library/events/remove-listeners.spec.ts › Fifth test [pass] +bidi-chromium-library › library/events/remove-listeners.spec.ts › Sixth test [pass] +bidi-chromium-library › library/events/remove-listeners.spec.ts › Seventh test [pass] +bidi-chromium-library › library/events/remove-listeners.spec.ts › Eighth test [pass] +bidi-chromium-library › library/events/remove-listeners.spec.ts › Ninth test [pass] +bidi-chromium-library › library/events/remove-listeners.spec.ts › Tenth test [pass] +bidi-chromium-library › library/events/set-max-listeners-side-effects.spec.ts › set max listeners test [pass] +bidi-chromium-library › library/events/special-event-names.spec.ts › should support special event names [pass] +bidi-chromium-library › library/events/subclass.spec.ts › myee instance [pass] +bidi-chromium-library › library/events/subclass.spec.ts › MyEE2 instance [pass] +bidi-chromium-library › library/events/symbols.spec.ts › should support symbols [pass] +bidi-chromium-library › library/favicon.spec.ts › should load svg favicon with prefer-color-scheme [unknown] +bidi-chromium-library › library/fetch-proxy.spec.ts › context request should pick up proxy credentials [pass] +bidi-chromium-library › library/fetch-proxy.spec.ts › global request should pick up proxy credentials [pass] +bidi-chromium-library › library/fetch-proxy.spec.ts › should work with context level proxy [pass] +bidi-chromium-library › library/fetch-proxy.spec.ts › should support proxy.bypass [pass] +bidi-chromium-library › library/fetch-proxy.spec.ts › should use socks proxy [pass] +bidi-chromium-library › library/firefox/launcher.spec.ts › should pass firefox user preferences [fail] +bidi-chromium-library › library/firefox/launcher.spec.ts › should pass firefox user preferences in persistent [fail] +bidi-chromium-library › library/geolocation.spec.ts › should work @smoke [timeout] +bidi-chromium-library › library/geolocation.spec.ts › should throw when invalid longitude [fail] +bidi-chromium-library › library/geolocation.spec.ts › should isolate contexts [timeout] +bidi-chromium-library › library/geolocation.spec.ts › should throw with missing latitude [pass] +bidi-chromium-library › library/geolocation.spec.ts › should not modify passed default options object [pass] +bidi-chromium-library › library/geolocation.spec.ts › should throw with missing longitude in default options [pass] +bidi-chromium-library › library/geolocation.spec.ts › should use context options [timeout] +bidi-chromium-library › library/geolocation.spec.ts › watchPosition should be notified [timeout] +bidi-chromium-library › library/geolocation.spec.ts › should use context options for popup [timeout] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should store cookie from Set-Cookie header [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should filter outgoing cookies by path [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should filter outgoing cookies by domain [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should do case-insensitive match of cookie domain [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should do case-insensitive match of request domain [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should send secure cookie over https [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should send secure cookie over http for localhost [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should send not expired cookies [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should remove expired cookies [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should remove cookie with negative max-age [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should remove cookie with expires far in the past [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should store cookie from Set-Cookie header even if it contains equal signs [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should override cookie from Set-Cookie header [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should override cookie from Set-Cookie header even if it expired [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should export cookies to storage state [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should preserve local storage on import/export of storage state [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should send cookies from storage state [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › storage state should round-trip through file [pass] +bidi-chromium-library › library/global-fetch-cookie.spec.ts › should work with empty storage state [pass] +bidi-chromium-library › library/global-fetch.spec.ts › fetch should work @smoke [pass] +bidi-chromium-library › library/global-fetch.spec.ts › delete should work @smoke [pass] +bidi-chromium-library › library/global-fetch.spec.ts › get should work @smoke [pass] +bidi-chromium-library › library/global-fetch.spec.ts › head should work @smoke [pass] +bidi-chromium-library › library/global-fetch.spec.ts › patch should work @smoke [pass] +bidi-chromium-library › library/global-fetch.spec.ts › post should work @smoke [pass] +bidi-chromium-library › library/global-fetch.spec.ts › put should work @smoke [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should dispose global request [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should support global userAgent option [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should support global timeout option [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should propagate extra http headers with redirects [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should support global httpCredentials option [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should return error with wrong credentials [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should work with correct credentials and matching origin [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should work with correct credentials and matching origin case insensitive [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should return error with correct credentials and mismatching scheme [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should return error with correct credentials and mismatching hostname [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should return error with correct credentials and mismatching port [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should support WWW-Authenticate: Basic [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should support HTTPCredentials.send [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should support global ignoreHTTPSErrors option [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should propagate ignoreHTTPSErrors on redirects [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should resolve url relative to global baseURL option [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should set playwright as user-agent [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should be able to construct with context options [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should return empty body [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should abort requests when context is disposed [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should abort redirected requests when context is disposed [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should remove content-length from redirected post requests [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should json stringify object body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify object body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should json stringify array body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify array body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should json stringify string body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify string body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should json stringify string (falsey) body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify string (falsey) body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should json stringify bool body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify bool body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should json stringify bool (false) body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify bool (false) body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should json stringify number body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify number body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should json stringify number (falsey) body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify number (falsey) body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should json stringify null body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify null body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should json stringify literal string undefined body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify literal string undefined body when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should accept already serialized data as Buffer when content-type is application/json [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should have nice toString [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should not fail on empty body with encoding [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should return body for failing requests [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should throw an error when maxRedirects is exceeded [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should not follow redirects when maxRedirects is set to 0 [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should throw an error when maxRedirects is less than 0 [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should keep headers capitalization [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should serialize post data on the client [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should throw after dispose [pass] +bidi-chromium-library › library/global-fetch.spec.ts › should retry ECONNRESET [pass] +bidi-chromium-library › library/har.spec.ts › should throw without path [pass] +bidi-chromium-library › library/har.spec.ts › should have version and creator [pass] +bidi-chromium-library › library/har.spec.ts › should have browser [fail] +bidi-chromium-library › library/har.spec.ts › should have pages [pass] +bidi-chromium-library › library/har.spec.ts › should have pages in persistent context [fail] +bidi-chromium-library › library/har.spec.ts › should include request [pass] +bidi-chromium-library › library/har.spec.ts › should include response [pass] +bidi-chromium-library › library/har.spec.ts › should include redirectURL [pass] +bidi-chromium-library › library/har.spec.ts › should include query params [pass] +bidi-chromium-library › library/har.spec.ts › should include postData [fail] +bidi-chromium-library › library/har.spec.ts › should include binary postData [fail] +bidi-chromium-library › library/har.spec.ts › should include form params [fail] +bidi-chromium-library › library/har.spec.ts › should include cookies [pass] +bidi-chromium-library › library/har.spec.ts › should include set-cookies [fail] +bidi-chromium-library › library/har.spec.ts › should skip invalid Expires [pass] +bidi-chromium-library › library/har.spec.ts › should include set-cookies with comma [fail] +bidi-chromium-library › library/har.spec.ts › should include secure set-cookies [fail] +bidi-chromium-library › library/har.spec.ts › should record request overrides [fail] +bidi-chromium-library › library/har.spec.ts › should include content @smoke [fail] +bidi-chromium-library › library/har.spec.ts › should use attach mode for zip extension [fail] +bidi-chromium-library › library/har.spec.ts › should omit content [pass] +bidi-chromium-library › library/har.spec.ts › should omit content legacy [pass] +bidi-chromium-library › library/har.spec.ts › should attach content [fail] +bidi-chromium-library › library/har.spec.ts › should filter by glob [pass] +bidi-chromium-library › library/har.spec.ts › should filter by regexp [pass] +bidi-chromium-library › library/har.spec.ts › should include sizes [fail] +bidi-chromium-library › library/har.spec.ts › should work with gzip compression [fail] +bidi-chromium-library › library/har.spec.ts › should calculate time [pass] +bidi-chromium-library › library/har.spec.ts › should return receive time [fail] +bidi-chromium-library › library/har.spec.ts › should report the correct _transferSize with PNG files [fail] +bidi-chromium-library › library/har.spec.ts › should have -1 _transferSize when its a failed request [pass] +bidi-chromium-library › library/har.spec.ts › should record failed request headers [pass] +bidi-chromium-library › library/har.spec.ts › should record failed request overrides [fail] +bidi-chromium-library › library/har.spec.ts › should report the correct request body size [pass] +bidi-chromium-library › library/har.spec.ts › should report the correct request body size when the bodySize is 0 [pass] +bidi-chromium-library › library/har.spec.ts › should report the correct response body size when the bodySize is 0 [pass] +bidi-chromium-library › library/har.spec.ts › should have popup requests [pass] +bidi-chromium-library › library/har.spec.ts › should not contain internal pages [pass] +bidi-chromium-library › library/har.spec.ts › should have connection details [fail] +bidi-chromium-library › library/har.spec.ts › should have security details [fail] +bidi-chromium-library › library/har.spec.ts › should have connection details for redirects [fail] +bidi-chromium-library › library/har.spec.ts › should have connection details for failed requests [fail] +bidi-chromium-library › library/har.spec.ts › should return server address directly from response [fail] +bidi-chromium-library › library/har.spec.ts › should return security details directly from response [fail] +bidi-chromium-library › library/har.spec.ts › should contain http2 for http2 requests [fail] +bidi-chromium-library › library/har.spec.ts › should filter favicon and favicon redirects [unknown] +bidi-chromium-library › library/har.spec.ts › should have different hars for concurrent contexts [pass] +bidi-chromium-library › library/har.spec.ts › should include API request [pass] +bidi-chromium-library › library/har.spec.ts › should not hang on resources served from cache [pass] +bidi-chromium-library › library/har.spec.ts › should not hang on slow chunked response [fail] +bidi-chromium-library › library/headful.spec.ts › should have default url when launching browser @smoke [fail] +bidi-chromium-library › library/headful.spec.ts › should close browser with beforeunload page [fail] +bidi-chromium-library › library/headful.spec.ts › should close browsercontext with pending beforeunload dialog [timeout] +bidi-chromium-library › library/headful.spec.ts › should not crash when creating second context [pass] +bidi-chromium-library › library/headful.spec.ts › should click when viewport size is larger than screen [pass] +bidi-chromium-library › library/headful.spec.ts › should dispatch click events to oversized viewports [pass] +bidi-chromium-library › library/headful.spec.ts › should click background tab [timeout] +bidi-chromium-library › library/headful.spec.ts › should close browser after context menu was triggered [pass] +bidi-chromium-library › library/headful.spec.ts › should(not) block third party cookies [pass] +bidi-chromium-library › library/headful.spec.ts › should not block third party SameSite=None cookies [fail] +bidi-chromium-library › library/headful.spec.ts › should not override viewport size when passed null [fail] +bidi-chromium-library › library/headful.spec.ts › Page.bringToFront should work [pass] +bidi-chromium-library › library/headful.spec.ts › should click in OOPIF [fail] +bidi-chromium-library › library/headful.spec.ts › should click bottom row w/ infobar in OOPIF [fail] +bidi-chromium-library › library/headful.spec.ts › headless and headful should use same default fonts [fail] +bidi-chromium-library › library/hit-target.spec.ts › should block all events when hit target is wrong [pass] +bidi-chromium-library › library/hit-target.spec.ts › should block click when mousedown fails [pass] +bidi-chromium-library › library/hit-target.spec.ts › should click when element detaches in mousedown [pass] +bidi-chromium-library › library/hit-target.spec.ts › should block all events when hit target is wrong and element detaches [pass] +bidi-chromium-library › library/hit-target.spec.ts › should not block programmatic events [pass] +bidi-chromium-library › library/hit-target.spec.ts › should click the button again after document.write [pass] +bidi-chromium-library › library/hit-target.spec.ts › should work with mui select [pass] +bidi-chromium-library › library/hit-target.spec.ts › should work with drag and drop that moves the element under cursor [pass] +bidi-chromium-library › library/hit-target.spec.ts › should work with block inside inline [pass] +bidi-chromium-library › library/hit-target.spec.ts › should work with block-block-block inside inline-inline [pass] +bidi-chromium-library › library/hit-target.spec.ts › should work with block inside inline in shadow dom [pass] +bidi-chromium-library › library/hit-target.spec.ts › should not click iframe overlaying the target [pass] +bidi-chromium-library › library/hit-target.spec.ts › should not click an element overlaying iframe with the target [pass] +bidi-chromium-library › library/hit-target.spec.ts › should click into frame inside closed shadow root [fail] +bidi-chromium-library › library/hit-target.spec.ts › should click an element inside closed shadow root [pass] +bidi-chromium-library › library/hit-target.spec.ts › should detect overlay from another shadow root [pass] +bidi-chromium-library › library/hit-target.spec.ts › should detect overlaid element in a transformed iframe [fail] +bidi-chromium-library › library/hit-target.spec.ts › should click in iframe with padding [pass] +bidi-chromium-library › library/hit-target.spec.ts › should click in iframe with padding 2 [pass] +bidi-chromium-library › library/hit-target.spec.ts › should click in custom element [pass] +bidi-chromium-library › library/ignorehttpserrors.spec.ts › should work @smoke [fail] +bidi-chromium-library › library/ignorehttpserrors.spec.ts › should isolate contexts [fail] +bidi-chromium-library › library/ignorehttpserrors.spec.ts › should work with mixed content [fail] +bidi-chromium-library › library/ignorehttpserrors.spec.ts › should work with WebSocket [fail] +bidi-chromium-library › library/ignorehttpserrors.spec.ts › should fail with WebSocket if not ignored [pass] +bidi-chromium-library › library/ignorehttpserrors.spec.ts › serviceWorker should intercept document request [fail] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should click [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should ignore programmatic events [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should click after same-document navigation [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should make a positioned click on a canvas [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should work with TrustedTypes [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should not target selector preview by text regexp [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill japanese text [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill textarea [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill textarea with new lines at the end [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill [contentEditable] [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should press [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should update selected element after pressing Tab [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should record ArrowDown [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should emit single keyup on ArrowDown [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should check [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should check a radio button [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should check with keyboard [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should uncheck [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should select [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should select with size attribute [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should await popup [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should assert navigation [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should ignore AltGraph [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should middle click [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should record slider [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should click button with nested div [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should record omnibox navigations after performAction [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should record omnibox navigations after recordAction [timeout] +bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should not throw csp directive violation errors [pass] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain open page [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain second page [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain close page [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should not lead to an error if html gets clicked [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should upload a single file [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should upload multiple files [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should clear files [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should download files [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should handle dialogs [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should handle history.postData [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should record open in a new tab with url [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should not clash pages [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › click should emit events in order [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should update hover model on action [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should reset hover model on action when element detaches [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should update active model on action [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should check input with chaining id [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should record navigations after identical pushState [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should --save-trace [fail] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should save assets via SIGINT [fail] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should fill tricky characters [timeout] +bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › should --test-id-attribute [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should click locator.first [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should click locator.nth [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with special characters in name attribute [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with title attribute [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with name attribute [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with id attribute [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with testId [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate role locators undef frame locators [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByTestId [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByPlaceholder [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByAltText [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByLabel [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByLabel without regex [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should consume pointer events [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should consume contextmenu events, despite a custom context menu [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value on disabled input [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value on disabled select [timeout] +bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert visibility [timeout] +bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print the correct imports and context options [fail] +bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options for custom settings [fail] +bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options when using a device [unknown] +bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options when using a device and additional options [unknown] +bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print load/save storageState [fail] +bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should work with --save-har [fail] +bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should not print context options method override in nunit if no options were passed [fail] +bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print context options method override in nunit if options were passed [fail] +bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should not print context options method override in mstest if no options were passed [fail] +bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print context options method override in mstest if options were passed [fail] +bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print a valid basic program in mstest [fail] +bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print a valid basic program in nunit [fail] +bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print the correct imports and context options [fail] +bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print the correct context options for custom settings [fail] +bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print the correct context options when using a device [unknown] +bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print the correct context options when using a device and additional options [unknown] +bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print load/save storage_state [fail] +bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should work with --save-har [fail] +bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print the correct imports in junit [fail] +bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print a valid basic program in junit [fail] +bidi-chromium-library › library/inspector/cli-codegen-javascript.spec.ts › should print the correct imports and context options [fail] +bidi-chromium-library › library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options for custom settings [fail] +bidi-chromium-library › library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options when using a device [unknown] +bidi-chromium-library › library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options when using a device and additional options [unknown] +bidi-chromium-library › library/inspector/cli-codegen-javascript.spec.ts › should save the codegen output to a file if specified [fail] +bidi-chromium-library › library/inspector/cli-codegen-javascript.spec.ts › should print load/save storageState [fail] +bidi-chromium-library › library/inspector/cli-codegen-pytest.spec.ts › should print the correct imports and context options [fail] +bidi-chromium-library › library/inspector/cli-codegen-pytest.spec.ts › should print the correct context options when using a device and lang [unknown] +bidi-chromium-library › library/inspector/cli-codegen-pytest.spec.ts › should save the codegen output to a file if specified [fail] +bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should print the correct imports and context options [fail] +bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options for custom settings [fail] +bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options when using a device [unknown] +bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options when using a device and additional options [unknown] +bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should save the codegen output to a file if specified [fail] +bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should print load/save storage_state [fail] +bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should work with --save-har [fail] +bidi-chromium-library › library/inspector/cli-codegen-python.spec.ts › should print the correct imports and context options [fail] +bidi-chromium-library › library/inspector/cli-codegen-python.spec.ts › should print the correct context options for custom settings [fail] +bidi-chromium-library › library/inspector/cli-codegen-python.spec.ts › should print the correct context options when using a device [unknown] +bidi-chromium-library › library/inspector/cli-codegen-python.spec.ts › should print the correct context options when using a device and additional options [unknown] +bidi-chromium-library › library/inspector/cli-codegen-python.spec.ts › should save the codegen output to a file if specified [fail] +bidi-chromium-library › library/inspector/cli-codegen-python.spec.ts › should print load/save storage_state [fail] +bidi-chromium-library › library/inspector/cli-codegen-test.spec.ts › should print the correct imports and context options [fail] +bidi-chromium-library › library/inspector/cli-codegen-test.spec.ts › should print the correct context options for custom settings [fail] +bidi-chromium-library › library/inspector/cli-codegen-test.spec.ts › should print the correct context options when using a device [unknown] +bidi-chromium-library › library/inspector/cli-codegen-test.spec.ts › should print the correct context options when using a device and additional options [unknown] +bidi-chromium-library › library/inspector/cli-codegen-test.spec.ts › should print load storageState [fail] +bidi-chromium-library › library/inspector/cli-codegen-test.spec.ts › should work with --save-har [fail] +bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.$, playwright.$$ [pass] +bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.selector [pass] +bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.locator.value [pass] +bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.locator.values [pass] +bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.locator({ has }) [pass] +bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.locator({ hasNot }) [pass] +bidi-chromium-library › library/inspector/console-api.spec.ts › should support locator.and() [pass] +bidi-chromium-library › library/inspector/console-api.spec.ts › should support locator.or() [pass] +bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.getBy* [pass] +bidi-chromium-library › library/inspector/console-api.spec.ts › expected properties on playwright object [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › should resume when closing inspector [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › should not reset timeouts [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should pause and resume the script [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should pause and resume the script with keyboard shortcut [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should resume from console [fail] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should pause after a navigation [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should show source [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should pause on next pause [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should step [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should step with keyboard shortcut [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should highlight pointer, only in main frame [timeout] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should skip input when resuming [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should populate log [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should hide internal calls [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should show expect.toHaveText [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should highlight waitForEvent [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should populate log with waitForEvent [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should populate log with error [fail] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should populate log with error in waitForEvent [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should pause on page close [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should pause on context close [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should highlight on explore [timeout] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should highlight on explore (csharp) [timeout] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should not prevent key events [pass] +bidi-chromium-library › library/inspector/pause.spec.ts › pause › should highlight locators with custom testId [timeout] +bidi-chromium-library › library/launcher.spec.ts › should have an errors object [pass] +bidi-chromium-library › library/launcher.spec.ts › should have a devices object [pass] +bidi-chromium-library › library/launcher.spec.ts › should kill browser process on timeout after close [pass] +bidi-chromium-library › library/launcher.spec.ts › should throw a friendly error if its headed and there is no xserver on linux running [unknown] +bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer locators [pass] +bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer getByRole [pass] +bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer ignore-case locators [pass] +bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer ordered locators [pass] +bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer locators with regex [pass] +bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer hasText [pass] +bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer hasNotText [pass] +bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer has [pass] +bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer hasNot [pass] +bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer has + hasText [pass] +bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer frameLocator [pass] +bidi-chromium-library › library/locator-generator.spec.ts › generate multiple locators [pass] +bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer internal:has-text locators [pass] +bidi-chromium-library › library/locator-generator.spec.ts › asLocator internal:and [pass] +bidi-chromium-library › library/locator-generator.spec.ts › asLocator internal:or [pass] +bidi-chromium-library › library/locator-generator.spec.ts › asLocator internal:chain [pass] +bidi-chromium-library › library/locator-generator.spec.ts › asLocator xpath [pass] +bidi-chromium-library › library/locator-generator.spec.ts › parseLocator quotes [pass] +bidi-chromium-library › library/locator-generator.spec.ts › parseLocator css [pass] +bidi-chromium-library › library/locator-generator.spec.ts › parse locators strictly [pass] +bidi-chromium-library › library/logger.spec.ts › should log @smoke [pass] +bidi-chromium-library › library/logger.spec.ts › should log context-level [pass] +bidi-chromium-library › library/modernizr.spec.ts › Safari Desktop [unknown] +bidi-chromium-library › library/modernizr.spec.ts › Mobile Safari [unknown] +bidi-chromium-library › library/page-clock.frozen.spec.ts › clock should be frozen [unknown] +bidi-chromium-library › library/page-clock.frozen.spec.ts › clock should be realtime [unknown] +bidi-chromium-library › library/page-clock.spec.ts › runFor › triggers immediately without specified delay [fail] +bidi-chromium-library › library/page-clock.spec.ts › runFor › does not trigger without sufficient delay [pass] +bidi-chromium-library › library/page-clock.spec.ts › runFor › triggers after sufficient delay [fail] +bidi-chromium-library › library/page-clock.spec.ts › runFor › triggers simultaneous timers [fail] +bidi-chromium-library › library/page-clock.spec.ts › runFor › triggers multiple simultaneous timers [fail] +bidi-chromium-library › library/page-clock.spec.ts › runFor › waits after setTimeout was called [fail] +bidi-chromium-library › library/page-clock.spec.ts › runFor › triggers event when some throw [fail] +bidi-chromium-library › library/page-clock.spec.ts › runFor › creates updated Date while ticking [fail] +bidi-chromium-library › library/page-clock.spec.ts › runFor › passes 8 seconds [fail] +bidi-chromium-library › library/page-clock.spec.ts › runFor › passes 1 minute [fail] +bidi-chromium-library › library/page-clock.spec.ts › runFor › passes 2 hours, 34 minutes and 10 seconds [fail] +bidi-chromium-library › library/page-clock.spec.ts › runFor › throws for invalid format [pass] +bidi-chromium-library › library/page-clock.spec.ts › runFor › returns the current now value [pass] +bidi-chromium-library › library/page-clock.spec.ts › fastForward › ignores timers which wouldn't be run [pass] +bidi-chromium-library › library/page-clock.spec.ts › fastForward › pushes back execution time for skipped timers [fail] +bidi-chromium-library › library/page-clock.spec.ts › fastForward › supports string time arguments [fail] +bidi-chromium-library › library/page-clock.spec.ts › stubTimers › sets initial timestamp [pass] +bidi-chromium-library › library/page-clock.spec.ts › stubTimers › should throw for invalid date [pass] +bidi-chromium-library › library/page-clock.spec.ts › stubTimers › replaces global setTimeout [fail] +bidi-chromium-library › library/page-clock.spec.ts › stubTimers › global fake setTimeout should return id [pass] +bidi-chromium-library › library/page-clock.spec.ts › stubTimers › replaces global clearTimeout [pass] +bidi-chromium-library › library/page-clock.spec.ts › stubTimers › replaces global setInterval [fail] +bidi-chromium-library › library/page-clock.spec.ts › stubTimers › replaces global clearInterval [pass] +bidi-chromium-library › library/page-clock.spec.ts › stubTimers › replaces global performance.now [pass] +bidi-chromium-library › library/page-clock.spec.ts › stubTimers › fakes Date constructor [pass] +bidi-chromium-library › library/page-clock.spec.ts › stubTimers › replaces global performance.timeOrigin [pass] +bidi-chromium-library › library/page-clock.spec.ts › popup › should tick after popup [fail] +bidi-chromium-library › library/page-clock.spec.ts › popup › should tick before popup [fail] +bidi-chromium-library › library/page-clock.spec.ts › popup › should run time before popup [pass] +bidi-chromium-library › library/page-clock.spec.ts › popup › should not run time before popup on pause [fail] +bidi-chromium-library › library/page-clock.spec.ts › setFixedTime › does not fake methods [pass] +bidi-chromium-library › library/page-clock.spec.ts › setFixedTime › allows setting time multiple times [pass] +bidi-chromium-library › library/page-clock.spec.ts › setFixedTime › fixed time is not affected by clock manipulation [pass] +bidi-chromium-library › library/page-clock.spec.ts › setFixedTime › allows installing fake timers after settings time [fail] +bidi-chromium-library › library/page-clock.spec.ts › while running › should progress time [pass] +bidi-chromium-library › library/page-clock.spec.ts › while running › should runFor [pass] +bidi-chromium-library › library/page-clock.spec.ts › while running › should fastForward [pass] +bidi-chromium-library › library/page-clock.spec.ts › while running › should fastForwardTo [pass] +bidi-chromium-library › library/page-clock.spec.ts › while running › should pause [pass] +bidi-chromium-library › library/page-clock.spec.ts › while running › should pause and fastForward [pass] +bidi-chromium-library › library/page-clock.spec.ts › while running › should set system time on pause [pass] +bidi-chromium-library › library/page-clock.spec.ts › while on pause › fastForward should not run nested immediate [fail] +bidi-chromium-library › library/page-clock.spec.ts › while on pause › runFor should not run nested immediate [fail] +bidi-chromium-library › library/page-clock.spec.ts › while on pause › runFor should not run nested immediate from microtask [fail] +bidi-chromium-library › library/page-clock.spec.ts › Date.now › check Date.now is an integer [pass] +bidi-chromium-library › library/page-clock.spec.ts › Date.now › check Date.now is an integer (2) [pass] +bidi-chromium-library › library/page-event-crash.spec.ts › should emit crash event when page crashes [timeout] +bidi-chromium-library › library/page-event-crash.spec.ts › should throw on any action after page crashes [timeout] +bidi-chromium-library › library/page-event-crash.spec.ts › should cancel waitForEvent when page crashes [timeout] +bidi-chromium-library › library/page-event-crash.spec.ts › should cancel navigation when page crashes [timeout] +bidi-chromium-library › library/page-event-crash.spec.ts › should be able to close context when page crashes [timeout] +bidi-chromium-library › library/pdf.spec.ts › should be able to save file [unknown] +bidi-chromium-library › library/pdf.spec.ts › should be able to generate outline [unknown] +bidi-chromium-library › library/permissions.spec.ts › permissions › should be prompt by default [pass] +bidi-chromium-library › library/permissions.spec.ts › permissions › should deny permission when not listed [fail] +bidi-chromium-library › library/permissions.spec.ts › permissions › should fail when bad permission is given [fail] +bidi-chromium-library › library/permissions.spec.ts › permissions › should grant geolocation permission when origin is listed [fail] +bidi-chromium-library › library/permissions.spec.ts › permissions › should prompt for geolocation permission when origin is not listed [pass] +bidi-chromium-library › library/permissions.spec.ts › permissions › should grant notifications permission when listed [fail] +bidi-chromium-library › library/permissions.spec.ts › permissions › should accumulate when adding [fail] +bidi-chromium-library › library/permissions.spec.ts › permissions › should clear permissions [fail] +bidi-chromium-library › library/permissions.spec.ts › permissions › should grant permission when listed for all domains [fail] +bidi-chromium-library › library/permissions.spec.ts › permissions › should grant permission when creating context [fail] +bidi-chromium-library › library/permissions.spec.ts › permissions › should reset permissions [fail] +bidi-chromium-library › library/permissions.spec.ts › permissions › should trigger permission onchange [fail] +bidi-chromium-library › library/permissions.spec.ts › permissions › should isolate permissions between browser contexts [fail] +bidi-chromium-library › library/permissions.spec.ts › should support clipboard read [fail] +bidi-chromium-library › library/permissions.spec.ts › storage access [unknown] +bidi-chromium-library › library/popup.spec.ts › should inherit user agent from browser context @smoke [fail] +bidi-chromium-library › library/popup.spec.ts › should respect routes from browser context [fail] +bidi-chromium-library › library/popup.spec.ts › should inherit extra headers from browser context [fail] +bidi-chromium-library › library/popup.spec.ts › should inherit offline from browser context [fail] +bidi-chromium-library › library/popup.spec.ts › should inherit http credentials from browser context [fail] +bidi-chromium-library › library/popup.spec.ts › should inherit touch support from browser context [fail] +bidi-chromium-library › library/popup.spec.ts › should inherit viewport size from browser context [fail] +bidi-chromium-library › library/popup.spec.ts › should use viewport size from window features [timeout] +bidi-chromium-library › library/popup.spec.ts › should respect routes from browser context when using window.open [fail] +bidi-chromium-library › library/popup.spec.ts › BrowserContext.addInitScript should apply to an in-process popup [fail] +bidi-chromium-library › library/popup.spec.ts › BrowserContext.addInitScript should apply to a cross-process popup [fail] +bidi-chromium-library › library/popup.spec.ts › should expose function from browser context [fail] +bidi-chromium-library › library/popup.spec.ts › should not dispatch binding on a closed page [fail] +bidi-chromium-library › library/popup.spec.ts › should not throttle rAF in the opener page [pass] +bidi-chromium-library › library/popup.spec.ts › should not throw when click closes popup [pass] +bidi-chromium-library › library/proxy-pattern.spec.ts › socks proxy patter matcher [pass] +bidi-chromium-library › library/proxy.spec.ts › should throw for bad server value [pass] +bidi-chromium-library › library/proxy.spec.ts › should use proxy @smoke [pass] +bidi-chromium-library › library/proxy.spec.ts › should use proxy for second page [pass] +bidi-chromium-library › library/proxy.spec.ts › should work with IP:PORT notion [pass] +bidi-chromium-library › library/proxy.spec.ts › should proxy local network requests › by default › localhost [pass] +bidi-chromium-library › library/proxy.spec.ts › should proxy local network requests › by default › loopback address [pass] +bidi-chromium-library › library/proxy.spec.ts › should proxy local network requests › by default › link-local [pass] +bidi-chromium-library › library/proxy.spec.ts › should proxy local network requests › with other bypasses › localhost [pass] +bidi-chromium-library › library/proxy.spec.ts › should proxy local network requests › with other bypasses › loopback address [pass] +bidi-chromium-library › library/proxy.spec.ts › should proxy local network requests › with other bypasses › link-local [pass] +bidi-chromium-library › library/proxy.spec.ts › should authenticate [fail] +bidi-chromium-library › library/proxy.spec.ts › should work with authenticate followed by redirect [fail] +bidi-chromium-library › library/proxy.spec.ts › should exclude patterns [pass] +bidi-chromium-library › library/proxy.spec.ts › should use socks proxy [pass] +bidi-chromium-library › library/proxy.spec.ts › should use socks proxy in second page [pass] +bidi-chromium-library › library/proxy.spec.ts › does launch without a port [pass] +bidi-chromium-library › library/proxy.spec.ts › should use proxy with emulated user agent [unknown] +bidi-chromium-library › library/proxy.spec.ts › should use SOCKS proxy for websocket requests [pass] +bidi-chromium-library › library/resource-timing.spec.ts › should work @smoke [pass] +bidi-chromium-library › library/resource-timing.spec.ts › should work for subresource [fail] +bidi-chromium-library › library/resource-timing.spec.ts › should work for SSL [fail] +bidi-chromium-library › library/resource-timing.spec.ts › should work for redirect [fail] +bidi-chromium-library › library/resource-timing.spec.ts › should work when serving from memory cache [fail] +bidi-chromium-library › library/role-utils.spec.ts › wpt accname #0 [pass] +bidi-chromium-library › library/role-utils.spec.ts › wpt accname #1 [pass] +bidi-chromium-library › library/role-utils.spec.ts › wpt accname #2 [pass] +bidi-chromium-library › library/role-utils.spec.ts › wpt accname #3 [pass] +bidi-chromium-library › library/role-utils.spec.ts › wpt accname non-manual [pass] +bidi-chromium-library › library/role-utils.spec.ts › axe-core implicit-role [pass] +bidi-chromium-library › library/role-utils.spec.ts › axe-core accessible-text [pass] +bidi-chromium-library › library/role-utils.spec.ts › accessible name with slots [pass] +bidi-chromium-library › library/role-utils.spec.ts › accessible name nested treeitem [pass] +bidi-chromium-library › library/role-utils.spec.ts › svg title [pass] +bidi-chromium-library › library/role-utils.spec.ts › native controls [pass] +bidi-chromium-library › library/role-utils.spec.ts › native controls labelled-by [pass] +bidi-chromium-library › library/role-utils.spec.ts › display:contents should be visible when contents are visible [pass] +bidi-chromium-library › library/role-utils.spec.ts › label/labelled-by aria-hidden with descendants [pass] +bidi-chromium-library › library/role-utils.spec.ts › own aria-label concatenated with aria-labelledby [pass] +bidi-chromium-library › library/role-utils.spec.ts › control embedded in a label [pass] +bidi-chromium-library › library/role-utils.spec.ts › control embedded in a target element [pass] +bidi-chromium-library › library/role-utils.spec.ts › svg role=presentation [pass] +bidi-chromium-library › library/role-utils.spec.ts › should work with form and tricky input names [pass] +bidi-chromium-library › library/role-utils.spec.ts › should ignore stylesheet from hidden aria-labelledby subtree [pass] +bidi-chromium-library › library/role-utils.spec.ts › should not include hidden pseudo into accessible name [pass] +bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should run in parallel in multiple pages [fail] +bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with a mobile viewport [fail] +bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with a mobile viewport and clip [fail] +bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with a mobile viewport and fullPage [fail] +bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with device scale factor [fail] +bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with device scale factor and clip [fail] +bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with device scale factor and scale:css [fail] +bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with device scale factor, clip and scale:css [fail] +bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should throw if screenshot size is too large with device scale factor [fail] +bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with large size [fail] +bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should handle vh units [fail] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › element screenshot should work with a mobile viewport [fail] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › element screenshot should work with device scale factor [fail] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should take screenshots when default viewport is null [fail] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should take fullPage screenshots when default viewport is null [fail] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should restore default viewport after fullPage screenshot [fail] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should restore viewport after page screenshot and exception [pass] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should restore viewport after page screenshot and timeout [fail] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should take element screenshot when default viewport is null and restore back [fail] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should restore viewport after element screenshot and exception [pass] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › element screenshots should handle vh units [fail] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should work if the main resource hangs [fail] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should capture full element when larger than viewport with device scale factor [fail] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should capture full element when larger than viewport with device scale factor and scale:css [fail] +bidi-chromium-library › library/screenshot.spec.ts › element screenshot › page screenshot should capture css transform with device pixels [fail] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer button over inner span [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer role=button over inner span [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not prefer zero-sized button over inner span [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate text and normalize whitespace [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not escape spaces inside named attr selectors [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate text for [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should trim text [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should try to improve role name [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should try to improve text [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should try to improve text by shortening [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should try to improve label text by shortening [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not improve guid text [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not escape text with >> [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should escape text with quote [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should escape text with slash [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not use text for select [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use ordinal for identical nodes [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer data-testid [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use data-testid in strict errors [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should handle first non-unique data-testid [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should handle second non-unique data-testid [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use readable id [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not use generated id [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp with a quote [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should chain text after parent [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use parent text [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should separate selectors by >> [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should trim long text [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use nested ordinals [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should properly join child selectors under nested ordinals [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not use input[value] [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › role [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › placeholder [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › name [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › type [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should find text in shadow dom [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should match in shadow dom [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should match in deep shadow dom [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should work in dynamic iframes without navigation [fail] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use the name attributes for elements that can have it [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should work with tricky attributes [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should work without CSS.escape [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should ignore empty aria-label for candidate consideration [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should accept valid aria-label for candidate consideration [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should ignore empty role for candidate consideration [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not accept invalid role for candidate consideration [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should ignore empty data-test-id for candidate consideration [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should accept valid data-test-id for candidate consideration [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate label selector [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer role other input[type] [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate title selector [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact text when necessary [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact title when necessary [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact placeholder when necessary [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact role when necessary [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact label when necessary [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate relative selector [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noText in role [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noText in text [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noId [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noId noText [pass] +bidi-chromium-library › library/selectors-register.spec.ts › should work [pass] +bidi-chromium-library › library/selectors-register.spec.ts › should work when registered on global [pass] +bidi-chromium-library › library/selectors-register.spec.ts › should work with path [pass] +bidi-chromium-library › library/selectors-register.spec.ts › should work in main and isolated world [pass] +bidi-chromium-library › library/selectors-register.spec.ts › should handle errors [pass] +bidi-chromium-library › library/selectors-register.spec.ts › should not rely on engines working from the root [pass] +bidi-chromium-library › library/selectors-register.spec.ts › should throw a nice error if the selector returns a bad value [pass] +bidi-chromium-library › library/shared-worker.spec.ts › should survive shared worker restart [timeout] +bidi-chromium-library › library/signals.spec.ts › should close the browser when the node process closes [timeout] +bidi-chromium-library › library/signals.spec.ts › should remove temp dir on process.exit [timeout] +bidi-chromium-library › library/signals.spec.ts › signals › should report browser close signal 2 [timeout] +bidi-chromium-library › library/signals.spec.ts › signals › should close the browser on SIGINT [timeout] +bidi-chromium-library › library/signals.spec.ts › signals › should close the browser on SIGTERM [timeout] +bidi-chromium-library › library/signals.spec.ts › signals › should close the browser on SIGHUP [timeout] +bidi-chromium-library › library/signals.spec.ts › signals › should kill the browser on double SIGINT and remove temp dir [timeout] +bidi-chromium-library › library/signals.spec.ts › signals › should kill the browser on SIGINT + SIGTERM [timeout] +bidi-chromium-library › library/signals.spec.ts › signals › should kill the browser on SIGTERM + SIGINT [timeout] +bidi-chromium-library › library/signals.spec.ts › signals › should not prevent default SIGTERM handling after browser close [timeout] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo check [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo click [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo dblclick [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo dispatchEvent [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo fill [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo focus [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo goto [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo hover [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo press [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo reload [timeout] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo selectOption [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo setInputFiles [timeout] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo type [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo uncheck [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo check [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo click [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo dblclick [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo dispatchEvent [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo fill [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo focus [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo goto [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo hover [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo press [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo selectOption [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo setInputFiles [timeout] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo type [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo uncheck [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo check [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo click [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dblclick [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dispatchEvent [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo fill [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo focus [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo hover [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo press [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo selectOption [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo setInputFiles [fail] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo type [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo uncheck [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should collect snapshot [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should preserve BASE and other content on reset [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture resources [fail] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should collect multiple [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect inline CSSOM change [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect CSSOM change through CSSGroupingRule [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect node removal [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect attr removal [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should have a custom doctype [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should replace meta charset attr that specifies charset [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should replace meta content attr that specifies charset [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect subresource CSSOM change [fail] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture frame [fail] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture iframe [fail] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture iframe with srcdoc [fail] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture snapshot target [timeout] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should collect on attribute change [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › empty adopted style sheets should not prevent node refs [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should not navigate on anchor clicks [pass] +bidi-chromium-library › library/tap.spec.ts › should send all of the correct events @smoke [fail] +bidi-chromium-library › library/tap.spec.ts › trial run should not tap [fail] +bidi-chromium-library › library/tap.spec.ts › should not send mouse events touchstart is canceled [fail] +bidi-chromium-library › library/tap.spec.ts › should not send mouse events when touchend is canceled [fail] +bidi-chromium-library › library/tap.spec.ts › should not wait for a navigation caused by a tap [fail] +bidi-chromium-library › library/tap.spec.ts › should work with modifiers [fail] +bidi-chromium-library › library/tap.spec.ts › should send well formed touch points [fail] +bidi-chromium-library › library/tap.spec.ts › should wait until an element is visible to tap it [fail] +bidi-chromium-library › library/tap.spec.ts › locators › should send all of the correct events [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should show empty trace viewer [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should open two trace viewers [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should open trace viewer on specific host [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should open simple trace viewer [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should complain about newer version of trace in old viewer [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should contain action info [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should render network bars [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should render console [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should open console errors on click [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should show params and return value [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should show null as a param [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should have correct snapshot size [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should have correct stack trace [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should have network requests [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should filter network requests by resource type [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should show font preview [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should filter network requests by url [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should have network request overrides [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should have network request overrides 2 [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should show snapshot URL [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should popup snapshot [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should capture iframe with sandbox attribute [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should capture data-url svg iframe [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should contain adopted style sheets [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should work with adopted style sheets and replace/replaceSync [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should work with adopted style sheets and all: unset [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should work with nesting CSS selectors [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should restore scroll positions [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should restore control values [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should work with meta CSP [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should handle multiple headers [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should handle src=blob [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should handle file URIs [unknown] +bidi-chromium-library › library/trace-viewer.spec.ts › should preserve currentSrc [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should register custom elements [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should highlight target elements [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should highlight target element in shadow dom [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should highlight expect failure [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should show action source [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should follow redirects [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should include metainfo [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should open two trace files [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should open two trace files of the same test [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should include requestUrl in route.fulfill [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should not crash with broken locator [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should include requestUrl in route.continue [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should include requestUrl in route.abort [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should serve overridden request [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should display waitForLoadState even if did not wait for it [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should display language-specific locators [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should pick locator [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should update highlight when typing [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should open trace-1.31 [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should open trace-1.37 [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should prefer later resource request with the same method [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should ignore 304 responses [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should pick locator in iframe [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should highlight locator in iframe while typing [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should preserve noscript when javascript is disabled [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should remove noscript by default [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should remove noscript when javaScriptEnabled is set to true [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should open snapshot in new browser context [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should show similar actions from library-only trace [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should show correct request start time [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should allow hiding route actions [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should show baseURL in metadata pane [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should serve css without content-type [timeout] +bidi-chromium-library › library/trace-viewer.spec.ts › should allow showing screenshots instead of snapshots [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should handle case where neither snapshots nor screenshots exist [pass] +bidi-chromium-library › library/tracing.spec.ts › should collect trace with resources, but no js [timeout] +bidi-chromium-library › library/tracing.spec.ts › should use the correct apiName for event driven callbacks [fail] +bidi-chromium-library › library/tracing.spec.ts › should not collect snapshots by default [pass] +bidi-chromium-library › library/tracing.spec.ts › should not include buffers in the trace [fail] +bidi-chromium-library › library/tracing.spec.ts › should exclude internal pages [pass] +bidi-chromium-library › library/tracing.spec.ts › should include context API requests [pass] +bidi-chromium-library › library/tracing.spec.ts › should collect two traces [pass] +bidi-chromium-library › library/tracing.spec.ts › should respect tracesDir and name [fail] +bidi-chromium-library › library/tracing.spec.ts › should not include trace resources from the previous chunks [fail] +bidi-chromium-library › library/tracing.spec.ts › should overwrite existing file [fail] +bidi-chromium-library › library/tracing.spec.ts › should collect sources [pass] +bidi-chromium-library › library/tracing.spec.ts › should record network failures [fail] +bidi-chromium-library › library/tracing.spec.ts › should not crash when browser closes mid-trace [pass] +bidi-chromium-library › library/tracing.spec.ts › should survive browser.close with auto-created traces dir [pass] +bidi-chromium-library › library/tracing.spec.ts › should not stall on dialogs [pass] +bidi-chromium-library › library/tracing.spec.ts › should produce screencast frames fit [fail] +bidi-chromium-library › library/tracing.spec.ts › should produce screencast frames crop [fail] +bidi-chromium-library › library/tracing.spec.ts › should produce screencast frames scale [fail] +bidi-chromium-library › library/tracing.spec.ts › should include interrupted actions [pass] +bidi-chromium-library › library/tracing.spec.ts › should throw when starting with different options [pass] +bidi-chromium-library › library/tracing.spec.ts › should throw when stopping without start [pass] +bidi-chromium-library › library/tracing.spec.ts › should not throw when stopping without start but not exporting [pass] +bidi-chromium-library › library/tracing.spec.ts › should work with multiple chunks [pass] +bidi-chromium-library › library/tracing.spec.ts › should export trace concurrently to second navigation [fail] +bidi-chromium-library › library/tracing.spec.ts › should not hang for clicks that open dialogs [pass] +bidi-chromium-library › library/tracing.spec.ts › should ignore iframes in head [pass] +bidi-chromium-library › library/tracing.spec.ts › should hide internal stack frames [pass] +bidi-chromium-library › library/tracing.spec.ts › should hide internal stack frames in expect [pass] +bidi-chromium-library › library/tracing.spec.ts › should record global request trace [pass] +bidi-chromium-library › library/tracing.spec.ts › should store global request traces separately [pass] +bidi-chromium-library › library/tracing.spec.ts › should store postData for global request [pass] +bidi-chromium-library › library/tracing.spec.ts › should not flush console events [pass] +bidi-chromium-library › library/tracing.spec.ts › should flush console events on tracing stop [pass] +bidi-chromium-library › library/tracing.spec.ts › should not emit after w/o before [pass] +bidi-chromium-library › library/unroute-behavior.spec.ts › context.unroute should not wait for pending handlers to complete [timeout] +bidi-chromium-library › library/unroute-behavior.spec.ts › context.unrouteAll removes all handlers [pass] +bidi-chromium-library › library/unroute-behavior.spec.ts › context.unrouteAll should wait for pending handlers to complete [timeout] +bidi-chromium-library › library/unroute-behavior.spec.ts › context.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [timeout] +bidi-chromium-library › library/unroute-behavior.spec.ts › page.close should not wait for active route handlers on the owning context [fail] +bidi-chromium-library › library/unroute-behavior.spec.ts › context.close should not wait for active route handlers on the owned pages [fail] +bidi-chromium-library › library/unroute-behavior.spec.ts › page.unroute should not wait for pending handlers to complete [fail] +bidi-chromium-library › library/unroute-behavior.spec.ts › page.unrouteAll removes all routes [fail] +bidi-chromium-library › library/unroute-behavior.spec.ts › page.unrouteAll should wait for pending handlers to complete [fail] +bidi-chromium-library › library/unroute-behavior.spec.ts › page.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [fail] +bidi-chromium-library › library/unroute-behavior.spec.ts › page.close does not wait for active route handlers [fail] +bidi-chromium-library › library/unroute-behavior.spec.ts › route.continue should not throw if page has been closed [fail] +bidi-chromium-library › library/unroute-behavior.spec.ts › route.fallback should not throw if page has been closed [fail] +bidi-chromium-library › library/unroute-behavior.spec.ts › route.fulfill should not throw if page has been closed [fail] +bidi-chromium-library › library/video.spec.ts › screencast › videoSize should require videosPath [pass] +bidi-chromium-library › library/video.spec.ts › screencast › should work with old options [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should throw without recordVideo.dir [pass] +bidi-chromium-library › library/video.spec.ts › screencast › should capture static page [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should continue recording main page after popup closes [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should expose video path [timeout] +bidi-chromium-library › library/video.spec.ts › screencast › saveAs should throw when no video frames [pass] +bidi-chromium-library › library/video.spec.ts › screencast › should delete video [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should expose video path blank page [timeout] +bidi-chromium-library › library/video.spec.ts › screencast › should work with weird screen resolution [timeout] +bidi-chromium-library › library/video.spec.ts › screencast › should work with relative path for recordVideo.dir [timeout] +bidi-chromium-library › library/video.spec.ts › screencast › should expose video path blank popup [timeout] +bidi-chromium-library › library/video.spec.ts › screencast › should capture navigation [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should capture css transformation [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should work for popups [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should scale frames down to the requested size [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should use viewport scaled down to fit into 800x800 as default size [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should be 800x450 by default [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should be 800x600 with null viewport [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should capture static page in persistent context @smoke [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should emulate an iphone [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should throw on browser close [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should throw if browser dies [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should wait for video to finish if page was closed [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should not create video for internal pages [unknown] +bidi-chromium-library › library/video.spec.ts › screencast › should capture full viewport [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should capture full viewport on hidpi [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should work with video+trace [fail] +bidi-chromium-library › library/video.spec.ts › should saveAs video [fail] +bidi-chromium-library › library/web-socket.spec.ts › should work @smoke [pass] +bidi-chromium-library › library/web-socket.spec.ts › should emit close events [timeout] +bidi-chromium-library › library/web-socket.spec.ts › should emit frame events [timeout] +bidi-chromium-library › library/web-socket.spec.ts › should filter out the close events when the server closes with a message [timeout] +bidi-chromium-library › library/web-socket.spec.ts › should pass self as argument to close event [timeout] +bidi-chromium-library › library/web-socket.spec.ts › should emit binary frame events [timeout] +bidi-chromium-library › library/web-socket.spec.ts › should emit error [timeout] +bidi-chromium-library › library/web-socket.spec.ts › should not have stray error events [timeout] +bidi-chromium-library › library/web-socket.spec.ts › should reject waitForEvent on socket close [timeout] +bidi-chromium-library › library/web-socket.spec.ts › should reject waitForEvent on page close [timeout] +bidi-chromium-library › library/web-socket.spec.ts › should turn off when offline [unknown] \ No newline at end of file diff --git a/tests/bidi/expectations/bidi-chromium-page.txt b/tests/bidi/expectations/bidi-chromium-page.txt new file mode 100644 index 0000000000..d1f28632f7 --- /dev/null +++ b/tests/bidi/expectations/bidi-chromium-page.txt @@ -0,0 +1,1966 @@ +bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should work [pass] +bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should handle nested frames [fail] +bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should get frame box [pass] +bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should handle scroll offset and click [pass] +bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should return null for invisible elements [fail] +bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should force a layout [pass] +bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should work with SVG nodes [pass] +bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should work when inline box child is outside of viewport [pass] +bidi-chromium-page › page/elementhandle-click.spec.ts › should work @smoke [pass] +bidi-chromium-page › page/elementhandle-click.spec.ts › should work with Node removed [pass] +bidi-chromium-page › page/elementhandle-click.spec.ts › should work for Shadow DOM v1 [pass] +bidi-chromium-page › page/elementhandle-click.spec.ts › should work for TextNodes [fail] +bidi-chromium-page › page/elementhandle-click.spec.ts › should throw for detached nodes [pass] +bidi-chromium-page › page/elementhandle-click.spec.ts › should throw for hidden nodes with force [pass] +bidi-chromium-page › page/elementhandle-click.spec.ts › should throw for recursively hidden nodes with force [pass] +bidi-chromium-page › page/elementhandle-click.spec.ts › should throw for
elements with force [pass] +bidi-chromium-page › page/elementhandle-click.spec.ts › should double click the button [pass] +bidi-chromium-page › page/elementhandle-content-frame.spec.ts › should work [pass] +bidi-chromium-page › page/elementhandle-content-frame.spec.ts › should work for cross-process iframes [pass] +bidi-chromium-page › page/elementhandle-content-frame.spec.ts › should work for cross-frame evaluations [fail] +bidi-chromium-page › page/elementhandle-content-frame.spec.ts › should return null for non-iframes [pass] +bidi-chromium-page › page/elementhandle-content-frame.spec.ts › should return null for document.documentElement [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › should have a nice preview [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › should have a nice preview for non-ascii attributes/children [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › getAttribute should work [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › inputValue should work [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › innerHTML should work [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › innerText should work [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › innerText should throw [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › textContent should work [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › textContent should work on ShadowRoot [fail] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › isVisible and isHidden should work [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › isVisible should not throw when the DOM element is not connected [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › isEnabled and isDisabled should work [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › isEnabled and isDisabled should work with [fail] +bidi-chromium-page › page/page-fill.spec.ts › should throw if passed a non-string value [pass] +bidi-chromium-page › page/page-fill.spec.ts › should retry on disabled element [pass] +bidi-chromium-page › page/page-fill.spec.ts › should retry on readonly element [pass] +bidi-chromium-page › page/page-fill.spec.ts › should retry on invisible element [pass] +bidi-chromium-page › page/page-fill.spec.ts › should be able to fill the body [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill fixed position input [pass] +bidi-chromium-page › page/page-fill.spec.ts › should be able to fill when focus is in the wrong frame [pass] +bidi-chromium-page › page/page-fill.spec.ts › should be able to fill the input[type=number] [pass] +bidi-chromium-page › page/page-fill.spec.ts › should be able to fill exponent into the input[type=number] [pass] +bidi-chromium-page › page/page-fill.spec.ts › should be able to fill input[type=number] with empty string [pass] +bidi-chromium-page › page/page-fill.spec.ts › should not be able to fill text into the input[type=number] [pass] +bidi-chromium-page › page/page-fill.spec.ts › should be able to clear using fill() [pass] +bidi-chromium-page › page/page-fill.spec.ts › should not throw when fill causes navigation [pass] +bidi-chromium-page › page/page-fill.spec.ts › fill back to back [pass] +bidi-chromium-page › page/page-focus.spec.ts › should work @smoke [pass] +bidi-chromium-page › page/page-focus.spec.ts › should emit focus event [fail] +bidi-chromium-page › page/page-focus.spec.ts › should emit blur event [fail] +bidi-chromium-page › page/page-focus.spec.ts › should traverse focus [fail] +bidi-chromium-page › page/page-focus.spec.ts › should traverse focus in all directions [pass] +bidi-chromium-page › page/page-focus.spec.ts › should traverse only form elements [unknown] +bidi-chromium-page › page/page-focus.spec.ts › clicking checkbox should activate it [unknown] +bidi-chromium-page › page/page-focus.spec.ts › keeps focus on element when attempting to focus a non-focusable element [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work @smoke [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with file URL [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with file URL with subframes [pass] +bidi-chromium-page › page/page-goto.spec.ts › should use http for no protocol [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work cross-process [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with cross-process that fails before committing [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy and interception [fail] +bidi-chromium-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy after redirect [pass] +bidi-chromium-page › page/page-goto.spec.ts › should capture iframe navigation request [pass] +bidi-chromium-page › page/page-goto.spec.ts › should capture cross-process iframe navigation request [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with anchor navigation [timeout] +bidi-chromium-page › page/page-goto.spec.ts › should work with redirects [pass] +bidi-chromium-page › page/page-goto.spec.ts › should navigate to about:blank [pass] +bidi-chromium-page › page/page-goto.spec.ts › should return response when page changes its URL after load [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with subframes return 204 [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with subframes return 204 with domcontentloaded [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when server returns 204 [fail] +bidi-chromium-page › page/page-goto.spec.ts › should navigate to empty page with domcontentloaded [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work when page calls history API in beforeunload [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating to bad url [fail] +bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating to bad SSL [fail] +bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating to bad SSL after redirects [fail] +bidi-chromium-page › page/page-goto.spec.ts › should not crash when navigating to bad SSL after a cross origin navigation [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not throw if networkidle0 is passed as an option [pass] +bidi-chromium-page › page/page-goto.spec.ts › should throw if networkidle2 is passed as an option [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when main resources failed to load [fail] +bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding maximum navigation timeout [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding default maximum navigation timeout [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding browser context navigation timeout [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding default maximum timeout [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding browser context timeout [pass] +bidi-chromium-page › page/page-goto.spec.ts › should prioritize default navigation timeout over default timeout [pass] +bidi-chromium-page › page/page-goto.spec.ts › should disable timeout when its set to 0 [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when replaced by another navigation [pass] +bidi-chromium-page › page/page-goto.spec.ts › js redirect overrides url bar navigation [fail] +bidi-chromium-page › page/page-goto.spec.ts › should succeed on url bar navigation when there is pending navigation [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work when navigating to valid url [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work when navigating to data url [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work when navigating to 404 [pass] +bidi-chromium-page › page/page-goto.spec.ts › should return last response in redirect chain [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not leak listeners during navigation [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not leak listeners during bad navigation [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not leak listeners during 20 waitForNavigation [pass] +bidi-chromium-page › page/page-goto.spec.ts › should navigate to dataURL and not fire dataURL requests [pass] +bidi-chromium-page › page/page-goto.spec.ts › should navigate to URL with hash and fire requests without hash [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with self requesting page [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating and show the url at the error message [pass] +bidi-chromium-page › page/page-goto.spec.ts › should be able to navigate to a page controlled by service worker [pass] +bidi-chromium-page › page/page-goto.spec.ts › should send referer [fail] +bidi-chromium-page › page/page-goto.spec.ts › should send referer of cross-origin URL [fail] +bidi-chromium-page › page/page-goto.spec.ts › should reject referer option when setExtraHTTPHeaders provides referer [pass] +bidi-chromium-page › page/page-goto.spec.ts › should override referrer-policy [fail] +bidi-chromium-page › page/page-goto.spec.ts › should fail when canceled by another navigation [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with lazy loading iframes [pass] +bidi-chromium-page › page/page-goto.spec.ts › should report raw buffer for main resource [fail] +bidi-chromium-page › page/page-goto.spec.ts › should not throw unhandled rejections on invalid url [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not crash when RTCPeerConnection is used [pass] +bidi-chromium-page › page/page-goto.spec.ts › should properly wait for load [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not resolve goto upon window.stop() [pass] +bidi-chromium-page › page/page-goto.spec.ts › should return from goto if new navigation is started [pass] +bidi-chromium-page › page/page-goto.spec.ts › should return when navigation is committed if commit is specified [fail] +bidi-chromium-page › page/page-goto.spec.ts › should wait for load when iframe attaches and detaches [pass] +bidi-chromium-page › page/page-goto.spec.ts › should return url with basic auth info [pass] +bidi-chromium-page › page/page-history.spec.ts › page.goBack should work @smoke [fail] +bidi-chromium-page › page/page-history.spec.ts › page.goBack should work with HistoryAPI [fail] +bidi-chromium-page › page/page-history.spec.ts › page.goBack should work for file urls [fail] +bidi-chromium-page › page/page-history.spec.ts › goBack/goForward should work with bfcache-able pages [fail] +bidi-chromium-page › page/page-history.spec.ts › page.reload should work [pass] +bidi-chromium-page › page/page-history.spec.ts › page.reload should work with data url [timeout] +bidi-chromium-page › page/page-history.spec.ts › page.reload during renderer-initiated navigation [pass] +bidi-chromium-page › page/page-history.spec.ts › page.reload should not resolve with same-document navigation [fail] +bidi-chromium-page › page/page-history.spec.ts › page.reload should work with same origin redirect [pass] +bidi-chromium-page › page/page-history.spec.ts › page.reload should work with cross-origin redirect [pass] +bidi-chromium-page › page/page-history.spec.ts › page.reload should work on a page with a hash [pass] +bidi-chromium-page › page/page-history.spec.ts › page.reload should work on a page with a hash at the end [pass] +bidi-chromium-page › page/page-history.spec.ts › page.goBack during renderer-initiated navigation [timeout] +bidi-chromium-page › page/page-history.spec.ts › page.goForward during renderer-initiated navigation [fail] +bidi-chromium-page › page/page-history.spec.ts › regression test for issue 20791 [pass] +bidi-chromium-page › page/page-history.spec.ts › should reload proper page [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should type into a textarea @smoke [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should move with the arrow keys [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should send a character with ElementHandle.press [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should send a character with insertText [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › insertText should only emit input event [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › should report shiftKey [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should report multiple modifiers [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should send proper codes while typing [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should send proper codes while typing with shift [timeout] +bidi-chromium-page › page/page-keyboard.spec.ts › should not type canceled events [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should press plus [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › should press shift plus [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › should support plus-separated modifiers [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should support multiple plus-separated modifiers [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should shift raw codes [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should specify repeat property [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should type all kinds of characters [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should specify location [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › should press Enter [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › should throw on unknown keys [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should type emoji [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should type emoji into an iframe [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should handle selectAll [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › pressing Meta should not result in any text insertion on any platform [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should be able to prevent selectAll [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should support MacOS shortcuts [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › should press the meta key [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should work with keyboard events with empty.html [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should work after a cross origin navigation [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should expose keyIdentifier in webkit [unknown] +bidi-chromium-page › page/page-keyboard.spec.ts › should scroll with PageDown [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should move around the selection in a contenteditable [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should move to the start of the document [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › should dispatch a click event on a button when Space gets pressed [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should dispatch a click event on a button when Enter gets pressed [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should support simple copy-pasting [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should support simple cut-pasting [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should support undo-redo [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom with nested elements [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should type repeatedly in input in shadow dom [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › type to non-focusable element should maintain old focus [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should dispatch insertText after context menu was opened [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should type after context menu was opened [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should have correct Keydown/Keyup order when pressing Escape key [pass] +bidi-chromium-page › page/page-leaks.spec.ts › click should not leak [pass] +bidi-chromium-page › page/page-leaks.spec.ts › fill should not leak [pass] +bidi-chromium-page › page/page-leaks.spec.ts › expect should not leak [pass] +bidi-chromium-page › page/page-leaks.spec.ts › waitFor should not leak [pass] +bidi-chromium-page › page/page-listeners.spec.ts › should not throw with ignoreErrors [pass] +bidi-chromium-page › page/page-listeners.spec.ts › should wait [pass] +bidi-chromium-page › page/page-listeners.spec.ts › wait should throw [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should click the document @smoke [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should dblclick the div [pass] +bidi-chromium-page › page/page-mouse.spec.ts › down and up should generate click [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should pointerdown the div with a custom button [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should report correct buttons property [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should select the text with mouse [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should trigger hover state [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should trigger hover state on disabled button [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should trigger hover state with removed window.Node [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should set modifier keys on click [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should tween mouse movement [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should always round down [fail] +bidi-chromium-page › page/page-mouse.spec.ts › should not crash on mouse drag with any button [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should dispatch mouse move after context menu was opened [pass] +bidi-chromium-page › page/page-navigation.spec.ts › should work with _blank target [pass] +bidi-chromium-page › page/page-navigation.spec.ts › should work with cross-process _blank target [pass] +bidi-chromium-page › page/page-navigation.spec.ts › should work with _blank target in form [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should navigate to empty page with networkidle [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation with request from previous navigation [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in waitForNavigation [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent with request from previous navigation [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle when navigating iframe [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent from the child frame [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle from the child frame [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle from the popup [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle when iframe attaches and detaches [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should work after repeated navigations in the same page [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should work for main frame navigation request [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should work for subframe navigation request [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should work for fetch requests @smoke [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should work for a redirect [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should not work for a redirect and interception [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should return headers [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should get the same headers as the server [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should not return allHeaders() until they are available [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should get the same headers as the server CORS [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should not get preflight CORS requests when intercepting [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should return postData [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should work with binary post data [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should work with binary post data and interception [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should override post data content type [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should get |undefined| with postData() when there is no post data [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should parse the json post data [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded; charset=UTF-8 [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should get |undefined| with postDataJSON() when there is no post data [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should return multipart/form-data [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should return event source [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should return navigation bit [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should return navigation bit when navigating to image [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should report raw headers [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should report raw response headers in redirects [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should report all cookies in one header [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should not allow to access frame on popup main request [pass] +bidi-chromium-page › page/page-network-request.spec.ts › page.reload return 304 status code [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should handle mixed-content blocked requests [unknown] +bidi-chromium-page › page/page-network-response.spec.ts › should work @smoke [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return multiple header value [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return text [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return uncompressed text [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should throw when requesting body of redirected response [pass] +bidi-chromium-page › page/page-network-response.spec.ts › should wait until response completes [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should reject response.finished if page closes [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should reject response.finished if context closes [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return json [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return body [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return body with compression [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return status text [pass] +bidi-chromium-page › page/page-network-response.spec.ts › should report all headers [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should report multiple set-cookie headers [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should behave the same way for headers and allHeaders [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should provide a Response with a file URL [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return set-cookie header after route.fulfill [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return headers after route.fulfill [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should report if request was fromServiceWorker [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return body for prefetch script [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should bypass disk cache when page interception is enabled [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should bypass disk cache when context interception is enabled [fail] +bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize and headersSize [pass] +bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize to 0 if there was no body [pass] +bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize, headersSize, and transferSize [fail] +bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize to 0 when there was no response body [pass] +bidi-chromium-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize [fail] +bidi-chromium-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize for chunked request [fail] +bidi-chromium-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize with gzip compression [fail] +bidi-chromium-page › page/page-network-sizes.spec.ts › should handle redirects [fail] +bidi-chromium-page › page/page-network-sizes.spec.ts › should throw for failed requests [pass] +bidi-chromium-page › page/page-network-sizes.spec.ts › should work with 200 status code [fail] +bidi-chromium-page › page/page-network-sizes.spec.ts › should work with 401 status code [fail] +bidi-chromium-page › page/page-network-sizes.spec.ts › should work with 404 status code [fail] +bidi-chromium-page › page/page-network-sizes.spec.ts › should work with 500 status code [fail] +bidi-chromium-page › page/page-network-sizes.spec.ts › should have correct responseBodySize for 404 with content [pass] +bidi-chromium-page › page/page-network-sizes.spec.ts › should return sizes without hanging [pass] +bidi-chromium-page › page/page-object-count.spec.ts › should count objects [unknown] +bidi-chromium-page › page/page-request-continue.spec.ts › should work [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should amend HTTP headers [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should delete header with undefined value [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should amend method [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should override request url [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should not allow changing protocol when overriding url [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should not throw when continuing while page is closing [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should not throw when continuing after page is closed [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should not throw if request was cancelled by the page [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should override method along with url [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should amend method on main request [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend post data [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should compute content-length from post data [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend method and post data [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend utf8 post data [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend longer post data [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend binary post data [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should use content-type from original request [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should work with Cross-Origin-Opener-Policy [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should delete the origin header [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should continue preload link requests [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › continue should propagate headers to redirects [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › redirected requests should report overridden headers [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › continue should delete headers on redirects [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should intercept css variable with background url [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › continue should not change multipart/form-data body [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should work [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should fall back [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should fall back async [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should not chain fulfill [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should not chain abort [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should fall back after exception [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should chain once [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should amend HTTP headers [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should delete header with undefined value [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should amend method [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should override request url [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › post data › should amend post data [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › post data › should amend binary post data [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › post data › should amend json post data [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should work [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should work with buffer as body [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should work with status code 422 [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with unuassigned status codes [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should not throw if request was cancelled by the page [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should allow mocking binary responses [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should allow mocking svg with charset [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should work with file path [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should stringify intercepted request response headers [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should not modify the headers sent to the server [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should include the origin header [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with global fetch result [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with fetch result [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with fetch result and overrides [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fetch original request and fulfill [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with multiple set-cookie [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with fetch response that has multiple set-cookie [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › headerValue should return set-cookie from intercepted response [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with har response [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill preload link requests [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill json [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with gzip and readback [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should not go to the network for fulfilled requests body [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill intercepted response [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill response with empty body [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should override with defaults when intercepted response not provided [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill with any response [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should support fulfill after intercept [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should give access to the intercepted response [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should give access to the intercepted response body [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should intercept multipart/form-data request body [unknown] +bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill intercepted response using alias [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should support timeout option in route.fetch [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should not follow redirects when maxRedirects is set to 0 in route.fetch [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should intercept with url override [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should intercept with post data override [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill popup main request using alias [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › request.postData is not null when fetching FormData with a Blob [fail] +bidi-chromium-page › page/page-route.spec.ts › should intercept @smoke [fail] +bidi-chromium-page › page/page-route.spec.ts › should unroute [fail] +bidi-chromium-page › page/page-route.spec.ts › should support ? in glob pattern [fail] +bidi-chromium-page › page/page-route.spec.ts › should work when POST is redirected with 302 [fail] +bidi-chromium-page › page/page-route.spec.ts › should work when header manipulation headers with redirect [fail] +bidi-chromium-page › page/page-route.spec.ts › should be able to remove headers [fail] +bidi-chromium-page › page/page-route.spec.ts › should contain referer header [fail] +bidi-chromium-page › page/page-route.spec.ts › should properly return navigation response when URL has cookies [fail] +bidi-chromium-page › page/page-route.spec.ts › should override cookie header [pass] +bidi-chromium-page › page/page-route.spec.ts › should show custom HTTP headers [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with redirect inside sync XHR [fail] +bidi-chromium-page › page/page-route.spec.ts › should pause intercepted XHR until continue [fail] +bidi-chromium-page › page/page-route.spec.ts › should pause intercepted fetch request until continue [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with custom referer headers [fail] +bidi-chromium-page › page/page-route.spec.ts › should be abortable [fail] +bidi-chromium-page › page/page-route.spec.ts › should be abortable with custom error codes [fail] +bidi-chromium-page › page/page-route.spec.ts › should not throw if request was cancelled by the page [fail] +bidi-chromium-page › page/page-route.spec.ts › should send referer [fail] +bidi-chromium-page › page/page-route.spec.ts › should fail navigation when aborting main resource [fail] +bidi-chromium-page › page/page-route.spec.ts › should not work with redirects [fail] +bidi-chromium-page › page/page-route.spec.ts › should chain fallback w/ dynamic URL [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with redirects for subresources [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with equal requests [fail] +bidi-chromium-page › page/page-route.spec.ts › should navigate to dataURL and not fire dataURL requests [fail] +bidi-chromium-page › page/page-route.spec.ts › should be able to fetch dataURL and not fire dataURL requests [fail] +bidi-chromium-page › page/page-route.spec.ts › should navigate to URL with hash and and fire requests without hash [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with encoded server [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with badly encoded server [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with encoded server - 2 [fail] +bidi-chromium-page › page/page-route.spec.ts › should not throw "Invalid Interception Id" if the request was cancelled [fail] +bidi-chromium-page › page/page-route.spec.ts › should intercept main resource during cross-process navigation [fail] +bidi-chromium-page › page/page-route.spec.ts › should fulfill with redirect status [fail] +bidi-chromium-page › page/page-route.spec.ts › should not fulfill with redirect status [unknown] +bidi-chromium-page › page/page-route.spec.ts › should support cors with GET [fail] +bidi-chromium-page › page/page-route.spec.ts › should add Access-Control-Allow-Origin by default when fulfill [fail] +bidi-chromium-page › page/page-route.spec.ts › should allow null origin for about:blank [fail] +bidi-chromium-page › page/page-route.spec.ts › should respect cors overrides [fail] +bidi-chromium-page › page/page-route.spec.ts › should not auto-intercept non-preflight OPTIONS [fail] +bidi-chromium-page › page/page-route.spec.ts › should support cors with POST [fail] +bidi-chromium-page › page/page-route.spec.ts › should support cors with credentials [fail] +bidi-chromium-page › page/page-route.spec.ts › should reject cors with disallowed credentials [fail] +bidi-chromium-page › page/page-route.spec.ts › should support cors for different methods [fail] +bidi-chromium-page › page/page-route.spec.ts › should support the times parameter with route matching [fail] +bidi-chromium-page › page/page-route.spec.ts › should work if handler with times parameter was removed from another handler [fail] +bidi-chromium-page › page/page-route.spec.ts › should support async handler w/ times [fail] +bidi-chromium-page › page/page-route.spec.ts › should contain raw request header [fail] +bidi-chromium-page › page/page-route.spec.ts › should contain raw response header [fail] +bidi-chromium-page › page/page-route.spec.ts › should contain raw response header after fulfill [fail] +bidi-chromium-page › page/page-route.spec.ts › route.fulfill should throw if called twice [fail] +bidi-chromium-page › page/page-route.spec.ts › route.continue should throw if called twice [fail] +bidi-chromium-page › page/page-route.spec.ts › route.fallback should throw if called twice [fail] +bidi-chromium-page › page/page-route.spec.ts › route.abort should throw if called twice [fail] +bidi-chromium-page › page/page-route.spec.ts › should intercept when postData is more than 1MB [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work @smoke [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should not capture blinking caret by default [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should capture blinking caret if explicitly asked for [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should capture blinking caret in shadow dom [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should clip rect [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should clip rect with fullPage [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should clip elements to the viewport [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should throw on clip outside the viewport [pass] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should run in parallel [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots and mask elements outside of it [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should restore viewport after fullPage screenshot [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should allow transparency [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should render white background on jpeg file [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work with odd clip size on Retina displays [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work for canvas [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should capture canvas changes [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work for webgl [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work for translateZ [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work while navigating [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work with iframe in shadow [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › path option should work [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › path option should create subdirectories [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › path option should detect jpeg [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › path option should throw for unsupported mime type [pass] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › quality option should throw for png [pass] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › zero quality option should throw for png [pass] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should prefer type over extension [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should not issue resize event [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work with Array deleted [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots during navigation [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work with locator [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work with elementhandle [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask multiple elements [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask inside iframe [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask in parallel [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should remove mask after screenshot [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe has stalled navigation [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe used document.open after a weird url [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when mask color is not pink #F0F [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should hide elements based on attr [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should remove elements based on attr [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite css animation [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture pseudo element css animation [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture css animations in shadow DOM [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should stop animations that happen right before screenshot [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should resume infinite animations [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite web animations [unknown] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should fire transitionend for finite transitions [unknown] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should capture screenshots after layoutchanges in transitionend event [unknown] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not change animation with playbackRate equal to 0 [unknown] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for css transitions [unknown] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for INfinite css animation [unknown] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for finite css animation [unknown] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should wait for fonts to load [unknown] +bidi-chromium-page › page/page-screenshot.spec.ts › should throw if screenshot size is too large [unknown] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot should capture css transform [unknown] +bidi-chromium-page › page/page-screenshot.spec.ts › should capture css box-shadow [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should select single option @smoke [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should select single option by value [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should fall back to selecting by label [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should select single option by label [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should select single option by handle [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should select single option by index [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should select single option by multiple attributes [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should not select single option when some attributes do not match [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should select only first option [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should not throw when select causes navigation [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should select multiple options [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should select multiple options with attributes [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should respect event bubbling [unknown] +bidi-chromium-page › page/page-select-option.spec.ts › should throw when element is not a option/optgroup correctly [pass] -bidi-chromium-page › page/elementhandle-convenience.spec.ts › isEditable should work [pass] -bidi-chromium-page › page/elementhandle-convenience.spec.ts › isChecked should work [pass] -bidi-chromium-page › page/elementhandle-eval-on-selector.spec.ts › should work [pass] -bidi-chromium-page › page/elementhandle-eval-on-selector.spec.ts › should retrieve content from subtree [pass] -bidi-chromium-page › page/elementhandle-eval-on-selector.spec.ts › should throw in case of missing selector [pass] -bidi-chromium-page › page/elementhandle-eval-on-selector.spec.ts › should work for all [pass] -bidi-chromium-page › page/elementhandle-eval-on-selector.spec.ts › should retrieve content from subtree for all [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › isVisible and isHidden should work [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › isVisible should not throw when the DOM element is not connected [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › should have a nice preview [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › should have a nice preview for non-ascii attributes/children [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › textContent should work [pass] +bidi-chromium-page › page/elementhandle-convenience.spec.ts › textContent should work on ShadowRoot [fail] bidi-chromium-page › page/elementhandle-eval-on-selector.spec.ts › should not throw in case of missing selector for all [pass] -bidi-chromium-page › page/elementhandle-misc.spec.ts › should hover [pass] -bidi-chromium-page › page/elementhandle-misc.spec.ts › should hover when Node is removed [pass] -bidi-chromium-page › page/elementhandle-misc.spec.ts › should fill input [pass] -bidi-chromium-page › page/elementhandle-misc.spec.ts › should fill input when Node is removed [pass] +bidi-chromium-page › page/elementhandle-eval-on-selector.spec.ts › should retrieve content from subtree [pass] +bidi-chromium-page › page/elementhandle-eval-on-selector.spec.ts › should retrieve content from subtree for all [pass] +bidi-chromium-page › page/elementhandle-eval-on-selector.spec.ts › should throw in case of missing selector [pass] +bidi-chromium-page › page/elementhandle-eval-on-selector.spec.ts › should work [pass] +bidi-chromium-page › page/elementhandle-eval-on-selector.spec.ts › should work for all [pass] +bidi-chromium-page › page/elementhandle-misc.spec.ts › should allow disposing twice [pass] bidi-chromium-page › page/elementhandle-misc.spec.ts › should check the box [pass] bidi-chromium-page › page/elementhandle-misc.spec.ts › should check the box using setChecked [pass] -bidi-chromium-page › page/elementhandle-misc.spec.ts › should uncheck the box [pass] -bidi-chromium-page › page/elementhandle-misc.spec.ts › should select single option [pass] +bidi-chromium-page › page/elementhandle-misc.spec.ts › should fill input [pass] +bidi-chromium-page › page/elementhandle-misc.spec.ts › should fill input when Node is removed [pass] bidi-chromium-page › page/elementhandle-misc.spec.ts › should focus a button [pass] -bidi-chromium-page › page/elementhandle-misc.spec.ts › should allow disposing twice [pass] +bidi-chromium-page › page/elementhandle-misc.spec.ts › should hover [pass] +bidi-chromium-page › page/elementhandle-misc.spec.ts › should hover when Node is removed [pass] +bidi-chromium-page › page/elementhandle-misc.spec.ts › should select single option [pass] +bidi-chromium-page › page/elementhandle-misc.spec.ts › should uncheck the box [pass] bidi-chromium-page › page/elementhandle-owner-frame.spec.ts › should work [fail] +bidi-chromium-page › page/elementhandle-owner-frame.spec.ts › should work for adopted elements [fail] +bidi-chromium-page › page/elementhandle-owner-frame.spec.ts › should work for cross-frame evaluations [fail] bidi-chromium-page › page/elementhandle-owner-frame.spec.ts › should work for cross-process iframes [fail] +bidi-chromium-page › page/elementhandle-owner-frame.spec.ts › should work for detached elements [fail] bidi-chromium-page › page/elementhandle-owner-frame.spec.ts › should work for document [fail] bidi-chromium-page › page/elementhandle-owner-frame.spec.ts › should work for iframe elements [fail] -bidi-chromium-page › page/elementhandle-owner-frame.spec.ts › should work for cross-frame evaluations [fail] -bidi-chromium-page › page/elementhandle-owner-frame.spec.ts › should work for detached elements [fail] -bidi-chromium-page › page/elementhandle-owner-frame.spec.ts › should work for adopted elements [fail] -bidi-chromium-page › page/elementhandle-press.spec.ts › should work [pass] +bidi-chromium-page › page/elementhandle-press.spec.ts › should not modify selection when focused [pass] bidi-chromium-page › page/elementhandle-press.spec.ts › should not select existing value [pass] bidi-chromium-page › page/elementhandle-press.spec.ts › should reset selection when not focused [pass] -bidi-chromium-page › page/elementhandle-press.spec.ts › should not modify selection when focused [pass] +bidi-chromium-page › page/elementhandle-press.spec.ts › should work [pass] bidi-chromium-page › page/elementhandle-press.spec.ts › should work with number input [pass] bidi-chromium-page › page/elementhandle-query-selector.spec.ts › should query existing element [pass] -bidi-chromium-page › page/elementhandle-query-selector.spec.ts › should return null for non-existing element [pass] -bidi-chromium-page › page/elementhandle-query-selector.spec.ts › should work for adopted elements [fail] bidi-chromium-page › page/elementhandle-query-selector.spec.ts › should query existing elements [fail] bidi-chromium-page › page/elementhandle-query-selector.spec.ts › should return empty array for non-existing elements [fail] +bidi-chromium-page › page/elementhandle-query-selector.spec.ts › should return null for non-existing element [pass] +bidi-chromium-page › page/elementhandle-query-selector.spec.ts › should work for adopted elements [fail] bidi-chromium-page › page/elementhandle-query-selector.spec.ts › xpath should query existing element [fail] bidi-chromium-page › page/elementhandle-query-selector.spec.ts › xpath should return null for non-existing element [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should work [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should work when main world busts JSON.stringify [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should take into account padding and border [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should capture full element when larger than viewport in parallel [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should capture full element when larger than viewport [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should scroll element into view [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should scroll 15000px into view [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should work with a rotated element [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should fail to screenshot a detached element [pass] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should timeout waiting for visible [pass] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should wait for visible [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should work for an element with fractional dimensions [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should work for an element with an offset [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should wait for element to stop moving [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should take screenshot of disabled button [fail] bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › path option should create subdirectories [fail] -bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should prefer type over extension [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should capture full element when larger than viewport [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should capture full element when larger than viewport in parallel [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should fail to screenshot a detached element [pass] bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should not issue resize event [fail] -bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should work @smoke [pass] -bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should throw for detached element [fail] -bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should wait for display:none to become visible [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should prefer type over extension [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should scroll 15000px into view [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should scroll element into view [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should take into account padding and border [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should take screenshot of disabled button [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should timeout waiting for visible [pass] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should wait for element to stop moving [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should wait for visible [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should work [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should work for an element with an offset [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should work for an element with fractional dimensions [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should work when main world busts JSON.stringify [fail] +bidi-chromium-page › page/elementhandle-screenshot.spec.ts › element screenshot › should work with a rotated element [fail] bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should scroll display:contents into view [fail] +bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should throw for detached element [fail] +bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should timeout waiting for visible [fail] +bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should wait for display:none to become visible [fail] +bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should wait for element to stop moving [pass] +bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should wait for nested display:none to become visible [fail] +bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should work @smoke [pass] bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should work for visibility:hidden element [pass] bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should work for zero-sized element [pass] -bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should wait for nested display:none to become visible [fail] -bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should wait for element to stop moving [pass] -bidi-chromium-page › page/elementhandle-scroll-into-view.spec.ts › should timeout waiting for visible [fail] -bidi-chromium-page › page/elementhandle-select-text.spec.ts › should select textarea [pass] bidi-chromium-page › page/elementhandle-select-text.spec.ts › should select input [pass] bidi-chromium-page › page/elementhandle-select-text.spec.ts › should select plain div [pass] +bidi-chromium-page › page/elementhandle-select-text.spec.ts › should select textarea [pass] bidi-chromium-page › page/elementhandle-select-text.spec.ts › should timeout waiting for invisible element [pass] bidi-chromium-page › page/elementhandle-select-text.spec.ts › should wait for visible [pass] -bidi-chromium-page › page/elementhandle-type.spec.ts › should work [pass] +bidi-chromium-page › page/elementhandle-type.spec.ts › should not modify selection when focused [pass] bidi-chromium-page › page/elementhandle-type.spec.ts › should not select existing value [pass] bidi-chromium-page › page/elementhandle-type.spec.ts › should reset selection when not focused [pass] -bidi-chromium-page › page/elementhandle-type.spec.ts › should not modify selection when focused [pass] +bidi-chromium-page › page/elementhandle-type.spec.ts › should work [pass] bidi-chromium-page › page/elementhandle-type.spec.ts › should work with number input [pass] -bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for visible [pass] -bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for already visible [pass] -bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should timeout waiting for visible [pass] -bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should throw waiting for visible when detached [pass] -bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for hidden [pass] -bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for already hidden [pass] -bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for hidden when detached [pass] bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should throw waiting for enabled when detached [pass] +bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should throw waiting for visible when detached [pass] +bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should timeout waiting for visible [pass] +bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for already hidden [pass] +bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for already visible [pass] bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for aria enabled button [pass] bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for button with an aria-disabled parent [pass] -bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for stable position [pass] bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for editable input [pass] +bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for hidden [pass] +bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for hidden when detached [pass] +bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for stable position [pass] +bidi-chromium-page › page/elementhandle-wait-for-element-state.spec.ts › should wait for visible [pass] +bidi-chromium-page › page/eval-on-selector-all.spec.ts › should auto-detect css selector [pass] +bidi-chromium-page › page/eval-on-selector-all.spec.ts › should return complex values [pass] +bidi-chromium-page › page/eval-on-selector-all.spec.ts › should support * capture [pass] +bidi-chromium-page › page/eval-on-selector-all.spec.ts › should support * capture when multiple paths match [pass] +bidi-chromium-page › page/eval-on-selector-all.spec.ts › should support >> syntax [pass] +bidi-chromium-page › page/eval-on-selector-all.spec.ts › should work with bogus Array.from [pass] bidi-chromium-page › page/eval-on-selector-all.spec.ts › should work with css selector [pass] bidi-chromium-page › page/eval-on-selector-all.spec.ts › should work with text selector [pass] bidi-chromium-page › page/eval-on-selector-all.spec.ts › should work with xpath selector [pass] -bidi-chromium-page › page/eval-on-selector-all.spec.ts › should auto-detect css selector [pass] -bidi-chromium-page › page/eval-on-selector-all.spec.ts › should support >> syntax [pass] -bidi-chromium-page › page/eval-on-selector-all.spec.ts › should support * capture [pass] -bidi-chromium-page › page/eval-on-selector-all.spec.ts › should support * capture when multiple paths match [pass] -bidi-chromium-page › page/eval-on-selector-all.spec.ts › should return complex values [pass] -bidi-chromium-page › page/eval-on-selector-all.spec.ts › should work with bogus Array.from [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should work with css selector [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should work with id selector [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should work with data-test selector [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should work with data-testid selector [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should work with data-test-id selector [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should work with text selector in quotes [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should work with xpath selector [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should work with text selector [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should accept ElementHandles as arguments [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should accept arguments [pass] bidi-chromium-page › page/eval-on-selector.spec.ts › should auto-detect css selector [pass] bidi-chromium-page › page/eval-on-selector.spec.ts › should auto-detect css selector with attributes [pass] bidi-chromium-page › page/eval-on-selector.spec.ts › should auto-detect nested selectors [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should accept arguments [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should accept ElementHandles as arguments [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should throw error if no element is found [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should not stop at first failure with >> syntax [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should return complex values [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should support * capture [pass] bidi-chromium-page › page/eval-on-selector.spec.ts › should support >> syntax [pass] bidi-chromium-page › page/eval-on-selector.spec.ts › should support >> syntax with different engines [pass] bidi-chromium-page › page/eval-on-selector.spec.ts › should support spaces with >> syntax [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should not stop at first failure with >> syntax [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should support * capture [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should throw on multiple * captures [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should throw error if no element is found [pass] bidi-chromium-page › page/eval-on-selector.spec.ts › should throw on malformed * capture [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should work with spaces in css attributes [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should throw on multiple * captures [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should work with css selector [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should work with data-test selector [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should work with data-test-id selector [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should work with data-testid selector [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should work with id selector [pass] bidi-chromium-page › page/eval-on-selector.spec.ts › should work with quotes in css attributes [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should work with spaces in css attributes when missing [pass] bidi-chromium-page › page/eval-on-selector.spec.ts › should work with quotes in css attributes when missing [pass] -bidi-chromium-page › page/eval-on-selector.spec.ts › should return complex values [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › default [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with checked:true [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with checked:false [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › fail [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with not and checked:false [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › fail with not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › fail with checked:false [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › fail missing [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with role [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › friendly log [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with impossible timeout [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with impossible timeout .not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEditable › default [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEditable › with not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEditable › with editable:true [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEditable › with editable:false [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEditable › with not and editable:false [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › default [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › with enabled:true [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › with enabled:false [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › failed [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › eventually [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › eventually with not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › with not and enabled:false [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › toBeDisabled [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEmpty input [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › not.toBeEmpty [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeEmpty div [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeDisabled with value [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked with value [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden with value [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should work with spaces in css attributes [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should work with spaces in css attributes when missing [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should work with text selector [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should work with text selector in quotes [pass] +bidi-chromium-page › page/eval-on-selector.spec.ts › should work with xpath selector [pass] bidi-chromium-page › page/expect-boolean.spec.ts › not.toBeDisabled div [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › default [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with visible:true [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with visible:false [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with not and visible:false [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › eventually [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › eventually with not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › fail [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › fail with not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with impossible timeout [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with impossible timeout .not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with frameLocator [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with frameLocator 2 [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › over navigation [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › default [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › when nothing matches [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › with not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › eventually with not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › eventually [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › fail [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › fail with not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › fail with not when nothing matching [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › with impossible timeout .not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › with impossible timeout [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeFocused [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeFocused with shadow elements [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › should print unknown engine error [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › should print selector syntax error [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeOK [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › not.toBeEmpty [pass] bidi-chromium-page › page/expect-boolean.spec.ts › not.toBeOK [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeOK fail with invalid argument [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeOK fail with promise [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeOK should print response with text content type when fails › text content type [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeOK should print response with text content type when fails › no content type [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeOK should print response with text content type when fails › image content type [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › should print selector syntax error [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › should print unknown engine error [pass] bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › default [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with hidden element [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with attached:true [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with attached:false [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with not and attached:false [pass] bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › eventually [pass] bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › eventually with not [pass] bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › fail [pass] bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › fail with not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › over navigation [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with attached:false [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with attached:true [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with frameLocator [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with hidden element [pass] bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with impossible timeout [pass] bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with impossible timeout .not [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with frameLocator [pass] -bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › over navigation [pass] -bidi-chromium-page › page/expect-matcher-result.spec.ts › toMatchText-based assertions should have matcher result [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeAttached › with not and attached:false [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked with value [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › default [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › fail [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › fail missing [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › fail with checked:false [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › fail with not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › friendly log [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with checked:false [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with checked:true [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with impossible timeout [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with impossible timeout .not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with not and checked:false [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeChecked › with role [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeDisabled with value [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEditable › default [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEditable › with editable:false [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEditable › with editable:true [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEditable › with not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEditable › with not and editable:false [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEmpty div [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEmpty input [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › default [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › eventually [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › eventually with not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › failed [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › toBeDisabled [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › with enabled:false [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › with enabled:true [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeEnabled › with not and enabled:false [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeFocused [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeFocused with shadow elements [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden with value [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › default [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › eventually [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › eventually with not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › fail [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › fail with not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › fail with not when nothing matching [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › when nothing matches [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › with impossible timeout [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › with impossible timeout .not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeHidden › with not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeOK [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeOK fail with invalid argument [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeOK fail with promise [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeOK should print response with text content type when fails › image content type [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeOK should print response with text content type when fails › no content type [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeOK should print response with text content type when fails › text content type [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › default [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › eventually [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › eventually with not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › fail [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › fail with not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › over navigation [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with frameLocator [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with frameLocator 2 [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with impossible timeout [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with impossible timeout .not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with not [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with not and visible:false [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with visible:false [pass] +bidi-chromium-page › page/expect-boolean.spec.ts › toBeVisible › with visible:true [pass] +bidi-chromium-page › page/expect-matcher-result.spec.ts › toBeChecked({ checked: false }) should have expected: false [pass] bidi-chromium-page › page/expect-matcher-result.spec.ts › toBeTruthy-based assertions should have matcher result [pass] bidi-chromium-page › page/expect-matcher-result.spec.ts › toEqual-based assertions should have matcher result [pass] -bidi-chromium-page › page/expect-matcher-result.spec.ts › toBeChecked({ checked: false }) should have expected: false [pass] bidi-chromium-page › page/expect-matcher-result.spec.ts › toHaveScreenshot should populate matcherResult [fail] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › toHaveCount pass [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › pass zero [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › eventually pass zero [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › eventually pass non-zero [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › eventually pass not non-zero [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › fail zero [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › fail zero 2 [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › fail [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass string [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › fail string [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass number [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › fail number [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass boolean [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › fail boolean [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass boolean 2 [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › fail boolean 2 [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass undefined [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass null [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass nested [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › fail nested [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveClass › pass [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveClass › pass with SVGs [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveClass › fail [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveClass › pass with array [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveClass › fail with array [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveTitle › pass [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveTitle › fail [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveURL › pass [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveURL › fail [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveURL › support ignoreCase [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveAttribute › pass [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveAttribute › should not match missing attribute [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveAttribute › should match boolean attribute [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveAttribute › should match attribute without value [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveAttribute › should support boolean attribute with options [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveAttribute › support ignoreCase [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveCSS › pass [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveCSS › custom css properties [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveId › pass [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toBeInViewport › should work [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toBeInViewport › should respect ratio option [pass] +bidi-chromium-page › page/expect-matcher-result.spec.ts › toMatchText-based assertions should have matcher result [pass] bidi-chromium-page › page/expect-misc.spec.ts › toBeInViewport › should have good stack [pass] bidi-chromium-page › page/expect-misc.spec.ts › toBeInViewport › should report intersection even if fully covered by other element [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toBeInViewport › should respect ratio option [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toBeInViewport › should work [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveAccessibleDescription [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveAccessibleName [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveAttribute › pass [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveAttribute › should match attribute without value [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveAttribute › should match boolean attribute [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveAttribute › should not match missing attribute [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveAttribute › should support boolean attribute with options [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveAttribute › support ignoreCase [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveCSS › custom css properties [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveCSS › pass [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveClass › fail [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveClass › fail with array [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveClass › pass [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveClass › pass with SVGs [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveClass › pass with array [pass] bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount should not produce logs twice [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › eventually pass non-zero [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › eventually pass not non-zero [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › eventually pass zero [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › fail zero [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › fail zero 2 [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › pass zero [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveCount › toHaveCount pass [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveId › pass [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › fail [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › fail boolean [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › fail boolean 2 [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › fail nested [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › fail number [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › fail string [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass boolean [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass boolean 2 [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass nested [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass null [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass number [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass string [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveJSProperty › pass undefined [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveRole [pass] bidi-chromium-page › page/expect-misc.spec.ts › toHaveText should not produce logs twice [pass] bidi-chromium-page › page/expect-misc.spec.ts › toHaveText that does not match should not produce logs twice [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveAccessibleName [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveAccessibleDescription [pass] -bidi-chromium-page › page/expect-misc.spec.ts › toHaveRole [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveTitle › fail [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveTitle › pass [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveURL › fail [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveURL › pass [pass] +bidi-chromium-page › page/expect-misc.spec.ts › toHaveURL › support ignoreCase [pass] +bidi-chromium-page › page/expect-timeout.spec.ts › should have timeout error name [pass] +bidi-chromium-page › page/expect-timeout.spec.ts › should not print timed out error message when page closes [timeout] +bidi-chromium-page › page/expect-timeout.spec.ts › should not throw when navigating during first locator handler check [pass] +bidi-chromium-page › page/expect-timeout.spec.ts › should not throw when navigating during one-shot check [pass] bidi-chromium-page › page/expect-timeout.spec.ts › should print timed out error message [pass] bidi-chromium-page › page/expect-timeout.spec.ts › should print timed out error message when value does not match [pass] -bidi-chromium-page › page/expect-timeout.spec.ts › should print timed out error message with impossible timeout [pass] bidi-chromium-page › page/expect-timeout.spec.ts › should print timed out error message when value does not match with impossible timeout [pass] -bidi-chromium-page › page/expect-timeout.spec.ts › should not print timed out error message when page closes [timeout] -bidi-chromium-page › page/expect-timeout.spec.ts › should have timeout error name [pass] -bidi-chromium-page › page/expect-timeout.spec.ts › should not throw when navigating during one-shot check [pass] -bidi-chromium-page › page/expect-timeout.spec.ts › should not throw when navigating during first locator handler check [pass] +bidi-chromium-page › page/expect-timeout.spec.ts › should print timed out error message with impossible timeout [pass] bidi-chromium-page › page/expect-timeout.spec.ts › should timeout during first locator handler check [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with regex › pass [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with regex › fail [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toContainText with regex › pass [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toContainText with regex › fail [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › pass [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › pass contain [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › fail [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › pass eventually [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › with userInnerText [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › in shadow dom [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › fail with impossible timeout [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › not.toHaveText › pass [pass] bidi-chromium-page › page/expect-to-have-text.spec.ts › not.toHaveText › fail [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › not.toHaveText › pass [pass] bidi-chromium-page › page/expect-to-have-text.spec.ts › not.toHaveText › should work when selector does not match [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toContainText with array › fail [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toContainText with array › pass [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toContainText with regex › fail [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toContainText with regex › pass [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › fail [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › fail on not+empty [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › fail on repeating array matchers [pass] bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › pass [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › pass lazy [pass] bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › pass empty [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › pass eventually empty [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › pass lazy [pass] bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › pass not empty [pass] bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › pass on empty [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › fail on not+empty [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › pass eventually empty [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › fail [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with array › fail on repeating array matchers [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toContainText with array › pass [pass] -bidi-chromium-page › page/expect-to-have-text.spec.ts › toContainText with array › fail [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with regex › fail [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with regex › pass [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › fail [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › fail with impossible timeout [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › in shadow dom [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › pass [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › pass contain [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › pass eventually [pass] +bidi-chromium-page › page/expect-to-have-text.spec.ts › toHaveText with text › with userInnerText [pass] +bidi-chromium-page › page/expect-to-have-value.spec.ts › should support failure [pass] bidi-chromium-page › page/expect-to-have-value.spec.ts › should work [pass] bidi-chromium-page › page/expect-to-have-value.spec.ts › should work with label [pass] bidi-chromium-page › page/expect-to-have-value.spec.ts › should work with regex [pass] -bidi-chromium-page › page/expect-to-have-value.spec.ts › should support failure [pass] -bidi-chromium-page › page/expect-to-have-value.spec.ts › toHaveValues with multi-select › works with text [pass] -bidi-chromium-page › page/expect-to-have-value.spec.ts › toHaveValues with multi-select › follows labels [pass] bidi-chromium-page › page/expect-to-have-value.spec.ts › toHaveValues with multi-select › exact match with text failure [pass] -bidi-chromium-page › page/expect-to-have-value.spec.ts › toHaveValues with multi-select › works with regex [pass] bidi-chromium-page › page/expect-to-have-value.spec.ts › toHaveValues with multi-select › fails when items not selected [pass] bidi-chromium-page › page/expect-to-have-value.spec.ts › toHaveValues with multi-select › fails when multiple not specified [pass] bidi-chromium-page › page/expect-to-have-value.spec.ts › toHaveValues with multi-select › fails when not a select element [pass] -bidi-chromium-page › page/frame-evaluate.spec.ts › should have different execution contexts [pass] -bidi-chromium-page › page/frame-evaluate.spec.ts › should have correct execution contexts @smoke [pass] -bidi-chromium-page › page/frame-evaluate.spec.ts › should dispose context on navigation [fail] -bidi-chromium-page › page/frame-evaluate.spec.ts › should dispose context on cross-origin navigation [fail] -bidi-chromium-page › page/frame-evaluate.spec.ts › should execute after cross-site navigation [pass] -bidi-chromium-page › page/frame-evaluate.spec.ts › should not allow cross-frame js handles [pass] +bidi-chromium-page › page/expect-to-have-value.spec.ts › toHaveValues with multi-select › follows labels [pass] +bidi-chromium-page › page/expect-to-have-value.spec.ts › toHaveValues with multi-select › works with regex [pass] +bidi-chromium-page › page/expect-to-have-value.spec.ts › toHaveValues with multi-select › works with text [pass] +bidi-chromium-page › page/frame-evaluate.spec.ts › evaluateHandle should work [pass] bidi-chromium-page › page/frame-evaluate.spec.ts › should allow cross-frame element handles [fail] -bidi-chromium-page › page/frame-evaluate.spec.ts › should not allow cross-frame element handles when frames do not script each other [fail] -bidi-chromium-page › page/frame-evaluate.spec.ts › should throw for detached frames [pass] bidi-chromium-page › page/frame-evaluate.spec.ts › should be isolated between frames [pass] +bidi-chromium-page › page/frame-evaluate.spec.ts › should dispose context on cross-origin navigation [fail] +bidi-chromium-page › page/frame-evaluate.spec.ts › should dispose context on navigation [fail] +bidi-chromium-page › page/frame-evaluate.spec.ts › should execute after cross-site navigation [pass] +bidi-chromium-page › page/frame-evaluate.spec.ts › should have correct execution contexts @smoke [pass] +bidi-chromium-page › page/frame-evaluate.spec.ts › should have different execution contexts [pass] +bidi-chromium-page › page/frame-evaluate.spec.ts › should not allow cross-frame element handles when frames do not script each other [fail] +bidi-chromium-page › page/frame-evaluate.spec.ts › should not allow cross-frame js handles [pass] +bidi-chromium-page › page/frame-evaluate.spec.ts › should throw for detached frames [pass] bidi-chromium-page › page/frame-evaluate.spec.ts › should work in iframes that failed initial navigation [fail] bidi-chromium-page › page/frame-evaluate.spec.ts › should work in iframes that interrupted initial javascript url navigation [pass] -bidi-chromium-page › page/frame-evaluate.spec.ts › evaluateHandle should work [pass] -bidi-chromium-page › page/frame-frame-element.spec.ts › should work @smoke [pass] -bidi-chromium-page › page/frame-frame-element.spec.ts › should work with contentFrame [pass] -bidi-chromium-page › page/frame-frame-element.spec.ts › should work with frameset [pass] bidi-chromium-page › page/frame-frame-element.spec.ts › should throw when detached [pass] +bidi-chromium-page › page/frame-frame-element.spec.ts › should work @smoke [pass] bidi-chromium-page › page/frame-frame-element.spec.ts › should work inside closed shadow root [fail] bidi-chromium-page › page/frame-frame-element.spec.ts › should work inside declarative shadow root [fail] +bidi-chromium-page › page/frame-frame-element.spec.ts › should work with contentFrame [pass] +bidi-chromium-page › page/frame-frame-element.spec.ts › should work with frameset [pass] +bidi-chromium-page › page/frame-goto.spec.ts › should continue after client redirect [pass] bidi-chromium-page › page/frame-goto.spec.ts › should navigate subframes @smoke [pass] bidi-chromium-page › page/frame-goto.spec.ts › should reject when frame detaches [pass] -bidi-chromium-page › page/frame-goto.spec.ts › should continue after client redirect [pass] bidi-chromium-page › page/frame-goto.spec.ts › should return matching responses [fail] -bidi-chromium-page › page/frame-hierarchy.spec.ts › should handle nested frames @smoke [fail] -bidi-chromium-page › page/frame-hierarchy.spec.ts › should send events when frames are manipulated dynamically [pass] -bidi-chromium-page › page/frame-hierarchy.spec.ts › should send "framenavigated" when navigating on anchor URLs [timeout] -bidi-chromium-page › page/frame-hierarchy.spec.ts › should persist mainFrame on cross-process navigation [pass] -bidi-chromium-page › page/frame-hierarchy.spec.ts › should not send attach/detach events for main frame [pass] bidi-chromium-page › page/frame-hierarchy.spec.ts › should detach child frames on navigation [pass] -bidi-chromium-page › page/frame-hierarchy.spec.ts › should support framesets [fail] +bidi-chromium-page › page/frame-hierarchy.spec.ts › should handle nested frames @smoke [fail] +bidi-chromium-page › page/frame-hierarchy.spec.ts › should not send attach/detach events for main frame [pass] +bidi-chromium-page › page/frame-hierarchy.spec.ts › should persist mainFrame on cross-process navigation [pass] +bidi-chromium-page › page/frame-hierarchy.spec.ts › should refuse to display x-frame-options:deny iframe [timeout] +bidi-chromium-page › page/frame-hierarchy.spec.ts › should report different frame instance when frame re-attaches [pass] bidi-chromium-page › page/frame-hierarchy.spec.ts › should report frame from-inside shadow DOM [pass] bidi-chromium-page › page/frame-hierarchy.spec.ts › should report frame.name() [fail] bidi-chromium-page › page/frame-hierarchy.spec.ts › should report frame.parent() [pass] -bidi-chromium-page › page/frame-hierarchy.spec.ts › should report different frame instance when frame re-attaches [pass] -bidi-chromium-page › page/frame-hierarchy.spec.ts › should refuse to display x-frame-options:deny iframe [timeout] bidi-chromium-page › page/frame-hierarchy.spec.ts › should return frame.page() [pass] -bidi-chromium-page › page/interception.spec.ts › should work with navigation @smoke [fail] -bidi-chromium-page › page/interception.spec.ts › should intercept after a service worker [fail] -bidi-chromium-page › page/interception.spec.ts › should work with glob [pass] -bidi-chromium-page › page/interception.spec.ts › should intercept network activity from worker [fail] -bidi-chromium-page › page/interception.spec.ts › should intercept worker requests when enabled after worker creation [fail] -bidi-chromium-page › page/interception.spec.ts › should intercept network activity from worker 2 [fail] -bidi-chromium-page › page/interception.spec.ts › should work with regular expression passed from a different context [fail] -bidi-chromium-page › page/interception.spec.ts › should not break remote worker importScripts [fail] +bidi-chromium-page › page/frame-hierarchy.spec.ts › should send "framenavigated" when navigating on anchor URLs [timeout] +bidi-chromium-page › page/frame-hierarchy.spec.ts › should send events when frames are manipulated dynamically [pass] +bidi-chromium-page › page/frame-hierarchy.spec.ts › should support framesets [fail] bidi-chromium-page › page/interception.spec.ts › should disable memory cache when intercepting [fail] +bidi-chromium-page › page/interception.spec.ts › should intercept after a service worker [fail] bidi-chromium-page › page/interception.spec.ts › should intercept blob url requests [unknown] -bidi-chromium-page › page/jshandle-as-element.spec.ts › should work @smoke [pass] -bidi-chromium-page › page/jshandle-as-element.spec.ts › should return null for non-elements [pass] +bidi-chromium-page › page/interception.spec.ts › should intercept network activity from worker [fail] +bidi-chromium-page › page/interception.spec.ts › should intercept network activity from worker 2 [fail] +bidi-chromium-page › page/interception.spec.ts › should intercept worker requests when enabled after worker creation [fail] +bidi-chromium-page › page/interception.spec.ts › should not break remote worker importScripts [fail] +bidi-chromium-page › page/interception.spec.ts › should work with glob [pass] +bidi-chromium-page › page/interception.spec.ts › should work with navigation @smoke [fail] +bidi-chromium-page › page/interception.spec.ts › should work with regular expression passed from a different context [fail] bidi-chromium-page › page/jshandle-as-element.spec.ts › should return ElementHandle for TextNodes [pass] +bidi-chromium-page › page/jshandle-as-element.spec.ts › should return null for non-elements [pass] +bidi-chromium-page › page/jshandle-as-element.spec.ts › should work @smoke [pass] bidi-chromium-page › page/jshandle-as-element.spec.ts › should work with nullified Node [pass] -bidi-chromium-page › page/jshandle-evaluate.spec.ts › should work with function @smoke [pass] bidi-chromium-page › page/jshandle-evaluate.spec.ts › should work with expression [pass] +bidi-chromium-page › page/jshandle-evaluate.spec.ts › should work with function @smoke [pass] +bidi-chromium-page › page/jshandle-json-value.spec.ts › should handle circular objects [pass] bidi-chromium-page › page/jshandle-json-value.spec.ts › should work @smoke [pass] bidi-chromium-page › page/jshandle-json-value.spec.ts › should work with dates [pass] -bidi-chromium-page › page/jshandle-json-value.spec.ts › should handle circular objects [pass] +bidi-chromium-page › page/jshandle-properties.spec.ts › getProperties should return empty map for non-objects [pass] +bidi-chromium-page › page/jshandle-properties.spec.ts › getProperties should return even non-own properties [fail] +bidi-chromium-page › page/jshandle-properties.spec.ts › getProperties should work [fail] +bidi-chromium-page › page/jshandle-properties.spec.ts › getProperties should work with elements [fail] bidi-chromium-page › page/jshandle-properties.spec.ts › should work @smoke [fail] bidi-chromium-page › page/jshandle-properties.spec.ts › should work with undefined, null, and empty [fail] bidi-chromium-page › page/jshandle-properties.spec.ts › should work with unserializable values [fail] -bidi-chromium-page › page/jshandle-properties.spec.ts › getProperties should work [fail] -bidi-chromium-page › page/jshandle-properties.spec.ts › getProperties should return empty map for non-objects [pass] -bidi-chromium-page › page/jshandle-properties.spec.ts › getProperties should return even non-own properties [fail] -bidi-chromium-page › page/jshandle-properties.spec.ts › getProperties should work with elements [fail] -bidi-chromium-page › page/jshandle-to-string.spec.ts › should work for primitives [pass] -bidi-chromium-page › page/jshandle-to-string.spec.ts › should work for complicated objects [fail] bidi-chromium-page › page/jshandle-to-string.spec.ts › should beautifully render sparse arrays [fail] +bidi-chromium-page › page/jshandle-to-string.spec.ts › should work for complicated objects [fail] +bidi-chromium-page › page/jshandle-to-string.spec.ts › should work for primitives [pass] bidi-chromium-page › page/jshandle-to-string.spec.ts › should work for promises [fail] bidi-chromium-page › page/jshandle-to-string.spec.ts › should work with different subtypes @smoke [fail] bidi-chromium-page › page/jshandle-to-string.spec.ts › should work with previewable subtypes [fail] -bidi-chromium-page › page/locator-click.spec.ts › should work @smoke [pass] -bidi-chromium-page › page/locator-click.spec.ts › should work with Node removed [pass] -bidi-chromium-page › page/locator-click.spec.ts › should work for TextNodes [fail] -bidi-chromium-page › page/locator-click.spec.ts › should double click the button [pass] -bidi-chromium-page › page/locator-click.spec.ts › should click if the target element is removed in pointerup event [pass] bidi-chromium-page › page/locator-click.spec.ts › should click if the target element is removed in pointerdown event [pass] -bidi-chromium-page › page/locator-convenience.spec.ts › should have a nice preview [pass] +bidi-chromium-page › page/locator-click.spec.ts › should click if the target element is removed in pointerup event [pass] +bidi-chromium-page › page/locator-click.spec.ts › should double click the button [pass] +bidi-chromium-page › page/locator-click.spec.ts › should work @smoke [pass] +bidi-chromium-page › page/locator-click.spec.ts › should work for TextNodes [fail] +bidi-chromium-page › page/locator-click.spec.ts › should work with Node removed [pass] +bidi-chromium-page › page/locator-convenience.spec.ts › allInnerTexts should work [pass] +bidi-chromium-page › page/locator-convenience.spec.ts › allTextContents should work [pass] bidi-chromium-page › page/locator-convenience.spec.ts › getAttribute should work [pass] -bidi-chromium-page › page/locator-convenience.spec.ts › inputValue should work [pass] bidi-chromium-page › page/locator-convenience.spec.ts › innerHTML should work [pass] -bidi-chromium-page › page/locator-convenience.spec.ts › innerText should work [pass] -bidi-chromium-page › page/locator-convenience.spec.ts › innerText should throw [pass] bidi-chromium-page › page/locator-convenience.spec.ts › innerText should produce log [pass] -bidi-chromium-page › page/locator-convenience.spec.ts › textContent should work [pass] -bidi-chromium-page › page/locator-convenience.spec.ts › isEnabled and isDisabled should work [pass] -bidi-chromium-page › page/locator-convenience.spec.ts › isEditable should work [pass] +bidi-chromium-page › page/locator-convenience.spec.ts › innerText should throw [pass] +bidi-chromium-page › page/locator-convenience.spec.ts › innerText should work [pass] +bidi-chromium-page › page/locator-convenience.spec.ts › inputValue should work [pass] bidi-chromium-page › page/locator-convenience.spec.ts › isChecked should work [pass] bidi-chromium-page › page/locator-convenience.spec.ts › isChecked should work for indeterminate input [pass] -bidi-chromium-page › page/locator-convenience.spec.ts › allTextContents should work [pass] -bidi-chromium-page › page/locator-convenience.spec.ts › allInnerTexts should work [pass] +bidi-chromium-page › page/locator-convenience.spec.ts › isEditable should work [pass] +bidi-chromium-page › page/locator-convenience.spec.ts › isEnabled and isDisabled should work [pass] +bidi-chromium-page › page/locator-convenience.spec.ts › should have a nice preview [pass] bidi-chromium-page › page/locator-convenience.spec.ts › should return page [pass] +bidi-chromium-page › page/locator-convenience.spec.ts › textContent should work [pass] bidi-chromium-page › page/locator-element-handle.spec.ts › should query existing element @smoke [pass] bidi-chromium-page › page/locator-element-handle.spec.ts › should query existing elements [fail] bidi-chromium-page › page/locator-element-handle.spec.ts › should return empty array for non-existing elements [fail] bidi-chromium-page › page/locator-element-handle.spec.ts › xpath should query existing element [pass] bidi-chromium-page › page/locator-element-handle.spec.ts › xpath should return null for non-existing element [fail] -bidi-chromium-page › page/locator-evaluate.spec.ts › should work @smoke [pass] -bidi-chromium-page › page/locator-evaluate.spec.ts › should retrieve content from subtree [pass] -bidi-chromium-page › page/locator-evaluate.spec.ts › should work for all [pass] -bidi-chromium-page › page/locator-evaluate.spec.ts › should retrieve content from subtree for all [pass] bidi-chromium-page › page/locator-evaluate.spec.ts › should not throw in case of missing selector for all [pass] -bidi-chromium-page › page/locator-frame.spec.ts › should work for iframe @smoke [fail] -bidi-chromium-page › page/locator-frame.spec.ts › should work for nested iframe [fail] -bidi-chromium-page › page/locator-frame.spec.ts › should work for $ and $$ [fail] -bidi-chromium-page › page/locator-frame.spec.ts › should wait for frame [pass] -bidi-chromium-page › page/locator-frame.spec.ts › should wait for frame 2 [fail] -bidi-chromium-page › page/locator-frame.spec.ts › should wait for frame to go [fail] +bidi-chromium-page › page/locator-evaluate.spec.ts › should retrieve content from subtree [pass] +bidi-chromium-page › page/locator-evaluate.spec.ts › should retrieve content from subtree for all [pass] +bidi-chromium-page › page/locator-evaluate.spec.ts › should work @smoke [pass] +bidi-chromium-page › page/locator-evaluate.spec.ts › should work for all [pass] +bidi-chromium-page › page/locator-frame.spec.ts › click should survive frame reattach [fail] +bidi-chromium-page › page/locator-frame.spec.ts › click should survive iframe navigation [fail] +bidi-chromium-page › page/locator-frame.spec.ts › frameLocator.owner should work [fail] +bidi-chromium-page › page/locator-frame.spec.ts › getBy coverage [fail] +bidi-chromium-page › page/locator-frame.spec.ts › locator.contentFrame should work [fail] +bidi-chromium-page › page/locator-frame.spec.ts › locator.frameLocator should not throw on first/last/nth [fail] +bidi-chromium-page › page/locator-frame.spec.ts › locator.frameLocator should throw on ambiguity [fail] +bidi-chromium-page › page/locator-frame.spec.ts › locator.frameLocator should work for iframe [fail] +bidi-chromium-page › page/locator-frame.spec.ts › should click in lazy iframe [fail] +bidi-chromium-page › page/locator-frame.spec.ts › should non work for non-frame [fail] bidi-chromium-page › page/locator-frame.spec.ts › should not wait for frame [pass] bidi-chromium-page › page/locator-frame.spec.ts › should not wait for frame 2 [pass] bidi-chromium-page › page/locator-frame.spec.ts › should not wait for frame 3 [pass] -bidi-chromium-page › page/locator-frame.spec.ts › should click in lazy iframe [fail] -bidi-chromium-page › page/locator-frame.spec.ts › waitFor should survive frame reattach [fail] -bidi-chromium-page › page/locator-frame.spec.ts › click should survive frame reattach [fail] -bidi-chromium-page › page/locator-frame.spec.ts › click should survive iframe navigation [fail] -bidi-chromium-page › page/locator-frame.spec.ts › should non work for non-frame [fail] -bidi-chromium-page › page/locator-frame.spec.ts › locator.frameLocator should work for iframe [fail] -bidi-chromium-page › page/locator-frame.spec.ts › locator.frameLocator should throw on ambiguity [fail] -bidi-chromium-page › page/locator-frame.spec.ts › locator.frameLocator should not throw on first/last/nth [fail] -bidi-chromium-page › page/locator-frame.spec.ts › getBy coverage [fail] -bidi-chromium-page › page/locator-frame.spec.ts › wait for hidden should succeed when frame is not in dom [pass] +bidi-chromium-page › page/locator-frame.spec.ts › should wait for frame [pass] +bidi-chromium-page › page/locator-frame.spec.ts › should wait for frame 2 [fail] +bidi-chromium-page › page/locator-frame.spec.ts › should wait for frame to go [fail] +bidi-chromium-page › page/locator-frame.spec.ts › should work for $ and $$ [fail] +bidi-chromium-page › page/locator-frame.spec.ts › should work for iframe @smoke [fail] +bidi-chromium-page › page/locator-frame.spec.ts › should work for nested iframe [fail] bidi-chromium-page › page/locator-frame.spec.ts › should work with COEP/COOP/CORP isolated iframe [fail] -bidi-chromium-page › page/locator-frame.spec.ts › locator.contentFrame should work [fail] -bidi-chromium-page › page/locator-frame.spec.ts › frameLocator.owner should work [fail] +bidi-chromium-page › page/locator-frame.spec.ts › wait for hidden should succeed when frame is not in dom [pass] +bidi-chromium-page › page/locator-frame.spec.ts › waitFor should survive frame reattach [fail] bidi-chromium-page › page/locator-highlight.spec.ts › should highlight locator [pass] bidi-chromium-page › page/locator-is-visible.spec.ts › isVisible and isHidden should work [pass] -bidi-chromium-page › page/locator-is-visible.spec.ts › isVisible should be true for opacity:0 [pass] -bidi-chromium-page › page/locator-is-visible.spec.ts › isVisible should be true for element outside view [pass] bidi-chromium-page › page/locator-is-visible.spec.ts › isVisible and isHidden should work with details [pass] +bidi-chromium-page › page/locator-is-visible.spec.ts › isVisible during navigation should not throw [timeout] bidi-chromium-page › page/locator-is-visible.spec.ts › isVisible inside a button [pass] bidi-chromium-page › page/locator-is-visible.spec.ts › isVisible inside a role=button [pass] -bidi-chromium-page › page/locator-is-visible.spec.ts › isVisible during navigation should not throw [timeout] +bidi-chromium-page › page/locator-is-visible.spec.ts › isVisible should be true for element outside view [pass] +bidi-chromium-page › page/locator-is-visible.spec.ts › isVisible should be true for opacity:0 [pass] bidi-chromium-page › page/locator-is-visible.spec.ts › isVisible with invalid selector should throw [pass] bidi-chromium-page › page/locator-list.spec.ts › locator.all should work [pass] -bidi-chromium-page › page/locator-misc-1.spec.ts › should hover @smoke [pass] -bidi-chromium-page › page/locator-misc-1.spec.ts › should hover when Node is removed [pass] -bidi-chromium-page › page/locator-misc-1.spec.ts › should fill input [pass] -bidi-chromium-page › page/locator-misc-1.spec.ts › should fill input when Node is removed [pass] -bidi-chromium-page › page/locator-misc-1.spec.ts › should clear input [pass] +bidi-chromium-page › page/locator-misc-1.spec.ts › focus should respect strictness [pass] bidi-chromium-page › page/locator-misc-1.spec.ts › should check the box [pass] bidi-chromium-page › page/locator-misc-1.spec.ts › should check the box using setChecked [pass] -bidi-chromium-page › page/locator-misc-1.spec.ts › should uncheck the box [pass] -bidi-chromium-page › page/locator-misc-1.spec.ts › should select single option [pass] -bidi-chromium-page › page/locator-misc-1.spec.ts › should focus and blur a button [fail] -bidi-chromium-page › page/locator-misc-1.spec.ts › focus should respect strictness [pass] +bidi-chromium-page › page/locator-misc-1.spec.ts › should clear input [pass] bidi-chromium-page › page/locator-misc-1.spec.ts › should dispatch click event via ElementHandles [pass] +bidi-chromium-page › page/locator-misc-1.spec.ts › should fill input [pass] +bidi-chromium-page › page/locator-misc-1.spec.ts › should fill input when Node is removed [pass] +bidi-chromium-page › page/locator-misc-1.spec.ts › should focus and blur a button [fail] +bidi-chromium-page › page/locator-misc-1.spec.ts › should hover @smoke [pass] +bidi-chromium-page › page/locator-misc-1.spec.ts › should hover when Node is removed [pass] +bidi-chromium-page › page/locator-misc-1.spec.ts › should select single option [pass] +bidi-chromium-page › page/locator-misc-1.spec.ts › should uncheck the box [pass] bidi-chromium-page › page/locator-misc-1.spec.ts › should upload the file [timeout] +bidi-chromium-page › page/locator-misc-2.spec.ts › Locator.locator() and FrameLocator.locator() should accept locator [pass] +bidi-chromium-page › page/locator-misc-2.spec.ts › locator.count should work with deleted Map in main world [pass] +bidi-chromium-page › page/locator-misc-2.spec.ts › should combine visible with other selectors [pass] bidi-chromium-page › page/locator-misc-2.spec.ts › should press @smoke [pass] +bidi-chromium-page › page/locator-misc-2.spec.ts › should pressSequentially [pass] +bidi-chromium-page › page/locator-misc-2.spec.ts › should return bounding box [pass] bidi-chromium-page › page/locator-misc-2.spec.ts › should scroll into view [pass] bidi-chromium-page › page/locator-misc-2.spec.ts › should scroll zero-sized element into view [pass] bidi-chromium-page › page/locator-misc-2.spec.ts › should select textarea [pass] -bidi-chromium-page › page/locator-misc-2.spec.ts › should type [pass] -bidi-chromium-page › page/locator-misc-2.spec.ts › should pressSequentially [pass] bidi-chromium-page › page/locator-misc-2.spec.ts › should take screenshot [fail] -bidi-chromium-page › page/locator-misc-2.spec.ts › should return bounding box [pass] +bidi-chromium-page › page/locator-misc-2.spec.ts › should type [pass] bidi-chromium-page › page/locator-misc-2.spec.ts › should waitFor [pass] bidi-chromium-page › page/locator-misc-2.spec.ts › should waitFor hidden [pass] -bidi-chromium-page › page/locator-misc-2.spec.ts › should combine visible with other selectors [pass] -bidi-chromium-page › page/locator-misc-2.spec.ts › locator.count should work with deleted Map in main world [pass] -bidi-chromium-page › page/locator-misc-2.spec.ts › Locator.locator() and FrameLocator.locator() should accept locator [pass] +bidi-chromium-page › page/locator-query.spec.ts › alias methods coverage [pass] +bidi-chromium-page › page/locator-query.spec.ts › should allow some, but not all nested frameLocators [pass] +bidi-chromium-page › page/locator-query.spec.ts › should enforce same frame for has/leftOf/rightOf/above/below/near [pass] +bidi-chromium-page › page/locator-query.spec.ts › should filter by case-insensitive regex in a child [pass] +bidi-chromium-page › page/locator-query.spec.ts › should filter by case-insensitive regex in multiple children [pass] +bidi-chromium-page › page/locator-query.spec.ts › should filter by regex [pass] +bidi-chromium-page › page/locator-query.spec.ts › should filter by regex and regexp flags [pass] +bidi-chromium-page › page/locator-query.spec.ts › should filter by regex with a single quote [pass] +bidi-chromium-page › page/locator-query.spec.ts › should filter by regex with quotes [pass] +bidi-chromium-page › page/locator-query.spec.ts › should filter by regex with special symbols [pass] +bidi-chromium-page › page/locator-query.spec.ts › should filter by text [pass] +bidi-chromium-page › page/locator-query.spec.ts › should filter by text 2 [pass] +bidi-chromium-page › page/locator-query.spec.ts › should filter by text with quotes [pass] bidi-chromium-page › page/locator-query.spec.ts › should respect first() and last() @smoke [pass] bidi-chromium-page › page/locator-query.spec.ts › should respect nth() [pass] +bidi-chromium-page › page/locator-query.spec.ts › should support has:locator [pass] +bidi-chromium-page › page/locator-query.spec.ts › should support locator.and [pass] +bidi-chromium-page › page/locator-query.spec.ts › should support locator.filter [pass] +bidi-chromium-page › page/locator-query.spec.ts › should support locator.locator with and/or [pass] +bidi-chromium-page › page/locator-query.spec.ts › should support locator.or [pass] bidi-chromium-page › page/locator-query.spec.ts › should throw on capture w/ nth() [pass] bidi-chromium-page › page/locator-query.spec.ts › should throw on due to strictness [pass] bidi-chromium-page › page/locator-query.spec.ts › should throw on due to strictness 2 [pass] -bidi-chromium-page › page/locator-query.spec.ts › should filter by text [pass] -bidi-chromium-page › page/locator-query.spec.ts › should filter by text 2 [pass] -bidi-chromium-page › page/locator-query.spec.ts › should filter by regex [pass] -bidi-chromium-page › page/locator-query.spec.ts › should filter by text with quotes [pass] -bidi-chromium-page › page/locator-query.spec.ts › should filter by regex with quotes [pass] -bidi-chromium-page › page/locator-query.spec.ts › should filter by regex with a single quote [pass] -bidi-chromium-page › page/locator-query.spec.ts › should filter by regex and regexp flags [pass] -bidi-chromium-page › page/locator-query.spec.ts › should filter by case-insensitive regex in a child [pass] -bidi-chromium-page › page/locator-query.spec.ts › should filter by case-insensitive regex in multiple children [pass] -bidi-chromium-page › page/locator-query.spec.ts › should filter by regex with special symbols [pass] -bidi-chromium-page › page/locator-query.spec.ts › should support has:locator [pass] -bidi-chromium-page › page/locator-query.spec.ts › should support locator.filter [pass] -bidi-chromium-page › page/locator-query.spec.ts › should support locator.and [pass] -bidi-chromium-page › page/locator-query.spec.ts › should support locator.or [pass] -bidi-chromium-page › page/locator-query.spec.ts › should support locator.locator with and/or [pass] -bidi-chromium-page › page/locator-query.spec.ts › should allow some, but not all nested frameLocators [pass] -bidi-chromium-page › page/locator-query.spec.ts › should enforce same frame for has/leftOf/rightOf/above/below/near [pass] -bidi-chromium-page › page/locator-query.spec.ts › alias methods coverage [pass] bidi-chromium-page › page/matchers.misc.spec.ts › should outlive frame navigation [pass] bidi-chromium-page › page/matchers.misc.spec.ts › should print no-locator-resolved error when locator matcher did not resolve to any element [pass] -bidi-chromium-page › page/network-post-data.spec.ts › should return correct postData buffer for utf-8 body [fail] -bidi-chromium-page › page/network-post-data.spec.ts › should return post data w/o content-type @smoke [fail] -bidi-chromium-page › page/network-post-data.spec.ts › should throw on invalid JSON in post data [fail] -bidi-chromium-page › page/network-post-data.spec.ts › should return post data for PUT requests [fail] bidi-chromium-page › page/network-post-data.spec.ts › should get post data for file/blob [fail] bidi-chromium-page › page/network-post-data.spec.ts › should get post data for navigator.sendBeacon api calls [fail] -bidi-chromium-page › page/page-accessibility.spec.ts › should work @smoke [fail] -bidi-chromium-page › page/page-accessibility.spec.ts › should work with regular text [fail] -bidi-chromium-page › page/page-accessibility.spec.ts › roledescription [fail] -bidi-chromium-page › page/page-accessibility.spec.ts › orientation [fail] +bidi-chromium-page › page/network-post-data.spec.ts › should return correct postData buffer for utf-8 body [fail] +bidi-chromium-page › page/network-post-data.spec.ts › should return post data for PUT requests [fail] +bidi-chromium-page › page/network-post-data.spec.ts › should return post data w/o content-type @smoke [fail] +bidi-chromium-page › page/network-post-data.spec.ts › should throw on invalid JSON in post data [fail] bidi-chromium-page › page/page-accessibility.spec.ts › autocomplete [fail] -bidi-chromium-page › page/page-accessibility.spec.ts › multiselectable [fail] -bidi-chromium-page › page/page-accessibility.spec.ts › keyshortcuts [fail] -bidi-chromium-page › page/page-accessibility.spec.ts › should not report text nodes inside controls [fail] -bidi-chromium-page › page/page-accessibility.spec.ts › rich text editable fields should have children [fail] -bidi-chromium-page › page/page-accessibility.spec.ts › rich text editable fields with role should have children [fail] -bidi-chromium-page › page/page-accessibility.spec.ts › non editable textbox with role and tabIndex and label should not have children [fail] bidi-chromium-page › page/page-accessibility.spec.ts › checkbox with and tabIndex and label should not have children [fail] bidi-chromium-page › page/page-accessibility.spec.ts › checkbox without label should not have children [fail] +bidi-chromium-page › page/page-accessibility.spec.ts › keyshortcuts [fail] +bidi-chromium-page › page/page-accessibility.spec.ts › multiselectable [fail] +bidi-chromium-page › page/page-accessibility.spec.ts › non editable textbox with role and tabIndex and label should not have children [fail] +bidi-chromium-page › page/page-accessibility.spec.ts › orientation [fail] +bidi-chromium-page › page/page-accessibility.spec.ts › rich text editable fields should have children [fail] +bidi-chromium-page › page/page-accessibility.spec.ts › rich text editable fields with role should have children [fail] +bidi-chromium-page › page/page-accessibility.spec.ts › roledescription [fail] +bidi-chromium-page › page/page-accessibility.spec.ts › should not report text nodes inside controls [fail] +bidi-chromium-page › page/page-accessibility.spec.ts › should return null when the element is no longer in DOM [fail] +bidi-chromium-page › page/page-accessibility.spec.ts › should show uninteresting nodes [fail] +bidi-chromium-page › page/page-accessibility.spec.ts › should work @smoke [fail] bidi-chromium-page › page/page-accessibility.spec.ts › should work a button [fail] bidi-chromium-page › page/page-accessibility.spec.ts › should work an input [fail] bidi-chromium-page › page/page-accessibility.spec.ts › should work on a menu [fail] -bidi-chromium-page › page/page-accessibility.spec.ts › should return null when the element is no longer in DOM [fail] -bidi-chromium-page › page/page-accessibility.spec.ts › should show uninteresting nodes [fail] bidi-chromium-page › page/page-accessibility.spec.ts › should work when there is a title [fail] bidi-chromium-page › page/page-accessibility.spec.ts › should work with aria-invalid accessibility tree [fail] -bidi-chromium-page › page/page-add-init-script.spec.ts › should evaluate before anything else on the page [pass] -bidi-chromium-page › page/page-add-init-script.spec.ts › should work with a path [pass] -bidi-chromium-page › page/page-add-init-script.spec.ts › should work with content @smoke [pass] -bidi-chromium-page › page/page-add-init-script.spec.ts › should throw without path and content [pass] -bidi-chromium-page › page/page-add-init-script.spec.ts › should work with trailing comments [pass] -bidi-chromium-page › page/page-add-init-script.spec.ts › should support multiple scripts [pass] -bidi-chromium-page › page/page-add-init-script.spec.ts › should work with CSP [pass] -bidi-chromium-page › page/page-add-init-script.spec.ts › should work after a cross origin navigation [pass] +bidi-chromium-page › page/page-accessibility.spec.ts › should work with regular text [fail] bidi-chromium-page › page/page-add-init-script.spec.ts › init script should run only once in iframe [pass] bidi-chromium-page › page/page-add-init-script.spec.ts › init script should run only once in popup [fail] -bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work [pass] -bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work with a custom check [pass] -bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work with locator.hover() [pass] +bidi-chromium-page › page/page-add-init-script.spec.ts › should evaluate before anything else on the page [pass] +bidi-chromium-page › page/page-add-init-script.spec.ts › should support multiple scripts [pass] +bidi-chromium-page › page/page-add-init-script.spec.ts › should throw without path and content [pass] +bidi-chromium-page › page/page-add-init-script.spec.ts › should work after a cross origin navigation [pass] +bidi-chromium-page › page/page-add-init-script.spec.ts › should work with CSP [pass] +bidi-chromium-page › page/page-add-init-script.spec.ts › should work with a path [pass] +bidi-chromium-page › page/page-add-init-script.spec.ts › should work with content @smoke [pass] +bidi-chromium-page › page/page-add-init-script.spec.ts › should work with trailing comments [pass] bidi-chromium-page › page/page-add-locator-handler.spec.ts › should not work with force:true [pass] -bidi-chromium-page › page/page-add-locator-handler.spec.ts › should throw when page closes [pass] +bidi-chromium-page › page/page-add-locator-handler.spec.ts › should removeLocatorHandler [pass] bidi-chromium-page › page/page-add-locator-handler.spec.ts › should throw when handler times out [pass] -bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work with toBeVisible [pass] -bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work with toHaveScreenshot [fail] -bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work when owner frame detaches [pass] -bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work with times: option [pass] +bidi-chromium-page › page/page-add-locator-handler.spec.ts › should throw when page closes [pass] bidi-chromium-page › page/page-add-locator-handler.spec.ts › should wait for hidden by default [pass] bidi-chromium-page › page/page-add-locator-handler.spec.ts › should wait for hidden by default 2 [pass] +bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work [pass] +bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work when owner frame detaches [pass] +bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work with a custom check [pass] +bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work with locator.hover() [pass] bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work with noWaitAfter [pass] -bidi-chromium-page › page/page-add-locator-handler.spec.ts › should removeLocatorHandler [pass] +bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work with times: option [pass] +bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work with toBeVisible [pass] +bidi-chromium-page › page/page-add-locator-handler.spec.ts › should work with toHaveScreenshot [fail] +bidi-chromium-page › page/page-add-script-tag.spec.ts › should include sourceURL when path is provided [pass] +bidi-chromium-page › page/page-add-script-tag.spec.ts › should throw a nice error when the request fails [pass] +bidi-chromium-page › page/page-add-script-tag.spec.ts › should throw an error if loading from url fail [pass] bidi-chromium-page › page/page-add-script-tag.spec.ts › should throw an error if no options are provided [pass] +bidi-chromium-page › page/page-add-script-tag.spec.ts › should throw when added with URL to the CSP page [pass] +bidi-chromium-page › page/page-add-script-tag.spec.ts › should throw when added with content to the CSP page [fail] +bidi-chromium-page › page/page-add-script-tag.spec.ts › should work with a content and type=module [pass] +bidi-chromium-page › page/page-add-script-tag.spec.ts › should work with a path [pass] +bidi-chromium-page › page/page-add-script-tag.spec.ts › should work with a path and type=module [pass] bidi-chromium-page › page/page-add-script-tag.spec.ts › should work with a url [pass] bidi-chromium-page › page/page-add-script-tag.spec.ts › should work with a url and type=module [pass] -bidi-chromium-page › page/page-add-script-tag.spec.ts › should work with a path and type=module [pass] -bidi-chromium-page › page/page-add-script-tag.spec.ts › should work with a content and type=module [pass] -bidi-chromium-page › page/page-add-script-tag.spec.ts › should throw an error if loading from url fail [pass] -bidi-chromium-page › page/page-add-script-tag.spec.ts › should work with a path [pass] -bidi-chromium-page › page/page-add-script-tag.spec.ts › should include sourceURL when path is provided [pass] bidi-chromium-page › page/page-add-script-tag.spec.ts › should work with content [pass] -bidi-chromium-page › page/page-add-script-tag.spec.ts › should throw when added with content to the CSP page [fail] -bidi-chromium-page › page/page-add-script-tag.spec.ts › should throw when added with URL to the CSP page [pass] -bidi-chromium-page › page/page-add-script-tag.spec.ts › should throw a nice error when the request fails [pass] -bidi-chromium-page › page/page-add-style-tag.spec.ts › should throw an error if no options are provided [pass] -bidi-chromium-page › page/page-add-style-tag.spec.ts › should work with a url @smoke [pass] -bidi-chromium-page › page/page-add-style-tag.spec.ts › should throw an error if loading from url fail [pass] -bidi-chromium-page › page/page-add-style-tag.spec.ts › should work with a path [pass] bidi-chromium-page › page/page-add-style-tag.spec.ts › should include sourceURL when path is provided [pass] -bidi-chromium-page › page/page-add-style-tag.spec.ts › should work with content [pass] -bidi-chromium-page › page/page-add-style-tag.spec.ts › should throw when added with content to the CSP page [pass] +bidi-chromium-page › page/page-add-style-tag.spec.ts › should throw an error if loading from url fail [pass] +bidi-chromium-page › page/page-add-style-tag.spec.ts › should throw an error if no options are provided [pass] bidi-chromium-page › page/page-add-style-tag.spec.ts › should throw when added with URL to the CSP page [pass] -bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should await navigation when clicking anchor [pass] -bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should not stall on JS navigation link [pass] +bidi-chromium-page › page/page-add-style-tag.spec.ts › should throw when added with content to the CSP page [pass] +bidi-chromium-page › page/page-add-style-tag.spec.ts › should work with a path [pass] +bidi-chromium-page › page/page-add-style-tag.spec.ts › should work with a url @smoke [pass] +bidi-chromium-page › page/page-add-style-tag.spec.ts › should work with content [pass] bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should await cross-process navigation when clicking anchor [pass] bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should await form-get on click [pass] bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should await form-post on click [pass] -bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should work with noWaitAfter: true [pass] -bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should work with dblclick without noWaitAfter when navigation is stalled [pass] -bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should work with waitForLoadState(load) [pass] -bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should work with goto following click [pass] +bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should await navigation when clicking anchor [pass] +bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should not stall on JS navigation link [pass] bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should report navigation in the log when clicking anchor [pass] -bidi-chromium-page › page/page-autowaiting-no-hang.spec.ts › clicking on links which do not commit navigation [pass] -bidi-chromium-page › page/page-autowaiting-no-hang.spec.ts › calling window.stop async [pass] -bidi-chromium-page › page/page-autowaiting-no-hang.spec.ts › calling window.stop sync [pass] +bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should work with dblclick without noWaitAfter when navigation is stalled [pass] +bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should work with goto following click [pass] +bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should work with noWaitAfter: true [pass] +bidi-chromium-page › page/page-autowaiting-basic.spec.ts › should work with waitForLoadState(load) [pass] bidi-chromium-page › page/page-autowaiting-no-hang.spec.ts › assigning location to about:blank [pass] bidi-chromium-page › page/page-autowaiting-no-hang.spec.ts › assigning location to about:blank after non-about:blank [pass] bidi-chromium-page › page/page-autowaiting-no-hang.spec.ts › calling window.open and window.close [pass] +bidi-chromium-page › page/page-autowaiting-no-hang.spec.ts › calling window.stop async [pass] +bidi-chromium-page › page/page-autowaiting-no-hang.spec.ts › calling window.stop sync [pass] +bidi-chromium-page › page/page-autowaiting-no-hang.spec.ts › clicking on links which do not commit navigation [pass] bidi-chromium-page › page/page-autowaiting-no-hang.spec.ts › opening a popup [pass] -bidi-chromium-page › page/page-basic.spec.ts › should reject all promises when page is closed [fail] -bidi-chromium-page › page/page-basic.spec.ts › should set the page close state [pass] -bidi-chromium-page › page/page-basic.spec.ts › should pass page to close event [pass] -bidi-chromium-page › page/page-basic.spec.ts › should terminate network waiters [pass] -bidi-chromium-page › page/page-basic.spec.ts › should be callable twice [pass] -bidi-chromium-page › page/page-basic.spec.ts › should fire load when expected [pass] bidi-chromium-page › page/page-basic.spec.ts › async stacks should work [pass] -bidi-chromium-page › page/page-basic.spec.ts › should provide access to the opener page [pass] -bidi-chromium-page › page/page-basic.spec.ts › should return null if parent page has been closed [pass] -bidi-chromium-page › page/page-basic.spec.ts › should fire domcontentloaded when expected [pass] -bidi-chromium-page › page/page-basic.spec.ts › should pass self as argument to domcontentloaded event [pass] -bidi-chromium-page › page/page-basic.spec.ts › should pass self as argument to load event [pass] -bidi-chromium-page › page/page-basic.spec.ts › should fail with error upon disconnect [pass] -bidi-chromium-page › page/page-basic.spec.ts › page.url should work [fail] -bidi-chromium-page › page/page-basic.spec.ts › page.url should include hashes [pass] -bidi-chromium-page › page/page-basic.spec.ts › page.title should return the page title [pass] -bidi-chromium-page › page/page-basic.spec.ts › page.close should work with window.close [pass] -bidi-chromium-page › page/page-basic.spec.ts › page.close should work with page.close [pass] -bidi-chromium-page › page/page-basic.spec.ts › page.frame should respect name [fail] -bidi-chromium-page › page/page-basic.spec.ts › page.frame should respect url [pass] -bidi-chromium-page › page/page-basic.spec.ts › should have sane user agent [fail] -bidi-chromium-page › page/page-basic.spec.ts › page.press should work [pass] -bidi-chromium-page › page/page-basic.spec.ts › page.press should work for Enter [pass] bidi-chromium-page › page/page-basic.spec.ts › frame.press should work [fail] bidi-chromium-page › page/page-basic.spec.ts › has navigator.webdriver set to true [pass] +bidi-chromium-page › page/page-basic.spec.ts › page.close should work with page.close [pass] +bidi-chromium-page › page/page-basic.spec.ts › page.close should work with window.close [pass] +bidi-chromium-page › page/page-basic.spec.ts › page.frame should respect name [fail] +bidi-chromium-page › page/page-basic.spec.ts › page.frame should respect url [pass] +bidi-chromium-page › page/page-basic.spec.ts › page.press should work [pass] +bidi-chromium-page › page/page-basic.spec.ts › page.press should work for Enter [pass] +bidi-chromium-page › page/page-basic.spec.ts › page.title should return the page title [pass] +bidi-chromium-page › page/page-basic.spec.ts › page.url should include hashes [pass] +bidi-chromium-page › page/page-basic.spec.ts › page.url should work [fail] +bidi-chromium-page › page/page-basic.spec.ts › should be callable twice [pass] +bidi-chromium-page › page/page-basic.spec.ts › should fail with error upon disconnect [pass] +bidi-chromium-page › page/page-basic.spec.ts › should fire domcontentloaded when expected [pass] +bidi-chromium-page › page/page-basic.spec.ts › should fire load when expected [pass] +bidi-chromium-page › page/page-basic.spec.ts › should have sane user agent [fail] bidi-chromium-page › page/page-basic.spec.ts › should iterate over page properties [pass] -bidi-chromium-page › page/page-check.spec.ts › should check the box @smoke [pass] -bidi-chromium-page › page/page-check.spec.ts › should not check the checked box [pass] -bidi-chromium-page › page/page-check.spec.ts › should uncheck the box [pass] -bidi-chromium-page › page/page-check.spec.ts › should not uncheck the unchecked box [pass] +bidi-chromium-page › page/page-basic.spec.ts › should pass page to close event [pass] +bidi-chromium-page › page/page-basic.spec.ts › should pass self as argument to domcontentloaded event [pass] +bidi-chromium-page › page/page-basic.spec.ts › should pass self as argument to load event [pass] +bidi-chromium-page › page/page-basic.spec.ts › should provide access to the opener page [pass] +bidi-chromium-page › page/page-basic.spec.ts › should reject all promises when page is closed [fail] +bidi-chromium-page › page/page-basic.spec.ts › should return null if parent page has been closed [pass] +bidi-chromium-page › page/page-basic.spec.ts › should set the page close state [pass] +bidi-chromium-page › page/page-basic.spec.ts › should terminate network waiters [pass] bidi-chromium-page › page/page-check.spec.ts › should check radio [pass] bidi-chromium-page › page/page-check.spec.ts › should check radio by aria role [pass] -bidi-chromium-page › page/page-check.spec.ts › should uncheck radio by aria role [pass] +bidi-chromium-page › page/page-check.spec.ts › should check the box @smoke [pass] bidi-chromium-page › page/page-check.spec.ts › should check the box by aria role [pass] -bidi-chromium-page › page/page-check.spec.ts › should uncheck the box by aria role [pass] +bidi-chromium-page › page/page-check.spec.ts › should check the box inside a button [pass] +bidi-chromium-page › page/page-check.spec.ts › should check the box using setChecked [pass] +bidi-chromium-page › page/page-check.spec.ts › should check the label with position [pass] +bidi-chromium-page › page/page-check.spec.ts › should not check the checked box [pass] +bidi-chromium-page › page/page-check.spec.ts › should not uncheck the unchecked box [pass] bidi-chromium-page › page/page-check.spec.ts › should throw when not a checkbox [pass] bidi-chromium-page › page/page-check.spec.ts › should throw when not a checkbox 2 [pass] -bidi-chromium-page › page/page-check.spec.ts › should check the box inside a button [pass] -bidi-chromium-page › page/page-check.spec.ts › should check the label with position [pass] +bidi-chromium-page › page/page-check.spec.ts › should uncheck radio by aria role [pass] +bidi-chromium-page › page/page-check.spec.ts › should uncheck the box [pass] +bidi-chromium-page › page/page-check.spec.ts › should uncheck the box by aria role [pass] bidi-chromium-page › page/page-check.spec.ts › trial run should not check [pass] bidi-chromium-page › page/page-check.spec.ts › trial run should not uncheck [pass] -bidi-chromium-page › page/page-check.spec.ts › should check the box using setChecked [pass] bidi-chromium-page › page/page-click-during-navigation.spec.ts › should not fail with internal error upon navigation [pass] -bidi-chromium-page › page/page-click-react.spec.ts › should report that selector does not match anymore [unknown] bidi-chromium-page › page/page-click-react.spec.ts › should not retarget the handle when element is recycled [unknown] -bidi-chromium-page › page/page-click-react.spec.ts › should timeout when click opens alert [pass] -bidi-chromium-page › page/page-click-react.spec.ts › should retarget when element is recycled during hit testing [unknown] -bidi-chromium-page › page/page-click-react.spec.ts › should retarget when element is recycled before enabled check [unknown] bidi-chromium-page › page/page-click-react.spec.ts › should not retarget when element changes on hover [pass] bidi-chromium-page › page/page-click-react.spec.ts › should not retarget when element is recycled on hover [pass] +bidi-chromium-page › page/page-click-react.spec.ts › should report that selector does not match anymore [unknown] +bidi-chromium-page › page/page-click-react.spec.ts › should retarget when element is recycled before enabled check [unknown] +bidi-chromium-page › page/page-click-react.spec.ts › should retarget when element is recycled during hit testing [unknown] +bidi-chromium-page › page/page-click-react.spec.ts › should timeout when click opens alert [pass] +bidi-chromium-page › page/page-click-scroll.spec.ts › should not crash when force-clicking hidden input [pass] bidi-chromium-page › page/page-click-scroll.spec.ts › should not hit scroll bar [pass] bidi-chromium-page › page/page-click-scroll.spec.ts › should scroll into view display:contents [fail] bidi-chromium-page › page/page-click-scroll.spec.ts › should scroll into view display:contents with a child [pass] bidi-chromium-page › page/page-click-scroll.spec.ts › should scroll into view display:contents with position [fail] -bidi-chromium-page › page/page-click-scroll.spec.ts › should not crash when force-clicking hidden input [pass] -bidi-chromium-page › page/page-click-scroll.spec.ts › should scroll into view span element [pass] bidi-chromium-page › page/page-click-scroll.spec.ts › should scroll into view element in iframe [pass] +bidi-chromium-page › page/page-click-scroll.spec.ts › should scroll into view span element [pass] bidi-chromium-page › page/page-click-timeout-1.spec.ts › should avoid side effects after timeout [pass] bidi-chromium-page › page/page-click-timeout-1.spec.ts › should timeout waiting for button to be enabled [pass] bidi-chromium-page › page/page-click-timeout-2.spec.ts › should timeout waiting for display:none to be gone [pass] bidi-chromium-page › page/page-click-timeout-2.spec.ts › should timeout waiting for visibility:hidden to be gone [pass] bidi-chromium-page › page/page-click-timeout-3.spec.ts › should fail when element jumps during hit testing [pass] -bidi-chromium-page › page/page-click-timeout-3.spec.ts › should timeout waiting for hit target [pass] -bidi-chromium-page › page/page-click-timeout-3.spec.ts › should still click when force but hit target is obscured [pass] bidi-chromium-page › page/page-click-timeout-3.spec.ts › should report wrong hit target subtree [pass] -bidi-chromium-page › page/page-click-timeout-4.spec.ts › should timeout waiting for stable position [pass] +bidi-chromium-page › page/page-click-timeout-3.spec.ts › should still click when force but hit target is obscured [pass] +bidi-chromium-page › page/page-click-timeout-3.spec.ts › should timeout waiting for hit target [pass] bidi-chromium-page › page/page-click-timeout-4.spec.ts › should click for the second time after first timeout [pass] -bidi-chromium-page › page/page-click.spec.ts › should click the button @smoke [pass] -bidi-chromium-page › page/page-click.spec.ts › should click button inside frameset [pass] -bidi-chromium-page › page/page-click.spec.ts › should issue clicks in parallel in page and popup [pass] -bidi-chromium-page › page/page-click.spec.ts › should click svg [pass] -bidi-chromium-page › page/page-click.spec.ts › should click the button if window.Node is removed [pass] -bidi-chromium-page › page/page-click.spec.ts › should click on a span with an inline element inside [pass] -bidi-chromium-page › page/page-click.spec.ts › should not throw UnhandledPromiseRejection when page closes [pass] -bidi-chromium-page › page/page-click.spec.ts › should click the 1x1 div [pass] -bidi-chromium-page › page/page-click.spec.ts › should click the button after navigation [pass] -bidi-chromium-page › page/page-click.spec.ts › should click the button after a cross origin navigation [pass] -bidi-chromium-page › page/page-click.spec.ts › should click when one of inline box children is outside of viewport [pass] -bidi-chromium-page › page/page-click.spec.ts › should select the text by triple clicking [pass] -bidi-chromium-page › page/page-click.spec.ts › should click offscreen buttons [pass] -bidi-chromium-page › page/page-click.spec.ts › should waitFor visible when already visible [pass] -bidi-chromium-page › page/page-click.spec.ts › should not wait with force [pass] -bidi-chromium-page › page/page-click.spec.ts › should waitFor display:none to be gone [pass] -bidi-chromium-page › page/page-click.spec.ts › should waitFor visibility:hidden to be gone [pass] -bidi-chromium-page › page/page-click.spec.ts › should waitFor visible when parent is hidden [pass] -bidi-chromium-page › page/page-click.spec.ts › should click wrapped links [pass] -bidi-chromium-page › page/page-click.spec.ts › should click on checkbox input and toggle [pass] -bidi-chromium-page › page/page-click.spec.ts › should click on checkbox label and toggle [pass] -bidi-chromium-page › page/page-click.spec.ts › should scroll and click the button [pass] -bidi-chromium-page › page/page-click.spec.ts › should scroll and click the button with smooth scroll behavior [pass] -bidi-chromium-page › page/page-click.spec.ts › should double click the button [pass] +bidi-chromium-page › page/page-click-timeout-4.spec.ts › should timeout waiting for stable position [pass] +bidi-chromium-page › page/page-click.spec.ts › ensure events are dispatched in the individual tasks [pass] +bidi-chromium-page › page/page-click.spec.ts › should click a button in scrolling container with offset [pass] +bidi-chromium-page › page/page-click.spec.ts › should click a button that is overlaid by a permission popup [pass] bidi-chromium-page › page/page-click.spec.ts › should click a partially obscured button [pass] bidi-chromium-page › page/page-click.spec.ts › should click a rotated button [pass] -bidi-chromium-page › page/page-click.spec.ts › should fire contextmenu event on right click [pass] -bidi-chromium-page › page/page-click.spec.ts › should click links which cause navigation [pass] -bidi-chromium-page › page/page-click.spec.ts › should click the button inside an iframe [pass] -bidi-chromium-page › page/page-click.spec.ts › should click the button with fixed position inside an iframe [timeout] -bidi-chromium-page › page/page-click.spec.ts › should click the button behind sticky header [pass] -bidi-chromium-page › page/page-click.spec.ts › should click the button with px border with offset [pass] -bidi-chromium-page › page/page-click.spec.ts › should click the button with em border with offset [pass] bidi-chromium-page › page/page-click.spec.ts › should click a very large button with offset [pass] -bidi-chromium-page › page/page-click.spec.ts › should click a button in scrolling container with offset [pass] -bidi-chromium-page › page/page-click.spec.ts › should wait for stable position [pass] +bidi-chromium-page › page/page-click.spec.ts › should click an offscreen element when scroll-behavior is smooth [pass] +bidi-chromium-page › page/page-click.spec.ts › should click button inside frameset [pass] +bidi-chromium-page › page/page-click.spec.ts › should click disabled div [pass] +bidi-chromium-page › page/page-click.spec.ts › should click if opened select covers the button [pass] +bidi-chromium-page › page/page-click.spec.ts › should click in a nested transformed iframe [timeout] +bidi-chromium-page › page/page-click.spec.ts › should click in a transformed iframe [timeout] +bidi-chromium-page › page/page-click.spec.ts › should click in a transformed iframe with force [fail] +bidi-chromium-page › page/page-click.spec.ts › should click in an iframe with border [pass] +bidi-chromium-page › page/page-click.spec.ts › should click in an iframe with border 2 [pass] +bidi-chromium-page › page/page-click.spec.ts › should click links which cause navigation [pass] +bidi-chromium-page › page/page-click.spec.ts › should click offscreen buttons [pass] +bidi-chromium-page › page/page-click.spec.ts › should click on a span with an inline element inside [pass] +bidi-chromium-page › page/page-click.spec.ts › should click on checkbox input and toggle [pass] +bidi-chromium-page › page/page-click.spec.ts › should click on checkbox label and toggle [pass] +bidi-chromium-page › page/page-click.spec.ts › should click svg [pass] +bidi-chromium-page › page/page-click.spec.ts › should click the 1x1 div [pass] +bidi-chromium-page › page/page-click.spec.ts › should click the button @smoke [pass] +bidi-chromium-page › page/page-click.spec.ts › should click the button after a cross origin navigation [pass] +bidi-chromium-page › page/page-click.spec.ts › should click the button after navigation [pass] +bidi-chromium-page › page/page-click.spec.ts › should click the button behind sticky header [pass] +bidi-chromium-page › page/page-click.spec.ts › should click the button if window.Node is removed [pass] +bidi-chromium-page › page/page-click.spec.ts › should click the button inside an iframe [pass] +bidi-chromium-page › page/page-click.spec.ts › should click the button when window.innerWidth is corrupted [pass] +bidi-chromium-page › page/page-click.spec.ts › should click the button with em border with offset [pass] +bidi-chromium-page › page/page-click.spec.ts › should click the button with fixed position inside an iframe [timeout] +bidi-chromium-page › page/page-click.spec.ts › should click the button with px border with offset [pass] +bidi-chromium-page › page/page-click.spec.ts › should click when one of inline box children is outside of viewport [pass] +bidi-chromium-page › page/page-click.spec.ts › should click wrapped links [pass] +bidi-chromium-page › page/page-click.spec.ts › should click zero-sized input by label [pass] +bidi-chromium-page › page/page-click.spec.ts › should climb dom for inner label with pointer-events:none [pass] +bidi-chromium-page › page/page-click.spec.ts › should climb up to [role=button] [pass] +bidi-chromium-page › page/page-click.spec.ts › should climb up to a [role=link] [pass] +bidi-chromium-page › page/page-click.spec.ts › should climb up to a anchor [pass] +bidi-chromium-page › page/page-click.spec.ts › should dispatch microtasks in order [pass] +bidi-chromium-page › page/page-click.spec.ts › should double click the button [pass] +bidi-chromium-page › page/page-click.spec.ts › should fail when element detaches after animation [pass] +bidi-chromium-page › page/page-click.spec.ts › should fail when element is animating from outside the viewport with force [pass] +bidi-chromium-page › page/page-click.spec.ts › should fail when obscured and not waiting for hit target [pass] +bidi-chromium-page › page/page-click.spec.ts › should fire contextmenu event on right click [pass] +bidi-chromium-page › page/page-click.spec.ts › should fire contextmenu event on right click in correct order [fail] +bidi-chromium-page › page/page-click.spec.ts › should issue clicks in parallel in page and popup [pass] +bidi-chromium-page › page/page-click.spec.ts › should not hang when frame is detached [pass] +bidi-chromium-page › page/page-click.spec.ts › should not throw UnhandledPromiseRejection when page closes [pass] +bidi-chromium-page › page/page-click.spec.ts › should not throw protocol error when navigating during the click [pass] +bidi-chromium-page › page/page-click.spec.ts › should not wait with force [pass] +bidi-chromium-page › page/page-click.spec.ts › should report nice error when element is detached and force-clicked [pass] +bidi-chromium-page › page/page-click.spec.ts › should retry when element detaches after animation [pass] +bidi-chromium-page › page/page-click.spec.ts › should retry when element is animating from outside the viewport [pass] +bidi-chromium-page › page/page-click.spec.ts › should retry when navigating during the click [pass] +bidi-chromium-page › page/page-click.spec.ts › should scroll and click the button [pass] +bidi-chromium-page › page/page-click.spec.ts › should scroll and click the button with smooth scroll behavior [pass] +bidi-chromium-page › page/page-click.spec.ts › should select the text by triple clicking [pass] +bidi-chromium-page › page/page-click.spec.ts › should update modifiers correctly [pass] +bidi-chromium-page › page/page-click.spec.ts › should wait for BUTTON to be clickable when it has pointer-events:none [pass] +bidi-chromium-page › page/page-click.spec.ts › should wait for LABEL to be clickable when it has pointer-events:none [pass] bidi-chromium-page › page/page-click.spec.ts › should wait for becoming hit target [pass] bidi-chromium-page › page/page-click.spec.ts › should wait for becoming hit target with trial run [pass] -bidi-chromium-page › page/page-click.spec.ts › trial run should work with short timeout [pass] -bidi-chromium-page › page/page-click.spec.ts › trial run should not click [pass] -bidi-chromium-page › page/page-click.spec.ts › trial run should not double click [pass] -bidi-chromium-page › page/page-click.spec.ts › should fail when obscured and not waiting for hit target [pass] bidi-chromium-page › page/page-click.spec.ts › should wait for button to be enabled [pass] bidi-chromium-page › page/page-click.spec.ts › should wait for input to be enabled [pass] bidi-chromium-page › page/page-click.spec.ts › should wait for select to be enabled [pass] -bidi-chromium-page › page/page-click.spec.ts › should click disabled div [pass] -bidi-chromium-page › page/page-click.spec.ts › should wait for BUTTON to be clickable when it has pointer-events:none [pass] -bidi-chromium-page › page/page-click.spec.ts › should wait for LABEL to be clickable when it has pointer-events:none [pass] -bidi-chromium-page › page/page-click.spec.ts › should update modifiers correctly [pass] -bidi-chromium-page › page/page-click.spec.ts › should click an offscreen element when scroll-behavior is smooth [pass] -bidi-chromium-page › page/page-click.spec.ts › should report nice error when element is detached and force-clicked [pass] -bidi-chromium-page › page/page-click.spec.ts › should fail when element detaches after animation [pass] -bidi-chromium-page › page/page-click.spec.ts › should retry when element detaches after animation [pass] -bidi-chromium-page › page/page-click.spec.ts › should retry when element is animating from outside the viewport [pass] -bidi-chromium-page › page/page-click.spec.ts › should fail when element is animating from outside the viewport with force [pass] -bidi-chromium-page › page/page-click.spec.ts › should dispatch microtasks in order [pass] -bidi-chromium-page › page/page-click.spec.ts › should click the button when window.innerWidth is corrupted [pass] -bidi-chromium-page › page/page-click.spec.ts › should click zero-sized input by label [pass] -bidi-chromium-page › page/page-click.spec.ts › should not throw protocol error when navigating during the click [pass] -bidi-chromium-page › page/page-click.spec.ts › should retry when navigating during the click [pass] -bidi-chromium-page › page/page-click.spec.ts › should not hang when frame is detached [pass] -bidi-chromium-page › page/page-click.spec.ts › should climb dom for inner label with pointer-events:none [pass] -bidi-chromium-page › page/page-click.spec.ts › should climb up to [role=button] [pass] -bidi-chromium-page › page/page-click.spec.ts › should climb up to a anchor [pass] -bidi-chromium-page › page/page-click.spec.ts › should climb up to a [role=link] [pass] -bidi-chromium-page › page/page-click.spec.ts › should click in an iframe with border [pass] -bidi-chromium-page › page/page-click.spec.ts › should click in an iframe with border 2 [pass] -bidi-chromium-page › page/page-click.spec.ts › should click in a transformed iframe [timeout] -bidi-chromium-page › page/page-click.spec.ts › should click a button that is overlaid by a permission popup [pass] -bidi-chromium-page › page/page-click.spec.ts › should click in a transformed iframe with force [fail] -bidi-chromium-page › page/page-click.spec.ts › should click in a nested transformed iframe [timeout] -bidi-chromium-page › page/page-click.spec.ts › ensure events are dispatched in the individual tasks [pass] -bidi-chromium-page › page/page-click.spec.ts › should click if opened select covers the button [pass] -bidi-chromium-page › page/page-click.spec.ts › should fire contextmenu event on right click in correct order [fail] +bidi-chromium-page › page/page-click.spec.ts › should wait for stable position [pass] +bidi-chromium-page › page/page-click.spec.ts › should waitFor display:none to be gone [pass] +bidi-chromium-page › page/page-click.spec.ts › should waitFor visibility:hidden to be gone [pass] +bidi-chromium-page › page/page-click.spec.ts › should waitFor visible when already visible [pass] +bidi-chromium-page › page/page-click.spec.ts › should waitFor visible when parent is hidden [pass] +bidi-chromium-page › page/page-click.spec.ts › trial run should not click [pass] +bidi-chromium-page › page/page-click.spec.ts › trial run should not double click [pass] +bidi-chromium-page › page/page-click.spec.ts › trial run should work with short timeout [pass] bidi-chromium-page › page/page-close.spec.ts › should close page with active dialog [pass] bidi-chromium-page › page/page-close.spec.ts › should not accept dialog after close [pass] -bidi-chromium-page › page/page-dialog.spec.ts › should fire [pass] -bidi-chromium-page › page/page-dialog.spec.ts › should allow accepting prompts @smoke [pass] -bidi-chromium-page › page/page-dialog.spec.ts › should dismiss the prompt [pass] bidi-chromium-page › page/page-dialog.spec.ts › should accept the confirm prompt [pass] -bidi-chromium-page › page/page-dialog.spec.ts › should dismiss the confirm prompt [pass] +bidi-chromium-page › page/page-dialog.spec.ts › should allow accepting prompts @smoke [pass] +bidi-chromium-page › page/page-dialog.spec.ts › should auto-dismiss the alert without listeners [pass] +bidi-chromium-page › page/page-dialog.spec.ts › should auto-dismiss the prompt without listeners [pass] bidi-chromium-page › page/page-dialog.spec.ts › should be able to close context with open alert [pass] +bidi-chromium-page › page/page-dialog.spec.ts › should dismiss the confirm prompt [pass] +bidi-chromium-page › page/page-dialog.spec.ts › should dismiss the prompt [pass] +bidi-chromium-page › page/page-dialog.spec.ts › should fire [pass] bidi-chromium-page › page/page-dialog.spec.ts › should handle multiple alerts [timeout] bidi-chromium-page › page/page-dialog.spec.ts › should handle multiple confirms [timeout] -bidi-chromium-page › page/page-dialog.spec.ts › should auto-dismiss the prompt without listeners [pass] -bidi-chromium-page › page/page-dialog.spec.ts › should auto-dismiss the alert without listeners [pass] +bidi-chromium-page › page/page-dispatchevent.spec.ts › should be atomic [pass] +bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch absolute device orientation event [pass] +bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch click after a cross origin navigation [pass] +bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch click after navigation [pass] bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch click event @smoke [pass] bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch click event properties [pass] -bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch click svg [pass] +bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch click event via ElementHandles [pass] bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch click on a span with an inline element inside [pass] -bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch click after navigation [pass] -bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch click after a cross origin navigation [pass] -bidi-chromium-page › page/page-dispatchevent.spec.ts › should not fail when element is blocked on hover [pass] +bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch click svg [pass] bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch click when node is added in shadow dom [pass] -bidi-chromium-page › page/page-dispatchevent.spec.ts › should be atomic [pass] +bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch device motion event [pass] +bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch device orientation event [pass] bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch drag drop events [pass] bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch drag drop events via ElementHandles [pass] -bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch click event via ElementHandles [pass] bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch wheel event [pass] -bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch device orientation event [pass] -bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch absolute device orientation event [pass] -bidi-chromium-page › page/page-dispatchevent.spec.ts › should dispatch device motion event [pass] +bidi-chromium-page › page/page-dispatchevent.spec.ts › should not fail when element is blocked on hover [pass] bidi-chromium-page › page/page-dispatchevent.spec.ts › should throw if argument is from different frame [pass] -bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should work @smoke [pass] -bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should send the right events [pass] -bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should not send dragover on the first mousemove [unknown] -bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should work inside iframe [pass] -bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should cancel on escape [fail] bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › iframe › should drag into an iframe [unknown] bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › iframe › should drag out of an iframe [unknown] -bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should respect the drop effect [fail] -bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should work if the drag is canceled [pass] -bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should work if the drag event is captured but not canceled [pass] -bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should be able to drag the mouse in a frame [pass] -bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should work if a frame is stalled [fail] -bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should work with the helper method [pass] bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should allow specifying the position [pass] +bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should be able to drag the mouse in a frame [pass] +bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should cancel on escape [fail] +bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should not send dragover on the first mousemove [unknown] +bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should respect the drop effect [fail] +bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should send the right events [pass] +bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should work @smoke [pass] +bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should work if a frame is stalled [fail] +bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should work if the drag event is captured but not canceled [pass] +bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should work if the drag is canceled [pass] +bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should work inside iframe [pass] bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should work with locators [pass] -bidi-chromium-page › page/page-drag.spec.ts › should work if not doing a drag [pass] -bidi-chromium-page › page/page-drag.spec.ts › should report event.buttons [pass] +bidi-chromium-page › page/page-drag.spec.ts › Drag and drop › should work with the helper method [pass] bidi-chromium-page › page/page-drag.spec.ts › should handle custom dataTransfer [pass] +bidi-chromium-page › page/page-drag.spec.ts › should report event.buttons [pass] +bidi-chromium-page › page/page-drag.spec.ts › should work if not doing a drag [pass] bidi-chromium-page › page/page-drag.spec.ts › what happens when dragging element is destroyed [pass] -bidi-chromium-page › page/page-emulate-media.spec.ts › should emulate type @smoke [fail] -bidi-chromium-page › page/page-emulate-media.spec.ts › should throw in case of bad media argument [pass] -bidi-chromium-page › page/page-emulate-media.spec.ts › should emulate colorScheme should work @smoke [fail] -bidi-chromium-page › page/page-emulate-media.spec.ts › should default to light [fail] -bidi-chromium-page › page/page-emulate-media.spec.ts › should throw in case of bad colorScheme argument [pass] -bidi-chromium-page › page/page-emulate-media.spec.ts › should work during navigation [fail] bidi-chromium-page › page/page-emulate-media.spec.ts › should change the actual colors in css [fail] -bidi-chromium-page › page/page-emulate-media.spec.ts › should emulate reduced motion [fail] -bidi-chromium-page › page/page-emulate-media.spec.ts › should keep reduced motion and color emulation after reload [fail] +bidi-chromium-page › page/page-emulate-media.spec.ts › should default to light [fail] +bidi-chromium-page › page/page-emulate-media.spec.ts › should emulate colorScheme should work @smoke [fail] bidi-chromium-page › page/page-emulate-media.spec.ts › should emulate forcedColors [fail] -bidi-chromium-page › page/page-evaluate-handle.spec.ts › should work [pass] -bidi-chromium-page › page/page-evaluate-handle.spec.ts › should accept object handle as an argument [pass] -bidi-chromium-page › page/page-evaluate-handle.spec.ts › should accept object handle to primitive types [pass] +bidi-chromium-page › page/page-emulate-media.spec.ts › should emulate reduced motion [fail] +bidi-chromium-page › page/page-emulate-media.spec.ts › should emulate type @smoke [fail] +bidi-chromium-page › page/page-emulate-media.spec.ts › should keep reduced motion and color emulation after reload [fail] +bidi-chromium-page › page/page-emulate-media.spec.ts › should throw in case of bad colorScheme argument [pass] +bidi-chromium-page › page/page-emulate-media.spec.ts › should throw in case of bad media argument [pass] +bidi-chromium-page › page/page-emulate-media.spec.ts › should work during navigation [fail] +bidi-chromium-page › page/page-evaluate-handle.spec.ts › should accept multiple nested handles [pass] bidi-chromium-page › page/page-evaluate-handle.spec.ts › should accept nested handle [pass] bidi-chromium-page › page/page-evaluate-handle.spec.ts › should accept nested window handle [pass] -bidi-chromium-page › page/page-evaluate-handle.spec.ts › should accept multiple nested handles [pass] +bidi-chromium-page › page/page-evaluate-handle.spec.ts › should accept object handle as an argument [pass] +bidi-chromium-page › page/page-evaluate-handle.spec.ts › should accept object handle to primitive types [pass] +bidi-chromium-page › page/page-evaluate-handle.spec.ts › should accept object handle to unserializable value [pass] bidi-chromium-page › page/page-evaluate-handle.spec.ts › should accept same handle multiple times [pass] bidi-chromium-page › page/page-evaluate-handle.spec.ts › should accept same nested object multiple times [pass] -bidi-chromium-page › page/page-evaluate-handle.spec.ts › should accept object handle to unserializable value [pass] bidi-chromium-page › page/page-evaluate-handle.spec.ts › should pass configurable args [pass] +bidi-chromium-page › page/page-evaluate-handle.spec.ts › should work [pass] bidi-chromium-page › page/page-evaluate-handle.spec.ts › should work with primitives [pass] -bidi-chromium-page › page/page-evaluate-no-stall.spec.ts › should work [pass] -bidi-chromium-page › page/page-evaluate-no-stall.spec.ts › should throw while pending navigation [fail] bidi-chromium-page › page/page-evaluate-no-stall.spec.ts › should throw when no main execution context [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should work @smoke [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should transfer NaN [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should transfer -0 [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should transfer Infinity [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should transfer -Infinity [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should roundtrip unserializable values [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should roundtrip promise to value [pass] +bidi-chromium-page › page/page-evaluate-no-stall.spec.ts › should throw while pending navigation [fail] +bidi-chromium-page › page/page-evaluate-no-stall.spec.ts › should work [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should accept "undefined" as one of multiple parameters [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should accept a string [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should accept a string with comments [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should accept a string with semi colons [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should accept element handle as an argument [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should alias Window, Document and Node [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should await promise [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should await promise from popup [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should be able to throw a tricky error [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should evaluate date [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should evaluate exception [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should evaluate exception with a function on the stack [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should evaluate in the page context [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should evaluate url [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should ignore buggy toJSON [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should jsonValue() date [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should jsonValue() url [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should modify global environment [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should not add a toJSON property to newly created Arrays after evaluation [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should not expose the injected script export [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should not leak handles [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should not leak utility script [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should not throw an error when evaluation does a navigation [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should not throw an error when evaluation does a synchronous navigation and returns an object [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should not throw an error when evaluation does a synchronous navigation and returns undefined [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should not use Array.prototype.toJSON when evaluating [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should not use toJSON in jsonValue [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should not use toJSON when evaluating [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should pass exception argument [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should properly serialize PerformanceMeasure object [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should properly serialize null arguments [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should properly serialize null fields [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should properly serialize undefined arguments [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should properly serialize undefined fields [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should properly serialize window.performance object [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should reject promise with exception [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should respect use strict expression [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should return -0 [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should return -Infinity [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should return Infinity [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should return NaN [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should return complex objects [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should return undefined for non-serializable objects [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should return undefined for objects with symbols [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should return undefined properties [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should roundtrip date [pass] bidi-chromium-page › page/page-evaluate.spec.ts › should roundtrip promise to unserializable values [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should roundtrip promise to value [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should roundtrip regex [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should roundtrip unserializable values [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should roundtrip url [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should simulate a user gesture [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should support thrown numbers as error messages [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should support thrown strings as error messages [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should throw a nice error after a navigation [fail] +bidi-chromium-page › page/page-evaluate.spec.ts › should throw error with detailed information on exception inside promise [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should throw if underlying element was disposed [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should throw when evaluation triggers reload [fail] +bidi-chromium-page › page/page-evaluate.spec.ts › should throw when frame is detached [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should throw when passed more than one parameter [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should transfer -0 [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should transfer -Infinity [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should transfer 100Mb of data from page to node.js [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should transfer Infinity [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should transfer NaN [pass] bidi-chromium-page › page/page-evaluate.spec.ts › should transfer arrays [pass] bidi-chromium-page › page/page-evaluate.spec.ts › should transfer arrays as arrays, not objects [pass] bidi-chromium-page › page/page-evaluate.spec.ts › should transfer bigint [pass] bidi-chromium-page › page/page-evaluate.spec.ts › should transfer maps as empty objects [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should modify global environment [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should evaluate in the page context [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should return undefined for objects with symbols [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should work @smoke [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should work even when JSON is set to null [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should work for circular object [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should work from-inside an exposed function [fail] +bidi-chromium-page › page/page-evaluate.spec.ts › should work right after a cross-origin navigation [fail] +bidi-chromium-page › page/page-evaluate.spec.ts › should work right after framenavigated [fail] +bidi-chromium-page › page/page-evaluate.spec.ts › should work with Array.from/map [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should work with CSP [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should work with busted Array.prototype.map/push [pass] bidi-chromium-page › page/page-evaluate.spec.ts › should work with function shorthands [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should work with unicode chars [pass] bidi-chromium-page › page/page-evaluate.spec.ts › should work with large strings [pass] bidi-chromium-page › page/page-evaluate.spec.ts › should work with large unicode strings [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should throw when evaluation triggers reload [fail] -bidi-chromium-page › page/page-evaluate.spec.ts › should await promise [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should work right after framenavigated [fail] -bidi-chromium-page › page/page-evaluate.spec.ts › should work right after a cross-origin navigation [fail] -bidi-chromium-page › page/page-evaluate.spec.ts › should work from-inside an exposed function [fail] -bidi-chromium-page › page/page-evaluate.spec.ts › should reject promise with exception [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should support thrown strings as error messages [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should support thrown numbers as error messages [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should return complex objects [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should return NaN [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should return -0 [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should return Infinity [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should return -Infinity [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should work with overwritten Promise [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should throw when passed more than one parameter [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should accept "undefined" as one of multiple parameters [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should properly serialize undefined arguments [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should properly serialize undefined fields [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should return undefined properties [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should properly serialize null arguments [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should properly serialize null fields [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should properly serialize PerformanceMeasure object [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should properly serialize window.performance object [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should return undefined for non-serializable objects [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should alias Window, Document and Node [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should work for circular object [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should be able to throw a tricky error [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should accept a string [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should accept a string with semi colons [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should accept a string with comments [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should accept element handle as an argument [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should throw if underlying element was disposed [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should simulate a user gesture [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should throw a nice error after a navigation [fail] -bidi-chromium-page › page/page-evaluate.spec.ts › should not throw an error when evaluation does a navigation [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should not throw an error when evaluation does a synchronous navigation and returns an object [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should not throw an error when evaluation does a synchronous navigation and returns undefined [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should transfer 100Mb of data from page to node.js [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should throw error with detailed information on exception inside promise [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should work even when JSON is set to null [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should await promise from popup [pass] bidi-chromium-page › page/page-evaluate.spec.ts › should work with new Function() and CSP [pass] bidi-chromium-page › page/page-evaluate.spec.ts › should work with non-strict expressions [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should respect use strict expression [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should not leak utility script [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should not leak handles [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should work with CSP [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should evaluate exception with a function on the stack [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should evaluate exception [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should pass exception argument [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should evaluate date [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should roundtrip date [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should roundtrip regex [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should jsonValue() date [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should evaluate url [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should roundtrip url [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should jsonValue() url [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should not use toJSON when evaluating [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should not use Array.prototype.toJSON when evaluating [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should not add a toJSON property to newly created Arrays after evaluation [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should not use toJSON in jsonValue [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should ignore buggy toJSON [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should not expose the injected script export [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should throw when frame is detached [pass] bidi-chromium-page › page/page-evaluate.spec.ts › should work with overridden Object.defineProperty [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should work with busted Array.prototype.map/push [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should work with overridden globalThis.Window/Document/Node [pass] bidi-chromium-page › page/page-evaluate.spec.ts › should work with overridden URL/Date/RegExp [pass] -bidi-chromium-page › page/page-evaluate.spec.ts › should work with Array.from/map [pass] -bidi-chromium-page › page/page-event-console.spec.ts › should work @smoke [fail] +bidi-chromium-page › page/page-evaluate.spec.ts › should work with overridden globalThis.Window/Document/Node [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should work with overwritten Promise [pass] +bidi-chromium-page › page/page-evaluate.spec.ts › should work with unicode chars [pass] +bidi-chromium-page › page/page-event-console.spec.ts › do not update console count on unhandled rejections [pass] bidi-chromium-page › page/page-event-console.spec.ts › should emit same log twice [pass] -bidi-chromium-page › page/page-event-console.spec.ts › should use text() for inspection [pass] -bidi-chromium-page › page/page-event-console.spec.ts › should work for different console API calls [fail] bidi-chromium-page › page/page-event-console.spec.ts › should format the message correctly with time/timeLog/timeEnd [pass] -bidi-chromium-page › page/page-event-console.spec.ts › should not fail for window object [fail] -bidi-chromium-page › page/page-event-console.spec.ts › should trigger correct Log [timeout] bidi-chromium-page › page/page-event-console.spec.ts › should have location for console API calls [pass] +bidi-chromium-page › page/page-event-console.spec.ts › should not fail for window object [fail] bidi-chromium-page › page/page-event-console.spec.ts › should not throw when there are console messages in detached iframes [pass] +bidi-chromium-page › page/page-event-console.spec.ts › should trigger correct Log [timeout] bidi-chromium-page › page/page-event-console.spec.ts › should use object previews for arrays and objects [fail] bidi-chromium-page › page/page-event-console.spec.ts › should use object previews for errors [pass] -bidi-chromium-page › page/page-event-console.spec.ts › do not update console count on unhandled rejections [pass] +bidi-chromium-page › page/page-event-console.spec.ts › should use text() for inspection [pass] +bidi-chromium-page › page/page-event-console.spec.ts › should work @smoke [fail] +bidi-chromium-page › page/page-event-console.spec.ts › should work for different console API calls [fail] bidi-chromium-page › page/page-event-load.spec.ts › should fire once [pass] bidi-chromium-page › page/page-event-load.spec.ts › should fire once with iframe navigation [pass] bidi-chromium-page › page/page-event-network.spec.ts › Page.Events.Request @smoke [fail] -bidi-chromium-page › page/page-event-network.spec.ts › Page.Events.Response @smoke [pass] bidi-chromium-page › page/page-event-network.spec.ts › Page.Events.RequestFailed @smoke [fail] bidi-chromium-page › page/page-event-network.spec.ts › Page.Events.RequestFinished @smoke [pass] -bidi-chromium-page › page/page-event-network.spec.ts › should fire events in proper order [pass] -bidi-chromium-page › page/page-event-network.spec.ts › should support redirects [pass] -bidi-chromium-page › page/page-event-network.spec.ts › should resolve responses after a navigation [timeout] +bidi-chromium-page › page/page-event-network.spec.ts › Page.Events.Response @smoke [pass] bidi-chromium-page › page/page-event-network.spec.ts › interrupt request.response() and request.allHeaders() on page.close [fail] -bidi-chromium-page › page/page-event-pageerror.spec.ts › should fire [timeout] -bidi-chromium-page › page/page-event-pageerror.spec.ts › should not receive console message for pageError [timeout] +bidi-chromium-page › page/page-event-network.spec.ts › should fire events in proper order [pass] +bidi-chromium-page › page/page-event-network.spec.ts › should resolve responses after a navigation [timeout] +bidi-chromium-page › page/page-event-network.spec.ts › should support redirects [pass] bidi-chromium-page › page/page-event-pageerror.spec.ts › should contain sourceURL [timeout] bidi-chromium-page › page/page-event-pageerror.spec.ts › should contain the Error.name property [timeout] -bidi-chromium-page › page/page-event-pageerror.spec.ts › should support an empty Error.name property [timeout] -bidi-chromium-page › page/page-event-pageerror.spec.ts › should handle odd values [timeout] -bidi-chromium-page › page/page-event-pageerror.spec.ts › should handle object [timeout] -bidi-chromium-page › page/page-event-pageerror.spec.ts › should handle window [timeout] -bidi-chromium-page › page/page-event-pageerror.spec.ts › should remove a listener of a non-existing event handler [pass] bidi-chromium-page › page/page-event-pageerror.spec.ts › should emit error from unhandled rejects [timeout] -bidi-chromium-page › page/page-event-popup.spec.ts › should work @smoke [pass] -bidi-chromium-page › page/page-event-popup.spec.ts › should work with window features [pass] +bidi-chromium-page › page/page-event-pageerror.spec.ts › should fire [timeout] +bidi-chromium-page › page/page-event-pageerror.spec.ts › should handle object [timeout] +bidi-chromium-page › page/page-event-pageerror.spec.ts › should handle odd values [timeout] +bidi-chromium-page › page/page-event-pageerror.spec.ts › should handle window [timeout] +bidi-chromium-page › page/page-event-pageerror.spec.ts › should not receive console message for pageError [timeout] +bidi-chromium-page › page/page-event-pageerror.spec.ts › should remove a listener of a non-existing event handler [pass] +bidi-chromium-page › page/page-event-pageerror.spec.ts › should support an empty Error.name property [timeout] +bidi-chromium-page › page/page-event-popup.spec.ts › should be able to capture alert [timeout] bidi-chromium-page › page/page-event-popup.spec.ts › should emit for immediately closed popups [pass] bidi-chromium-page › page/page-event-popup.spec.ts › should emit for immediately closed popups 2 [pass] -bidi-chromium-page › page/page-event-popup.spec.ts › should be able to capture alert [timeout] -bidi-chromium-page › page/page-event-popup.spec.ts › should work with empty url [pass] -bidi-chromium-page › page/page-event-popup.spec.ts › should work with noopener and no url [fail] -bidi-chromium-page › page/page-event-popup.spec.ts › should work with noopener and about:blank [pass] -bidi-chromium-page › page/page-event-popup.spec.ts › should work with noopener and url [pass] -bidi-chromium-page › page/page-event-popup.spec.ts › should work with clicking target=_blank [pass] -bidi-chromium-page › page/page-event-popup.spec.ts › should work with fake-clicking target=_blank and rel=noopener [pass] -bidi-chromium-page › page/page-event-popup.spec.ts › should work with clicking target=_blank and rel=noopener [pass] bidi-chromium-page › page/page-event-popup.spec.ts › should not treat navigations as new popups [pass] bidi-chromium-page › page/page-event-popup.spec.ts › should report popup opened from iframes [fail] -bidi-chromium-page › page/page-event-request.spec.ts › should fire for navigation requests [pass] -bidi-chromium-page › page/page-event-request.spec.ts › should fire for iframes [pass] +bidi-chromium-page › page/page-event-popup.spec.ts › should work @smoke [pass] +bidi-chromium-page › page/page-event-popup.spec.ts › should work with clicking target=_blank [pass] +bidi-chromium-page › page/page-event-popup.spec.ts › should work with clicking target=_blank and rel=noopener [pass] +bidi-chromium-page › page/page-event-popup.spec.ts › should work with empty url [pass] +bidi-chromium-page › page/page-event-popup.spec.ts › should work with fake-clicking target=_blank and rel=noopener [pass] +bidi-chromium-page › page/page-event-popup.spec.ts › should work with noopener and about:blank [pass] +bidi-chromium-page › page/page-event-popup.spec.ts › should work with noopener and no url [fail] +bidi-chromium-page › page/page-event-popup.spec.ts › should work with noopener and url [pass] +bidi-chromium-page › page/page-event-popup.spec.ts › should work with window features [pass] +bidi-chromium-page › page/page-event-request.spec.ts › main resource xhr should have type xhr [fail] bidi-chromium-page › page/page-event-request.spec.ts › should fire for fetches [pass] -bidi-chromium-page › page/page-event-request.spec.ts › should report requests and responses handled by service worker [fail] -bidi-chromium-page › page/page-event-request.spec.ts › should report requests and responses handled by service worker with routing [fail] +bidi-chromium-page › page/page-event-request.spec.ts › should fire for iframes [pass] +bidi-chromium-page › page/page-event-request.spec.ts › should fire for navigation requests [pass] +bidi-chromium-page › page/page-event-request.spec.ts › should fire requestfailed when intercepting race [unknown] bidi-chromium-page › page/page-event-request.spec.ts › should report navigation requests and responses handled by service worker [fail] bidi-chromium-page › page/page-event-request.spec.ts › should report navigation requests and responses handled by service worker with routing [fail] +bidi-chromium-page › page/page-event-request.spec.ts › should report requests and responses handled by service worker [fail] +bidi-chromium-page › page/page-event-request.spec.ts › should report requests and responses handled by service worker with routing [fail] bidi-chromium-page › page/page-event-request.spec.ts › should return response body when Cross-Origin-Opener-Policy is set [fail] -bidi-chromium-page › page/page-event-request.spec.ts › should fire requestfailed when intercepting race [unknown] -bidi-chromium-page › page/page-event-request.spec.ts › main resource xhr should have type xhr [fail] bidi-chromium-page › page/page-expose-function.spec.ts › exposeBinding should work @smoke [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › should work [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › should work with handles and complex objects [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › should throw exception in page context [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › should support throwing "null" [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › should be callable from-inside addInitScript [timeout] -bidi-chromium-page › page/page-expose-function.spec.ts › should survive navigation [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › exposeBinding(handle) should work with element handles [timeout] +bidi-chromium-page › page/page-expose-function.spec.ts › exposeBindingHandle should not throw during navigation [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › exposeBindingHandle should throw for multiple arguments [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › exposeBindingHandle should work [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › should alias Window, Document and Node [fail] bidi-chromium-page › page/page-expose-function.spec.ts › should await returned promise [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › should be callable from-inside addInitScript [timeout] +bidi-chromium-page › page/page-expose-function.spec.ts › should fail with busted Array.prototype.toJSON [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › should not result in unhandled rejection [timeout] +bidi-chromium-page › page/page-expose-function.spec.ts › should serialize cycles [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › should support throwing "null" [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › should survive navigation [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › should throw exception in page context [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › should throw for duplicate registrations [pass] +bidi-chromium-page › page/page-expose-function.spec.ts › should work [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › should work after cross origin navigation [fail] bidi-chromium-page › page/page-expose-function.spec.ts › should work on frames [fail] bidi-chromium-page › page/page-expose-function.spec.ts › should work on frames before navigation [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › should work after cross origin navigation [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › should work with complex objects [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › exposeBindingHandle should work [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › exposeBindingHandle should not throw during navigation [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › should throw for duplicate registrations [pass] -bidi-chromium-page › page/page-expose-function.spec.ts › exposeBindingHandle should throw for multiple arguments [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › should not result in unhandled rejection [timeout] -bidi-chromium-page › page/page-expose-function.spec.ts › exposeBinding(handle) should work with element handles [timeout] -bidi-chromium-page › page/page-expose-function.spec.ts › should work with setContent [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › should alias Window, Document and Node [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › should serialize cycles [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › should work with overridden console object [fail] bidi-chromium-page › page/page-expose-function.spec.ts › should work with busted Array.prototype.map/push [fail] -bidi-chromium-page › page/page-expose-function.spec.ts › should fail with busted Array.prototype.toJSON [fail] -bidi-chromium-page › page/page-fill.spec.ts › should fill textarea @smoke [pass] -bidi-chromium-page › page/page-fill.spec.ts › should fill input [pass] -bidi-chromium-page › page/page-fill.spec.ts › should throw on unsupported inputs [pass] -bidi-chromium-page › page/page-fill.spec.ts › should fill different input types [pass] -bidi-chromium-page › page/page-fill.spec.ts › should fill range input [pass] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect range value [pass] -bidi-chromium-page › page/page-fill.spec.ts › should fill color input [pass] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect color value [pass] -bidi-chromium-page › page/page-fill.spec.ts › should fill date input after clicking [pass] +bidi-chromium-page › page/page-expose-function.spec.ts › should work with complex objects [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › should work with handles and complex objects [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › should work with overridden console object [fail] +bidi-chromium-page › page/page-expose-function.spec.ts › should work with setContent [fail] +bidi-chromium-page › page/page-fill.spec.ts › fill back to back [pass] bidi-chromium-page › page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - color [pass] bidi-chromium-page › page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - date [pass] -bidi-chromium-page › page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - time [pass] bidi-chromium-page › page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - datetime-local [pass] bidi-chromium-page › page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - month [unknown] bidi-chromium-page › page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - range [pass] +bidi-chromium-page › page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - time [pass] bidi-chromium-page › page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - week [unknown] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect date [pass] -bidi-chromium-page › page/page-fill.spec.ts › should fill time input [pass] -bidi-chromium-page › page/page-fill.spec.ts › should fill month input [pass] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect month [unknown] -bidi-chromium-page › page/page-fill.spec.ts › should fill week input [pass] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect week [unknown] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect time [pass] -bidi-chromium-page › page/page-fill.spec.ts › should fill datetime-local input [pass] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect datetime-local [unknown] -bidi-chromium-page › page/page-fill.spec.ts › should fill contenteditable [pass] -bidi-chromium-page › page/page-fill.spec.ts › should fill contenteditable with new lines [pass] -bidi-chromium-page › page/page-fill.spec.ts › should fill elements with existing value and selection [pass] -bidi-chromium-page › page/page-fill.spec.ts › should throw nice error without injected script stack when element is not an [fail] -bidi-chromium-page › page/page-fill.spec.ts › should throw if passed a non-string value [pass] -bidi-chromium-page › page/page-fill.spec.ts › should retry on disabled element [pass] -bidi-chromium-page › page/page-fill.spec.ts › should retry on readonly element [pass] -bidi-chromium-page › page/page-fill.spec.ts › should retry on invisible element [pass] -bidi-chromium-page › page/page-fill.spec.ts › should be able to fill the body [pass] -bidi-chromium-page › page/page-fill.spec.ts › should fill fixed position input [pass] -bidi-chromium-page › page/page-fill.spec.ts › should be able to fill when focus is in the wrong frame [pass] -bidi-chromium-page › page/page-fill.spec.ts › should be able to fill the input[type=number] [pass] +bidi-chromium-page › page/page-fill.spec.ts › should be able to clear using fill() [pass] bidi-chromium-page › page/page-fill.spec.ts › should be able to fill exponent into the input[type=number] [pass] bidi-chromium-page › page/page-fill.spec.ts › should be able to fill input[type=number] with empty string [pass] +bidi-chromium-page › page/page-fill.spec.ts › should be able to fill the body [pass] +bidi-chromium-page › page/page-fill.spec.ts › should be able to fill the input[type=number] [pass] +bidi-chromium-page › page/page-fill.spec.ts › should be able to fill when focus is in the wrong frame [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill color input [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill contenteditable [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill contenteditable with new lines [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill date input after clicking [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill datetime-local input [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill different input types [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill elements with existing value and selection [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill fixed position input [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill input [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill month input [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill range input [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill textarea @smoke [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill time input [pass] +bidi-chromium-page › page/page-fill.spec.ts › should fill week input [pass] bidi-chromium-page › page/page-fill.spec.ts › should not be able to fill text into the input[type=number] [pass] -bidi-chromium-page › page/page-fill.spec.ts › should be able to clear using fill() [pass] bidi-chromium-page › page/page-fill.spec.ts › should not throw when fill causes navigation [pass] -bidi-chromium-page › page/page-fill.spec.ts › fill back to back [pass] -bidi-chromium-page › page/page-focus.spec.ts › should work @smoke [pass] -bidi-chromium-page › page/page-focus.spec.ts › should emit focus event [fail] +bidi-chromium-page › page/page-fill.spec.ts › should retry on disabled element [pass] +bidi-chromium-page › page/page-fill.spec.ts › should retry on invisible element [pass] +bidi-chromium-page › page/page-fill.spec.ts › should retry on readonly element [pass] +bidi-chromium-page › page/page-fill.spec.ts › should throw if passed a non-string value [pass] +bidi-chromium-page › page/page-fill.spec.ts › should throw nice error without injected script stack when element is not an [fail] +bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect color value [pass] +bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect date [pass] +bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect datetime-local [unknown] +bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect month [unknown] +bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect range value [pass] +bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect time [pass] +bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect week [unknown] +bidi-chromium-page › page/page-fill.spec.ts › should throw on unsupported inputs [pass] +bidi-chromium-page › page/page-focus.spec.ts › clicking checkbox should activate it [unknown] +bidi-chromium-page › page/page-focus.spec.ts › keeps focus on element when attempting to focus a non-focusable element [pass] bidi-chromium-page › page/page-focus.spec.ts › should emit blur event [fail] +bidi-chromium-page › page/page-focus.spec.ts › should emit focus event [fail] bidi-chromium-page › page/page-focus.spec.ts › should traverse focus [fail] bidi-chromium-page › page/page-focus.spec.ts › should traverse focus in all directions [pass] bidi-chromium-page › page/page-focus.spec.ts › should traverse only form elements [unknown] -bidi-chromium-page › page/page-focus.spec.ts › clicking checkbox should activate it [unknown] -bidi-chromium-page › page/page-focus.spec.ts › keeps focus on element when attempting to focus a non-focusable element [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work @smoke [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with file URL [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with file URL with subframes [pass] -bidi-chromium-page › page/page-goto.spec.ts › should use http for no protocol [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work cross-process [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with cross-process that fails before committing [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy and interception [fail] -bidi-chromium-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy after redirect [pass] -bidi-chromium-page › page/page-goto.spec.ts › should capture iframe navigation request [pass] +bidi-chromium-page › page/page-focus.spec.ts › should work @smoke [pass] +bidi-chromium-page › page/page-goto.spec.ts › js redirect overrides url bar navigation [fail] +bidi-chromium-page › page/page-goto.spec.ts › should be able to navigate to a page controlled by service worker [pass] bidi-chromium-page › page/page-goto.spec.ts › should capture cross-process iframe navigation request [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with anchor navigation [timeout] -bidi-chromium-page › page/page-goto.spec.ts › should work with redirects [pass] -bidi-chromium-page › page/page-goto.spec.ts › should navigate to about:blank [pass] -bidi-chromium-page › page/page-goto.spec.ts › should return response when page changes its URL after load [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with subframes return 204 [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with subframes return 204 with domcontentloaded [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when server returns 204 [fail] -bidi-chromium-page › page/page-goto.spec.ts › should navigate to empty page with domcontentloaded [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work when page calls history API in beforeunload [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating to bad url [fail] +bidi-chromium-page › page/page-goto.spec.ts › should capture iframe navigation request [pass] +bidi-chromium-page › page/page-goto.spec.ts › should disable timeout when its set to 0 [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when canceled by another navigation [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding browser context navigation timeout [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding browser context timeout [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding default maximum navigation timeout [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding default maximum timeout [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding maximum navigation timeout [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when main resources failed to load [fail] +bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating and show the url at the error message [pass] bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating to bad SSL [fail] bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating to bad SSL after redirects [fail] -bidi-chromium-page › page/page-goto.spec.ts › should not crash when navigating to bad SSL after a cross origin navigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not throw if networkidle0 is passed as an option [pass] -bidi-chromium-page › page/page-goto.spec.ts › should throw if networkidle2 is passed as an option [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when main resources failed to load [fail] -bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding maximum navigation timeout [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding default maximum navigation timeout [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding browser context navigation timeout [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding default maximum timeout [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding browser context timeout [pass] -bidi-chromium-page › page/page-goto.spec.ts › should prioritize default navigation timeout over default timeout [pass] -bidi-chromium-page › page/page-goto.spec.ts › should disable timeout when its set to 0 [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating to bad url [fail] bidi-chromium-page › page/page-goto.spec.ts › should fail when replaced by another navigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › js redirect overrides url bar navigation [fail] -bidi-chromium-page › page/page-goto.spec.ts › should succeed on url bar navigation when there is pending navigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work when navigating to valid url [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work when navigating to data url [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work when navigating to 404 [pass] -bidi-chromium-page › page/page-goto.spec.ts › should return last response in redirect chain [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not leak listeners during navigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not leak listeners during bad navigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not leak listeners during 20 waitForNavigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › should navigate to dataURL and not fire dataURL requests [pass] +bidi-chromium-page › page/page-goto.spec.ts › should fail when server returns 204 [fail] bidi-chromium-page › page/page-goto.spec.ts › should navigate to URL with hash and fire requests without hash [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with self requesting page [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating and show the url at the error message [pass] -bidi-chromium-page › page/page-goto.spec.ts › should be able to navigate to a page controlled by service worker [pass] +bidi-chromium-page › page/page-goto.spec.ts › should navigate to about:blank [pass] +bidi-chromium-page › page/page-goto.spec.ts › should navigate to dataURL and not fire dataURL requests [pass] +bidi-chromium-page › page/page-goto.spec.ts › should navigate to empty page with domcontentloaded [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not crash when RTCPeerConnection is used [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not crash when navigating to bad SSL after a cross origin navigation [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not leak listeners during 20 waitForNavigation [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not leak listeners during bad navigation [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not leak listeners during navigation [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not resolve goto upon window.stop() [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not throw if networkidle0 is passed as an option [pass] +bidi-chromium-page › page/page-goto.spec.ts › should not throw unhandled rejections on invalid url [pass] +bidi-chromium-page › page/page-goto.spec.ts › should override referrer-policy [fail] +bidi-chromium-page › page/page-goto.spec.ts › should prioritize default navigation timeout over default timeout [pass] +bidi-chromium-page › page/page-goto.spec.ts › should properly wait for load [pass] +bidi-chromium-page › page/page-goto.spec.ts › should reject referer option when setExtraHTTPHeaders provides referer [pass] +bidi-chromium-page › page/page-goto.spec.ts › should report raw buffer for main resource [fail] +bidi-chromium-page › page/page-goto.spec.ts › should return from goto if new navigation is started [pass] +bidi-chromium-page › page/page-goto.spec.ts › should return last response in redirect chain [pass] +bidi-chromium-page › page/page-goto.spec.ts › should return response when page changes its URL after load [pass] +bidi-chromium-page › page/page-goto.spec.ts › should return url with basic auth info [pass] +bidi-chromium-page › page/page-goto.spec.ts › should return when navigation is committed if commit is specified [fail] bidi-chromium-page › page/page-goto.spec.ts › should send referer [fail] bidi-chromium-page › page/page-goto.spec.ts › should send referer of cross-origin URL [fail] -bidi-chromium-page › page/page-goto.spec.ts › should reject referer option when setExtraHTTPHeaders provides referer [pass] -bidi-chromium-page › page/page-goto.spec.ts › should override referrer-policy [fail] -bidi-chromium-page › page/page-goto.spec.ts › should fail when canceled by another navigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with lazy loading iframes [pass] -bidi-chromium-page › page/page-goto.spec.ts › should report raw buffer for main resource [fail] -bidi-chromium-page › page/page-goto.spec.ts › should not throw unhandled rejections on invalid url [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not crash when RTCPeerConnection is used [pass] -bidi-chromium-page › page/page-goto.spec.ts › should properly wait for load [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not resolve goto upon window.stop() [pass] -bidi-chromium-page › page/page-goto.spec.ts › should return from goto if new navigation is started [pass] -bidi-chromium-page › page/page-goto.spec.ts › should return when navigation is committed if commit is specified [fail] +bidi-chromium-page › page/page-goto.spec.ts › should succeed on url bar navigation when there is pending navigation [pass] +bidi-chromium-page › page/page-goto.spec.ts › should throw if networkidle2 is passed as an option [pass] +bidi-chromium-page › page/page-goto.spec.ts › should use http for no protocol [pass] bidi-chromium-page › page/page-goto.spec.ts › should wait for load when iframe attaches and detaches [pass] -bidi-chromium-page › page/page-goto.spec.ts › should return url with basic auth info [pass] -bidi-chromium-page › page/page-history.spec.ts › page.goBack should work @smoke [fail] -bidi-chromium-page › page/page-history.spec.ts › page.goBack should work with HistoryAPI [fail] -bidi-chromium-page › page/page-history.spec.ts › page.goBack should work for file urls [fail] +bidi-chromium-page › page/page-goto.spec.ts › should work @smoke [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work cross-process [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work when navigating to 404 [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work when navigating to data url [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work when navigating to valid url [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work when page calls history API in beforeunload [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy after redirect [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy and interception [fail] +bidi-chromium-page › page/page-goto.spec.ts › should work with anchor navigation [timeout] +bidi-chromium-page › page/page-goto.spec.ts › should work with cross-process that fails before committing [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with file URL [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with file URL with subframes [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with lazy loading iframes [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with redirects [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with self requesting page [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with subframes return 204 [pass] +bidi-chromium-page › page/page-goto.spec.ts › should work with subframes return 204 with domcontentloaded [pass] bidi-chromium-page › page/page-history.spec.ts › goBack/goForward should work with bfcache-able pages [fail] -bidi-chromium-page › page/page-history.spec.ts › page.reload should work [pass] -bidi-chromium-page › page/page-history.spec.ts › page.reload should work with data url [timeout] +bidi-chromium-page › page/page-history.spec.ts › page.goBack during renderer-initiated navigation [timeout] +bidi-chromium-page › page/page-history.spec.ts › page.goBack should work @smoke [fail] +bidi-chromium-page › page/page-history.spec.ts › page.goBack should work for file urls [fail] +bidi-chromium-page › page/page-history.spec.ts › page.goBack should work with HistoryAPI [fail] +bidi-chromium-page › page/page-history.spec.ts › page.goForward during renderer-initiated navigation [fail] bidi-chromium-page › page/page-history.spec.ts › page.reload during renderer-initiated navigation [pass] bidi-chromium-page › page/page-history.spec.ts › page.reload should not resolve with same-document navigation [fail] -bidi-chromium-page › page/page-history.spec.ts › page.reload should work with same origin redirect [pass] -bidi-chromium-page › page/page-history.spec.ts › page.reload should work with cross-origin redirect [pass] +bidi-chromium-page › page/page-history.spec.ts › page.reload should work [pass] bidi-chromium-page › page/page-history.spec.ts › page.reload should work on a page with a hash [pass] bidi-chromium-page › page/page-history.spec.ts › page.reload should work on a page with a hash at the end [pass] -bidi-chromium-page › page/page-history.spec.ts › page.goBack during renderer-initiated navigation [timeout] -bidi-chromium-page › page/page-history.spec.ts › page.goForward during renderer-initiated navigation [fail] +bidi-chromium-page › page/page-history.spec.ts › page.reload should work with cross-origin redirect [pass] +bidi-chromium-page › page/page-history.spec.ts › page.reload should work with data url [timeout] +bidi-chromium-page › page/page-history.spec.ts › page.reload should work with same origin redirect [pass] bidi-chromium-page › page/page-history.spec.ts › regression test for issue 20791 [pass] bidi-chromium-page › page/page-history.spec.ts › should reload proper page [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should type into a textarea @smoke [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should move with the arrow keys [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should send a character with ElementHandle.press [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should send a character with insertText [fail] bidi-chromium-page › page/page-keyboard.spec.ts › insertText should only emit input event [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should report shiftKey [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should report multiple modifiers [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should send proper codes while typing [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should send proper codes while typing with shift [timeout] -bidi-chromium-page › page/page-keyboard.spec.ts › should not type canceled events [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should press plus [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should press shift plus [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should support plus-separated modifiers [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should support multiple plus-separated modifiers [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should shift raw codes [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should specify repeat property [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should type all kinds of characters [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should specify location [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should press Enter [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should throw on unknown keys [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should type emoji [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should type emoji into an iframe [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should handle selectAll [pass] bidi-chromium-page › page/page-keyboard.spec.ts › pressing Meta should not result in any text insertion on any platform [pass] bidi-chromium-page › page/page-keyboard.spec.ts › should be able to prevent selectAll [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should support MacOS shortcuts [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should press the meta key [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should work with keyboard events with empty.html [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should work after a cross origin navigation [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should dispatch a click event on a button when Enter gets pressed [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should dispatch a click event on a button when Space gets pressed [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should dispatch insertText after context menu was opened [pass] bidi-chromium-page › page/page-keyboard.spec.ts › should expose keyIdentifier in webkit [unknown] -bidi-chromium-page › page/page-keyboard.spec.ts › should scroll with PageDown [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should handle selectAll [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should have correct Keydown/Keyup order when pressing Escape key [pass] bidi-chromium-page › page/page-keyboard.spec.ts › should move around the selection in a contenteditable [pass] bidi-chromium-page › page/page-keyboard.spec.ts › should move to the start of the document [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should dispatch a click event on a button when Space gets pressed [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should dispatch a click event on a button when Enter gets pressed [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should move with the arrow keys [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should not type canceled events [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should press Enter [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › should press plus [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › should press shift plus [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › should press the meta key [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should report multiple modifiers [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should report shiftKey [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should scroll with PageDown [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should send a character with ElementHandle.press [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should send a character with insertText [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › should send proper codes while typing [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should send proper codes while typing with shift [timeout] +bidi-chromium-page › page/page-keyboard.spec.ts › should shift raw codes [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should specify location [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › should specify repeat property [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should support MacOS shortcuts [fail] +bidi-chromium-page › page/page-keyboard.spec.ts › should support multiple plus-separated modifiers [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should support plus-separated modifiers [pass] bidi-chromium-page › page/page-keyboard.spec.ts › should support simple copy-pasting [pass] bidi-chromium-page › page/page-keyboard.spec.ts › should support simple cut-pasting [pass] bidi-chromium-page › page/page-keyboard.spec.ts › should support undo-redo [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should throw on unknown keys [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should type after context menu was opened [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should type all kinds of characters [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should type emoji [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should type emoji into an iframe [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should type into a textarea @smoke [pass] bidi-chromium-page › page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom [pass] bidi-chromium-page › page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom with nested elements [pass] bidi-chromium-page › page/page-keyboard.spec.ts › should type repeatedly in input in shadow dom [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should work after a cross origin navigation [pass] +bidi-chromium-page › page/page-keyboard.spec.ts › should work with keyboard events with empty.html [pass] bidi-chromium-page › page/page-keyboard.spec.ts › type to non-focusable element should maintain old focus [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should dispatch insertText after context menu was opened [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should type after context menu was opened [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should have correct Keydown/Keyup order when pressing Escape key [pass] bidi-chromium-page › page/page-leaks.spec.ts › click should not leak [pass] -bidi-chromium-page › page/page-leaks.spec.ts › fill should not leak [pass] bidi-chromium-page › page/page-leaks.spec.ts › expect should not leak [pass] +bidi-chromium-page › page/page-leaks.spec.ts › fill should not leak [pass] bidi-chromium-page › page/page-leaks.spec.ts › waitFor should not leak [pass] bidi-chromium-page › page/page-listeners.spec.ts › should not throw with ignoreErrors [pass] bidi-chromium-page › page/page-listeners.spec.ts › should wait [pass] bidi-chromium-page › page/page-listeners.spec.ts › wait should throw [pass] +bidi-chromium-page › page/page-mouse.spec.ts › down and up should generate click [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should always round down [fail] bidi-chromium-page › page/page-mouse.spec.ts › should click the document @smoke [pass] bidi-chromium-page › page/page-mouse.spec.ts › should dblclick the div [pass] -bidi-chromium-page › page/page-mouse.spec.ts › down and up should generate click [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should dispatch mouse move after context menu was opened [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should not crash on mouse drag with any button [pass] bidi-chromium-page › page/page-mouse.spec.ts › should pointerdown the div with a custom button [pass] bidi-chromium-page › page/page-mouse.spec.ts › should report correct buttons property [pass] bidi-chromium-page › page/page-mouse.spec.ts › should select the text with mouse [pass] +bidi-chromium-page › page/page-mouse.spec.ts › should set modifier keys on click [pass] bidi-chromium-page › page/page-mouse.spec.ts › should trigger hover state [pass] bidi-chromium-page › page/page-mouse.spec.ts › should trigger hover state on disabled button [pass] bidi-chromium-page › page/page-mouse.spec.ts › should trigger hover state with removed window.Node [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should set modifier keys on click [pass] bidi-chromium-page › page/page-mouse.spec.ts › should tween mouse movement [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should always round down [fail] -bidi-chromium-page › page/page-mouse.spec.ts › should not crash on mouse drag with any button [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should dispatch mouse move after context menu was opened [pass] bidi-chromium-page › page/page-navigation.spec.ts › should work with _blank target [pass] -bidi-chromium-page › page/page-navigation.spec.ts › should work with cross-process _blank target [pass] bidi-chromium-page › page/page-navigation.spec.ts › should work with _blank target in form [pass] +bidi-chromium-page › page/page-navigation.spec.ts › should work with cross-process _blank target [pass] bidi-chromium-page › page/page-network-idle.spec.ts › should navigate to empty page with networkidle [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation with request from previous navigation [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in waitForNavigation [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent with request from previous navigation [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle when navigating iframe [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent from the child frame [pass] bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle from the child frame [pass] bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle from the popup [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent from the child frame [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent with request from previous navigation [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in waitForNavigation [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation with request from previous navigation [pass] bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle when iframe attaches and detaches [pass] +bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle when navigating iframe [pass] bidi-chromium-page › page/page-network-idle.spec.ts › should work after repeated navigations in the same page [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should work for main frame navigation request [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should work for subframe navigation request [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should work for fetch requests @smoke [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should work for a redirect [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should not work for a redirect and interception [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should return headers [pass] +bidi-chromium-page › page/page-network-request.spec.ts › page.reload return 304 status code [fail] bidi-chromium-page › page/page-network-request.spec.ts › should get the same headers as the server [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should not return allHeaders() until they are available [fail] bidi-chromium-page › page/page-network-request.spec.ts › should get the same headers as the server CORS [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should not get preflight CORS requests when intercepting [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should return postData [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should work with binary post data [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should work with binary post data and interception [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should override post data content type [fail] bidi-chromium-page › page/page-network-request.spec.ts › should get |undefined| with postData() when there is no post data [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should parse the json post data [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should get |undefined| with postDataJSON() when there is no post data [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should handle mixed-content blocked requests [unknown] +bidi-chromium-page › page/page-network-request.spec.ts › should not allow to access frame on popup main request [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should not get preflight CORS requests when intercepting [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should not return allHeaders() until they are available [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should not work for a redirect and interception [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should override post data content type [fail] bidi-chromium-page › page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded [fail] bidi-chromium-page › page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded; charset=UTF-8 [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should get |undefined| with postDataJSON() when there is no post data [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should return multipart/form-data [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should return event source [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should return navigation bit [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should return navigation bit when navigating to image [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should parse the json post data [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should report all cookies in one header [pass] bidi-chromium-page › page/page-network-request.spec.ts › should report raw headers [fail] bidi-chromium-page › page/page-network-request.spec.ts › should report raw response headers in redirects [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should report all cookies in one header [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should not allow to access frame on popup main request [pass] -bidi-chromium-page › page/page-network-request.spec.ts › page.reload return 304 status code [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should handle mixed-content blocked requests [unknown] -bidi-chromium-page › page/page-network-response.spec.ts › should work @smoke [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should return event source [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should return headers [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should return multipart/form-data [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should return navigation bit [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should return navigation bit when navigating to image [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should return postData [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should work for a redirect [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should work for fetch requests @smoke [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should work for main frame navigation request [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should work for subframe navigation request [pass] +bidi-chromium-page › page/page-network-request.spec.ts › should work with binary post data [fail] +bidi-chromium-page › page/page-network-request.spec.ts › should work with binary post data and interception [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should behave the same way for headers and allHeaders [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should bypass disk cache when context interception is enabled [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should bypass disk cache when page interception is enabled [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should provide a Response with a file URL [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should reject response.finished if context closes [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should reject response.finished if page closes [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should report all headers [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should report if request was fromServiceWorker [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should report multiple set-cookie headers [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return body [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return body for prefetch script [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return body with compression [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return headers after route.fulfill [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return json [fail] bidi-chromium-page › page/page-network-response.spec.ts › should return multiple header value [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return set-cookie header after route.fulfill [fail] +bidi-chromium-page › page/page-network-response.spec.ts › should return status text [pass] bidi-chromium-page › page/page-network-response.spec.ts › should return text [fail] bidi-chromium-page › page/page-network-response.spec.ts › should return uncompressed text [fail] bidi-chromium-page › page/page-network-response.spec.ts › should throw when requesting body of redirected response [pass] bidi-chromium-page › page/page-network-response.spec.ts › should wait until response completes [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should reject response.finished if page closes [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should reject response.finished if context closes [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return json [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return body [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return body with compression [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return status text [pass] -bidi-chromium-page › page/page-network-response.spec.ts › should report all headers [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should report multiple set-cookie headers [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should behave the same way for headers and allHeaders [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should provide a Response with a file URL [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return set-cookie header after route.fulfill [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return headers after route.fulfill [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should report if request was fromServiceWorker [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return body for prefetch script [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should bypass disk cache when page interception is enabled [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should bypass disk cache when context interception is enabled [fail] -bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize and headersSize [pass] -bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize to 0 if there was no body [pass] -bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize, headersSize, and transferSize [fail] -bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize to 0 when there was no response body [pass] +bidi-chromium-page › page/page-network-response.spec.ts › should work @smoke [fail] +bidi-chromium-page › page/page-network-sizes.spec.ts › should handle redirects [fail] +bidi-chromium-page › page/page-network-sizes.spec.ts › should have correct responseBodySize for 404 with content [pass] bidi-chromium-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize [fail] bidi-chromium-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize for chunked request [fail] bidi-chromium-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize with gzip compression [fail] -bidi-chromium-page › page/page-network-sizes.spec.ts › should handle redirects [fail] +bidi-chromium-page › page/page-network-sizes.spec.ts › should return sizes without hanging [pass] +bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize and headersSize [pass] +bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize to 0 if there was no body [pass] +bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize to 0 when there was no response body [pass] +bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize, headersSize, and transferSize [fail] bidi-chromium-page › page/page-network-sizes.spec.ts › should throw for failed requests [pass] bidi-chromium-page › page/page-network-sizes.spec.ts › should work with 200 status code [fail] bidi-chromium-page › page/page-network-sizes.spec.ts › should work with 401 status code [fail] bidi-chromium-page › page/page-network-sizes.spec.ts › should work with 404 status code [fail] bidi-chromium-page › page/page-network-sizes.spec.ts › should work with 500 status code [fail] -bidi-chromium-page › page/page-network-sizes.spec.ts › should have correct responseBodySize for 404 with content [pass] -bidi-chromium-page › page/page-network-sizes.spec.ts › should return sizes without hanging [pass] bidi-chromium-page › page/page-object-count.spec.ts › should count objects [unknown] -bidi-chromium-page › page/page-request-continue.spec.ts › should work [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should amend HTTP headers [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should delete header with undefined value [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should amend method [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should override request url [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should not allow changing protocol when overriding url [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should not throw when continuing while page is closing [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should not throw when continuing after page is closed [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should not throw if request was cancelled by the page [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should override method along with url [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should amend method on main request [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend post data [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should compute content-length from post data [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend method and post data [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend utf8 post data [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend longer post data [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend binary post data [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should use content-type from original request [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should work with Cross-Origin-Opener-Policy [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should delete the origin header [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should continue preload link requests [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › continue should propagate headers to redirects [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › redirected requests should report overridden headers [fail] bidi-chromium-page › page/page-request-continue.spec.ts › continue should delete headers on redirects [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should intercept css variable with background url [fail] bidi-chromium-page › page/page-request-continue.spec.ts › continue should not change multipart/form-data body [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should work [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should fall back [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should fall back async [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should not chain fulfill [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should not chain abort [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should fall back after exception [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should chain once [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should amend HTTP headers [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should delete header with undefined value [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should amend method [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should override request url [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › post data › should amend post data [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › continue should propagate headers to redirects [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend binary post data [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend longer post data [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend method and post data [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend post data [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend utf8 post data [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should compute content-length from post data [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › post data › should use content-type from original request [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › redirected requests should report overridden headers [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should amend HTTP headers [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should amend method [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should amend method on main request [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should continue preload link requests [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should delete header with undefined value [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should delete the origin header [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should intercept css variable with background url [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should not allow changing protocol when overriding url [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should not throw if request was cancelled by the page [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should not throw when continuing after page is closed [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should not throw when continuing while page is closing [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should override method along with url [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should override request url [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should work [fail] +bidi-chromium-page › page/page-request-continue.spec.ts › should work with Cross-Origin-Opener-Policy [fail] bidi-chromium-page › page/page-request-fallback.spec.ts › post data › should amend binary post data [fail] bidi-chromium-page › page/page-request-fallback.spec.ts › post data › should amend json post data [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should work [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should work with buffer as body [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should work with status code 422 [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with unuassigned status codes [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should not throw if request was cancelled by the page [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › post data › should amend post data [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should amend HTTP headers [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should amend method [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should chain once [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should delete header with undefined value [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should fall back [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should fall back after exception [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should fall back async [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should not chain abort [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should not chain fulfill [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should override request url [fail] +bidi-chromium-page › page/page-request-fallback.spec.ts › should work [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › headerValue should return set-cookie from intercepted response [fail] bidi-chromium-page › page/page-request-fulfill.spec.ts › should allow mocking binary responses [fail] bidi-chromium-page › page/page-request-fulfill.spec.ts › should allow mocking svg with charset [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should work with file path [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should stringify intercepted request response headers [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should not modify the headers sent to the server [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should include the origin header [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with global fetch result [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fetch original request and fulfill [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill json [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill preload link requests [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with fetch response that has multiple set-cookie [fail] bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with fetch result [fail] bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with fetch result and overrides [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fetch original request and fulfill [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with multiple set-cookie [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with fetch response that has multiple set-cookie [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › headerValue should return set-cookie from intercepted response [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with har response [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill preload link requests [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill json [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with global fetch result [fail] bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with gzip and readback [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with har response [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with multiple set-cookie [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with unuassigned status codes [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should include the origin header [fail] bidi-chromium-page › page/page-request-fulfill.spec.ts › should not go to the network for fulfilled requests body [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should not modify the headers sent to the server [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should not throw if request was cancelled by the page [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should stringify intercepted request response headers [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should work [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should work with buffer as body [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should work with file path [fail] +bidi-chromium-page › page/page-request-fulfill.spec.ts › should work with status code 422 [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › request.postData is not null when fetching FormData with a Blob [fail] bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill intercepted response [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill intercepted response using alias [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill popup main request using alias [fail] bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill response with empty body [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should override with defaults when intercepted response not provided [fail] bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill with any response [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should support fulfill after intercept [fail] bidi-chromium-page › page/page-request-intercept.spec.ts › should give access to the intercepted response [fail] bidi-chromium-page › page/page-request-intercept.spec.ts › should give access to the intercepted response body [fail] bidi-chromium-page › page/page-request-intercept.spec.ts › should intercept multipart/form-data request body [unknown] -bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill intercepted response using alias [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should support timeout option in route.fetch [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should not follow redirects when maxRedirects is set to 0 in route.fetch [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should intercept with url override [fail] bidi-chromium-page › page/page-request-intercept.spec.ts › should intercept with post data override [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill popup main request using alias [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › request.postData is not null when fetching FormData with a Blob [fail] -bidi-chromium-page › page/page-route.spec.ts › should intercept @smoke [fail] -bidi-chromium-page › page/page-route.spec.ts › should unroute [fail] -bidi-chromium-page › page/page-route.spec.ts › should support ? in glob pattern [fail] -bidi-chromium-page › page/page-route.spec.ts › should work when POST is redirected with 302 [fail] -bidi-chromium-page › page/page-route.spec.ts › should work when header manipulation headers with redirect [fail] -bidi-chromium-page › page/page-route.spec.ts › should be able to remove headers [fail] -bidi-chromium-page › page/page-route.spec.ts › should contain referer header [fail] -bidi-chromium-page › page/page-route.spec.ts › should properly return navigation response when URL has cookies [fail] -bidi-chromium-page › page/page-route.spec.ts › should override cookie header [pass] -bidi-chromium-page › page/page-route.spec.ts › should show custom HTTP headers [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with redirect inside sync XHR [fail] -bidi-chromium-page › page/page-route.spec.ts › should pause intercepted XHR until continue [fail] -bidi-chromium-page › page/page-route.spec.ts › should pause intercepted fetch request until continue [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with custom referer headers [fail] -bidi-chromium-page › page/page-route.spec.ts › should be abortable [fail] -bidi-chromium-page › page/page-route.spec.ts › should be abortable with custom error codes [fail] -bidi-chromium-page › page/page-route.spec.ts › should not throw if request was cancelled by the page [fail] -bidi-chromium-page › page/page-route.spec.ts › should send referer [fail] -bidi-chromium-page › page/page-route.spec.ts › should fail navigation when aborting main resource [fail] -bidi-chromium-page › page/page-route.spec.ts › should not work with redirects [fail] -bidi-chromium-page › page/page-route.spec.ts › should chain fallback w/ dynamic URL [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with redirects for subresources [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with equal requests [fail] -bidi-chromium-page › page/page-route.spec.ts › should navigate to dataURL and not fire dataURL requests [fail] -bidi-chromium-page › page/page-route.spec.ts › should be able to fetch dataURL and not fire dataURL requests [fail] -bidi-chromium-page › page/page-route.spec.ts › should navigate to URL with hash and and fire requests without hash [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with encoded server [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with badly encoded server [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with encoded server - 2 [fail] -bidi-chromium-page › page/page-route.spec.ts › should not throw "Invalid Interception Id" if the request was cancelled [fail] -bidi-chromium-page › page/page-route.spec.ts › should intercept main resource during cross-process navigation [fail] -bidi-chromium-page › page/page-route.spec.ts › should fulfill with redirect status [fail] -bidi-chromium-page › page/page-route.spec.ts › should not fulfill with redirect status [unknown] -bidi-chromium-page › page/page-route.spec.ts › should support cors with GET [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should intercept with url override [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should not follow redirects when maxRedirects is set to 0 in route.fetch [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should override with defaults when intercepted response not provided [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should support fulfill after intercept [fail] +bidi-chromium-page › page/page-request-intercept.spec.ts › should support timeout option in route.fetch [fail] +bidi-chromium-page › page/page-route.spec.ts › route.abort should throw if called twice [fail] +bidi-chromium-page › page/page-route.spec.ts › route.continue should throw if called twice [fail] +bidi-chromium-page › page/page-route.spec.ts › route.fallback should throw if called twice [fail] +bidi-chromium-page › page/page-route.spec.ts › route.fulfill should throw if called twice [fail] bidi-chromium-page › page/page-route.spec.ts › should add Access-Control-Allow-Origin by default when fulfill [fail] bidi-chromium-page › page/page-route.spec.ts › should allow null origin for about:blank [fail] -bidi-chromium-page › page/page-route.spec.ts › should respect cors overrides [fail] -bidi-chromium-page › page/page-route.spec.ts › should not auto-intercept non-preflight OPTIONS [fail] -bidi-chromium-page › page/page-route.spec.ts › should support cors with POST [fail] -bidi-chromium-page › page/page-route.spec.ts › should support cors with credentials [fail] -bidi-chromium-page › page/page-route.spec.ts › should reject cors with disallowed credentials [fail] -bidi-chromium-page › page/page-route.spec.ts › should support cors for different methods [fail] -bidi-chromium-page › page/page-route.spec.ts › should support the times parameter with route matching [fail] -bidi-chromium-page › page/page-route.spec.ts › should work if handler with times parameter was removed from another handler [fail] -bidi-chromium-page › page/page-route.spec.ts › should support async handler w/ times [fail] +bidi-chromium-page › page/page-route.spec.ts › should be able to fetch dataURL and not fire dataURL requests [fail] +bidi-chromium-page › page/page-route.spec.ts › should be able to remove headers [fail] +bidi-chromium-page › page/page-route.spec.ts › should be abortable [fail] +bidi-chromium-page › page/page-route.spec.ts › should be abortable with custom error codes [fail] +bidi-chromium-page › page/page-route.spec.ts › should chain fallback w/ dynamic URL [fail] bidi-chromium-page › page/page-route.spec.ts › should contain raw request header [fail] bidi-chromium-page › page/page-route.spec.ts › should contain raw response header [fail] bidi-chromium-page › page/page-route.spec.ts › should contain raw response header after fulfill [fail] -bidi-chromium-page › page/page-route.spec.ts › route.fulfill should throw if called twice [fail] -bidi-chromium-page › page/page-route.spec.ts › route.continue should throw if called twice [fail] -bidi-chromium-page › page/page-route.spec.ts › route.fallback should throw if called twice [fail] -bidi-chromium-page › page/page-route.spec.ts › route.abort should throw if called twice [fail] +bidi-chromium-page › page/page-route.spec.ts › should contain referer header [fail] +bidi-chromium-page › page/page-route.spec.ts › should fail navigation when aborting main resource [fail] +bidi-chromium-page › page/page-route.spec.ts › should fulfill with redirect status [fail] +bidi-chromium-page › page/page-route.spec.ts › should intercept @smoke [fail] +bidi-chromium-page › page/page-route.spec.ts › should intercept main resource during cross-process navigation [fail] bidi-chromium-page › page/page-route.spec.ts › should intercept when postData is more than 1MB [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work @smoke [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should not capture blinking caret by default [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should capture blinking caret if explicitly asked for [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should capture blinking caret in shadow dom [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should clip rect [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should clip rect with fullPage [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should clip elements to the viewport [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should throw on clip outside the viewport [pass] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should run in parallel [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots and mask elements outside of it [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should restore viewport after fullPage screenshot [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should allow transparency [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should render white background on jpeg file [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work with odd clip size on Retina displays [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work for canvas [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should capture canvas changes [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work for webgl [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work for translateZ [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work while navigating [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work with iframe in shadow [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › path option should work [fail] +bidi-chromium-page › page/page-route.spec.ts › should navigate to URL with hash and and fire requests without hash [fail] +bidi-chromium-page › page/page-route.spec.ts › should navigate to dataURL and not fire dataURL requests [fail] +bidi-chromium-page › page/page-route.spec.ts › should not auto-intercept non-preflight OPTIONS [fail] +bidi-chromium-page › page/page-route.spec.ts › should not fulfill with redirect status [unknown] +bidi-chromium-page › page/page-route.spec.ts › should not throw "Invalid Interception Id" if the request was cancelled [fail] +bidi-chromium-page › page/page-route.spec.ts › should not throw if request was cancelled by the page [fail] +bidi-chromium-page › page/page-route.spec.ts › should not work with redirects [fail] +bidi-chromium-page › page/page-route.spec.ts › should override cookie header [pass] +bidi-chromium-page › page/page-route.spec.ts › should pause intercepted XHR until continue [fail] +bidi-chromium-page › page/page-route.spec.ts › should pause intercepted fetch request until continue [fail] +bidi-chromium-page › page/page-route.spec.ts › should properly return navigation response when URL has cookies [fail] +bidi-chromium-page › page/page-route.spec.ts › should reject cors with disallowed credentials [fail] +bidi-chromium-page › page/page-route.spec.ts › should respect cors overrides [fail] +bidi-chromium-page › page/page-route.spec.ts › should send referer [fail] +bidi-chromium-page › page/page-route.spec.ts › should show custom HTTP headers [fail] +bidi-chromium-page › page/page-route.spec.ts › should support ? in glob pattern [fail] +bidi-chromium-page › page/page-route.spec.ts › should support async handler w/ times [fail] +bidi-chromium-page › page/page-route.spec.ts › should support cors for different methods [fail] +bidi-chromium-page › page/page-route.spec.ts › should support cors with GET [fail] +bidi-chromium-page › page/page-route.spec.ts › should support cors with POST [fail] +bidi-chromium-page › page/page-route.spec.ts › should support cors with credentials [fail] +bidi-chromium-page › page/page-route.spec.ts › should support the times parameter with route matching [fail] +bidi-chromium-page › page/page-route.spec.ts › should unroute [fail] +bidi-chromium-page › page/page-route.spec.ts › should work if handler with times parameter was removed from another handler [fail] +bidi-chromium-page › page/page-route.spec.ts › should work when POST is redirected with 302 [fail] +bidi-chromium-page › page/page-route.spec.ts › should work when header manipulation headers with redirect [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with badly encoded server [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with custom referer headers [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with encoded server [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with encoded server - 2 [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with equal requests [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with redirect inside sync XHR [fail] +bidi-chromium-page › page/page-route.spec.ts › should work with redirects for subresources [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should capture screenshots after layoutchanges in transitionend event [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should fire transitionend for finite transitions [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture css animations in shadow DOM [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite css animation [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite web animations [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture pseudo element css animation [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not change animation with playbackRate equal to 0 [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should resume infinite animations [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should stop animations that happen right before screenshot [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for INfinite css animation [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for css transitions [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for finite css animation [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should wait for fonts to load [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot should capture css transform [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should hide elements based on attr [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask in parallel [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask inside iframe [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask multiple elements [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should remove elements based on attr [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should remove mask after screenshot [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when mask color is not pink #F0F [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe has stalled navigation [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe used document.open after a weird url [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work with elementhandle [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work with locator [fail] bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › path option should create subdirectories [fail] bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › path option should detect jpeg [fail] bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › path option should throw for unsupported mime type [pass] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › path option should work [fail] bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › quality option should throw for png [pass] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › zero quality option should throw for png [pass] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should prefer type over extension [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should allow transparency [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should capture blinking caret if explicitly asked for [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should capture blinking caret in shadow dom [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should capture canvas changes [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should clip elements to the viewport [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should clip rect [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should clip rect with fullPage [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should not capture blinking caret by default [fail] bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should not issue resize event [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work with Array deleted [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should prefer type over extension [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should render white background on jpeg file [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should restore viewport after fullPage screenshot [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should run in parallel [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots [fail] +bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots and mask elements outside of it [fail] bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots during navigation [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work with locator [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work with elementhandle [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask multiple elements [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask inside iframe [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask in parallel [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should remove mask after screenshot [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe has stalled navigation [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe used document.open after a weird url [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when mask color is not pink #F0F [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should hide elements based on attr [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should remove elements based on attr [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite css animation [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture pseudo element css animation [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture css animations in shadow DOM [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should stop animations that happen right before screenshot [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should resume infinite animations [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite web animations [unknown] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should fire transitionend for finite transitions [unknown] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should capture screenshots after layoutchanges in transitionend event [unknown] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not change animation with playbackRate equal to 0 [unknown] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for css transitions [unknown] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for INfinite css animation [unknown] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for finite css animation [unknown] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should wait for fonts to load [unknown] -bidi-chromium-page › page/page-screenshot.spec.ts › should throw if screenshot size is too large [unknown] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot should capture css transform [unknown] -bidi-chromium-page › page/page-screenshot.spec.ts › should capture css box-shadow [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should select single option @smoke [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should select single option by value [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should fall back to selecting by label [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should select single option by label [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should select single option by handle [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should select single option by index [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should select single option by multiple attributes [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should not select single option when some attributes do not match [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should select only first option [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should not throw when select causes navigation [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should select multiple options [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should select multiple options with attributes [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should respect event bubbling [unknown] -bidi-chromium-page › page/page-select-option.spec.ts › should throw when element is not a [pass] +bidi-chromium-page › page/page-select-option.spec.ts › should unselect with null [pass] +bidi-chromium-page › page/page-select-option.spec.ts › should wait for multiple options to be present [pass] +bidi-chromium-page › page/page-select-option.spec.ts › should wait for option index to be present [pass] +bidi-chromium-page › page/page-select-option.spec.ts › should wait for option to be present [pass] +bidi-chromium-page › page/page-select-option.spec.ts › should work when re-defining top-level Event class [pass] +bidi-chromium-page › page/page-set-content.spec.ts › content() should throw nice error during navigation [pass] +bidi-chromium-page › page/page-set-content.spec.ts › should await resources to load [pass] +bidi-chromium-page › page/page-set-content.spec.ts › should respect default navigation timeout [pass] +bidi-chromium-page › page/page-set-content.spec.ts › should respect timeout [pass] bidi-chromium-page › page/page-set-content.spec.ts › should return empty content there is no iframe src [unknown] -bidi-chromium-page › page/page-set-extra-http-headers.spec.ts › should work @smoke [unknown] -bidi-chromium-page › page/page-set-extra-http-headers.spec.ts › should work with redirects [unknown] -bidi-chromium-page › page/page-set-extra-http-headers.spec.ts › should work with extra headers from browser context [unknown] -bidi-chromium-page › page/page-set-extra-http-headers.spec.ts › should throw for non-string header values [unknown] -bidi-chromium-page › page/page-set-extra-http-headers.spec.ts › should not duplicate referer header [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should upload the file [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should upload a folder [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should upload a folder and throw for multiple directories [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should throw if a directory and files are passed [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should throw when uploading a folder in a normal file upload input [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should throw when uploading a file in a directory upload input [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should upload a file after popup [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should upload large file [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should throw an error if the file does not exist [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should upload multiple large files [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should upload large file with relative path [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should upload the file with spaces in name [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should work @smoke [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should set from memory [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should emit event once [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should emit event via prepend [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should emit event for iframe [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should emit event on/off [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should emit event addListener/removeListener [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should work when file input is attached to DOM [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should work when file input is not attached to DOM [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should not throw when filechooser belongs to iframe [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should not throw when frame is detached immediately [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should work with CSP [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should respect timeout [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should respect default timeout when there is no custom timeout [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should prioritize exact timeout over default timeout [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should work with no timeout [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should return the same file chooser when there are many watchdogs simultaneously [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should accept single file [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should detect mime type [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should not trim big uploaded files [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should be able to read selected file [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should be able to reset selected files with empty file list [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should not accept multiple files for single-file input [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should emit input and change events [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › input event.composed should be true and cross shadow dom boundary [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should work for single file pick [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should work for "multiple" [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should work for "webkitdirectory" [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should emit event after navigation [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should trigger listener added before navigation [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › input should trigger events when files changed second time [unknown] -bidi-chromium-page › page/page-set-input-files.spec.ts › should preserve lastModified timestamp [unknown] -bidi-chromium-page › page/page-strict.spec.ts › should fail page.textContent in strict mode [unknown] -bidi-chromium-page › page/page-strict.spec.ts › should fail page.getAttribute in strict mode [unknown] -bidi-chromium-page › page/page-strict.spec.ts › should fail page.fill in strict mode [unknown] -bidi-chromium-page › page/page-strict.spec.ts › should fail page.$ in strict mode [unknown] -bidi-chromium-page › page/page-strict.spec.ts › should fail page.waitForSelector in strict mode [unknown] -bidi-chromium-page › page/page-strict.spec.ts › should fail page.dispatchEvent in strict mode [unknown] -bidi-chromium-page › page/page-strict.spec.ts › should properly format :nth-child() in strict mode message [unknown] -bidi-chromium-page › page/page-strict.spec.ts › should escape class names [unknown] -bidi-chromium-page › page/page-strict.spec.ts › should escape tag names [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should timeout [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should accept a string [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should work when resolved right before execution context disposal [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should poll on interval [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should avoid side effects after timeout [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should throw on polling:mutation [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should poll on raf [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should fail with predicate throwing on first call [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should fail with predicate throwing sometimes [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should fail with ReferenceError on wrong page [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should work with strict CSP policy [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should throw on bad polling value [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should throw negative polling interval [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should return the success value as a JSHandle [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should return the window as a success value [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should accept ElementHandle arguments [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should respect timeout [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should respect default timeout [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should disable timeout when its set to 0 [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should survive cross-process navigation [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should survive navigations [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should work with multiline body [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should wait for predicate with arguments [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should not be called after finishing successfully [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should not be called after finishing unsuccessfully [unknown] -bidi-chromium-page › page/page-wait-for-function.spec.ts › should throw when frame is detached [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should pick up ongoing navigation [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should respect timeout [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should resolve immediately if loaded [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should throw for bad state [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should resolve immediately if load state matches [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should work with pages that have loaded before being connected to [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should wait for load state of empty url popup [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should wait for load state of about:blank popup [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should wait for load state of about:blank popup with noopener [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should wait for load state of popup with network url [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should wait for load state of popup with network url and noopener [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should work with clicking target=_blank [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should wait for load state of newPage [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should resolve after popup load [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should work for frame [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should work with javascript: iframe [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should work with broken data-url iframe [unknown] -bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should work with broken blob-url iframe [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should respect timeout [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with both domcontentloaded and load [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with commit [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with clicking on anchor links [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with clicking on links which do not commit navigation [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with history.pushState() [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with history.replaceState() [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with DOM history.back()/history.forward() [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work when subframe issues window.stop() [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with url match [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with url match for same document navigations [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work for cross-process navigations [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work on frame [unknown] -bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should fail when frame detaches [unknown] -bidi-chromium-page › page/page-wait-for-request.spec.ts › should work [unknown] -bidi-chromium-page › page/page-wait-for-request.spec.ts › should work with predicate [unknown] -bidi-chromium-page › page/page-wait-for-request.spec.ts › should respect timeout [unknown] -bidi-chromium-page › page/page-wait-for-request.spec.ts › should respect default timeout [unknown] -bidi-chromium-page › page/page-wait-for-request.spec.ts › should log the url [unknown] -bidi-chromium-page › page/page-wait-for-request.spec.ts › should work with no timeout [unknown] -bidi-chromium-page › page/page-wait-for-request.spec.ts › should work with url match [unknown] -bidi-chromium-page › page/page-wait-for-request.spec.ts › should work with url match regular expression from a different context [unknown] -bidi-chromium-page › page/page-wait-for-response.spec.ts › should work [unknown] -bidi-chromium-page › page/page-wait-for-response.spec.ts › should respect timeout [unknown] -bidi-chromium-page › page/page-wait-for-response.spec.ts › should respect default timeout [unknown] -bidi-chromium-page › page/page-wait-for-response.spec.ts › should log the url [unknown] -bidi-chromium-page › page/page-wait-for-response.spec.ts › should work with predicate [unknown] -bidi-chromium-page › page/page-wait-for-response.spec.ts › should work with async predicate [unknown] -bidi-chromium-page › page/page-wait-for-response.spec.ts › sync predicate should be only called once [unknown] -bidi-chromium-page › page/page-wait-for-response.spec.ts › should work with no timeout [unknown] -bidi-chromium-page › page/page-wait-for-response.spec.ts › should work with re-rendered cached IMG elements [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should throw on waitFor [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should tolerate waitFor=visible [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should immediately resolve promise if node exists [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › elementHandle.waitForSelector should immediately resolve if node exists [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › elementHandle.waitForSelector should wait [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › elementHandle.waitForSelector should timeout [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › elementHandle.waitForSelector should throw on navigation [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should work with removed MutationObserver [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should resolve promise when node is added [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should report logs while waiting for visible [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should report logs while waiting for hidden [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should report logs when the selector resolves to multiple elements [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should resolve promise when node is added in shadow dom [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should work when node is added through innerHTML [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › page.waitForSelector is shortcut for main frame [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should run in specified frame [unknown] -bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should throw when frame is detached [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should survive cross-process navigation [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should wait for visible [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should not consider visible when zero-sized [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should wait for visible recursively [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should consider outside of viewport visible [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › hidden should wait for hidden [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › hidden should wait for display: none [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › hidden should wait for removal [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should return null if waiting to hide non-existing element [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should respect timeout [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should have an error message specifically for awaiting an element to be hidden [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should respond to node attribute mutation [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should return the element handle [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should have correct stack trace for timeout [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should throw for unknown state option [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should throw for visibility option [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should throw for true state option [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should throw for false state option [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should support >> selector syntax [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should wait for detached if already detached [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should wait for detached [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should support some fancy xpath [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should respect timeout xpath [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should run in specified frame xpath [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should throw when frame is detached xpath [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should return the element handle xpath [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should allow you to select an element with single slash xpath [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should correctly handle hidden shadow host [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should work when navigating before node adoption [unknown] -bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should fail when navigating while on handle [unknown] -bidi-chromium-page › page/page-wait-for-url.spec.ts › should work [unknown] -bidi-chromium-page › page/page-wait-for-url.spec.ts › should respect timeout [unknown] -bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with both domcontentloaded and load [unknown] -bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with commit [unknown] -bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with commit and about:blank [unknown] -bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with clicking on anchor links [unknown] -bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with history.pushState() [unknown] -bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with history.replaceState() [unknown] -bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with DOM history.back()/history.forward() [unknown] -bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with url match for same document navigations [unknown] -bidi-chromium-page › page/page-wait-for-url.spec.ts › should work on frame [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should throw for non-string selector [unknown] +bidi-chromium-page › page/page-set-content.spec.ts › should work @smoke [pass] +bidi-chromium-page › page/page-set-content.spec.ts › should work fast enough [pass] +bidi-chromium-page › page/page-set-content.spec.ts › should work with HTML 4 doctype [pass] +bidi-chromium-page › page/page-set-content.spec.ts › should work with accents [pass] +bidi-chromium-page › page/page-set-content.spec.ts › should work with commit [pass] +bidi-chromium-page › page/page-set-content.spec.ts › should work with doctype [pass] +bidi-chromium-page › page/page-set-content.spec.ts › should work with domcontentloaded [pass] +bidi-chromium-page › page/page-set-content.spec.ts › should work with emojis [pass] +bidi-chromium-page › page/page-set-content.spec.ts › should work with newline [pass] +bidi-chromium-page › page/page-set-content.spec.ts › should work with tricky content [pass] +bidi-chromium-page › page/page-set-extra-http-headers.spec.ts › should not duplicate referer header [fail] +bidi-chromium-page › page/page-set-extra-http-headers.spec.ts › should throw for non-string header values [pass] +bidi-chromium-page › page/page-set-extra-http-headers.spec.ts › should work @smoke [fail] +bidi-chromium-page › page/page-set-extra-http-headers.spec.ts › should work with extra headers from browser context [fail] +bidi-chromium-page › page/page-set-extra-http-headers.spec.ts › should work with redirects [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › input event.composed should be true and cross shadow dom boundary [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › input should trigger events when files changed second time [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should accept single file [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should be able to read selected file [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should be able to reset selected files with empty file list [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should detect mime type [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should emit event addListener/removeListener [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should emit event after navigation [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should emit event for iframe [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should emit event on/off [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should emit event once [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should emit event via prepend [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should emit input and change events [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should not accept multiple files for single-file input [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should not throw when filechooser belongs to iframe [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should not throw when frame is detached immediately [pass] +bidi-chromium-page › page/page-set-input-files.spec.ts › should not trim big uploaded files [pass] +bidi-chromium-page › page/page-set-input-files.spec.ts › should preserve lastModified timestamp [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should prioritize exact timeout over default timeout [pass] +bidi-chromium-page › page/page-set-input-files.spec.ts › should respect default timeout when there is no custom timeout [pass] +bidi-chromium-page › page/page-set-input-files.spec.ts › should respect timeout [pass] +bidi-chromium-page › page/page-set-input-files.spec.ts › should return the same file chooser when there are many watchdogs simultaneously [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should set from memory [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should throw an error if the file does not exist [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should throw if a directory and files are passed [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should throw when uploading a file in a directory upload input [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should throw when uploading a folder in a normal file upload input [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should trigger listener added before navigation [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should upload a file after popup [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should upload a folder [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should upload a folder and throw for multiple directories [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should upload large file [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should upload large file with relative path [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should upload multiple large files [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should upload the file [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should upload the file with spaces in name [fail] +bidi-chromium-page › page/page-set-input-files.spec.ts › should work @smoke [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should work for "multiple" [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should work for "webkitdirectory" [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should work for single file pick [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should work when file input is attached to DOM [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should work when file input is not attached to DOM [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should work with CSP [timeout] +bidi-chromium-page › page/page-set-input-files.spec.ts › should work with no timeout [timeout] +bidi-chromium-page › page/page-strict.spec.ts › should escape class names [pass] +bidi-chromium-page › page/page-strict.spec.ts › should escape tag names [pass] +bidi-chromium-page › page/page-strict.spec.ts › should fail page.$ in strict mode [pass] +bidi-chromium-page › page/page-strict.spec.ts › should fail page.dispatchEvent in strict mode [pass] +bidi-chromium-page › page/page-strict.spec.ts › should fail page.fill in strict mode [pass] +bidi-chromium-page › page/page-strict.spec.ts › should fail page.getAttribute in strict mode [pass] +bidi-chromium-page › page/page-strict.spec.ts › should fail page.textContent in strict mode [pass] +bidi-chromium-page › page/page-strict.spec.ts › should fail page.waitForSelector in strict mode [pass] +bidi-chromium-page › page/page-strict.spec.ts › should properly format :nth-child() in strict mode message [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should accept ElementHandle arguments [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should accept a string [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should avoid side effects after timeout [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should disable timeout when its set to 0 [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should fail with ReferenceError on wrong page [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should fail with predicate throwing on first call [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should fail with predicate throwing sometimes [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should not be called after finishing successfully [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should not be called after finishing unsuccessfully [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should poll on interval [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should poll on raf [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should respect default timeout [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should respect timeout [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should return the success value as a JSHandle [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should return the window as a success value [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should survive cross-process navigation [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should survive navigations [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should throw negative polling interval [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should throw on bad polling value [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should throw on polling:mutation [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should throw when frame is detached [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should timeout [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should wait for predicate with arguments [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should work when resolved right before execution context disposal [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should work with multiline body [pass] +bidi-chromium-page › page/page-wait-for-function.spec.ts › should work with strict CSP policy [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should pick up ongoing navigation [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should resolve after popup load [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should resolve immediately if load state matches [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should resolve immediately if loaded [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should respect timeout [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should throw for bad state [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should wait for load state of about:blank popup [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should wait for load state of about:blank popup with noopener [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should wait for load state of empty url popup [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should wait for load state of newPage [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should wait for load state of popup with network url [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should wait for load state of popup with network url and noopener [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should work for frame [fail] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should work with broken blob-url iframe [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should work with broken data-url iframe [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should work with clicking target=_blank [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should work with javascript: iframe [pass] +bidi-chromium-page › page/page-wait-for-load-state.spec.ts › should work with pages that have loaded before being connected to [pass] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should fail when frame detaches [pass] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should respect timeout [pass] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work [pass] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work for cross-process navigations [pass] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work on frame [pass] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work when subframe issues window.stop() [pass] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with DOM history.back()/history.forward() [pass] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with both domcontentloaded and load [pass] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with clicking on anchor links [pass] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with clicking on links which do not commit navigation [fail] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with commit [fail] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with history.pushState() [pass] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with history.replaceState() [pass] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with url match [pass] +bidi-chromium-page › page/page-wait-for-navigation.spec.ts › should work with url match for same document navigations [pass] +bidi-chromium-page › page/page-wait-for-request.spec.ts › should log the url [pass] +bidi-chromium-page › page/page-wait-for-request.spec.ts › should respect default timeout [pass] +bidi-chromium-page › page/page-wait-for-request.spec.ts › should respect timeout [pass] +bidi-chromium-page › page/page-wait-for-request.spec.ts › should work [pass] +bidi-chromium-page › page/page-wait-for-request.spec.ts › should work with no timeout [pass] +bidi-chromium-page › page/page-wait-for-request.spec.ts › should work with predicate [pass] +bidi-chromium-page › page/page-wait-for-request.spec.ts › should work with url match [pass] +bidi-chromium-page › page/page-wait-for-request.spec.ts › should work with url match regular expression from a different context [pass] +bidi-chromium-page › page/page-wait-for-response.spec.ts › should log the url [pass] +bidi-chromium-page › page/page-wait-for-response.spec.ts › should respect default timeout [pass] +bidi-chromium-page › page/page-wait-for-response.spec.ts › should respect timeout [pass] +bidi-chromium-page › page/page-wait-for-response.spec.ts › should work [pass] +bidi-chromium-page › page/page-wait-for-response.spec.ts › should work with async predicate [fail] +bidi-chromium-page › page/page-wait-for-response.spec.ts › should work with no timeout [pass] +bidi-chromium-page › page/page-wait-for-response.spec.ts › should work with predicate [pass] +bidi-chromium-page › page/page-wait-for-response.spec.ts › should work with re-rendered cached IMG elements [pass] +bidi-chromium-page › page/page-wait-for-response.spec.ts › sync predicate should be only called once [pass] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › elementHandle.waitForSelector should immediately resolve if node exists [pass] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › elementHandle.waitForSelector should throw on navigation [pass] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › elementHandle.waitForSelector should timeout [pass] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › elementHandle.waitForSelector should wait [pass] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › page.waitForSelector is shortcut for main frame [fail] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should immediately resolve promise if node exists [pass] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should report logs when the selector resolves to multiple elements [pass] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should report logs while waiting for hidden [pass] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should report logs while waiting for visible [pass] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should resolve promise when node is added [fail] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should resolve promise when node is added in shadow dom [pass] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should run in specified frame [fail] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should throw on waitFor [pass] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should throw when frame is detached [fail] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should tolerate waitFor=visible [pass] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should work when node is added through innerHTML [pass] +bidi-chromium-page › page/page-wait-for-selector-1.spec.ts › should work with removed MutationObserver [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › hidden should wait for display: none [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › hidden should wait for hidden [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › hidden should wait for removal [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should allow you to select an element with single slash xpath [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should consider outside of viewport visible [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should correctly handle hidden shadow host [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should fail when navigating while on handle [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should have an error message specifically for awaiting an element to be hidden [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should have correct stack trace for timeout [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should not consider visible when zero-sized [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should respect timeout [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should respect timeout xpath [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should respond to node attribute mutation [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should return null if waiting to hide non-existing element [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should return the element handle [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should return the element handle xpath [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should run in specified frame xpath [fail] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should support >> selector syntax [fail] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should support some fancy xpath [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should survive cross-process navigation [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should throw for false state option [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should throw for true state option [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should throw for unknown state option [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should throw for visibility option [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should throw when frame is detached xpath [fail] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should wait for detached [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should wait for detached if already detached [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should wait for visible [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should wait for visible recursively [pass] +bidi-chromium-page › page/page-wait-for-selector-2.spec.ts › should work when navigating before node adoption [pass] +bidi-chromium-page › page/page-wait-for-url.spec.ts › should respect timeout [pass] +bidi-chromium-page › page/page-wait-for-url.spec.ts › should work [pass] +bidi-chromium-page › page/page-wait-for-url.spec.ts › should work on frame [pass] +bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with DOM history.back()/history.forward() [pass] +bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with both domcontentloaded and load [pass] +bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with clicking on anchor links [pass] +bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with commit [fail] +bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with commit and about:blank [timeout] +bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with history.pushState() [pass] +bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with history.replaceState() [pass] +bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with url match for same document navigations [pass] +bidi-chromium-page › page/queryselector.spec.ts › $$ should work with bogus Array.from [unknown] +bidi-chromium-page › page/queryselector.spec.ts › should auto-detect css selector [unknown] +bidi-chromium-page › page/queryselector.spec.ts › should auto-detect text selector [unknown] +bidi-chromium-page › page/queryselector.spec.ts › should auto-detect xpath selector [unknown] +bidi-chromium-page › page/queryselector.spec.ts › should auto-detect xpath selector starting with .. [unknown] +bidi-chromium-page › page/queryselector.spec.ts › should auto-detect xpath selector with starting parenthesis [unknown] bidi-chromium-page › page/queryselector.spec.ts › should query existing element with css selector @smoke [unknown] bidi-chromium-page › page/queryselector.spec.ts › should query existing element with text selector [unknown] bidi-chromium-page › page/queryselector.spec.ts › should query existing element with xpath selector [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should return null for non-existing element [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should auto-detect xpath selector [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should auto-detect xpath selector with starting parenthesis [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should auto-detect xpath selector starting with .. [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should auto-detect text selector [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should auto-detect css selector [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should support >> syntax [unknown] bidi-chromium-page › page/queryselector.spec.ts › should query existing elements [unknown] bidi-chromium-page › page/queryselector.spec.ts › should return empty array if nothing is found [unknown] +bidi-chromium-page › page/queryselector.spec.ts › should return null for non-existing element [unknown] +bidi-chromium-page › page/queryselector.spec.ts › should support >> syntax [unknown] +bidi-chromium-page › page/queryselector.spec.ts › should throw for non-string selector [unknown] bidi-chromium-page › page/queryselector.spec.ts › xpath should query existing element [unknown] bidi-chromium-page › page/queryselector.spec.ts › xpath should return empty array for non-existing element [unknown] bidi-chromium-page › page/queryselector.spec.ts › xpath should return multiple elements [unknown] -bidi-chromium-page › page/queryselector.spec.ts › $$ should work with bogus Array.from [unknown] -bidi-chromium-page › page/retarget.spec.ts › element state checks should work as expected for label with zero-sized input [unknown] -bidi-chromium-page › page/retarget.spec.ts › should wait for enclosing disabled button [unknown] -bidi-chromium-page › page/retarget.spec.ts › should wait for enclosing button with a disabled fieldset [unknown] -bidi-chromium-page › page/retarget.spec.ts › should wait for enclosing enabled button [unknown] -bidi-chromium-page › page/retarget.spec.ts › should check the box outside shadow dom label [unknown] -bidi-chromium-page › page/retarget.spec.ts › setInputFiles should work with label [unknown] -bidi-chromium-page › page/retarget.spec.ts › enabled/disabled retargeting [unknown] -bidi-chromium-page › page/retarget.spec.ts › visible/hidden retargeting [unknown] -bidi-chromium-page › page/retarget.spec.ts › editable retargeting [unknown] -bidi-chromium-page › page/retarget.spec.ts › input value retargeting [unknown] -bidi-chromium-page › page/retarget.spec.ts › selection retargeting [unknown] -bidi-chromium-page › page/retarget.spec.ts › select options retargeting [unknown] -bidi-chromium-page › page/retarget.spec.ts › direct actions retargeting [unknown] bidi-chromium-page › page/retarget.spec.ts › check retargeting [unknown] +bidi-chromium-page › page/retarget.spec.ts › direct actions retargeting [unknown] +bidi-chromium-page › page/retarget.spec.ts › editable retargeting [unknown] +bidi-chromium-page › page/retarget.spec.ts › element state checks should work as expected for label with zero-sized input [unknown] +bidi-chromium-page › page/retarget.spec.ts › enabled/disabled retargeting [unknown] +bidi-chromium-page › page/retarget.spec.ts › input value retargeting [unknown] +bidi-chromium-page › page/retarget.spec.ts › select options retargeting [unknown] +bidi-chromium-page › page/retarget.spec.ts › selection retargeting [unknown] +bidi-chromium-page › page/retarget.spec.ts › setInputFiles should work with label [unknown] +bidi-chromium-page › page/retarget.spec.ts › should check the box outside shadow dom label [unknown] bidi-chromium-page › page/retarget.spec.ts › should not retarget anchor into parent label [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with large DOM @smoke [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work for open shadow roots [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with > combinator and spaces [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with comma separated list [unknown] +bidi-chromium-page › page/retarget.spec.ts › should wait for enclosing button with a disabled fieldset [unknown] +bidi-chromium-page › page/retarget.spec.ts › should wait for enclosing disabled button [unknown] +bidi-chromium-page › page/retarget.spec.ts › should wait for enclosing enabled button [unknown] +bidi-chromium-page › page/retarget.spec.ts › visible/hidden retargeting [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › css on the handle should be relative [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should absolutize relative selectors [unknown] bidi-chromium-page › page/selectors-css.spec.ts › should keep dom order with comma separated list [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should not match root after >> [unknown] bidi-chromium-page › page/selectors-css.spec.ts › should return multiple captures for the same node [unknown] bidi-chromium-page › page/selectors-css.spec.ts › should return multiple captures when going up the hierarchy [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with comma separated list in various positions [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with comma inside text [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with attribute selectors [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should not match root after >> [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with numerical id [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with wrong-case id [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work for open shadow roots [unknown] bidi-chromium-page › page/selectors-css.spec.ts › should work with * [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with + [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with :has [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with :is [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with :not [unknown] bidi-chromium-page › page/selectors-css.spec.ts › should work with :nth-child [unknown] bidi-chromium-page › page/selectors-css.spec.ts › should work with :nth-child(of) notation with nested functions [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with :not [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with ~ [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with + [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with spaces in :nth-child and :not [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with :is [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with :has [unknown] bidi-chromium-page › page/selectors-css.spec.ts › should work with :scope [unknown] bidi-chromium-page › page/selectors-css.spec.ts › should work with :scope and class [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should absolutize relative selectors [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › css on the handle should be relative [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for iframe @smoke [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for iframe (handle) [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for nested iframe [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for nested iframe (handle) [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for $ and $$ [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with > combinator and spaces [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with attribute selectors [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with comma inside text [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with comma separated list [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with comma separated list in various positions [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with large DOM @smoke [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with numerical id [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with spaces in :nth-child and :not [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with wrong-case id [unknown] +bidi-chromium-page › page/selectors-css.spec.ts › should work with ~ [unknown] bidi-chromium-page › page/selectors-frame.spec.ts › $ should not wait for frame [unknown] bidi-chromium-page › page/selectors-frame.spec.ts › $$ should not wait for frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › $eval should throw for missing frame [unknown] bidi-chromium-page › page/selectors-frame.spec.ts › $$eval should throw for missing frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for $ and $$ (handle) [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for $eval [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for $eval (handle) [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for $$eval [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for $$eval (handle) [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should not allow dangling enter-frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should not allow leading enter-frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should not allow capturing before enter-frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should capture after the enter-frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should click in lazy iframe [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › waitFor should survive frame reattach [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › waitForSelector should survive frame reattach (handle) [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › waitForSelector should survive iframe navigation (handle) [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › $eval should throw for missing frame [unknown] bidi-chromium-page › page/selectors-frame.spec.ts › click should survive frame reattach [unknown] bidi-chromium-page › page/selectors-frame.spec.ts › click should survive iframe navigation [unknown] bidi-chromium-page › page/selectors-frame.spec.ts › click should survive navigation [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should capture after the enter-frame [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should click in lazy iframe [unknown] bidi-chromium-page › page/selectors-frame.spec.ts › should fail if element removed while waiting on element handle [unknown] bidi-chromium-page › page/selectors-frame.spec.ts › should non work for non-frame [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId should work [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId with custom testId should work [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId should escape id [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId should work for regex [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByText should work [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with nested elements [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with multiply-labelled input [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with ancestor label and multiple controls [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with ancestor label and for [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with aria-labelledby [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should prioritize aria-labelledby over native label [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with aria-label [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should not allow capturing before enter-frame [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should not allow dangling enter-frame [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should not allow leading enter-frame [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for $ and $$ [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for $ and $$ (handle) [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for $$eval [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for $$eval (handle) [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for $eval [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for $eval (handle) [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for iframe (handle) [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for iframe @smoke [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for nested iframe [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for nested iframe (handle) [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › waitFor should survive frame reattach [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › waitForSelector should survive frame reattach (handle) [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › waitForSelector should survive iframe navigation (handle) [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getBy escaping [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByAltText should work [unknown] bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should ignore empty aria-label [unknown] bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should prioritize aria-labelledby over aria-label [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should prioritize aria-labelledby over native label [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with ancestor label and for [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with ancestor label and multiple controls [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with aria-label [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with aria-labelledby [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with multiply-labelled input [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with nested elements [unknown] bidi-chromium-page › page/selectors-get-by.spec.ts › getByPlaceholder should work [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByAltText should work [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByTitle should work [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getBy escaping [unknown] bidi-chromium-page › page/selectors-get-by.spec.ts › getByRole escaping [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work for open shadow roots [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId should escape id [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId should work [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId should work for regex [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId with custom testId should work [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByText should work [unknown] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByTitle should work [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › chaining should work with large DOM @smoke [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › data-testid on the handle should be relative [unknown] bidi-chromium-page › page/selectors-misc.spec.ts › should click on links in shadow dom [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › should escape the scope with >> [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › should print original xpath in error [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › should properly determine visibility of display:contents elements [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › should work for open shadow roots [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with :nth-match [unknown] bidi-chromium-page › page/selectors-misc.spec.ts › should work with :visible [unknown] bidi-chromium-page › page/selectors-misc.spec.ts › should work with >> visible= [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with :nth-match [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with nth= [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with strict mode and chaining [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with layout selectors [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should escape the scope with >> [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › xpath should be relative [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with pipe in xpath [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should print original xpath in error [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › data-testid on the handle should be relative [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should properly determine visibility of display:contents elements [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:has= [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:has-not= [unknown] bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:and= [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:or= [unknown] bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:chain= [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › chaining should work with large DOM @smoke [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with single-root elements @smoke [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with multi-root elements (fragments) [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should not crash when there is no match [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:has-not= [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:has= [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:or= [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with layout selectors [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with nth= [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with pipe in xpath [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with strict mode and chaining [unknown] +bidi-chromium-page › page/selectors-misc.spec.ts › xpath should be relative [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react15 › should compose [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should query by props combinations [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react15 › should exact match by props [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should not crash when there is no match [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react15 › should partially match by props [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should query by props combinations [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react15 › should support all string operators [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should support nested react trees [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react15 › should support regex [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react15 › should support truthy querying [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should support nested react trees [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with react memo [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with multi-root elements (fragments) [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with multiroot react [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with multiroot react inside shadow DOM [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with multiroot react after unmount [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with single-root elements @smoke [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multi-root elements (fragments) [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should not crash when there is no match [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with multiroot react inside shadow DOM [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with react memo [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with single-root elements @smoke [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react16 › should compose [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should query by props combinations [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react16 › should exact match by props [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should not crash when there is no match [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react16 › should partially match by props [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should query by props combinations [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react16 › should support all string operators [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should support nested react trees [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react16 › should support regex [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react16 › should support truthy querying [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should support nested react trees [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with react memo [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multi-root elements (fragments) [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multiroot react [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multiroot react inside shadow DOM [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multiroot react after unmount [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with single-root elements @smoke [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multi-root elements (fragments) [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should not crash when there is no match [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multiroot react inside shadow DOM [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with react memo [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with single-root elements @smoke [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react17 › should compose [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should query by props combinations [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react17 › should exact match by props [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should not crash when there is no match [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react17 › should partially match by props [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should query by props combinations [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react17 › should support all string operators [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should support nested react trees [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react17 › should support regex [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react17 › should support truthy querying [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should support nested react trees [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with react memo [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multi-root elements (fragments) [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multiroot react [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multiroot react inside shadow DOM [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multiroot react after unmount [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with single-root elements @smoke [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multi-root elements (fragments) [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should not crash when there is no match [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multiroot react inside shadow DOM [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with react memo [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with single-root elements @smoke [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react18 › should compose [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should query by props combinations [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react18 › should exact match by props [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should not crash when there is no match [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react18 › should partially match by props [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should query by props combinations [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react18 › should support all string operators [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should support nested react trees [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react18 › should support regex [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react18 › should support truthy querying [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should support nested react trees [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with react memo [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multi-root elements (fragments) [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multiroot react [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multiroot react inside shadow DOM [unknown] bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multiroot react after unmount [unknown] -bidi-chromium-page › page/selectors-register.spec.ts › textContent should be atomic [unknown] -bidi-chromium-page › page/selectors-register.spec.ts › innerText should be atomic [unknown] -bidi-chromium-page › page/selectors-register.spec.ts › innerHTML should be atomic [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multiroot react inside shadow DOM [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with react memo [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with single-root elements @smoke [unknown] bidi-chromium-page › page/selectors-register.spec.ts › getAttribute should be atomic [unknown] +bidi-chromium-page › page/selectors-register.spec.ts › innerHTML should be atomic [unknown] +bidi-chromium-page › page/selectors-register.spec.ts › innerText should be atomic [unknown] bidi-chromium-page › page/selectors-register.spec.ts › isVisible should be atomic [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should detect roles [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support selected [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support checked [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support pressed [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support expanded [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support disabled [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support level [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should filter hidden, unless explicitly asked for [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support name [unknown] +bidi-chromium-page › page/selectors-register.spec.ts › textContent should be atomic [unknown] bidi-chromium-page › page/selectors-role.spec.ts › errors [unknown] bidi-chromium-page › page/selectors-role.spec.ts › hidden with shadow dom slots [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support output accessible name [unknown] +bidi-chromium-page › page/selectors-role.spec.ts › should detect roles [unknown] +bidi-chromium-page › page/selectors-role.spec.ts › should filter hidden, unless explicitly asked for [unknown] bidi-chromium-page › page/selectors-role.spec.ts › should not match scope by default [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work @smoke [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work with :text [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should support empty string [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work across nodes [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work with text nodes in quoted mode [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should clear caches [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work with :has-text [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work with large DOM [unknown] +bidi-chromium-page › page/selectors-role.spec.ts › should support checked [unknown] +bidi-chromium-page › page/selectors-role.spec.ts › should support disabled [unknown] +bidi-chromium-page › page/selectors-role.spec.ts › should support expanded [unknown] +bidi-chromium-page › page/selectors-role.spec.ts › should support level [unknown] +bidi-chromium-page › page/selectors-role.spec.ts › should support name [unknown] +bidi-chromium-page › page/selectors-role.spec.ts › should support output accessible name [unknown] +bidi-chromium-page › page/selectors-role.spec.ts › should support pressed [unknown] +bidi-chromium-page › page/selectors-role.spec.ts › should support selected [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › hasText and internal:text should match full node text in strict mode [unknown] bidi-chromium-page › page/selectors-text.spec.ts › should be case sensitive if quotes are specified [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should search for a substring without quotes [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should skip head, script and style [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should clear caches [unknown] bidi-chromium-page › page/selectors-text.spec.ts › should match input[type=button|submit] [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work for open shadow roots [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should prioritize light dom over shadow dom in the same parent [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should waitForSelector with distributed elements [unknown] bidi-chromium-page › page/selectors-text.spec.ts › should match root after >> [unknown] bidi-chromium-page › page/selectors-text.spec.ts › should match root after >> with * [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should prioritize light dom over shadow dom in the same parent [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should search for a substring without quotes [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should skip head, script and style [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should support empty string [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should waitForSelector with distributed elements [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should work @smoke [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should work across nodes [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should work for open shadow roots [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should work with :has-text [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should work with :text [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should work with large DOM [unknown] bidi-chromium-page › page/selectors-text.spec.ts › should work with leading and trailing spaces [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work with unpaired quotes when not at the start [unknown] bidi-chromium-page › page/selectors-text.spec.ts › should work with paired quotes in the middle of selector [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › hasText and internal:text should match full node text in strict mode [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should work with single-root elements @smoke [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should work with multi-root elements (fragments) [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should not crash when there is no match [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should work with text nodes in quoted mode [unknown] +bidi-chromium-page › page/selectors-text.spec.ts › should work with unpaired quotes when not at the start [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should compose [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should query by props combinations [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should exact match by props [unknown] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should not crash when there is no match [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should partially match by props [unknown] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should query by props combinations [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should support all string operators [unknown] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should support nested vue trees [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should support regex [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should support truthy querying [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should support nested vue trees [unknown] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should work with multi-root elements (fragments) [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should work with multiroot react [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should work with multiroot vue inside shadow DOM [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with single-root elements @smoke [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with multi-root elements (fragments) [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should not crash when there is no match [unknown] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should work with single-root elements @smoke [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should compose [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should query by props combinations [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should exact match by props [unknown] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should not crash when there is no match [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should partially match by props [unknown] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should query by props combinations [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should support all string operators [unknown] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should support nested vue trees [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should support regex [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should support truthy querying [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should support nested vue trees [unknown] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with multi-root elements (fragments) [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with multiroot react [unknown] bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with multiroot vue inside shadow DOM [unknown] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with single-root elements @smoke [unknown] +bidi-chromium-page › page/wheel.spec.ts › should dispatch wheel event on svg element [unknown] bidi-chromium-page › page/wheel.spec.ts › should dispatch wheel events @smoke [unknown] bidi-chromium-page › page/wheel.spec.ts › should dispatch wheel events after context menu was opened [unknown] bidi-chromium-page › page/wheel.spec.ts › should dispatch wheel events after popup was opened @smoke [unknown] -bidi-chromium-page › page/wheel.spec.ts › should dispatch wheel event on svg element [unknown] +bidi-chromium-page › page/wheel.spec.ts › should scroll horizontally [unknown] bidi-chromium-page › page/wheel.spec.ts › should scroll when nobody is listening [unknown] bidi-chromium-page › page/wheel.spec.ts › should set the modifiers [unknown] -bidi-chromium-page › page/wheel.spec.ts › should scroll horizontally [unknown] bidi-chromium-page › page/wheel.spec.ts › should work when the event is canceled [unknown] bidi-chromium-page › page/workers.spec.ts › Page.workers @smoke [unknown] -bidi-chromium-page › page/workers.spec.ts › should emit created and destroyed events [unknown] -bidi-chromium-page › page/workers.spec.ts › should report console logs [unknown] -bidi-chromium-page › page/workers.spec.ts › should not report console logs from workers twice [unknown] -bidi-chromium-page › page/workers.spec.ts › should have JSHandles for console logs [unknown] -bidi-chromium-page › page/workers.spec.ts › should evaluate [unknown] -bidi-chromium-page › page/workers.spec.ts › should report errors [unknown] -bidi-chromium-page › page/workers.spec.ts › should clear upon navigation [unknown] -bidi-chromium-page › page/workers.spec.ts › should clear upon cross-process navigation [unknown] bidi-chromium-page › page/workers.spec.ts › should attribute network activity for worker inside iframe to the iframe [unknown] +bidi-chromium-page › page/workers.spec.ts › should clear upon cross-process navigation [unknown] +bidi-chromium-page › page/workers.spec.ts › should clear upon navigation [unknown] +bidi-chromium-page › page/workers.spec.ts › should dispatch console messages when page has workers [unknown] +bidi-chromium-page › page/workers.spec.ts › should emit created and destroyed events [unknown] +bidi-chromium-page › page/workers.spec.ts › should evaluate [unknown] +bidi-chromium-page › page/workers.spec.ts › should have JSHandles for console logs [unknown] +bidi-chromium-page › page/workers.spec.ts › should not report console logs from workers twice [unknown] +bidi-chromium-page › page/workers.spec.ts › should report and intercept network from nested worker [unknown] +bidi-chromium-page › page/workers.spec.ts › should report console logs [unknown] +bidi-chromium-page › page/workers.spec.ts › should report errors [unknown] bidi-chromium-page › page/workers.spec.ts › should report network activity [unknown] bidi-chromium-page › page/workers.spec.ts › should report network activity on worker creation [unknown] -bidi-chromium-page › page/workers.spec.ts › should dispatch console messages when page has workers [unknown] -bidi-chromium-page › page/workers.spec.ts › should report and intercept network from nested worker [unknown] bidi-chromium-page › page/workers.spec.ts › should support extra http headers [unknown] bidi-chromium-page › page/workers.spec.ts › should support offline [unknown] \ No newline at end of file diff --git a/tests/bidi/expectations/bidi-firefox-beta-library.txt b/tests/bidi/expectations/bidi-firefox-beta-library.txt new file mode 100644 index 0000000000..070ee241c1 --- /dev/null +++ b/tests/bidi/expectations/bidi-firefox-beta-library.txt @@ -0,0 +1,1911 @@ +bidi-firefox-beta-library › library/beforeunload.spec.ts › should access page after beforeunload [fail] +bidi-firefox-beta-library › library/beforeunload.spec.ts › should be able to navigate away from page with beforeunload [fail] +bidi-firefox-beta-library › library/beforeunload.spec.ts › should close browser with beforeunload page [fail] +bidi-firefox-beta-library › library/beforeunload.spec.ts › should close browsercontext with beforeunload page [pass] +bidi-firefox-beta-library › library/beforeunload.spec.ts › should close page with beforeunload listener [pass] +bidi-firefox-beta-library › library/beforeunload.spec.ts › should not stall on evaluate when dismissing beforeunload [fail] +bidi-firefox-beta-library › library/beforeunload.spec.ts › should run beforeunload if asked for @smoke [fail] +bidi-firefox-beta-library › library/browser.spec.ts › should create new page @smoke [pass] +bidi-firefox-beta-library › library/browser.spec.ts › should dispatch page.on(close) upon browser.close and reject evaluate [pass] +bidi-firefox-beta-library › library/browser.spec.ts › should return browserType [pass] +bidi-firefox-beta-library › library/browser.spec.ts › should throw upon second create new page [pass] +bidi-firefox-beta-library › library/browser.spec.ts › version should work [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should add cookies with empty value [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should allow unnamed cookies [fail] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should be able to set unsecure cookie for HTTP website [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should default to setting secure cookie for HTTPS websites [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should have |expires| set to |-1| for session cookies [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should isolate cookies between launches [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should isolate cookies in browser contexts [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should isolate persistent cookies [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should isolate send cookie header [fail] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should isolate session cookies [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should not block third party SameSite=None cookies [fail] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should not set a cookie on a data URL page [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should not set a cookie with blank page URL [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should roundtrip cookie [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should send cookie header [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should set a cookie on a different domain [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should set a cookie with a path [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should set cookie with reasonable defaults [fail] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should set cookies for a frame [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should set multiple cookies [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should set secure cookies on secure WebSocket [fail] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should work @smoke [pass] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should work with expires=-1 [fail] +bidi-firefox-beta-library › library/browsercontext-add-cookies.spec.ts › should(not) block third party cookies [fail] +bidi-firefox-beta-library › library/browsercontext-add-init-script.spec.ts › should work with browser context scripts @smoke [pass] +bidi-firefox-beta-library › library/browsercontext-add-init-script.spec.ts › should work with browser context scripts for already created pages [pass] +bidi-firefox-beta-library › library/browsercontext-add-init-script.spec.ts › should work with browser context scripts with a path [pass] +bidi-firefox-beta-library › library/browsercontext-add-init-script.spec.ts › should work without navigation in popup [fail] +bidi-firefox-beta-library › library/browsercontext-add-init-script.spec.ts › should work without navigation, after all bindings [fail] +bidi-firefox-beta-library › library/browsercontext-base-url.spec.ts › should be able to match a URL relative to its given URL with urlMatcher [fail] +bidi-firefox-beta-library › library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browser.newContext is passed to page.goto @smoke [pass] +bidi-firefox-beta-library › library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browser.newPage is passed to page.goto [pass] +bidi-firefox-beta-library › library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browserType.launchPersistentContext is passed to page.goto [fail] +bidi-firefox-beta-library › library/browsercontext-base-url.spec.ts › should construct the URLs correctly when a baseURL with a trailing slash in browser.newPage is passed to page.goto [pass] +bidi-firefox-beta-library › library/browsercontext-base-url.spec.ts › should construct the URLs correctly when a baseURL without a trailing slash in browser.newPage is passed to page.goto [pass] +bidi-firefox-beta-library › library/browsercontext-base-url.spec.ts › should not construct a new URL when valid URLs are passed [pass] +bidi-firefox-beta-library › library/browsercontext-base-url.spec.ts › should not construct a new URL with baseURL when a glob was used [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › close() should abort waitForEvent [fail] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › close() should be callable twice [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › close() should work for empty context [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › default user agent [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › setContent should work after disabling javascript [fail] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should be able to click across browser contexts [fail] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should be able to navigate after disabling javascript [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should close all belonging pages once closing context [fail] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should create new context @smoke [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should disable javascript [fail] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should emulate media in cross-process iframe [fail] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should emulate media in popup [fail] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should emulate navigator.onLine [fail] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should isolate localStorage and cookies @smoke [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should make a copy of default viewport [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should not allow deviceScaleFactor with null viewport [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should not allow isMobile with null viewport [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should not hang on promises after disabling javascript [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should not report frameless pages on error [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should pass self to close event [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should propagate default viewport to the page [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should respect deviceScaleFactor [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should return all of the pages [pass] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › should work with offline option [fail] +bidi-firefox-beta-library › library/browsercontext-basic.spec.ts › window.open should use parent tab context [pass] +bidi-firefox-beta-library › library/browsercontext-clearcookies.spec.ts › should clear cookies [pass] +bidi-firefox-beta-library › library/browsercontext-clearcookies.spec.ts › should isolate cookies when clearing [pass] +bidi-firefox-beta-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by domain [pass] +bidi-firefox-beta-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by name [pass] +bidi-firefox-beta-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by name and domain [pass] +bidi-firefox-beta-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by name regex [pass] +bidi-firefox-beta-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by path [pass] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should add cookies with an expiration [pass] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should be able to send third party cookies via an iframe [fail] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should get a cookie @smoke [fail] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should get a non-session cookie [fail] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should get cookies from multiple urls [pass] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should get multiple cookies [fail] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should parse cookie with large Max-Age correctly [fail] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should properly report "Lax" sameSite cookie [pass] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should properly report "Strict" sameSite cookie [pass] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should properly report httpOnly cookie [pass] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should return cookies with empty value [pass] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should return no cookies in pristine browser context [pass] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should return secure cookies based on HTTP(S) protocol [pass] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should support requestStorageAccess [fail] +bidi-firefox-beta-library › library/browsercontext-cookies.spec.ts › should work with subdomain cookie [pass] +bidi-firefox-beta-library › library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching hostname [pass] +bidi-firefox-beta-library › library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching port [pass] +bidi-firefox-beta-library › library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching scheme [pass] +bidi-firefox-beta-library › library/browsercontext-credentials.spec.ts › should fail with wrong credentials [timeout] +bidi-firefox-beta-library › library/browsercontext-credentials.spec.ts › should fail without credentials [timeout] +bidi-firefox-beta-library › library/browsercontext-credentials.spec.ts › should return resource body [fail] +bidi-firefox-beta-library › library/browsercontext-credentials.spec.ts › should work with correct credentials @smoke [fail] +bidi-firefox-beta-library › library/browsercontext-credentials.spec.ts › should work with correct credentials and matching origin [fail] +bidi-firefox-beta-library › library/browsercontext-credentials.spec.ts › should work with correct credentials and matching origin case insensitive [fail] +bidi-firefox-beta-library › library/browsercontext-credentials.spec.ts › should work with setHTTPCredentials [timeout] +bidi-firefox-beta-library › library/browsercontext-csp.spec.ts › should bypass CSP header [fail] +bidi-firefox-beta-library › library/browsercontext-csp.spec.ts › should bypass CSP in iframes as well [fail] +bidi-firefox-beta-library › library/browsercontext-csp.spec.ts › should bypass CSP meta tag @smoke [fail] +bidi-firefox-beta-library › library/browsercontext-csp.spec.ts › should bypass after cross-process navigation [fail] +bidi-firefox-beta-library › library/browsercontext-device.spec.ts › device › should emulate viewport and screen size [fail] +bidi-firefox-beta-library › library/browsercontext-device.spec.ts › device › should emulate viewport without screen size [fail] +bidi-firefox-beta-library › library/browsercontext-device.spec.ts › device › should reset scroll top after a navigation [pass] +bidi-firefox-beta-library › library/browsercontext-device.spec.ts › device › should scroll to a precise position with mobile scale [pass] +bidi-firefox-beta-library › library/browsercontext-device.spec.ts › device › should scroll to click [pass] +bidi-firefox-beta-library › library/browsercontext-device.spec.ts › device › should scroll twice when emulated [fail] +bidi-firefox-beta-library › library/browsercontext-device.spec.ts › device › should support clicking [pass] +bidi-firefox-beta-library › library/browsercontext-device.spec.ts › device › should work @smoke [fail] +bidi-firefox-beta-library › library/browsercontext-dsf.spec.ts › should fetch hidpi assets [fail] +bidi-firefox-beta-library › library/browsercontext-dsf.spec.ts › should fetch lodpi assets @smoke [pass] +bidi-firefox-beta-library › library/browsercontext-events.spec.ts › console event should work @smoke [pass] +bidi-firefox-beta-library › library/browsercontext-events.spec.ts › console event should work in immediately closed popup [fail] +bidi-firefox-beta-library › library/browsercontext-events.spec.ts › console event should work in popup [pass] +bidi-firefox-beta-library › library/browsercontext-events.spec.ts › console event should work in popup 2 [fail] +bidi-firefox-beta-library › library/browsercontext-events.spec.ts › dialog event should work @smoke [pass] +bidi-firefox-beta-library › library/browsercontext-events.spec.ts › dialog event should work in immediately closed popup [pass] +bidi-firefox-beta-library › library/browsercontext-events.spec.ts › dialog event should work in popup [pass] +bidi-firefox-beta-library › library/browsercontext-events.spec.ts › dialog event should work in popup 2 [fail] +bidi-firefox-beta-library › library/browsercontext-events.spec.ts › dialog event should work with inline script tag [fail] +bidi-firefox-beta-library › library/browsercontext-events.spec.ts › weberror event should work [fail] +bidi-firefox-beta-library › library/browsercontext-expose-function.spec.ts › expose binding should work [fail] +bidi-firefox-beta-library › library/browsercontext-expose-function.spec.ts › exposeBindingHandle should work [fail] +bidi-firefox-beta-library › library/browsercontext-expose-function.spec.ts › should be callable from-inside addInitScript [fail] +bidi-firefox-beta-library › library/browsercontext-expose-function.spec.ts › should throw for duplicate registrations [pass] +bidi-firefox-beta-library › library/browsercontext-expose-function.spec.ts › should work [fail] +bidi-firefox-beta-library › library/browsercontext-expose-function.spec.ts › should work with CSP [fail] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail if response content-length header is missing (br) [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with chunked responses (without Content-Length header) [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should support decompression [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail if response content-length header is missing (deflate) [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with chunked responses (without Content-Length header) [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should support decompression [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail if response content-length header is missing (gzip) [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with chunked responses (without Content-Length header) [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should support decompression [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-happy-eyeballs.spec.ts › get should work [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-happy-eyeballs.spec.ts › get should work on request fixture [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-happy-eyeballs.spec.ts › https post should work with ignoreHTTPSErrors option [pass] +bidi-firefox-beta-library › library/browsercontext-fetch-happy-eyeballs.spec.ts › should work with ip6 and port as the host [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › context request should export same storage state as context [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › delete should support failOnStatusCode [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › delete should support params passed as URLSearchParams [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › delete should support params passed as object [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › delete should support params passed as string [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › delete should support post data [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › deleteshould support ignoreHTTPSErrors option [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › fetch should not throw on long set-cookie value [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › fetch should support failOnStatusCode [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › fetch should support params passed as URLSearchParams [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › fetch should support params passed as object [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › fetch should support params passed as string [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › fetch should work [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › fetchshould support ignoreHTTPSErrors option [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › get should support failOnStatusCode [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › get should support params passed as URLSearchParams [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › get should support params passed as object [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › get should support params passed as string [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › get should support post data [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › get should work @smoke [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › getshould support ignoreHTTPSErrors option [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › head should support failOnStatusCode [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › head should support params passed as URLSearchParams [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › head should support params passed as object [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › head should support params passed as string [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › head should support post data [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › headshould support ignoreHTTPSErrors option [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › patch should support failOnStatusCode [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › patch should support params passed as URLSearchParams [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › patch should support params passed as object [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › patch should support params passed as string [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › patch should support post data [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › patchshould support ignoreHTTPSErrors option [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › post should support failOnStatusCode [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › post should support params passed as URLSearchParams [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › post should support params passed as object [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › post should support params passed as string [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › post should support post data [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › postshould support ignoreHTTPSErrors option [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › put should support failOnStatusCode [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › put should support params passed as URLSearchParams [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › put should support params passed as object [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › put should support params passed as string [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › put should support post data [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › putshould support ignoreHTTPSErrors option [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should abort requests when browser context closes [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should accept bool and numeric params [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should add cookies from Set-Cookie header [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should add default headers [fail] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should add default headers to redirects [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should add session cookies to request [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should allow to override default headers [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should dispose [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should dispose when context closes [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should encode to application/json by default [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should follow redirects [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should follow redirects correctly when Location header contains UTF-8 characters [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should handle cookies on redirects [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should inherit ignoreHTTPSErrors from context [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should not add context cookie if cookie header passed as a parameter [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should not hang on a brotli encoded Range request [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should not lose body while handling Set-Cookie header [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should not work after context dispose [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should not work after dispose [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should override request parameters [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should preserve cookie order from Set-Cookie header [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should propagate custom headers with redirects [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should propagate extra http headers with redirects [fail] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should remove cookie with expires far in the past [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should remove cookie with negative max-age [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should resolve url relative to baseURL [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should respect timeout after redirects [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should retry on ECONNRESET [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should return error with wrong credentials [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should return raw headers [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should send content-length [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should send secure cookie over http for localhost [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should serialize data to json regardless of content-type [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should set domain=localhost cookie [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support HTTPCredentials.send for browser.newPage [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support HTTPCredentials.send for newContext [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support SameSite cookie attribute over https [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support a timeout of 0 [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support application/x-www-form-urlencoded [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support brotli compression [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support cookie with empty value [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support deflate compression [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support gzip compression [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support https [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support multipart/form-data [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support multipart/form-data and keep the order [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support multipart/form-data with ReadStream values [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support repeating names in multipart/form-data [unknown] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support set-cookie with SameSite and without Secure attribute over HTTP [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should support timeout option [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should throw informative error on corrupted brotli body [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should throw informative error on corrupted deflate body [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should throw informative error on corrupted gzip body [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should throw nice error on unsupported data type [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should throw on invalid header value [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should throw on network error [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should throw on network error after redirect [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should throw on network error when sending body [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should throw on network error when sending body after redirect [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should throw on non-http(s) protocol [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should update host header on redirect [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should work with connectOverCDP [unknown] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should work with http credentials [pass] +bidi-firefox-beta-library › library/browsercontext-fetch.spec.ts › should work with setHTTPCredentials [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › by default should abort requests not found in har [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › context.unrouteAll should stop context.routeFromHAR [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › fallback:continue should continue requests on bad har [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › fallback:continue should continue when not found in har [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › newPage should fulfill from har, matching the method and following redirects [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › page.unrouteAll should stop page.routeFromHAR [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should apply overrides before routing from har [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should change document URL after redirected navigation [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should change document URL after redirected navigation on click [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should context.routeFromHAR, matching the method and following redirects [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should disambiguate by header [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should fulfill from har with content in a file [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should goBack to redirected navigation [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should goForward to redirected navigation [timeout] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should ignore aborted requests [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should ignore boundary when matching multipart/form-data body [timeout] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should only context.routeFromHAR requests matching url filter [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should only handle requests matching url filter [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should only page.routeFromHAR requests matching url filter [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should page.routeFromHAR, matching the method and following redirects [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should produce extracted zip [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should record overridden requests to har [timeout] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should reload redirected navigation [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should round-trip extracted har.zip [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should round-trip har with postData [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should round-trip har.zip [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should support regex filter [pass] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should update extracted har.zip for page [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should update har.zip for context [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should update har.zip for page [fail] +bidi-firefox-beta-library › library/browsercontext-har.spec.ts › should update har.zip for page with different options [fail] +bidi-firefox-beta-library › library/browsercontext-locale.spec.ts › should affect Intl.DateTimeFormat().resolvedOptions().locale [fail] +bidi-firefox-beta-library › library/browsercontext-locale.spec.ts › should affect accept-language header @smoke [fail] +bidi-firefox-beta-library › library/browsercontext-locale.spec.ts › should affect navigator.language [fail] +bidi-firefox-beta-library › library/browsercontext-locale.spec.ts › should affect navigator.language in popups [fail] +bidi-firefox-beta-library › library/browsercontext-locale.spec.ts › should be isolated between contexts [fail] +bidi-firefox-beta-library › library/browsercontext-locale.spec.ts › should format date [fail] +bidi-firefox-beta-library › library/browsercontext-locale.spec.ts › should format number [fail] +bidi-firefox-beta-library › library/browsercontext-locale.spec.ts › should format number in popups [fail] +bidi-firefox-beta-library › library/browsercontext-locale.spec.ts › should format number in workers [fail] +bidi-firefox-beta-library › library/browsercontext-locale.spec.ts › should not change default locale in another context [fail] +bidi-firefox-beta-library › library/browsercontext-locale.spec.ts › should work for multiple pages sharing same process [timeout] +bidi-firefox-beta-library › library/browsercontext-network-event.spec.ts › BrowserContext.Events.Request [fail] +bidi-firefox-beta-library › library/browsercontext-network-event.spec.ts › BrowserContext.Events.RequestFailed [fail] +bidi-firefox-beta-library › library/browsercontext-network-event.spec.ts › BrowserContext.Events.RequestFinished [pass] +bidi-firefox-beta-library › library/browsercontext-network-event.spec.ts › BrowserContext.Events.Response [fail] +bidi-firefox-beta-library › library/browsercontext-network-event.spec.ts › should fire events in proper order [pass] +bidi-firefox-beta-library › library/browsercontext-network-event.spec.ts › should not fire events for favicon or favicon redirects [unknown] +bidi-firefox-beta-library › library/browsercontext-page-event.spec.ts › should fire page lifecycle events [fail] +bidi-firefox-beta-library › library/browsercontext-page-event.spec.ts › should have about:blank for empty url with domcontentloaded [timeout] +bidi-firefox-beta-library › library/browsercontext-page-event.spec.ts › should have about:blank url with domcontentloaded [pass] +bidi-firefox-beta-library › library/browsercontext-page-event.spec.ts › should have an opener [fail] +bidi-firefox-beta-library › library/browsercontext-page-event.spec.ts › should have url [fail] +bidi-firefox-beta-library › library/browsercontext-page-event.spec.ts › should have url after domcontentloaded [pass] +bidi-firefox-beta-library › library/browsercontext-page-event.spec.ts › should not crash while redirecting of original request was missed [pass] +bidi-firefox-beta-library › library/browsercontext-page-event.spec.ts › should not hang on ctrl-click during provisional load [fail] +bidi-firefox-beta-library › library/browsercontext-page-event.spec.ts › should report initialized pages [fail] +bidi-firefox-beta-library › library/browsercontext-page-event.spec.ts › should report when a new page is created and closed [fail] +bidi-firefox-beta-library › library/browsercontext-page-event.spec.ts › should work with Ctrl-clicking [fail] +bidi-firefox-beta-library › library/browsercontext-page-event.spec.ts › should work with Shift-clicking [fail] +bidi-firefox-beta-library › library/browsercontext-pages.spec.ts › frame.focus should work multiple times [fail] +bidi-firefox-beta-library › library/browsercontext-pages.spec.ts › page.context should return the correct instance [pass] +bidi-firefox-beta-library › library/browsercontext-pages.spec.ts › should click the button with deviceScaleFactor set [fail] +bidi-firefox-beta-library › library/browsercontext-pages.spec.ts › should click the button with offset with page scale [pass] +bidi-firefox-beta-library › library/browsercontext-pages.spec.ts › should click with disabled javascript [pass] +bidi-firefox-beta-library › library/browsercontext-pages.spec.ts › should keep selection in multiple pages [fail] +bidi-firefox-beta-library › library/browsercontext-pages.spec.ts › should not be visible in context.pages [fail] +bidi-firefox-beta-library › library/browsercontext-pages.spec.ts › should not hang with touch-enabled viewports [pass] +bidi-firefox-beta-library › library/browsercontext-pages.spec.ts › should not leak listeners during navigation of 20 pages [pass] +bidi-firefox-beta-library › library/browsercontext-pages.spec.ts › should return bounding box with page scale [pass] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › does launch without a port [pass] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should authenticate [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should authenticate with empty password [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should exclude patterns [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should isolate proxy credentials between contexts [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should isolate proxy credentials between contexts on navigation [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › link-local [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › localhost [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › loopback address [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › link-local [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › localhost [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › loopback address [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should set cookie for top-level domain [pass] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should throw for bad server value [pass] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should throw for socks4 authentication [pass] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should throw for socks5 authentication [pass] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should use ipv6 proxy [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should use proxy [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should use proxy for https urls [timeout] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should use proxy for second page [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should use proxy twice [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should use socks proxy [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should use socks proxy in second page [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should work when passing the proxy only on the context level [fail] +bidi-firefox-beta-library › library/browsercontext-proxy.spec.ts › should work with IP:PORT notion [fail] +bidi-firefox-beta-library › library/browsercontext-reuse.spec.ts › should continue issuing events after closing the reused page [pass] +bidi-firefox-beta-library › library/browsercontext-reuse.spec.ts › should ignore binding from beforeunload [fail] +bidi-firefox-beta-library › library/browsercontext-reuse.spec.ts › should not cache resources [timeout] +bidi-firefox-beta-library › library/browsercontext-reuse.spec.ts › should re-add binding after reset [fail] +bidi-firefox-beta-library › library/browsercontext-reuse.spec.ts › should reset mouse position [fail] +bidi-firefox-beta-library › library/browsercontext-reuse.spec.ts › should reset serviceworker [pass] +bidi-firefox-beta-library › library/browsercontext-reuse.spec.ts › should reset serviceworker that hangs in importScripts [pass] +bidi-firefox-beta-library › library/browsercontext-reuse.spec.ts › should reset tracing [pass] +bidi-firefox-beta-library › library/browsercontext-reuse.spec.ts › should work with clock emulation [pass] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should chain fallback [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should chain fallback into page [pass] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should chain fallback w/ dynamic URL [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should fall back async [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should fall back to context.route [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should ignore secure Set-Cookie header for insecure requests [pass] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should intercept [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should not chain abort [pass] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should not chain fulfill [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should overwrite post body with empty string [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should support Set-Cookie header [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should support async handler w/ times [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should support the times parameter with route matching [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should unroute [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should use Set-Cookie header in future requests [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should work if handler with times parameter was removed from another handler [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should work with ignoreHTTPSErrors [fail] +bidi-firefox-beta-library › library/browsercontext-route.spec.ts › should yield to page.route [fail] +bidi-firefox-beta-library › library/browsercontext-service-worker-policy.spec.ts › block › blocks service worker registration [timeout] +bidi-firefox-beta-library › library/browsercontext-service-worker-policy.spec.ts › block › should not throw error on about:blank [pass] +bidi-firefox-beta-library › library/browsercontext-service-worker-policy.spec.ts › should allow service workers by default [pass] +bidi-firefox-beta-library › library/browsercontext-set-extra-http-headers.spec.ts › should override extra headers from browser context [fail] +bidi-firefox-beta-library › library/browsercontext-set-extra-http-headers.spec.ts › should throw for non-string header values [pass] +bidi-firefox-beta-library › library/browsercontext-storage-state.spec.ts › should capture cookies [pass] +bidi-firefox-beta-library › library/browsercontext-storage-state.spec.ts › should capture local storage [fail] +bidi-firefox-beta-library › library/browsercontext-storage-state.spec.ts › should handle malformed file [pass] +bidi-firefox-beta-library › library/browsercontext-storage-state.spec.ts › should handle missing file [pass] +bidi-firefox-beta-library › library/browsercontext-storage-state.spec.ts › should not emit events about internal page [fail] +bidi-firefox-beta-library › library/browsercontext-storage-state.spec.ts › should not restore localStorage twice [pass] +bidi-firefox-beta-library › library/browsercontext-storage-state.spec.ts › should round-trip through the file [pass] +bidi-firefox-beta-library › library/browsercontext-storage-state.spec.ts › should serialize storageState with lone surrogates [pass] +bidi-firefox-beta-library › library/browsercontext-storage-state.spec.ts › should set local storage [fail] +bidi-firefox-beta-library › library/browsercontext-storage-state.spec.ts › should work when service worker is intefering [pass] +bidi-firefox-beta-library › library/browsercontext-strict.spec.ts › should not fail page.textContent in non-strict mode [fail] +bidi-firefox-beta-library › library/browsercontext-strict.spec.ts › strict context mode › should fail page.click in strict mode [fail] +bidi-firefox-beta-library › library/browsercontext-strict.spec.ts › strict context mode › should fail page.textContent in strict mode [fail] +bidi-firefox-beta-library › library/browsercontext-strict.spec.ts › strict context mode › should opt out of strict mode [fail] +bidi-firefox-beta-library › library/browsercontext-timezone-id.spec.ts › should affect Intl.DateTimeFormat().resolvedOptions().timeZone [fail] +bidi-firefox-beta-library › library/browsercontext-timezone-id.spec.ts › should not change default timezone in another context [fail] +bidi-firefox-beta-library › library/browsercontext-timezone-id.spec.ts › should throw for invalid timezone IDs when creating pages [fail] +bidi-firefox-beta-library › library/browsercontext-timezone-id.spec.ts › should work @smoke [fail] +bidi-firefox-beta-library › library/browsercontext-timezone-id.spec.ts › should work for multiple pages sharing same process [timeout] +bidi-firefox-beta-library › library/browsercontext-user-agent.spec.ts › custom user agent for download [fail] +bidi-firefox-beta-library › library/browsercontext-user-agent.spec.ts › should emulate device user-agent [fail] +bidi-firefox-beta-library › library/browsercontext-user-agent.spec.ts › should make a copy of default options [fail] +bidi-firefox-beta-library › library/browsercontext-user-agent.spec.ts › should work [fail] +bidi-firefox-beta-library › library/browsercontext-user-agent.spec.ts › should work for navigator.userAgentData and sec-ch-ua headers [unknown] +bidi-firefox-beta-library › library/browsercontext-user-agent.spec.ts › should work for subframes [fail] +bidi-firefox-beta-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › default mobile viewports to 980 width [fail] +bidi-firefox-beta-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › mouse should work with mobile viewports and cross process navigations [pass] +bidi-firefox-beta-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › respect meta viewport tag [pass] +bidi-firefox-beta-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should be detectable [fail] +bidi-firefox-beta-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should detect touch when applying viewport with touches [fail] +bidi-firefox-beta-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should emulate the hover media feature [fail] +bidi-firefox-beta-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should fire orientationchange event [timeout] +bidi-firefox-beta-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should scroll when emulating a mobile viewport [fail] +bidi-firefox-beta-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support landscape emulation [pass] +bidi-firefox-beta-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support mobile emulation [pass] +bidi-firefox-beta-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support touch emulation [fail] +bidi-firefox-beta-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support window.orientation emulation [fail] +bidi-firefox-beta-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › view scale should reset after navigation [pass] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › WebKit Windows headed should have a minimal viewport [unknown] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should be able to get correct orientation angle on non-mobile devices [fail] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should drag with high dpi [fail] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should emulate availWidth and availHeight [fail] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should emulate device height [fail] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should emulate device width [fail] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should get the proper default viewport size [pass] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should not have touch by default [pass] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should report null viewportSize when given null viewport [pass] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should return correct outerWidth and outerHeight [pass] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should set both screen and viewport options [fail] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should set the proper viewport size [pass] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should set window.screen.orientation.type for mobile devices [fail] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should support touch with null viewport [fail] +bidi-firefox-beta-library › library/browsercontext-viewport.spec.ts › should throw on tap if hasTouch is not enabled [fail] +bidi-firefox-beta-library › library/browsertype-basic.spec.ts › browserType.executablePath should work [unknown] +bidi-firefox-beta-library › library/browsertype-basic.spec.ts › browserType.name should work [fail] +bidi-firefox-beta-library › library/browsertype-basic.spec.ts › should throw when trying to connect with not-chromium [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer only › should be able to reconnect to a browser 12 times without warnings [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer only › should properly disconnect when connection closes from the server side [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer only › should work with cluster [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › disconnected event should be emitted when browser is closed or server is closed [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › disconnected event should have browser as argument [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › setInputFiles should preserve lastModified timestamp [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should be able to connect 20 times to a single server without warnings [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should be able to connect two browsers at the same time [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should be able to connect when the wsEndpoint is passed as an option [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should be able to reconnect to a browser [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should be able to visit ipv6 [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should be able to visit ipv6 through localhost [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should connect over http [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should connect over wss [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should emit close events on pages and contexts [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should error when saving download after deletion [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should filter launch options [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should fulfill with global fetch result [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should handle exceptions during connect [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should ignore page.pause when headed [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should not throw on close after disconnect [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should print HTTP error [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should print custom ws close error [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should print ws error [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should properly disconnect when connection closes from the client side [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should record trace with sources [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should reject navigation when browser closes [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should reject waitForEvent before browser.close finishes [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should reject waitForEvent before browser.onDisconnect fires [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should reject waitForSelector when browser closes [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should respect selectors [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should save download [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should save har [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should saveAs videos from remote browser [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should send default User-Agent and X-Playwright-Browser headers with connect request [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should send extra headers with connect request [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should set the browser connected state [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should support slowmo option [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should terminate network waiters [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should throw when calling waitForNavigation after disconnect [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should throw when used after isConnected returns false [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should timeout in connect while connecting [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should timeout in socket while connecting [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › should upload large file [timeout] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should check proxy pattern on the client [unknown] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should forward non-forwarded requests [unknown] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should lead to the error page for forwarded requests when the connection is refused [unknown] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy based on the pattern [unknown] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy ipv6 localhost requests @smoke [unknown] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy local.playwright requests [unknown] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy localhost requests @smoke [unknown] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy localhost requests from fetch api [unknown] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › disconnected event should be emitted when browser is closed or server is closed [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › disconnected event should have browser as argument [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › setInputFiles should preserve lastModified timestamp [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should be able to connect 20 times to a single server without warnings [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should be able to connect two browsers at the same time [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should be able to connect when the wsEndpoint is passed as an option [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should be able to reconnect to a browser [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should be able to visit ipv6 [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should be able to visit ipv6 through localhost [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should connect over http [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should connect over wss [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should emit close events on pages and contexts [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should error when saving download after deletion [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should filter launch options [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should fulfill with global fetch result [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should handle exceptions during connect [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should ignore page.pause when headed [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should not throw on close after disconnect [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should print HTTP error [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should print custom ws close error [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should print ws error [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should properly disconnect when connection closes from the client side [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should record trace with sources [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should reject navigation when browser closes [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should reject waitForEvent before browser.close finishes [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should reject waitForEvent before browser.onDisconnect fires [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should reject waitForSelector when browser closes [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should respect selectors [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should save download [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should save har [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should saveAs videos from remote browser [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should send default User-Agent and X-Playwright-Browser headers with connect request [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should send extra headers with connect request [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should set the browser connected state [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should support slowmo option [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should terminate network waiters [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should throw when calling waitForNavigation after disconnect [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should throw when used after isConnected returns false [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should timeout in connect while connecting [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should timeout in socket while connecting [pass] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › should upload large file [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should check proxy pattern on the client [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should forward non-forwarded requests [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should lead to the error page for forwarded requests when the connection is refused [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy based on the pattern [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy ipv6 localhost requests @smoke [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy local.playwright requests [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy localhost requests @smoke [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy localhost requests from fetch api [fail] +bidi-firefox-beta-library › library/browsertype-connect.spec.ts › should refuse connecting when versions do not match [pass] +bidi-firefox-beta-library › library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 hub + node chromium [unknown] +bidi-firefox-beta-library › library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone chromium [unknown] +bidi-firefox-beta-library › library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone chromium through run-driver [unknown] +bidi-firefox-beta-library › library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone non-chromium [unknown] +bidi-firefox-beta-library › library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 hub + node chromium [unknown] +bidi-firefox-beta-library › library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 standalone chromium [unknown] +bidi-firefox-beta-library › library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 standalone chromium broken driver [unknown] +bidi-firefox-beta-library › library/browsertype-launch-server.spec.ts › launch server › should default to random wsPath [fail] +bidi-firefox-beta-library › library/browsertype-launch-server.spec.ts › launch server › should fire "close" event during kill [fail] +bidi-firefox-beta-library › library/browsertype-launch-server.spec.ts › launch server › should fire close event [fail] +bidi-firefox-beta-library › library/browsertype-launch-server.spec.ts › launch server › should log protocol [fail] +bidi-firefox-beta-library › library/browsertype-launch-server.spec.ts › launch server › should provide an error when ws endpoint is incorrect [fail] +bidi-firefox-beta-library › library/browsertype-launch-server.spec.ts › launch server › should return child_process instance [fail] +bidi-firefox-beta-library › library/browsertype-launch-server.spec.ts › launch server › should work [fail] +bidi-firefox-beta-library › library/browsertype-launch-server.spec.ts › launch server › should work when wsPath is missing leading slash [fail] +bidi-firefox-beta-library › library/browsertype-launch-server.spec.ts › launch server › should work with host [fail] +bidi-firefox-beta-library › library/browsertype-launch-server.spec.ts › launch server › should work with port [fail] +bidi-firefox-beta-library › library/browsertype-launch-server.spec.ts › launch server › should work with wsPath [fail] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should accept objects as options [pass] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should allow await using [pass] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should be callable twice [pass] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should fire close event for all contexts [pass] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should handle exception [pass] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should handle timeout [pass] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should reject all promises when browser is closed [pass] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should reject if executable path is invalid [pass] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should reject if launched browser fails immediately [fail] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should report launch log [pass] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should throw if page argument is passed [fail] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should throw if port option is passed [pass] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should throw if port option is passed for persistent context [pass] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should throw if userDataDir is passed as an argument [pass] +bidi-firefox-beta-library › library/browsertype-launch.spec.ts › should throw if userDataDir option is passed [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › Intl.ListFormat should work [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › SharedArrayBuffer should work @smoke [fail] +bidi-firefox-beta-library › library/capabilities.spec.ts › Web Assembly should work @smoke [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › WebSocket should work @smoke [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › loading in HTMLImageElement.prototype [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › make sure that XMLHttpRequest upload events are emitted correctly [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › navigator.clipboard should be present [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › requestFullscreen [fail] +bidi-firefox-beta-library › library/capabilities.spec.ts › service worker should cover the iframe [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › service worker should register in an iframe [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › serviceWorker should intercept document request [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › should not crash on page with mp4 @smoke [fail] +bidi-firefox-beta-library › library/capabilities.spec.ts › should not crash on showDirectoryPicker [unknown] +bidi-firefox-beta-library › library/capabilities.spec.ts › should not crash on storage.getDirectory() [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › should play audio @smoke [fail] +bidi-firefox-beta-library › library/capabilities.spec.ts › should play video @smoke [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › should play webm video @smoke [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › should respect CSP @smoke [fail] +bidi-firefox-beta-library › library/capabilities.spec.ts › should send no Content-Length header for GET requests with a Content-Type [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › should set CloseEvent.wasClean to false when the server terminates a WebSocket connection [fail] +bidi-firefox-beta-library › library/capabilities.spec.ts › should support webgl 2 @smoke [pass] +bidi-firefox-beta-library › library/capabilities.spec.ts › should support webgl @smoke [fail] +bidi-firefox-beta-library › library/capabilities.spec.ts › webkit should define window.safari [unknown] +bidi-firefox-beta-library › library/capabilities.spec.ts › window.GestureEvent in WebKit [pass] +bidi-firefox-beta-library › library/channels.spec.ts › exposeFunction should not leak [fail] +bidi-firefox-beta-library › library/channels.spec.ts › should not generate dispatchers for subresources w/o listeners [pass] +bidi-firefox-beta-library › library/channels.spec.ts › should scope CDPSession handles [unknown] +bidi-firefox-beta-library › library/channels.spec.ts › should scope browser handles [pass] +bidi-firefox-beta-library › library/channels.spec.ts › should scope context handles [pass] +bidi-firefox-beta-library › library/channels.spec.ts › should work with the domain module [timeout] +bidi-firefox-beta-library › library/chromium/bfcache.spec.ts › bindings should work after restoring from bfcache [fail] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › serviceWorker(), and fromServiceWorker() work [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › setExtraHTTPHeaders [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › setOffline [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept only serviceworker request, not page [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker importScripts [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker requests (main and within) [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker update requests [unknown] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should produce network events, routing, and annotations for Service Worker [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should produce network events, routing, and annotations for Service Worker (advanced) [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report failure (due to content-type) of main service worker request [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report failure (due to redirect) of main service worker request [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report intercepted service worker requests in HAR [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › Page.route should work with intervention headers [fail] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › http credentials › httpCredentials [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › serviceWorkers() should return current workers [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › should close service worker together with the context [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › should create a worker from a service worker [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › should create a worker from service worker with noop routing [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › should emit new service worker on update [timeout] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › should not create a worker from a shared worker [pass] +bidi-firefox-beta-library › library/chromium/chromium.spec.ts › should pass args with spaces [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › emulate media should not be affected by second connectOverCDP [unknown] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › setInputFiles should preserve lastModified timestamp [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should allow tracing over cdp session [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should be able to connect via localhost [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should cleanup artifacts dir after connectOverCDP disconnects due to ws close [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should connect over a ws endpoint [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session twice [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session when passed as a first argument [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should connect to existing page with iframe and navigate [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should connect to existing service workers [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should connect via https [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should connectOverCDP and manage downloads in default context [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should print custom ws close error [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should report all pages in an existing browser [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should report an expected error when the endpoint URL JSON webSocketDebuggerUrl is undefined [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should report an expected error when the endpointURL returns a non-expected status code [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should return valid browser from context.browser() [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should send default User-Agent header with connect request [timeout] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should send extra headers with connect request [timeout] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should use logger in default context [fail] +bidi-firefox-beta-library › library/chromium/connect-over-cdp.spec.ts › should use proxy with connectOverCDP [fail] +bidi-firefox-beta-library › library/chromium/css-coverage.spec.ts › should NOT report scripts across navigations [fail] +bidi-firefox-beta-library › library/chromium/css-coverage.spec.ts › should ignore injected stylesheets [fail] +bidi-firefox-beta-library › library/chromium/css-coverage.spec.ts › should report multiple stylesheets [fail] +bidi-firefox-beta-library › library/chromium/css-coverage.spec.ts › should report sourceURLs [fail] +bidi-firefox-beta-library › library/chromium/css-coverage.spec.ts › should report stylesheets across navigations [fail] +bidi-firefox-beta-library › library/chromium/css-coverage.spec.ts › should report stylesheets that have no coverage [fail] +bidi-firefox-beta-library › library/chromium/css-coverage.spec.ts › should work [fail] +bidi-firefox-beta-library › library/chromium/css-coverage.spec.ts › should work with a recently loaded stylesheet [fail] +bidi-firefox-beta-library › library/chromium/css-coverage.spec.ts › should work with complicated usecases [fail] +bidi-firefox-beta-library › library/chromium/css-coverage.spec.ts › should work with media queries [fail] +bidi-firefox-beta-library › library/chromium/disable-web-security.spec.ts › test init script w/ --disable-web-security [pass] +bidi-firefox-beta-library › library/chromium/disable-web-security.spec.ts › test utility world in popup w/ --disable-web-security [pass] +bidi-firefox-beta-library › library/chromium/js-coverage.spec.ts › should NOT report scripts across navigations when enabled [fail] +bidi-firefox-beta-library › library/chromium/js-coverage.spec.ts › should ignore eval() scripts by default [fail] +bidi-firefox-beta-library › library/chromium/js-coverage.spec.ts › should not hang when there is a debugger statement [fail] +bidi-firefox-beta-library › library/chromium/js-coverage.spec.ts › should report multiple scripts [fail] +bidi-firefox-beta-library › library/chromium/js-coverage.spec.ts › should report scripts across navigations when disabled [fail] +bidi-firefox-beta-library › library/chromium/js-coverage.spec.ts › should report sourceURLs [fail] +bidi-firefox-beta-library › library/chromium/js-coverage.spec.ts › should work [fail] +bidi-firefox-beta-library › library/chromium/js-coverage.spec.ts › shouldn't ignore eval() scripts if reportAnonymousScripts is true [fail] +bidi-firefox-beta-library › library/chromium/launcher.spec.ts › should not create pages automatically [fail] +bidi-firefox-beta-library › library/chromium/launcher.spec.ts › should not throw with remote-debugging-port argument [fail] +bidi-firefox-beta-library › library/chromium/launcher.spec.ts › should open devtools when "devtools: true" option is given [unknown] +bidi-firefox-beta-library › library/chromium/launcher.spec.ts › should return background pages [fail] +bidi-firefox-beta-library › library/chromium/launcher.spec.ts › should return background pages when recording video [fail] +bidi-firefox-beta-library › library/chromium/launcher.spec.ts › should support request/response events when using backgroundPage() [fail] +bidi-firefox-beta-library › library/chromium/launcher.spec.ts › should throw with remote-debugging-pipe argument [fail] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › ElementHandle.boundingBox() should work [pass] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › contentFrame should work [pass] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should allow cdp sessions on oopifs [fail] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should be able to click in iframe [fail] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should click [fail] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should click a button when it overlays oopif [fail] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should emit filechooser event for iframe [fail] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should emulate media [fail] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should emulate offline [fail] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should expose function [fail] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should get the proper viewport [unknown] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should handle oopif detach [pass] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should handle remote -> local -> remote transitions [pass] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should intercept response body from oopif [fail] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should load oopif iframes with subresources and route [pass] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should not throw on exposeFunction when oopif detaches [fail] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should report google.com frame with headed [pass] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should report main requests [pass] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should report oopif frames [pass] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should respect route [pass] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should support addInitScript [pass] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should support context options [fail] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should support exposeFunction [fail] +bidi-firefox-beta-library › library/chromium/oopif.spec.ts › should take screenshot [fail] +bidi-firefox-beta-library › library/chromium/session.spec.ts › should be able to detach session [fail] +bidi-firefox-beta-library › library/chromium/session.spec.ts › should detach when page closes [fail] +bidi-firefox-beta-library › library/chromium/session.spec.ts › should enable and disable domains independently [fail] +bidi-firefox-beta-library › library/chromium/session.spec.ts › should not break page.close() [fail] +bidi-firefox-beta-library › library/chromium/session.spec.ts › should only accept a page or frame [pass] +bidi-firefox-beta-library › library/chromium/session.spec.ts › should reject protocol calls when page closes [fail] +bidi-firefox-beta-library › library/chromium/session.spec.ts › should send events [fail] +bidi-firefox-beta-library › library/chromium/session.spec.ts › should throw if target is part of main [fail] +bidi-firefox-beta-library › library/chromium/session.spec.ts › should throw nice errors [fail] +bidi-firefox-beta-library › library/chromium/session.spec.ts › should work [fail] +bidi-firefox-beta-library › library/chromium/session.spec.ts › should work with main frame [fail] +bidi-firefox-beta-library › library/chromium/session.spec.ts › should work with newBrowserCDPSession [fail] +bidi-firefox-beta-library › library/chromium/tracing.spec.ts › should create directories as needed [fail] +bidi-firefox-beta-library › library/chromium/tracing.spec.ts › should output a trace [fail] +bidi-firefox-beta-library › library/chromium/tracing.spec.ts › should return a buffer [fail] +bidi-firefox-beta-library › library/chromium/tracing.spec.ts › should run with custom categories if provided [fail] +bidi-firefox-beta-library › library/chromium/tracing.spec.ts › should support a buffer without a path [fail] +bidi-firefox-beta-library › library/chromium/tracing.spec.ts › should throw if tracing on two pages [fail] +bidi-firefox-beta-library › library/chromium/tracing.spec.ts › should work without options [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › persistentContext › should pass with matching certificates [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › persistentContext › validate input [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should fail with matching certificates in legacy pfx format [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should fail with no client certificates [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should fail with self-signed client certificates [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should handle TLS renegotiation with client certificates [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should handle rejected certificate in handshake with HTTP/2 [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should have ignoreHTTPSErrors=false by default [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should keep supporting http [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should not hang on tls errors during TLS 1.2 handshake [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should pass with matching certificates [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should pass with matching certificates and trailing slash [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should pass with matching certificates in pfx format [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should pass with matching certificates in pfx format when passing as content [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should pass with matching certificates on context APIRequestContext instance [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should pass with matching certificates when passing as content [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should return target connection errors when using http2 [unknown] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › should throw a http error if the pfx passphrase is incorect [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › support http2 [fail] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › support http2 if the browser only supports http1.1 [unknown] +bidi-firefox-beta-library › library/client-certificates.spec.ts › browser › validate input [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › fetch › pass with trusted client certificates [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › fetch › pass with trusted client certificates in pfx format [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › fetch › should fail with matching certificates in legacy pfx format [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › fetch › should fail with no client certificates provided [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › fetch › should keep supporting http [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › fetch › should throw a http error if the pfx passphrase is incorect [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › fetch › should throw with untrusted client certs [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › fetch › should work in the browser with request interception [pass] +bidi-firefox-beta-library › library/client-certificates.spec.ts › fetch › validate input [pass] +bidi-firefox-beta-library › library/clock.spec.ts › Intl API › Creates a RelativeTimeFormat like normal [pass] +bidi-firefox-beta-library › library/clock.spec.ts › Intl API › Executes formatRange like normal [pass] +bidi-firefox-beta-library › library/clock.spec.ts › Intl API › Executes formatRangeToParts like normal [pass] +bidi-firefox-beta-library › library/clock.spec.ts › Intl API › Executes resolvedOptions like normal [pass] +bidi-firefox-beta-library › library/clock.spec.ts › Intl API › Executes supportedLocalesOf like normal [pass] +bidi-firefox-beta-library › library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns false when passed a timestamp argument that is not first of the month [pass] +bidi-firefox-beta-library › library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns false when passed no timestamp and system time is not first of the month [pass] +bidi-firefox-beta-library › library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns true when passed a timestamp argument that is first of the month [pass] +bidi-firefox-beta-library › library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns true when passed no timestamp and system time is first of the month [pass] +bidi-firefox-beta-library › library/clock.spec.ts › cancelAnimationFrame › does not remove interval [pass] +bidi-firefox-beta-library › library/clock.spec.ts › cancelAnimationFrame › does not remove timeout [pass] +bidi-firefox-beta-library › library/clock.spec.ts › cancelAnimationFrame › ignores null argument [pass] +bidi-firefox-beta-library › library/clock.spec.ts › cancelAnimationFrame › removes animation frame [pass] +bidi-firefox-beta-library › library/clock.spec.ts › cancelIdleCallback › removes idle callback [pass] +bidi-firefox-beta-library › library/clock.spec.ts › clearInterval › ignores null argument [pass] +bidi-firefox-beta-library › library/clock.spec.ts › clearInterval › removes interval [pass] +bidi-firefox-beta-library › library/clock.spec.ts › clearInterval › removes interval with undefined interval [pass] +bidi-firefox-beta-library › library/clock.spec.ts › clearInterval › removes timeout [pass] +bidi-firefox-beta-library › library/clock.spec.ts › clearTimeout › ignores null argument [pass] +bidi-firefox-beta-library › library/clock.spec.ts › clearTimeout › removes interval [pass] +bidi-firefox-beta-library › library/clock.spec.ts › clearTimeout › removes interval with undefined interval [pass] +bidi-firefox-beta-library › library/clock.spec.ts › clearTimeout › removes timeout [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › creates Date objects representing clock time [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › creates real Date objects [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › creates regular date when passing a date as RFC 2822 string [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › creates regular date when passing a date as string [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › creates regular date when passing timestamp [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › creates regular date when passing y, m, d [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › creates regular date when passing y, m, d, h [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m, s [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m, s, ms [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › creates regular date when passing year, month [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › listens to system clock changes [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › listens to ticking clock [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › mirrors UTC method [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › mirrors native Date.prototype [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › mirrors parse method [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › mirrors toUTCString method [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › provides date constructor [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › returns clock.now() [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › returns date as string representing clock time [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › returns date as string when called as function [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › returns date as string when calling with arguments [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › returns date as string when calling with timestamp [pass] +bidi-firefox-beta-library › library/clock.spec.ts › date › supports now method if present [pass] +bidi-firefox-beta-library › library/clock.spec.ts › fastForward › handles multiple pending timers and types [pass] +bidi-firefox-beta-library › library/clock.spec.ts › fastForward › ignores timers which wouldn't be run [pass] +bidi-firefox-beta-library › library/clock.spec.ts › fastForward › pushes back execution time for skipped timers [pass] +bidi-firefox-beta-library › library/clock.spec.ts › pauseAt › fire target timers [pass] +bidi-firefox-beta-library › library/clock.spec.ts › pauseAt › pause at target time [pass] +bidi-firefox-beta-library › library/clock.spec.ts › pauseAt › returns consumed clicks [pass] +bidi-firefox-beta-library › library/clock.spec.ts › performance.now() › should listen to multiple ticks in performance.now [pass] +bidi-firefox-beta-library › library/clock.spec.ts › performance.now() › should run along with clock.tick [pass] +bidi-firefox-beta-library › library/clock.spec.ts › performance.now() › should run with ticks with timers set [pass] +bidi-firefox-beta-library › library/clock.spec.ts › performance.now() › should start at 0 [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestAnimationFrame › returns numeric id or object with numeric id [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestAnimationFrame › returns unique id [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestAnimationFrame › should be called with performance.now() even when performance unavailable [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestAnimationFrame › should be called with performance.now() when available [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestAnimationFrame › should call callback once [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestAnimationFrame › should properly schedule callback for 3rd frame [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestAnimationFrame › should run every 16ms [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestAnimationFrame › should schedule for next frame if on current frame [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestAnimationFrame › should schedule two callbacks before the next frame at the same time [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestAnimationFrame › throws if no arguments [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestIdleCallback › doesn't runs if there are any timers and no timeout option [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestIdleCallback › returns numeric id [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestIdleCallback › returns unique id [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestIdleCallback › runs after all timers [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestIdleCallback › runs no later than timeout option even if there are any timers [pass] +bidi-firefox-beta-library › library/clock.spec.ts › requestIdleCallback › throws if no arguments [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › calls function with global object or null (strict mode) as this [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › creates updated Date while ticking [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › creates updated Date while ticking promises [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › does not fire canceled intervals [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › does not fire intervals canceled in a promise [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › does not silently catch errors [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › does not trigger without sufficient delay [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › fires nested setTimeout calls in user-created promises properly [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › fires nested setTimeout calls properly [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › fires promise timers in correct order [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › fires timer in intervals of "13" [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › fires timer in intervals of 13 [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › fires timers in correct order [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes 2 [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes in promises [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes when an error is thrown [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes when an error is thrown 2 [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › mini integration test [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › should settle chained user-created promises [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › should settle local nested promises before calling timeouts [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › should settle local promises before calling timeouts [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › should settle multiple user-created promises [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › should settle nested user-created promises [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › should settle user-created promises [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › should settle user-created promises before calling more timeouts [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › should settle user-created promises even if some throw [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › throws for negative minutes [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › throws on negative ticks [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › triggers after sufficient delay [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › triggers even when some throw [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › triggers immediately without specified delay [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › triggers in the order scheduled [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › triggers multiple simultaneous timers [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › triggers multiple simultaneous timers with zero callAt [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › triggers simultaneous timers [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › triggers timeouts and intervals in the order scheduled [pass] +bidi-firefox-beta-library › library/clock.spec.ts › runFor › waits after setTimeout was called [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setInterval › does not schedule recurring timeout when cleared [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setInterval › does not throw if |undefined| or |null| is passed as a callback [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setInterval › is not influenced by backward system clock changes [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setInterval › is not influenced by forward system clock changes [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setInterval › passes setTimeout parameters [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setInterval › returns numeric id or object with numeric id [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setInterval › returns unique id [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setInterval › schedules recurring timeout [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setInterval › throws if no arguments [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › calls correct timeout on recursive tick [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › does not depend on this [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › does not throw if |undefined| or |null| is passed as a callback [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › is not influenced by backward system clock changes [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › is not influenced by forward system clock changes [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › parses no-numeric string times [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › parses numeric string times [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › passes setTimeout parameters [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › returns numeric id or object with numeric id [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › returns unique id [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › sets timers on instance [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › starts id from a large number [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › throws if no arguments [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › use of eval when not in node › evals non-function callbacks [pass] +bidi-firefox-beta-library › library/clock.spec.ts › setTimeout › use of eval when not in node › only evals on global scope [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › deletes global property on uninstall if it was inherited onto the global object [unknown] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › does not fake methods not provided [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › fake Date constructor should mirror Date's properties [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › fakes Date constructor [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › fakes provided methods [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › global fake setTimeout should return id [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › mirrors custom Date properties [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › replace Event.prototype.timeStamp [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › replaces global clearInterval [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › replaces global clearTimeout [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › replaces global performance.now [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › replaces global setInterval [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › replaces global setTimeout [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › resets faked methods [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › returns clock object [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › sets initial timestamp [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › should let performance.mark still be callable after install() (#136) [unknown] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › should not alter the global performance properties and methods [unknown] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › should replace the getEntries, getEntriesByX methods with noops that return [] [unknown] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › takes an object parameter [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › uninstalls Date constructor [pass] +bidi-firefox-beta-library › library/clock.spec.ts › stubTimers › uninstalls global performance.now [pass] +bidi-firefox-beta-library › library/clock.spec.ts › works with concurrent runFor calls [pass] +bidi-firefox-beta-library › library/clock.spec.ts › works with slow setTimeout in busy embedder [pass] +bidi-firefox-beta-library › library/clock.spec.ts › works with slow setTimeout in busy embedder when not paused [pass] +bidi-firefox-beta-library › library/component-parser.spec.ts › should escape [pass] +bidi-firefox-beta-library › library/component-parser.spec.ts › should parse [pass] +bidi-firefox-beta-library › library/component-parser.spec.ts › should parse all operators [pass] +bidi-firefox-beta-library › library/component-parser.spec.ts › should parse bool [pass] +bidi-firefox-beta-library › library/component-parser.spec.ts › should parse float values [pass] +bidi-firefox-beta-library › library/component-parser.spec.ts › should parse identifiers [pass] +bidi-firefox-beta-library › library/component-parser.spec.ts › should parse int values [pass] +bidi-firefox-beta-library › library/component-parser.spec.ts › should parse regex [pass] +bidi-firefox-beta-library › library/component-parser.spec.ts › should parse short attributes [pass] +bidi-firefox-beta-library › library/component-parser.spec.ts › should parse unquoted string [pass] +bidi-firefox-beta-library › library/component-parser.spec.ts › should throw on malformed selector [pass] +bidi-firefox-beta-library › library/component-parser.spec.ts › should tolerate spacing [pass] +bidi-firefox-beta-library › library/css-parser.spec.ts › should parse css [pass] +bidi-firefox-beta-library › library/css-parser.spec.ts › should throw on malformed css [pass] +bidi-firefox-beta-library › library/debug-controller.spec.ts › should highlight all [fail] +bidi-firefox-beta-library › library/debug-controller.spec.ts › should navigate all [fail] +bidi-firefox-beta-library › library/debug-controller.spec.ts › should pick element [fail] +bidi-firefox-beta-library › library/debug-controller.spec.ts › should record [fail] +bidi-firefox-beta-library › library/debug-controller.spec.ts › should record custom data-testid [fail] +bidi-firefox-beta-library › library/debug-controller.spec.ts › should report pages [fail] +bidi-firefox-beta-library › library/debug-controller.spec.ts › should reset for reuse [fail] +bidi-firefox-beta-library › library/debug-controller.spec.ts › should reset routes before reuse [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-1.spec.ts › context.addCookies() should work [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-1.spec.ts › context.clearCookies() should work [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-1.spec.ts › context.cookies() should work @smoke [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-1.spec.ts › should support acceptDownloads option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-1.spec.ts › should support bypassCSP option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-1.spec.ts › should support deviceScaleFactor option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-1.spec.ts › should support httpCredentials option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-1.spec.ts › should support javascriptEnabled option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-1.spec.ts › should support offline option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-1.spec.ts › should support userAgent option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-1.spec.ts › should support viewport option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-1.spec.ts › should(not) block third party cookies [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › coverage should work [unknown] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should accept userDataDir [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should connect to a browser with the default page [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should create userDataDir if it does not exist [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should fire close event for a persistent context [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should handle exception [timeout] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should handle timeout [pass] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should have default URL when launching browser [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should have passed URL when launching with ignoreDefaultArgs: true [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should respect selectors [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should restore state from userDataDir [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should support colorScheme option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should support extraHTTPHeaders option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should support forcedColors option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should support geolocation and permissions options [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should support har option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should support hasTouch option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should support ignoreHTTPSErrors option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should support locale option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should support reducedMotion option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should support timezoneId option [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should throw if page argument is passed [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › should work in persistent context [fail] +bidi-firefox-beta-library › library/defaultbrowsercontext-2.spec.ts › user agent is up to date [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should be able to cancel pending downloads [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should close the context without awaiting the download [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should close the context without awaiting the failed download [unknown] +bidi-firefox-beta-library › library/download.spec.ts › download event › should create subdirectories when saving to non-existent user-specified path [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should delete downloads on browser gone [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should delete downloads on context destruction [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should delete file [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should download large binary.zip [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should emit download event from nested iframes [timeout] +bidi-firefox-beta-library › library/download.spec.ts › download event › should error when saving after deletion [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should error when saving with downloads disabled [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should expose stream [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should not fail explicitly to cancel a download even if that is already finished [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should report alt-click downloads [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should report download path within page.on('download', …) handler for Blobs [timeout] +bidi-firefox-beta-library › library/download.spec.ts › download event › should report download path within page.on('download', …) handler for Files [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should report download when navigation turns into download @smoke [timeout] +bidi-firefox-beta-library › library/download.spec.ts › download event › should report downloads for download attribute [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should report downloads with acceptDownloads: false [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should report downloads with acceptDownloads: true [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should report downloads with interception [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should report new window downloads [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should report non-navigation downloads [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should report proper download url when download is from download attribute [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should save to overwritten filepath [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should save to two different paths with multiple saveAs calls [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should save to user-specified path without updating original path [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should throw if browser dies [fail] +bidi-firefox-beta-library › library/download.spec.ts › download event › should work with Cross-Origin-Opener-Policy [timeout] +bidi-firefox-beta-library › library/download.spec.ts › should be able to download a PDF file [fail] +bidi-firefox-beta-library › library/download.spec.ts › should be able to download a inline PDF file via navigation [fail] +bidi-firefox-beta-library › library/download.spec.ts › should be able to download a inline PDF file via response interception [fail] +bidi-firefox-beta-library › library/download.spec.ts › should convert navigation to a resource with unsupported mime type into download [timeout] +bidi-firefox-beta-library › library/download.spec.ts › should download even if there is no "attachment" value [fail] +bidi-firefox-beta-library › library/download.spec.ts › should download links with data url [fail] +bidi-firefox-beta-library › library/download.spec.ts › should download successfully when routing [fail] +bidi-firefox-beta-library › library/download.spec.ts › should save to user-specified path [fail] +bidi-firefox-beta-library › library/downloads-path.spec.ts › downloads path › should accept downloads in persistent context [fail] +bidi-firefox-beta-library › library/downloads-path.spec.ts › downloads path › should delete downloads when context closes [fail] +bidi-firefox-beta-library › library/downloads-path.spec.ts › downloads path › should delete downloads when persistent context closes [fail] +bidi-firefox-beta-library › library/downloads-path.spec.ts › downloads path › should keep downloadsPath folder [fail] +bidi-firefox-beta-library › library/downloads-path.spec.ts › downloads path › should report downloads in downloadsPath folder [fail] +bidi-firefox-beta-library › library/downloads-path.spec.ts › downloads path › should report downloads in downloadsPath folder with a relative path [fail] +bidi-firefox-beta-library › library/emulation-focus.spec.ts › should change document.activeElement [pass] +bidi-firefox-beta-library › library/emulation-focus.spec.ts › should change focused iframe [pass] +bidi-firefox-beta-library › library/emulation-focus.spec.ts › should focus popups by default [fail] +bidi-firefox-beta-library › library/emulation-focus.spec.ts › should focus with more than one page/context [fail] +bidi-firefox-beta-library › library/emulation-focus.spec.ts › should not affect mouse event target page [pass] +bidi-firefox-beta-library › library/emulation-focus.spec.ts › should not affect screenshots [fail] +bidi-firefox-beta-library › library/emulation-focus.spec.ts › should not fire blur events when interacting with more than one page/context [fail] +bidi-firefox-beta-library › library/emulation-focus.spec.ts › should provide target for keyboard events [pass] +bidi-firefox-beta-library › library/emulation-focus.spec.ts › should think that all pages are focused @smoke [fail] +bidi-firefox-beta-library › library/emulation-focus.spec.ts › should think that it is focused by default [pass] +bidi-firefox-beta-library › library/emulation-focus.spec.ts › should trigger hover state concurrently [fail] +bidi-firefox-beta-library › library/events/add-listeners.spec.ts › EventEmitter tests › Listener order [pass] +bidi-firefox-beta-library › library/events/add-listeners.spec.ts › EventEmitter tests › listener type check [pass] +bidi-firefox-beta-library › library/events/add-listeners.spec.ts › EventEmitter tests › set max listeners test [pass] +bidi-firefox-beta-library › library/events/add-listeners.spec.ts › EventEmitter tests › should work [pass] +bidi-firefox-beta-library › library/events/check-listener-leaks.spec.ts › _maxListeners still has precedence over defaultMaxListeners [pass] +bidi-firefox-beta-library › library/events/check-listener-leaks.spec.ts › defaultMaxListeners [pass] +bidi-firefox-beta-library › library/events/check-listener-leaks.spec.ts › process-wide [pass] +bidi-firefox-beta-library › library/events/events-list.spec.ts › EventEmitter › should maintain event names correctly [pass] +bidi-firefox-beta-library › library/events/listener-count.spec.ts › Listener count test [pass] +bidi-firefox-beta-library › library/events/listeners-side-effects.spec.ts › listeners empty check [pass] +bidi-firefox-beta-library › library/events/listeners.spec.ts › Array copy modification does not modify orig [pass] +bidi-firefox-beta-library › library/events/listeners.spec.ts › EventEmitter listeners with one listener [pass] +bidi-firefox-beta-library › library/events/listeners.spec.ts › EventEmitter with no members [pass] +bidi-firefox-beta-library › library/events/listeners.spec.ts › Modify array copy after multiple adds [pass] +bidi-firefox-beta-library › library/events/listeners.spec.ts › listeners and once [pass] +bidi-firefox-beta-library › library/events/listeners.spec.ts › listeners on prototype [pass] +bidi-firefox-beta-library › library/events/listeners.spec.ts › listeners with conflicting types [pass] +bidi-firefox-beta-library › library/events/listeners.spec.ts › raw listeners [pass] +bidi-firefox-beta-library › library/events/listeners.spec.ts › raw listeners order [pass] +bidi-firefox-beta-library › library/events/max-listeners.spec.ts › emit maxListeners on e [pass] +bidi-firefox-beta-library › library/events/method-names.spec.ts › EventEmitter prototype test [pass] +bidi-firefox-beta-library › library/events/modify-in-emit.spec.ts › add and remove listeners [pass] +bidi-firefox-beta-library › library/events/modify-in-emit.spec.ts › removing callbacks in emit [pass] +bidi-firefox-beta-library › library/events/num-args.spec.ts › should work [pass] +bidi-firefox-beta-library › library/events/once.spec.ts › once() has different code paths based on the number of arguments being emitted [pass] +bidi-firefox-beta-library › library/events/once.spec.ts › should work [pass] +bidi-firefox-beta-library › library/events/prepend.spec.ts › EventEmitter functionality [pass] +bidi-firefox-beta-library › library/events/prepend.spec.ts › Verify that the listener must be a function [pass] +bidi-firefox-beta-library › library/events/remove-all-listeners-wait.spec.ts › should not throw with ignoreErrors [pass] +bidi-firefox-beta-library › library/events/remove-all-listeners-wait.spec.ts › should wait [pass] +bidi-firefox-beta-library › library/events/remove-all-listeners-wait.spec.ts › should wait all [pass] +bidi-firefox-beta-library › library/events/remove-all-listeners-wait.spec.ts › wait should throw [pass] +bidi-firefox-beta-library › library/events/remove-all-listeners.spec.ts › listener count after removeAllListeners [pass] +bidi-firefox-beta-library › library/events/remove-all-listeners.spec.ts › listeners [pass] +bidi-firefox-beta-library › library/events/remove-all-listeners.spec.ts › removeAllListeners on undefined _events [pass] +bidi-firefox-beta-library › library/events/remove-all-listeners.spec.ts › removeAllListeners removes all listeners [pass] +bidi-firefox-beta-library › library/events/remove-all-listeners.spec.ts › removeAllListeners returns EventEmitter [pass] +bidi-firefox-beta-library › library/events/remove-all-listeners.spec.ts › removeAllListeners with no event type [pass] +bidi-firefox-beta-library › library/events/remove-listeners.spec.ts › Eighth test [pass] +bidi-firefox-beta-library › library/events/remove-listeners.spec.ts › Fifth test [pass] +bidi-firefox-beta-library › library/events/remove-listeners.spec.ts › First test [pass] +bidi-firefox-beta-library › library/events/remove-listeners.spec.ts › Fourth test [pass] +bidi-firefox-beta-library › library/events/remove-listeners.spec.ts › Ninth test [pass] +bidi-firefox-beta-library › library/events/remove-listeners.spec.ts › Second test [pass] +bidi-firefox-beta-library › library/events/remove-listeners.spec.ts › Seventh test [pass] +bidi-firefox-beta-library › library/events/remove-listeners.spec.ts › Sixth test [pass] +bidi-firefox-beta-library › library/events/remove-listeners.spec.ts › Tenth test [pass] +bidi-firefox-beta-library › library/events/remove-listeners.spec.ts › Third test [pass] +bidi-firefox-beta-library › library/events/set-max-listeners-side-effects.spec.ts › set max listeners test [pass] +bidi-firefox-beta-library › library/events/special-event-names.spec.ts › should support special event names [pass] +bidi-firefox-beta-library › library/events/subclass.spec.ts › MyEE2 instance [pass] +bidi-firefox-beta-library › library/events/subclass.spec.ts › myee instance [pass] +bidi-firefox-beta-library › library/events/symbols.spec.ts › should support symbols [pass] +bidi-firefox-beta-library › library/favicon.spec.ts › should load svg favicon with prefer-color-scheme [unknown] +bidi-firefox-beta-library › library/fetch-proxy.spec.ts › context request should pick up proxy credentials [timeout] +bidi-firefox-beta-library › library/fetch-proxy.spec.ts › global request should pick up proxy credentials [pass] +bidi-firefox-beta-library › library/fetch-proxy.spec.ts › should support proxy.bypass [pass] +bidi-firefox-beta-library › library/fetch-proxy.spec.ts › should use socks proxy [pass] +bidi-firefox-beta-library › library/fetch-proxy.spec.ts › should work with context level proxy [pass] +bidi-firefox-beta-library › library/firefox/launcher.spec.ts › should pass firefox user preferences [fail] +bidi-firefox-beta-library › library/firefox/launcher.spec.ts › should pass firefox user preferences in persistent [fail] +bidi-firefox-beta-library › library/geolocation.spec.ts › should isolate contexts [fail] +bidi-firefox-beta-library › library/geolocation.spec.ts › should not modify passed default options object [pass] +bidi-firefox-beta-library › library/geolocation.spec.ts › should throw when invalid longitude [fail] +bidi-firefox-beta-library › library/geolocation.spec.ts › should throw with missing latitude [pass] +bidi-firefox-beta-library › library/geolocation.spec.ts › should throw with missing longitude in default options [pass] +bidi-firefox-beta-library › library/geolocation.spec.ts › should use context options [timeout] +bidi-firefox-beta-library › library/geolocation.spec.ts › should use context options for popup [timeout] +bidi-firefox-beta-library › library/geolocation.spec.ts › should work @smoke [timeout] +bidi-firefox-beta-library › library/geolocation.spec.ts › watchPosition should be notified [timeout] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should do case-insensitive match of cookie domain [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should do case-insensitive match of request domain [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should export cookies to storage state [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should filter outgoing cookies by domain [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should filter outgoing cookies by path [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should override cookie from Set-Cookie header [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should override cookie from Set-Cookie header even if it expired [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should preserve local storage on import/export of storage state [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should remove cookie with expires far in the past [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should remove cookie with negative max-age [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should remove expired cookies [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should send cookies from storage state [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should send not expired cookies [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should send secure cookie over http for localhost [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should send secure cookie over https [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should store cookie from Set-Cookie header [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should store cookie from Set-Cookie header even if it contains equal signs [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › should work with empty storage state [pass] +bidi-firefox-beta-library › library/global-fetch-cookie.spec.ts › storage state should round-trip through file [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › delete should work @smoke [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › fetch should work @smoke [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › get should work @smoke [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › head should work @smoke [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › patch should work @smoke [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › post should work @smoke [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › put should work @smoke [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should abort redirected requests when context is disposed [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should abort requests when context is disposed [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should accept already serialized data as Buffer when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should be able to construct with context options [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should dispose global request [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should have nice toString [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should json stringify array body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should json stringify bool (false) body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should json stringify bool body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should json stringify literal string undefined body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should json stringify null body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should json stringify number (falsey) body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should json stringify number body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should json stringify object body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should json stringify string (falsey) body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should json stringify string body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should keep headers capitalization [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should not double stringify array body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should not double stringify bool (false) body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should not double stringify bool body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should not double stringify literal string undefined body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should not double stringify null body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should not double stringify number (falsey) body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should not double stringify number body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should not double stringify object body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should not double stringify string (falsey) body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should not double stringify string body when content-type is application/json [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should not fail on empty body with encoding [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should not follow redirects when maxRedirects is set to 0 [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should propagate extra http headers with redirects [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should propagate ignoreHTTPSErrors on redirects [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should remove content-length from redirected post requests [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should resolve url relative to global baseURL option [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should retry ECONNRESET [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should return body for failing requests [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should return empty body [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should return error with correct credentials and mismatching hostname [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should return error with correct credentials and mismatching port [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should return error with correct credentials and mismatching scheme [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should return error with wrong credentials [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should serialize post data on the client [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should set playwright as user-agent [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should support HTTPCredentials.send [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should support WWW-Authenticate: Basic [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should support global httpCredentials option [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should support global ignoreHTTPSErrors option [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should support global timeout option [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should support global userAgent option [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should throw after dispose [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should throw an error when maxRedirects is exceeded [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should throw an error when maxRedirects is less than 0 [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should work with correct credentials and matching origin [pass] +bidi-firefox-beta-library › library/global-fetch.spec.ts › should work with correct credentials and matching origin case insensitive [pass] +bidi-firefox-beta-library › library/har.spec.ts › should attach content [fail] +bidi-firefox-beta-library › library/har.spec.ts › should calculate time [pass] +bidi-firefox-beta-library › library/har.spec.ts › should contain http2 for http2 requests [fail] +bidi-firefox-beta-library › library/har.spec.ts › should filter by glob [pass] +bidi-firefox-beta-library › library/har.spec.ts › should filter by regexp [pass] +bidi-firefox-beta-library › library/har.spec.ts › should filter favicon and favicon redirects [unknown] +bidi-firefox-beta-library › library/har.spec.ts › should have -1 _transferSize when its a failed request [pass] +bidi-firefox-beta-library › library/har.spec.ts › should have browser [fail] +bidi-firefox-beta-library › library/har.spec.ts › should have connection details [fail] +bidi-firefox-beta-library › library/har.spec.ts › should have connection details for failed requests [fail] +bidi-firefox-beta-library › library/har.spec.ts › should have connection details for redirects [fail] +bidi-firefox-beta-library › library/har.spec.ts › should have different hars for concurrent contexts [fail] +bidi-firefox-beta-library › library/har.spec.ts › should have pages [pass] +bidi-firefox-beta-library › library/har.spec.ts › should have pages in persistent context [fail] +bidi-firefox-beta-library › library/har.spec.ts › should have popup requests [fail] +bidi-firefox-beta-library › library/har.spec.ts › should have security details [fail] +bidi-firefox-beta-library › library/har.spec.ts › should have version and creator [pass] +bidi-firefox-beta-library › library/har.spec.ts › should include API request [pass] +bidi-firefox-beta-library › library/har.spec.ts › should include binary postData [fail] +bidi-firefox-beta-library › library/har.spec.ts › should include content @smoke [fail] +bidi-firefox-beta-library › library/har.spec.ts › should include cookies [pass] +bidi-firefox-beta-library › library/har.spec.ts › should include form params [fail] +bidi-firefox-beta-library › library/har.spec.ts › should include postData [fail] +bidi-firefox-beta-library › library/har.spec.ts › should include query params [pass] +bidi-firefox-beta-library › library/har.spec.ts › should include redirectURL [pass] +bidi-firefox-beta-library › library/har.spec.ts › should include request [pass] +bidi-firefox-beta-library › library/har.spec.ts › should include response [pass] +bidi-firefox-beta-library › library/har.spec.ts › should include secure set-cookies [fail] +bidi-firefox-beta-library › library/har.spec.ts › should include set-cookies [fail] +bidi-firefox-beta-library › library/har.spec.ts › should include set-cookies with comma [fail] +bidi-firefox-beta-library › library/har.spec.ts › should include sizes [fail] +bidi-firefox-beta-library › library/har.spec.ts › should not contain internal pages [pass] +bidi-firefox-beta-library › library/har.spec.ts › should not hang on resources served from cache [fail] +bidi-firefox-beta-library › library/har.spec.ts › should not hang on slow chunked response [fail] +bidi-firefox-beta-library › library/har.spec.ts › should omit content [pass] +bidi-firefox-beta-library › library/har.spec.ts › should omit content legacy [pass] +bidi-firefox-beta-library › library/har.spec.ts › should record failed request headers [pass] +bidi-firefox-beta-library › library/har.spec.ts › should record failed request overrides [timeout] +bidi-firefox-beta-library › library/har.spec.ts › should record request overrides [timeout] +bidi-firefox-beta-library › library/har.spec.ts › should report the correct _transferSize with PNG files [fail] +bidi-firefox-beta-library › library/har.spec.ts › should report the correct request body size [pass] +bidi-firefox-beta-library › library/har.spec.ts › should report the correct request body size when the bodySize is 0 [pass] +bidi-firefox-beta-library › library/har.spec.ts › should report the correct response body size when the bodySize is 0 [pass] +bidi-firefox-beta-library › library/har.spec.ts › should return receive time [pass] +bidi-firefox-beta-library › library/har.spec.ts › should return security details directly from response [fail] +bidi-firefox-beta-library › library/har.spec.ts › should return server address directly from response [fail] +bidi-firefox-beta-library › library/har.spec.ts › should skip invalid Expires [pass] +bidi-firefox-beta-library › library/har.spec.ts › should throw without path [pass] +bidi-firefox-beta-library › library/har.spec.ts › should use attach mode for zip extension [fail] +bidi-firefox-beta-library › library/har.spec.ts › should work with gzip compression [fail] +bidi-firefox-beta-library › library/headful.spec.ts › Page.bringToFront should work [fail] +bidi-firefox-beta-library › library/headful.spec.ts › headless and headful should use same default fonts [fail] +bidi-firefox-beta-library › library/headful.spec.ts › should click background tab [fail] +bidi-firefox-beta-library › library/headful.spec.ts › should click bottom row w/ infobar in OOPIF [fail] +bidi-firefox-beta-library › library/headful.spec.ts › should click in OOPIF [fail] +bidi-firefox-beta-library › library/headful.spec.ts › should click when viewport size is larger than screen [fail] +bidi-firefox-beta-library › library/headful.spec.ts › should close browser after context menu was triggered [pass] +bidi-firefox-beta-library › library/headful.spec.ts › should close browser with beforeunload page [fail] +bidi-firefox-beta-library › library/headful.spec.ts › should close browsercontext with pending beforeunload dialog [fail] +bidi-firefox-beta-library › library/headful.spec.ts › should dispatch click events to oversized viewports [pass] +bidi-firefox-beta-library › library/headful.spec.ts › should have default url when launching browser @smoke [fail] +bidi-firefox-beta-library › library/headful.spec.ts › should not block third party SameSite=None cookies [fail] +bidi-firefox-beta-library › library/headful.spec.ts › should not crash when creating second context [pass] +bidi-firefox-beta-library › library/headful.spec.ts › should not override viewport size when passed null [pass] +bidi-firefox-beta-library › library/headful.spec.ts › should(not) block third party cookies [fail] +bidi-firefox-beta-library › library/hit-target.spec.ts › should block all events when hit target is wrong [pass] +bidi-firefox-beta-library › library/hit-target.spec.ts › should block all events when hit target is wrong and element detaches [pass] +bidi-firefox-beta-library › library/hit-target.spec.ts › should block click when mousedown fails [pass] +bidi-firefox-beta-library › library/hit-target.spec.ts › should click an element inside closed shadow root [fail] +bidi-firefox-beta-library › library/hit-target.spec.ts › should click in custom element [fail] +bidi-firefox-beta-library › library/hit-target.spec.ts › should click in iframe with padding [fail] +bidi-firefox-beta-library › library/hit-target.spec.ts › should click in iframe with padding 2 [fail] +bidi-firefox-beta-library › library/hit-target.spec.ts › should click into frame inside closed shadow root [fail] +bidi-firefox-beta-library › library/hit-target.spec.ts › should click the button again after document.write [pass] +bidi-firefox-beta-library › library/hit-target.spec.ts › should click when element detaches in mousedown [pass] +bidi-firefox-beta-library › library/hit-target.spec.ts › should detect overlaid element in a transformed iframe [fail] +bidi-firefox-beta-library › library/hit-target.spec.ts › should detect overlay from another shadow root [fail] +bidi-firefox-beta-library › library/hit-target.spec.ts › should not block programmatic events [pass] +bidi-firefox-beta-library › library/hit-target.spec.ts › should not click an element overlaying iframe with the target [fail] +bidi-firefox-beta-library › library/hit-target.spec.ts › should not click iframe overlaying the target [fail] +bidi-firefox-beta-library › library/hit-target.spec.ts › should work with block inside inline [fail] +bidi-firefox-beta-library › library/hit-target.spec.ts › should work with block inside inline in shadow dom [fail] +bidi-firefox-beta-library › library/hit-target.spec.ts › should work with block-block-block inside inline-inline [fail] +bidi-firefox-beta-library › library/hit-target.spec.ts › should work with drag and drop that moves the element under cursor [pass] +bidi-firefox-beta-library › library/hit-target.spec.ts › should work with mui select [pass] +bidi-firefox-beta-library › library/ignorehttpserrors.spec.ts › serviceWorker should intercept document request [fail] +bidi-firefox-beta-library › library/ignorehttpserrors.spec.ts › should fail with WebSocket if not ignored [pass] +bidi-firefox-beta-library › library/ignorehttpserrors.spec.ts › should isolate contexts [fail] +bidi-firefox-beta-library › library/ignorehttpserrors.spec.ts › should work @smoke [fail] +bidi-firefox-beta-library › library/ignorehttpserrors.spec.ts › should work with WebSocket [fail] +bidi-firefox-beta-library › library/ignorehttpserrors.spec.ts › should work with mixed content [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should assert navigation [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should await popup [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should check [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should check a radio button [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should check with keyboard [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should click [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should click after same-document navigation [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should click button with nested div [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should emit single keyup on ArrowDown [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill [contentEditable] [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill japanese text [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill textarea [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill textarea with new lines at the end [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should ignore AltGraph [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should ignore programmatic events [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should make a positioned click on a canvas [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should middle click [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should not target selector preview by text regexp [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should not throw csp directive violation errors [pass] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should press [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should record ArrowDown [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should record omnibox navigations after performAction [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should record omnibox navigations after recordAction [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should record slider [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should select [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should select with size attribute [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should uncheck [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should update selected element after pressing Tab [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should work with TrustedTypes [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › click should emit events in order [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should --save-trace [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should check input with chaining id [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should clear files [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain close page [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain open page [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain second page [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should download files [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should fill tricky characters [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should handle dialogs [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should handle history.postData [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should not clash pages [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should not lead to an error if html gets clicked [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should record navigations after identical pushState [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should record open in a new tab with url [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should reset hover model on action when element detaches [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should save assets via SIGINT [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should update active model on action [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should update hover model on action [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should upload a single file [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should upload multiple files [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-2.spec.ts › should --test-id-attribute [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value on disabled input [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value on disabled select [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert visibility [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should click locator.first [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should click locator.nth [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should consume contextmenu events, despite a custom context menu [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should consume pointer events [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with id attribute [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with name attribute [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with special characters in name attribute [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with testId [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with title attribute [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByAltText [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByLabel [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByLabel without regex [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByPlaceholder [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByTestId [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate role locators undef frame locators [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-csharp.spec.ts › should not print context options method override in mstest if no options were passed [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-csharp.spec.ts › should not print context options method override in nunit if no options were passed [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-csharp.spec.ts › should print a valid basic program in mstest [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-csharp.spec.ts › should print a valid basic program in nunit [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-csharp.spec.ts › should print context options method override in mstest if options were passed [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-csharp.spec.ts › should print context options method override in nunit if options were passed [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-csharp.spec.ts › should print load/save storageState [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options for custom settings [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options when using a device [unknown] +bidi-firefox-beta-library › library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options when using a device and additional options [unknown] +bidi-firefox-beta-library › library/inspector/cli-codegen-csharp.spec.ts › should print the correct imports and context options [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-csharp.spec.ts › should work with --save-har [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-java.spec.ts › should print a valid basic program in junit [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-java.spec.ts › should print load/save storage_state [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-java.spec.ts › should print the correct context options for custom settings [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-java.spec.ts › should print the correct context options when using a device [unknown] +bidi-firefox-beta-library › library/inspector/cli-codegen-java.spec.ts › should print the correct context options when using a device and additional options [unknown] +bidi-firefox-beta-library › library/inspector/cli-codegen-java.spec.ts › should print the correct imports and context options [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-java.spec.ts › should print the correct imports in junit [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-java.spec.ts › should work with --save-har [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-javascript.spec.ts › should print load/save storageState [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options for custom settings [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options when using a device [unknown] +bidi-firefox-beta-library › library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options when using a device and additional options [unknown] +bidi-firefox-beta-library › library/inspector/cli-codegen-javascript.spec.ts › should print the correct imports and context options [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-javascript.spec.ts › should save the codegen output to a file if specified [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-pytest.spec.ts › should print the correct context options when using a device and lang [unknown] +bidi-firefox-beta-library › library/inspector/cli-codegen-pytest.spec.ts › should print the correct imports and context options [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-pytest.spec.ts › should save the codegen output to a file if specified [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-python-async.spec.ts › should print load/save storage_state [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options for custom settings [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options when using a device [unknown] +bidi-firefox-beta-library › library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options when using a device and additional options [unknown] +bidi-firefox-beta-library › library/inspector/cli-codegen-python-async.spec.ts › should print the correct imports and context options [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-python-async.spec.ts › should save the codegen output to a file if specified [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-python-async.spec.ts › should work with --save-har [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-python.spec.ts › should print load/save storage_state [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-python.spec.ts › should print the correct context options for custom settings [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-python.spec.ts › should print the correct context options when using a device [unknown] +bidi-firefox-beta-library › library/inspector/cli-codegen-python.spec.ts › should print the correct context options when using a device and additional options [unknown] +bidi-firefox-beta-library › library/inspector/cli-codegen-python.spec.ts › should print the correct imports and context options [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-python.spec.ts › should save the codegen output to a file if specified [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-test.spec.ts › should print load storageState [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-test.spec.ts › should print the correct context options for custom settings [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-test.spec.ts › should print the correct context options when using a device [unknown] +bidi-firefox-beta-library › library/inspector/cli-codegen-test.spec.ts › should print the correct context options when using a device and additional options [unknown] +bidi-firefox-beta-library › library/inspector/cli-codegen-test.spec.ts › should print the correct imports and context options [fail] +bidi-firefox-beta-library › library/inspector/cli-codegen-test.spec.ts › should work with --save-har [fail] +bidi-firefox-beta-library › library/inspector/console-api.spec.ts › expected properties on playwright object [pass] +bidi-firefox-beta-library › library/inspector/console-api.spec.ts › should support locator.and() [fail] +bidi-firefox-beta-library › library/inspector/console-api.spec.ts › should support locator.or() [fail] +bidi-firefox-beta-library › library/inspector/console-api.spec.ts › should support playwright.$, playwright.$$ [pass] +bidi-firefox-beta-library › library/inspector/console-api.spec.ts › should support playwright.getBy* [fail] +bidi-firefox-beta-library › library/inspector/console-api.spec.ts › should support playwright.locator({ has }) [fail] +bidi-firefox-beta-library › library/inspector/console-api.spec.ts › should support playwright.locator({ hasNot }) [fail] +bidi-firefox-beta-library › library/inspector/console-api.spec.ts › should support playwright.locator.value [fail] +bidi-firefox-beta-library › library/inspector/console-api.spec.ts › should support playwright.locator.values [fail] +bidi-firefox-beta-library › library/inspector/console-api.spec.ts › should support playwright.selector [pass] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should hide internal calls [pass] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should highlight locators with custom testId [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should highlight on explore [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should highlight on explore (csharp) [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should highlight pointer, only in main frame [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should highlight waitForEvent [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should not prevent key events [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should pause after a navigation [pass] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should pause and resume the script [pass] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should pause and resume the script with keyboard shortcut [pass] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should pause on context close [pass] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should pause on next pause [pass] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should pause on page close [pass] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should populate log [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should populate log with error [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should populate log with error in waitForEvent [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should populate log with waitForEvent [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should resume from console [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should show expect.toHaveText [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should show source [pass] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should skip input when resuming [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should step [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › pause › should step with keyboard shortcut [fail] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › should not reset timeouts [pass] +bidi-firefox-beta-library › library/inspector/pause.spec.ts › should resume when closing inspector [pass] +bidi-firefox-beta-library › library/launcher.spec.ts › should have a devices object [pass] +bidi-firefox-beta-library › library/launcher.spec.ts › should have an errors object [pass] +bidi-firefox-beta-library › library/launcher.spec.ts › should kill browser process on timeout after close [pass] +bidi-firefox-beta-library › library/launcher.spec.ts › should throw a friendly error if its headed and there is no xserver on linux running [fail] +bidi-firefox-beta-library › library/locator-generator.spec.ts › asLocator internal:and [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › asLocator internal:chain [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › asLocator internal:or [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › asLocator xpath [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › generate multiple locators [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › parse locators strictly [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › parseLocator css [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › parseLocator quotes [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › reverse engineer frameLocator [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › reverse engineer getByRole [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › reverse engineer has [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › reverse engineer has + hasText [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › reverse engineer hasNot [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › reverse engineer hasNotText [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › reverse engineer hasText [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › reverse engineer ignore-case locators [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › reverse engineer internal:has-text locators [fail] +bidi-firefox-beta-library › library/locator-generator.spec.ts › reverse engineer locators [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › reverse engineer locators with regex [pass] +bidi-firefox-beta-library › library/locator-generator.spec.ts › reverse engineer ordered locators [pass] +bidi-firefox-beta-library › library/logger.spec.ts › should log @smoke [pass] +bidi-firefox-beta-library › library/logger.spec.ts › should log context-level [fail] +bidi-firefox-beta-library › library/modernizr.spec.ts › Mobile Safari [unknown] +bidi-firefox-beta-library › library/modernizr.spec.ts › Safari Desktop [unknown] +bidi-firefox-beta-library › library/page-clock.frozen.spec.ts › clock should be frozen [unknown] +bidi-firefox-beta-library › library/page-clock.frozen.spec.ts › clock should be realtime [unknown] +bidi-firefox-beta-library › library/page-clock.spec.ts › Date.now › check Date.now is an integer [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › Date.now › check Date.now is an integer (2) [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › fastForward › ignores timers which wouldn't be run [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › fastForward › pushes back execution time for skipped timers [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › fastForward › supports string time arguments [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › popup › should not run time before popup on pause [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › popup › should run time before popup [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › popup › should tick after popup [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › popup › should tick before popup [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › runFor › creates updated Date while ticking [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › runFor › does not trigger without sufficient delay [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › runFor › passes 1 minute [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › runFor › passes 2 hours, 34 minutes and 10 seconds [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › runFor › passes 8 seconds [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › runFor › returns the current now value [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › runFor › throws for invalid format [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › runFor › triggers after sufficient delay [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › runFor › triggers event when some throw [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › runFor › triggers immediately without specified delay [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › runFor › triggers multiple simultaneous timers [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › runFor › triggers simultaneous timers [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › runFor › waits after setTimeout was called [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › setFixedTime › allows installing fake timers after settings time [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › setFixedTime › allows setting time multiple times [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › setFixedTime › does not fake methods [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › setFixedTime › fixed time is not affected by clock manipulation [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › stubTimers › fakes Date constructor [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › stubTimers › global fake setTimeout should return id [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › stubTimers › replaces global clearInterval [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › stubTimers › replaces global clearTimeout [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › stubTimers › replaces global performance.now [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › stubTimers › replaces global performance.timeOrigin [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › stubTimers › replaces global setInterval [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › stubTimers › replaces global setTimeout [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › stubTimers › sets initial timestamp [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › stubTimers › should throw for invalid date [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › while on pause › fastForward should not run nested immediate [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › while on pause › runFor should not run nested immediate [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › while on pause › runFor should not run nested immediate from microtask [fail] +bidi-firefox-beta-library › library/page-clock.spec.ts › while running › should fastForward [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › while running › should fastForwardTo [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › while running › should pause [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › while running › should pause and fastForward [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › while running › should progress time [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › while running › should runFor [pass] +bidi-firefox-beta-library › library/page-clock.spec.ts › while running › should set system time on pause [pass] +bidi-firefox-beta-library › library/page-event-crash.spec.ts › should be able to close context when page crashes [fail] +bidi-firefox-beta-library › library/page-event-crash.spec.ts › should cancel navigation when page crashes [fail] +bidi-firefox-beta-library › library/page-event-crash.spec.ts › should cancel waitForEvent when page crashes [fail] +bidi-firefox-beta-library › library/page-event-crash.spec.ts › should emit crash event when page crashes [fail] +bidi-firefox-beta-library › library/page-event-crash.spec.ts › should throw on any action after page crashes [fail] +bidi-firefox-beta-library › library/pdf.spec.ts › should be able to generate outline [unknown] +bidi-firefox-beta-library › library/pdf.spec.ts › should be able to save file [unknown] +bidi-firefox-beta-library › library/permissions.spec.ts › permissions › should accumulate when adding [fail] +bidi-firefox-beta-library › library/permissions.spec.ts › permissions › should be prompt by default [pass] +bidi-firefox-beta-library › library/permissions.spec.ts › permissions › should clear permissions [fail] +bidi-firefox-beta-library › library/permissions.spec.ts › permissions › should deny permission when not listed [fail] +bidi-firefox-beta-library › library/permissions.spec.ts › permissions › should fail when bad permission is given [fail] +bidi-firefox-beta-library › library/permissions.spec.ts › permissions › should grant geolocation permission when origin is listed [fail] +bidi-firefox-beta-library › library/permissions.spec.ts › permissions › should grant notifications permission when listed [fail] +bidi-firefox-beta-library › library/permissions.spec.ts › permissions › should grant permission when creating context [fail] +bidi-firefox-beta-library › library/permissions.spec.ts › permissions › should grant permission when listed for all domains [fail] +bidi-firefox-beta-library › library/permissions.spec.ts › permissions › should isolate permissions between browser contexts [fail] +bidi-firefox-beta-library › library/permissions.spec.ts › permissions › should prompt for geolocation permission when origin is not listed [pass] +bidi-firefox-beta-library › library/permissions.spec.ts › permissions › should reset permissions [fail] +bidi-firefox-beta-library › library/permissions.spec.ts › permissions › should trigger permission onchange [fail] +bidi-firefox-beta-library › library/permissions.spec.ts › should support clipboard read [fail] +bidi-firefox-beta-library › library/permissions.spec.ts › storage access [unknown] +bidi-firefox-beta-library › library/popup.spec.ts › BrowserContext.addInitScript should apply to a cross-process popup [fail] +bidi-firefox-beta-library › library/popup.spec.ts › BrowserContext.addInitScript should apply to an in-process popup [fail] +bidi-firefox-beta-library › library/popup.spec.ts › should expose function from browser context [fail] +bidi-firefox-beta-library › library/popup.spec.ts › should inherit extra headers from browser context [fail] +bidi-firefox-beta-library › library/popup.spec.ts › should inherit http credentials from browser context [pass] +bidi-firefox-beta-library › library/popup.spec.ts › should inherit offline from browser context [fail] +bidi-firefox-beta-library › library/popup.spec.ts › should inherit touch support from browser context [fail] +bidi-firefox-beta-library › library/popup.spec.ts › should inherit user agent from browser context @smoke [fail] +bidi-firefox-beta-library › library/popup.spec.ts › should inherit viewport size from browser context [fail] +bidi-firefox-beta-library › library/popup.spec.ts › should not dispatch binding on a closed page [fail] +bidi-firefox-beta-library › library/popup.spec.ts › should not throttle rAF in the opener page [timeout] +bidi-firefox-beta-library › library/popup.spec.ts › should not throw when click closes popup [timeout] +bidi-firefox-beta-library › library/popup.spec.ts › should respect routes from browser context [fail] +bidi-firefox-beta-library › library/popup.spec.ts › should respect routes from browser context when using window.open [fail] +bidi-firefox-beta-library › library/popup.spec.ts › should use viewport size from window features [timeout] +bidi-firefox-beta-library › library/proxy-pattern.spec.ts › socks proxy patter matcher [pass] +bidi-firefox-beta-library › library/proxy.spec.ts › does launch without a port [pass] +bidi-firefox-beta-library › library/proxy.spec.ts › should authenticate [pass] +bidi-firefox-beta-library › library/proxy.spec.ts › should exclude patterns [fail] +bidi-firefox-beta-library › library/proxy.spec.ts › should proxy local network requests › by default › link-local [pass] +bidi-firefox-beta-library › library/proxy.spec.ts › should proxy local network requests › by default › localhost [fail] +bidi-firefox-beta-library › library/proxy.spec.ts › should proxy local network requests › by default › loopback address [fail] +bidi-firefox-beta-library › library/proxy.spec.ts › should proxy local network requests › with other bypasses › link-local [pass] +bidi-firefox-beta-library › library/proxy.spec.ts › should proxy local network requests › with other bypasses › localhost [fail] +bidi-firefox-beta-library › library/proxy.spec.ts › should proxy local network requests › with other bypasses › loopback address [fail] +bidi-firefox-beta-library › library/proxy.spec.ts › should throw for bad server value [pass] +bidi-firefox-beta-library › library/proxy.spec.ts › should use SOCKS proxy for websocket requests [pass] +bidi-firefox-beta-library › library/proxy.spec.ts › should use proxy @smoke [pass] +bidi-firefox-beta-library › library/proxy.spec.ts › should use proxy for second page [pass] +bidi-firefox-beta-library › library/proxy.spec.ts › should use proxy with emulated user agent [unknown] +bidi-firefox-beta-library › library/proxy.spec.ts › should use socks proxy [pass] +bidi-firefox-beta-library › library/proxy.spec.ts › should use socks proxy in second page [pass] +bidi-firefox-beta-library › library/proxy.spec.ts › should work with IP:PORT notion [pass] +bidi-firefox-beta-library › library/proxy.spec.ts › should work with authenticate followed by redirect [pass] +bidi-firefox-beta-library › library/resource-timing.spec.ts › should work @smoke [pass] +bidi-firefox-beta-library › library/resource-timing.spec.ts › should work for SSL [fail] +bidi-firefox-beta-library › library/resource-timing.spec.ts › should work for redirect [pass] +bidi-firefox-beta-library › library/resource-timing.spec.ts › should work for subresource [pass] +bidi-firefox-beta-library › library/resource-timing.spec.ts › should work when serving from memory cache [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › accessible name nested treeitem [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › accessible name with slots [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › axe-core accessible-text [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › axe-core implicit-role [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › control embedded in a label [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › control embedded in a target element [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › display:contents should be visible when contents are visible [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › label/labelled-by aria-hidden with descendants [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › native controls [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › native controls labelled-by [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › own aria-label concatenated with aria-labelledby [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › should ignore stylesheet from hidden aria-labelledby subtree [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › should not include hidden pseudo into accessible name [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › should work with form and tricky input names [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › svg role=presentation [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › svg title [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › wpt accname #0 [pass] +bidi-firefox-beta-library › library/role-utils.spec.ts › wpt accname #1 [pass] +bidi-firefox-beta-library › library/role-utils.spec.ts › wpt accname #2 [fail] +bidi-firefox-beta-library › library/role-utils.spec.ts › wpt accname #3 [pass] +bidi-firefox-beta-library › library/role-utils.spec.ts › wpt accname non-manual [pass] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › element screenshot should work with a mobile viewport [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › element screenshot should work with device scale factor [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › element screenshots should handle vh units [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › page screenshot should capture css transform with device pixels [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › should capture full element when larger than viewport with device scale factor [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › should capture full element when larger than viewport with device scale factor and scale:css [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › should restore default viewport after fullPage screenshot [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › should restore viewport after element screenshot and exception [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › should restore viewport after page screenshot and exception [pass] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › should restore viewport after page screenshot and timeout [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › should take element screenshot when default viewport is null and restore back [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › should take fullPage screenshots when default viewport is null [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › should take screenshots when default viewport is null [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › element screenshot › should work if the main resource hangs [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › page screenshot › should handle vh units [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › page screenshot › should run in parallel in multiple pages [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › page screenshot › should throw if screenshot size is too large with device scale factor [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › page screenshot › should work with a mobile viewport [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › page screenshot › should work with a mobile viewport and clip [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › page screenshot › should work with a mobile viewport and fullPage [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › page screenshot › should work with device scale factor [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › page screenshot › should work with device scale factor and clip [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › page screenshot › should work with device scale factor and scale:css [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › page screenshot › should work with device scale factor, clip and scale:css [fail] +bidi-firefox-beta-library › library/screenshot.spec.ts › page screenshot › should work with large size [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should accept valid aria-label for candidate consideration [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should accept valid data-test-id for candidate consideration [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should chain text after parent [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should escape text with quote [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should escape text with slash [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should find text in shadow dom [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate exact label when necessary [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate exact placeholder when necessary [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate exact role when necessary [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate exact text when necessary [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate exact title when necessary [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate label selector [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noId [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noId noText [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noText in role [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noText in text [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate relative selector [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate text and normalize whitespace [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate text for [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate title selector [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should handle first non-unique data-testid [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should handle second non-unique data-testid [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should ignore empty aria-label for candidate consideration [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should ignore empty data-test-id for candidate consideration [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should ignore empty role for candidate consideration [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should match in deep shadow dom [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should match in shadow dom [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not accept invalid role for candidate consideration [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not escape spaces inside named attr selectors [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not escape text with >> [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not improve guid text [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not prefer zero-sized button over inner span [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not use generated id [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not use input[value] [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not use text for select [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prefer button over inner span [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prefer data-testid [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prefer role other input[type] [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prefer role=button over inner span [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › name [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › placeholder [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › role [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › type [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should properly join child selectors under nested ordinals [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should separate selectors by >> [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should trim long text [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should trim text [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should try to improve label text by shortening [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should try to improve role name [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should try to improve text [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should try to improve text by shortening [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use data-testid in strict errors [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp with a quote [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use nested ordinals [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use ordinal for identical nodes [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use parent text [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use readable id [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use the name attributes for elements that can have it [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should work in dynamic iframes without navigation [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should work with tricky attributes [fail] +bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should work without CSS.escape [fail] +bidi-firefox-beta-library › library/selectors-register.spec.ts › should handle errors [pass] +bidi-firefox-beta-library › library/selectors-register.spec.ts › should not rely on engines working from the root [fail] +bidi-firefox-beta-library › library/selectors-register.spec.ts › should throw a nice error if the selector returns a bad value [pass] +bidi-firefox-beta-library › library/selectors-register.spec.ts › should work [fail] +bidi-firefox-beta-library › library/selectors-register.spec.ts › should work in main and isolated world [fail] +bidi-firefox-beta-library › library/selectors-register.spec.ts › should work when registered on global [fail] +bidi-firefox-beta-library › library/selectors-register.spec.ts › should work with path [fail] +bidi-firefox-beta-library › library/shared-worker.spec.ts › should survive shared worker restart [pass] +bidi-firefox-beta-library › library/signals.spec.ts › should close the browser when the node process closes [timeout] +bidi-firefox-beta-library › library/signals.spec.ts › should remove temp dir on process.exit [timeout] +bidi-firefox-beta-library › library/signals.spec.ts › signals › should close the browser on SIGHUP [timeout] +bidi-firefox-beta-library › library/signals.spec.ts › signals › should close the browser on SIGINT [timeout] +bidi-firefox-beta-library › library/signals.spec.ts › signals › should close the browser on SIGTERM [timeout] +bidi-firefox-beta-library › library/signals.spec.ts › signals › should kill the browser on SIGINT + SIGTERM [timeout] +bidi-firefox-beta-library › library/signals.spec.ts › signals › should kill the browser on SIGTERM + SIGINT [timeout] +bidi-firefox-beta-library › library/signals.spec.ts › signals › should kill the browser on double SIGINT and remove temp dir [timeout] +bidi-firefox-beta-library › library/signals.spec.ts › signals › should not prevent default SIGTERM handling after browser close [timeout] +bidi-firefox-beta-library › library/signals.spec.ts › signals › should report browser close signal 2 [timeout] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo check [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo click [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dblclick [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dispatchEvent [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo fill [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo focus [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo hover [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo press [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo selectOption [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo setInputFiles [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo type [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo uncheck [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo check [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo click [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo dblclick [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo dispatchEvent [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo fill [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo focus [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo goto [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo hover [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo press [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo selectOption [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo setInputFiles [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo type [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo uncheck [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo check [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo click [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo dblclick [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo dispatchEvent [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo fill [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo focus [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo goto [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo hover [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo press [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo reload [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo selectOption [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo setInputFiles [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo type [fail] +bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo uncheck [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › empty adopted style sheets should not prevent node refs [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should capture frame [pass] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should capture iframe [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should capture iframe with srcdoc [pass] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should capture resources [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should capture snapshot target [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should collect multiple [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should collect on attribute change [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should collect snapshot [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should have a custom doctype [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should not navigate on anchor clicks [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should preserve BASE and other content on reset [pass] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should replace meta charset attr that specifies charset [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should replace meta content attr that specifies charset [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should respect CSSOM change through CSSGroupingRule [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should respect attr removal [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should respect inline CSSOM change [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should respect node removal [fail] +bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should respect subresource CSSOM change [fail] +bidi-firefox-beta-library › library/tap.spec.ts › locators › should send all of the correct events [fail] +bidi-firefox-beta-library › library/tap.spec.ts › should not send mouse events touchstart is canceled [fail] +bidi-firefox-beta-library › library/tap.spec.ts › should not send mouse events when touchend is canceled [fail] +bidi-firefox-beta-library › library/tap.spec.ts › should not wait for a navigation caused by a tap [fail] +bidi-firefox-beta-library › library/tap.spec.ts › should send all of the correct events @smoke [fail] +bidi-firefox-beta-library › library/tap.spec.ts › should send well formed touch points [fail] +bidi-firefox-beta-library › library/tap.spec.ts › should wait until an element is visible to tap it [fail] +bidi-firefox-beta-library › library/tap.spec.ts › should work with modifiers [fail] +bidi-firefox-beta-library › library/tap.spec.ts › trial run should not tap [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should allow hiding route actions [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should allow showing screenshots instead of snapshots [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should capture data-url svg iframe [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should capture iframe with sandbox attribute [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should complain about newer version of trace in old viewer [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should contain action info [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should contain adopted style sheets [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should display language-specific locators [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should display waitForLoadState even if did not wait for it [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should filter network requests by resource type [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should filter network requests by url [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should follow redirects [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should handle case where neither snapshots nor screenshots exist [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should handle file URIs [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should handle multiple headers [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should handle src=blob [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should have correct snapshot size [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should have correct stack trace [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should have network request overrides [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should have network request overrides 2 [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should have network requests [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should highlight expect failure [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should highlight locator in iframe while typing [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should highlight target element in shadow dom [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should highlight target elements [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should ignore 304 responses [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should include metainfo [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should include requestUrl in route.abort [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should include requestUrl in route.continue [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should include requestUrl in route.fulfill [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should not crash with broken locator [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open console errors on click [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open simple trace viewer [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open snapshot in new browser context [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open trace viewer on specific host [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open trace-1.31 [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open trace-1.37 [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open two trace files [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open two trace files of the same test [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open two trace viewers [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should pick locator [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should pick locator in iframe [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should popup snapshot [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should prefer later resource request with the same method [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should preserve currentSrc [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should preserve noscript when javascript is disabled [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should register custom elements [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should remove noscript by default [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should remove noscript when javaScriptEnabled is set to true [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should render console [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should render network bars [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should restore control values [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should restore scroll positions [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should serve css without content-type [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should serve overridden request [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show action source [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show baseURL in metadata pane [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show correct request start time [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show empty trace viewer [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show font preview [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show null as a param [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show only one pointer with multilevel iframes [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show params and return value [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show similar actions from library-only trace [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show snapshot URL [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should update highlight when typing [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should work with adopted style sheets and all: unset [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should work with adopted style sheets and replace/replaceSync [fail] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should work with meta CSP [unknown] +bidi-firefox-beta-library › library/trace-viewer.spec.ts › should work with nesting CSS selectors [unknown] +bidi-firefox-beta-library › library/tracing.spec.ts › should collect sources [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should collect trace with resources, but no js [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should collect two traces [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should exclude internal pages [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should export trace concurrently to second navigation [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should flush console events on tracing stop [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should hide internal stack frames [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should hide internal stack frames in expect [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should ignore iframes in head [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should include context API requests [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should include interrupted actions [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should not collect snapshots by default [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should not crash when browser closes mid-trace [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should not emit after w/o before [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should not flush console events [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should not hang for clicks that open dialogs [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should not include buffers in the trace [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should not include trace resources from the previous chunks [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should not stall on dialogs [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should not throw when stopping without start but not exporting [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should overwrite existing file [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should produce screencast frames crop [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should produce screencast frames fit [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should produce screencast frames scale [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should record global request trace [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should record network failures [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should respect tracesDir and name [fail] +bidi-firefox-beta-library › library/tracing.spec.ts › should store global request traces separately [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should store postData for global request [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should survive browser.close with auto-created traces dir [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should throw when starting with different options [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should throw when stopping without start [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should use the correct apiName for event driven callbacks [pass] +bidi-firefox-beta-library › library/tracing.spec.ts › should work with multiple chunks [fail] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › context.close should not wait for active route handlers on the owned pages [pass] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › context.unroute should not wait for pending handlers to complete [timeout] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › context.unrouteAll removes all handlers [fail] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › context.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [timeout] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › context.unrouteAll should wait for pending handlers to complete [timeout] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › page.close does not wait for active route handlers [fail] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › page.close should not wait for active route handlers on the owning context [pass] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › page.unroute should not wait for pending handlers to complete [pass] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › page.unrouteAll removes all routes [pass] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › page.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [pass] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › page.unrouteAll should wait for pending handlers to complete [fail] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › route.continue should not throw if page has been closed [pass] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › route.fallback should not throw if page has been closed [pass] +bidi-firefox-beta-library › library/unroute-behavior.spec.ts › route.fulfill should not throw if page has been closed [pass] +bidi-firefox-beta-library › library/video.spec.ts › screencast › saveAs should throw when no video frames [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should be 800x450 by default [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should be 800x600 with null viewport [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should capture css transformation [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should capture full viewport [fail] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should capture full viewport on hidpi [fail] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should capture navigation [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should capture static page [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should capture static page in persistent context @smoke [fail] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should continue recording main page after popup closes [fail] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should delete video [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should emulate an iphone [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should expose video path [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should expose video path blank page [fail] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should expose video path blank popup [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should not create video for internal pages [unknown] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should scale frames down to the requested size [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should throw if browser dies [fail] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should throw on browser close [fail] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should throw without recordVideo.dir [pass] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should use viewport scaled down to fit into 800x800 as default size [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should wait for video to finish if page was closed [fail] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should work for popups [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should work with old options [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should work with relative path for recordVideo.dir [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should work with video+trace [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › should work with weird screen resolution [timeout] +bidi-firefox-beta-library › library/video.spec.ts › screencast › videoSize should require videosPath [pass] +bidi-firefox-beta-library › library/video.spec.ts › should saveAs video [timeout] +bidi-firefox-beta-library › library/web-socket.spec.ts › should emit binary frame events [timeout] +bidi-firefox-beta-library › library/web-socket.spec.ts › should emit close events [timeout] +bidi-firefox-beta-library › library/web-socket.spec.ts › should emit error [timeout] +bidi-firefox-beta-library › library/web-socket.spec.ts › should emit frame events [timeout] +bidi-firefox-beta-library › library/web-socket.spec.ts › should filter out the close events when the server closes with a message [timeout] +bidi-firefox-beta-library › library/web-socket.spec.ts › should not have stray error events [timeout] +bidi-firefox-beta-library › library/web-socket.spec.ts › should pass self as argument to close event [timeout] +bidi-firefox-beta-library › library/web-socket.spec.ts › should reject waitForEvent on page close [timeout] +bidi-firefox-beta-library › library/web-socket.spec.ts › should reject waitForEvent on socket close [timeout] +bidi-firefox-beta-library › library/web-socket.spec.ts › should turn off when offline [unknown] +bidi-firefox-beta-library › library/web-socket.spec.ts › should work @smoke [pass] \ No newline at end of file diff --git a/tests/bidi/expectations/bidi-firefox-beta-page.txt b/tests/bidi/expectations/bidi-firefox-beta-page.txt new file mode 100644 index 0000000000..10cc403562 --- /dev/null +++ b/tests/bidi/expectations/bidi-firefox-beta-page.txt @@ -0,0 +1,1971 @@ +bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should force a layout [fail] +bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should get frame box [fail] +bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should handle nested frames [fail] +bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should handle scroll offset and click [fail] +bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should return null for invisible elements [fail] +bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should work [fail] +bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should work when inline box child is outside of viewport [fail] +bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should work with SVG nodes [fail] +bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should double click the button [fail] +bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should throw for
elements with force [fail] +bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should throw for detached nodes [pass] +bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should throw for hidden nodes with force [pass] +bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should throw for recursively hidden nodes with force [pass] +bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should work @smoke [pass] +bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should work for Shadow DOM v1 [pass] +bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should work for TextNodes [fail] +bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should work with Node removed [pass] +bidi-firefox-beta-page › page/elementhandle-content-frame.spec.ts › should return null for document.documentElement [pass] +bidi-firefox-beta-page › page/elementhandle-content-frame.spec.ts › should return null for non-iframes [pass] +bidi-firefox-beta-page › page/elementhandle-content-frame.spec.ts › should work [pass] +bidi-firefox-beta-page › page/elementhandle-content-frame.spec.ts › should work for cross-frame evaluations [fail] +bidi-firefox-beta-page › page/elementhandle-content-frame.spec.ts › should work for cross-process iframes [pass] +bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › getAttribute should work [pass] +bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › innerHTML should work [pass] +bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › innerText should throw [fail] +bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › innerText should work [pass] +bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › inputValue should work [fail] +bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › isChecked should work [fail] +bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › isEditable should work [fail] +bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › isEnabled and isDisabled should work [fail] +bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › isEnabled and isDisabled should work with [fail] +bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect color value [fail] +bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect date [fail] +bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect datetime-local [unknown] +bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect month [unknown] +bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect range value [fail] +bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect time [fail] +bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect week [unknown] +bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on unsupported inputs [pass] +bidi-firefox-beta-page › page/page-focus.spec.ts › clicking checkbox should activate it [unknown] +bidi-firefox-beta-page › page/page-focus.spec.ts › keeps focus on element when attempting to focus a non-focusable element [fail] +bidi-firefox-beta-page › page/page-focus.spec.ts › should emit blur event [fail] +bidi-firefox-beta-page › page/page-focus.spec.ts › should emit focus event [fail] +bidi-firefox-beta-page › page/page-focus.spec.ts › should traverse focus [fail] +bidi-firefox-beta-page › page/page-focus.spec.ts › should traverse focus in all directions [fail] +bidi-firefox-beta-page › page/page-focus.spec.ts › should traverse only form elements [unknown] +bidi-firefox-beta-page › page/page-focus.spec.ts › should work @smoke [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › js redirect overrides url bar navigation [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should be able to navigate to a page controlled by service worker [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should capture cross-process iframe navigation request [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should capture iframe navigation request [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should disable timeout when its set to 0 [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when canceled by another navigation [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when exceeding browser context navigation timeout [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when exceeding browser context timeout [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when exceeding default maximum navigation timeout [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when exceeding default maximum timeout [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when exceeding maximum navigation timeout [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when main resources failed to load [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when navigating and show the url at the error message [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when navigating to bad SSL [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when navigating to bad SSL after redirects [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when navigating to bad url [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when replaced by another navigation [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when server returns 204 [timeout] +bidi-firefox-beta-page › page/page-goto.spec.ts › should navigate to URL with hash and fire requests without hash [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should navigate to about:blank [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should navigate to dataURL and not fire dataURL requests [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should navigate to empty page with domcontentloaded [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should not crash when RTCPeerConnection is used [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should not crash when navigating to bad SSL after a cross origin navigation [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should not leak listeners during 20 waitForNavigation [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should not leak listeners during bad navigation [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should not leak listeners during navigation [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should not resolve goto upon window.stop() [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should not throw if networkidle0 is passed as an option [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should not throw unhandled rejections on invalid url [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should override referrer-policy [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should prioritize default navigation timeout over default timeout [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should properly wait for load [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should reject referer option when setExtraHTTPHeaders provides referer [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should report raw buffer for main resource [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should return from goto if new navigation is started [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should return last response in redirect chain [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should return response when page changes its URL after load [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should return url with basic auth info [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should return when navigation is committed if commit is specified [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should send referer [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should send referer of cross-origin URL [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should succeed on url bar navigation when there is pending navigation [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should throw if networkidle2 is passed as an option [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should use http for no protocol [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should wait for load when iframe attaches and detaches [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work @smoke [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work cross-process [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work when navigating to 404 [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work when navigating to data url [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work when navigating to valid url [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work when page calls history API in beforeunload [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy after redirect [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy and interception [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work with anchor navigation [timeout] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work with cross-process that fails before committing [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work with file URL [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work with file URL with subframes [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work with lazy loading iframes [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work with redirects [fail] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work with self requesting page [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work with subframes return 204 [pass] +bidi-firefox-beta-page › page/page-goto.spec.ts › should work with subframes return 204 with domcontentloaded [pass] +bidi-firefox-beta-page › page/page-history.spec.ts › goBack/goForward should work with bfcache-able pages [fail] +bidi-firefox-beta-page › page/page-history.spec.ts › page.goBack during renderer-initiated navigation [fail] +bidi-firefox-beta-page › page/page-history.spec.ts › page.goBack should work @smoke [fail] +bidi-firefox-beta-page › page/page-history.spec.ts › page.goBack should work for file urls [fail] +bidi-firefox-beta-page › page/page-history.spec.ts › page.goBack should work with HistoryAPI [fail] +bidi-firefox-beta-page › page/page-history.spec.ts › page.goForward during renderer-initiated navigation [fail] +bidi-firefox-beta-page › page/page-history.spec.ts › page.reload during renderer-initiated navigation [fail] +bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should not resolve with same-document navigation [fail] +bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should work [pass] +bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should work on a page with a hash [pass] +bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should work on a page with a hash at the end [pass] +bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should work with cross-origin redirect [pass] +bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should work with data url [pass] +bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should work with same origin redirect [pass] +bidi-firefox-beta-page › page/page-history.spec.ts › regression test for issue 20791 [pass] +bidi-firefox-beta-page › page/page-history.spec.ts › should reload proper page [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › insertText should only emit input event [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › pressing Meta should not result in any text insertion on any platform [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should be able to prevent selectAll [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should dispatch a click event on a button when Enter gets pressed [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should dispatch a click event on a button when Space gets pressed [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should dispatch insertText after context menu was opened [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should expose keyIdentifier in webkit [unknown] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should handle selectAll [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should have correct Keydown/Keyup order when pressing Escape key [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should move around the selection in a contenteditable [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should move to the start of the document [unknown] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should move with the arrow keys [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should not type canceled events [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should press Enter [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should press plus [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should press shift plus [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should press the meta key [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should report multiple modifiers [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should report shiftKey [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should scroll with PageDown [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should send a character with ElementHandle.press [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should send a character with insertText [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should send proper codes while typing [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should send proper codes while typing with shift [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should shift raw codes [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should specify location [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should specify repeat property [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should support MacOS shortcuts [unknown] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should support multiple plus-separated modifiers [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should support plus-separated modifiers [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should support simple copy-pasting [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should support simple cut-pasting [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should support undo-redo [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should throw on unknown keys [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type after context menu was opened [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type all kinds of characters [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type emoji [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type emoji into an iframe [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type into a textarea @smoke [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom with nested elements [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type repeatedly in input in shadow dom [fail] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should work after a cross origin navigation [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › should work with keyboard events with empty.html [pass] +bidi-firefox-beta-page › page/page-keyboard.spec.ts › type to non-focusable element should maintain old focus [fail] +bidi-firefox-beta-page › page/page-leaks.spec.ts › click should not leak [fail] +bidi-firefox-beta-page › page/page-leaks.spec.ts › expect should not leak [fail] +bidi-firefox-beta-page › page/page-leaks.spec.ts › fill should not leak [fail] +bidi-firefox-beta-page › page/page-leaks.spec.ts › waitFor should not leak [fail] +bidi-firefox-beta-page › page/page-listeners.spec.ts › should not throw with ignoreErrors [pass] +bidi-firefox-beta-page › page/page-listeners.spec.ts › should wait [pass] +bidi-firefox-beta-page › page/page-listeners.spec.ts › wait should throw [pass] +bidi-firefox-beta-page › page/page-mouse.spec.ts › down and up should generate click [pass] +bidi-firefox-beta-page › page/page-mouse.spec.ts › should always round down [fail] +bidi-firefox-beta-page › page/page-mouse.spec.ts › should click the document @smoke [pass] +bidi-firefox-beta-page › page/page-mouse.spec.ts › should dblclick the div [fail] +bidi-firefox-beta-page › page/page-mouse.spec.ts › should dispatch mouse move after context menu was opened [pass] +bidi-firefox-beta-page › page/page-mouse.spec.ts › should not crash on mouse drag with any button [pass] +bidi-firefox-beta-page › page/page-mouse.spec.ts › should pointerdown the div with a custom button [fail] +bidi-firefox-beta-page › page/page-mouse.spec.ts › should report correct buttons property [pass] +bidi-firefox-beta-page › page/page-mouse.spec.ts › should select the text with mouse [pass] +bidi-firefox-beta-page › page/page-mouse.spec.ts › should set modifier keys on click [pass] +bidi-firefox-beta-page › page/page-mouse.spec.ts › should trigger hover state [pass] +bidi-firefox-beta-page › page/page-mouse.spec.ts › should trigger hover state on disabled button [pass] +bidi-firefox-beta-page › page/page-mouse.spec.ts › should trigger hover state with removed window.Node [pass] +bidi-firefox-beta-page › page/page-mouse.spec.ts › should tween mouse movement [pass] +bidi-firefox-beta-page › page/page-navigation.spec.ts › should work with _blank target [pass] +bidi-firefox-beta-page › page/page-navigation.spec.ts › should work with _blank target in form [fail] +bidi-firefox-beta-page › page/page-navigation.spec.ts › should work with cross-process _blank target [pass] +bidi-firefox-beta-page › page/page-network-idle.spec.ts › should navigate to empty page with networkidle [pass] +bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle from the child frame [pass] +bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle from the popup [fail] +bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent [fail] +bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent from the child frame [fail] +bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent with request from previous navigation [fail] +bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle in waitForNavigation [pass] +bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation [pass] +bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation with request from previous navigation [fail] +bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle when iframe attaches and detaches [fail] +bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle when navigating iframe [pass] +bidi-firefox-beta-page › page/page-network-idle.spec.ts › should work after repeated navigations in the same page [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › page.reload return 304 status code [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should get the same headers as the server [fail] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should get the same headers as the server CORS [fail] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should get |undefined| with postData() when there is no post data [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should get |undefined| with postDataJSON() when there is no post data [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should handle mixed-content blocked requests [unknown] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should not allow to access frame on popup main request [fail] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should not get preflight CORS requests when intercepting [fail] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should not return allHeaders() until they are available [fail] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should not work for a redirect and interception [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should override post data content type [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded [fail] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded; charset=UTF-8 [fail] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should parse the json post data [fail] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should report all cookies in one header [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should report raw headers [fail] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should report raw response headers in redirects [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should return event source [fail] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should return headers [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should return multipart/form-data [fail] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should return navigation bit [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should return navigation bit when navigating to image [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should return postData [fail] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should work for a redirect [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should work for fetch requests @smoke [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should work for main frame navigation request [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should work for subframe navigation request [pass] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should work with binary post data [fail] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should work with binary post data and interception [fail] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should behave the same way for headers and allHeaders [pass] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should bypass disk cache when context interception is enabled [fail] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should bypass disk cache when page interception is enabled [pass] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should provide a Response with a file URL [fail] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should reject response.finished if context closes [timeout] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should reject response.finished if page closes [pass] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should report all headers [fail] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should report if request was fromServiceWorker [fail] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should report multiple set-cookie headers [fail] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should return body [fail] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should return body for prefetch script [fail] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should return body with compression [fail] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should return headers after route.fulfill [pass] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should return json [fail] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should return multiple header value [pass] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should return set-cookie header after route.fulfill [pass] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should return status text [pass] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should return text [fail] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should return uncompressed text [fail] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should throw when requesting body of redirected response [pass] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should wait until response completes [fail] +bidi-firefox-beta-page › page/page-network-response.spec.ts › should work @smoke [pass] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should handle redirects [pass] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should have correct responseBodySize for 404 with content [pass] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize [pass] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize for chunked request [fail] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize with gzip compression [pass] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should return sizes without hanging [pass] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should set bodySize and headersSize [fail] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should set bodySize to 0 if there was no body [pass] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should set bodySize to 0 when there was no response body [pass] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should set bodySize, headersSize, and transferSize [pass] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should throw for failed requests [pass] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should work with 200 status code [pass] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should work with 401 status code [pass] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should work with 404 status code [pass] +bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should work with 500 status code [fail] +bidi-firefox-beta-page › page/page-object-count.spec.ts › should count objects [unknown] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › continue should delete headers on redirects [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › continue should not change multipart/form-data body [fail] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › continue should propagate headers to redirects [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should amend binary post data [fail] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should amend longer post data [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should amend method and post data [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should amend post data [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should amend utf8 post data [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should compute content-length from post data [fail] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should use content-type from original request [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › redirected requests should report overridden headers [fail] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should amend HTTP headers [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should amend method [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should amend method on main request [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should continue preload link requests [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should delete header with undefined value [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should delete the origin header [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should intercept css variable with background url [fail] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should not allow changing protocol when overriding url [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should not throw if request was cancelled by the page [timeout] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should not throw when continuing after page is closed [fail] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should not throw when continuing while page is closing [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should override method along with url [fail] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should override request url [timeout] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should work [pass] +bidi-firefox-beta-page › page/page-request-continue.spec.ts › should work with Cross-Origin-Opener-Policy [fail] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › post data › should amend binary post data [fail] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › post data › should amend json post data [pass] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › post data › should amend post data [pass] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should amend HTTP headers [pass] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should amend method [pass] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should chain once [fail] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should delete header with undefined value [pass] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should fall back [pass] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should fall back after exception [pass] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should fall back async [fail] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should not chain abort [fail] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should not chain fulfill [fail] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should override request url [fail] +bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should work [pass] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › headerValue should return set-cookie from intercepted response [pass] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should allow mocking binary responses [fail] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should allow mocking svg with charset [fail] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fetch original request and fulfill [pass] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill json [fail] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill preload link requests [pass] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with fetch response that has multiple set-cookie [timeout] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with fetch result [fail] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with fetch result and overrides [fail] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with global fetch result [fail] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with gzip and readback [timeout] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with har response [fail] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with multiple set-cookie [fail] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with unuassigned status codes [pass] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should include the origin header [pass] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should not go to the network for fulfilled requests body [fail] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should not modify the headers sent to the server [pass] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should not throw if request was cancelled by the page [timeout] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should stringify intercepted request response headers [pass] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should work [pass] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should work with buffer as body [fail] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should work with file path [fail] +bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should work with status code 422 [pass] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › request.postData is not null when fetching FormData with a Blob [fail] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should fulfill intercepted response [fail] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should fulfill intercepted response using alias [pass] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should fulfill popup main request using alias [fail] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should fulfill response with empty body [fail] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should fulfill with any response [fail] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should give access to the intercepted response [fail] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should give access to the intercepted response body [pass] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should intercept multipart/form-data request body [fail] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should intercept with post data override [pass] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should intercept with url override [fail] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should not follow redirects when maxRedirects is set to 0 in route.fetch [pass] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should override with defaults when intercepted response not provided [fail] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should support fulfill after intercept [fail] +bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should support timeout option in route.fetch [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › route.abort should throw if called twice [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › route.continue should throw if called twice [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › route.fallback should throw if called twice [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › route.fulfill should throw if called twice [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should add Access-Control-Allow-Origin by default when fulfill [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should allow null origin for about:blank [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should be able to fetch dataURL and not fire dataURL requests [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should be able to remove headers [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should be abortable [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should be abortable with custom error codes [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should chain fallback w/ dynamic URL [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should contain raw request header [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should contain raw response header [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should contain raw response header after fulfill [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should contain referer header [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should fail navigation when aborting main resource [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should fulfill with redirect status [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should intercept @smoke [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should intercept main resource during cross-process navigation [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should intercept when postData is more than 1MB [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should navigate to URL with hash and and fire requests without hash [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should navigate to dataURL and not fire dataURL requests [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should not auto-intercept non-preflight OPTIONS [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should not fulfill with redirect status [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should not throw "Invalid Interception Id" if the request was cancelled [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should not throw if request was cancelled by the page [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should not work with redirects [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should override cookie header [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should pause intercepted XHR until continue [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should pause intercepted fetch request until continue [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should properly return navigation response when URL has cookies [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should reject cors with disallowed credentials [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should respect cors overrides [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should send referer [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should show custom HTTP headers [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should support ? in glob pattern [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should support async handler w/ times [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should support cors for different methods [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should support cors with GET [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should support cors with POST [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should support cors with credentials [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should support the times parameter with route matching [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should unroute [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should work if handler with times parameter was removed from another handler [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should work when POST is redirected with 302 [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should work when header manipulation headers with redirect [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should work with badly encoded server [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should work with custom referer headers [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should work with encoded server [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should work with encoded server - 2 [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should work with equal requests [pass] +bidi-firefox-beta-page › page/page-route.spec.ts › should work with redirect inside sync XHR [fail] +bidi-firefox-beta-page › page/page-route.spec.ts › should work with redirects for subresources [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should capture screenshots after layoutchanges in transitionend event [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should fire transitionend for finite transitions [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture css animations in shadow DOM [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite css animation [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite web animations [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture pseudo element css animation [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should not change animation with playbackRate equal to 0 [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should resume infinite animations [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should stop animations that happen right before screenshot [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for INfinite css animation [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for css transitions [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for finite css animation [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should wait for fonts to load [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot should capture css transform [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should hide elements based on attr [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask in parallel [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask inside iframe [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask multiple elements [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should remove elements based on attr [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should remove mask after screenshot [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when mask color is not pink #F0F [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe has stalled navigation [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe used document.open after a weird url [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work with elementhandle [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work with locator [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › path option should create subdirectories [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › path option should detect jpeg [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › path option should throw for unsupported mime type [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › path option should work [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › quality option should throw for png [pass] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should allow transparency [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should capture blinking caret if explicitly asked for [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should capture blinking caret in shadow dom [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should capture canvas changes [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should clip elements to the viewport [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should clip rect [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should clip rect with fullPage [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should not capture blinking caret by default [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should not issue resize event [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should prefer type over extension [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should render white background on jpeg file [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should restore viewport after fullPage screenshot [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should run in parallel [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots and mask elements outside of it [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots during navigation [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should throw on clip outside the viewport [pass] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work @smoke [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work for canvas [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work for translateZ [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work for webgl [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work while navigating [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work with Array deleted [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work with iframe in shadow [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work with odd clip size on Retina displays [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › zero quality option should throw for png [pass] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › should capture css box-shadow [fail] +bidi-firefox-beta-page › page/page-screenshot.spec.ts › should throw if screenshot size is too large [fail] +bidi-firefox-beta-page › page/page-select-option.spec.ts › input event.composed should be true and cross shadow dom boundary [fail] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should deselect all options when passed no values for a multiple select [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should deselect all options when passed no values for a select without multiple [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should fall back to selecting by label [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should not allow null items [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should not select single option when some attributes do not match [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should not throw when select causes navigation [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should respect event bubbling [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should return [] on no matched values [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should return [] on no values [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should return an array of matched values [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should return an array of one element when multiple is not set [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should select multiple options [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should select multiple options with attributes [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should select only first option [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should select single option @smoke [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should select single option by handle [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should select single option by index [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should select single option by label [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should select single option by multiple attributes [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should select single option by value [pass] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should throw if passed wrong types [fail] +bidi-firefox-beta-page › page/page-select-option.spec.ts › should throw when element is not a [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate title selector [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should handle first non-unique data-testid [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should handle second non-unique data-testid [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should ignore empty aria-label for candidate consideration [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should ignore empty data-test-id for candidate consideration [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should ignore empty role for candidate consideration [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should match in deep shadow dom [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should match in shadow dom [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not accept invalid role for candidate consideration [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not escape spaces inside named attr selectors [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not escape text with >> [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not improve guid text [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not prefer zero-sized button over inner span [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not use generated id [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not use input[value] [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not use text for select [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer button over inner span [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer data-testid [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer role other input[type] [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer role=button over inner span [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › name [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › placeholder [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › role [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › type [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should properly join child selectors under nested ordinals [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should separate selectors by >> [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should trim long text [pass] bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should trim text [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should try to improve label text by shortening [pass] bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should try to improve role name [pass] bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should try to improve text [pass] bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should try to improve text by shortening [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should try to improve label text by shortening [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not improve guid text [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not escape text with >> [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should escape text with quote [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should escape text with slash [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not use text for select [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use ordinal for identical nodes [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer data-testid [pass] bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use data-testid in strict errors [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should handle first non-unique data-testid [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should handle second non-unique data-testid [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use readable id [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not use generated id [pass] bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text [pass] bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp [pass] bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp with a quote [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should chain text after parent [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use parent text [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should separate selectors by >> [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should trim long text [pass] bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use nested ordinals [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should properly join child selectors under nested ordinals [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not use input[value] [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › role [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › placeholder [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › name [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › type [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should find text in shadow dom [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should match in shadow dom [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should match in deep shadow dom [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should work in dynamic iframes without navigation [fail] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use ordinal for identical nodes [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use parent text [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use readable id [pass] bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use the name attributes for elements that can have it [pass] +bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should work in dynamic iframes without navigation [fail] bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should work with tricky attributes [pass] bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should work without CSS.escape [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should ignore empty aria-label for candidate consideration [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should accept valid aria-label for candidate consideration [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should ignore empty role for candidate consideration [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not accept invalid role for candidate consideration [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should ignore empty data-test-id for candidate consideration [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should accept valid data-test-id for candidate consideration [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate label selector [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer role other input[type] [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate title selector [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact text when necessary [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact title when necessary [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact placeholder when necessary [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact role when necessary [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact label when necessary [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate relative selector [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noText in role [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noText in text [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noId [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noId noText [pass] -bidi-chromium-library › library/selectors-register.spec.ts › should work [pass] -bidi-chromium-library › library/selectors-register.spec.ts › should work when registered on global [pass] -bidi-chromium-library › library/selectors-register.spec.ts › should work with path [pass] -bidi-chromium-library › library/selectors-register.spec.ts › should work in main and isolated world [pass] bidi-chromium-library › library/selectors-register.spec.ts › should handle errors [pass] bidi-chromium-library › library/selectors-register.spec.ts › should not rely on engines working from the root [pass] bidi-chromium-library › library/selectors-register.spec.ts › should throw a nice error if the selector returns a bad value [pass] +bidi-chromium-library › library/selectors-register.spec.ts › should work [pass] +bidi-chromium-library › library/selectors-register.spec.ts › should work in main and isolated world [pass] +bidi-chromium-library › library/selectors-register.spec.ts › should work when registered on global [pass] +bidi-chromium-library › library/selectors-register.spec.ts › should work with path [pass] bidi-chromium-library › library/shared-worker.spec.ts › should survive shared worker restart [timeout] bidi-chromium-library › library/signals.spec.ts › should close the browser when the node process closes [timeout] bidi-chromium-library › library/signals.spec.ts › should remove temp dir on process.exit [timeout] -bidi-chromium-library › library/signals.spec.ts › signals › should report browser close signal 2 [timeout] +bidi-chromium-library › library/signals.spec.ts › signals › should close the browser on SIGHUP [timeout] bidi-chromium-library › library/signals.spec.ts › signals › should close the browser on SIGINT [timeout] bidi-chromium-library › library/signals.spec.ts › signals › should close the browser on SIGTERM [timeout] -bidi-chromium-library › library/signals.spec.ts › signals › should close the browser on SIGHUP [timeout] -bidi-chromium-library › library/signals.spec.ts › signals › should kill the browser on double SIGINT and remove temp dir [timeout] bidi-chromium-library › library/signals.spec.ts › signals › should kill the browser on SIGINT + SIGTERM [timeout] bidi-chromium-library › library/signals.spec.ts › signals › should kill the browser on SIGTERM + SIGINT [timeout] +bidi-chromium-library › library/signals.spec.ts › signals › should kill the browser on double SIGINT and remove temp dir [timeout] bidi-chromium-library › library/signals.spec.ts › signals › should not prevent default SIGTERM handling after browser close [timeout] +bidi-chromium-library › library/signals.spec.ts › signals › should report browser close signal 2 [timeout] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo check [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo click [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dblclick [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dispatchEvent [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo fill [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo focus [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo hover [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo press [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo selectOption [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo setInputFiles [fail] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo type [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo uncheck [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo check [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo click [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo dblclick [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo dispatchEvent [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo fill [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo focus [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo goto [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo hover [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo press [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo selectOption [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo setInputFiles [timeout] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo type [pass] +bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo uncheck [pass] bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo check [pass] bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo click [pass] bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo dblclick [pass] @@ -1698,213 +1723,189 @@ bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo sele bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo setInputFiles [timeout] bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo type [pass] bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo uncheck [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo check [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo click [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo dblclick [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo dispatchEvent [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo fill [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo focus [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo goto [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo hover [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo press [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo selectOption [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo setInputFiles [timeout] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo type [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo uncheck [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo check [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo click [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dblclick [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dispatchEvent [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo fill [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo focus [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo hover [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo press [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo selectOption [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo setInputFiles [fail] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo type [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo uncheck [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should collect snapshot [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should preserve BASE and other content on reset [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture resources [fail] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should collect multiple [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect inline CSSOM change [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect CSSOM change through CSSGroupingRule [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect node removal [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect attr removal [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should have a custom doctype [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should replace meta charset attr that specifies charset [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should replace meta content attr that specifies charset [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect subresource CSSOM change [fail] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › empty adopted style sheets should not prevent node refs [pass] bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture frame [fail] bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture iframe [fail] bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture iframe with srcdoc [fail] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture resources [fail] bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture snapshot target [timeout] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should collect multiple [pass] bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should collect on attribute change [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › empty adopted style sheets should not prevent node refs [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should collect snapshot [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should have a custom doctype [pass] bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should not navigate on anchor clicks [pass] -bidi-chromium-library › library/tap.spec.ts › should send all of the correct events @smoke [fail] -bidi-chromium-library › library/tap.spec.ts › trial run should not tap [fail] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should preserve BASE and other content on reset [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should replace meta charset attr that specifies charset [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should replace meta content attr that specifies charset [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect CSSOM change through CSSGroupingRule [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect attr removal [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect inline CSSOM change [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect node removal [pass] +bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect subresource CSSOM change [fail] +bidi-chromium-library › library/tap.spec.ts › locators › should send all of the correct events [fail] bidi-chromium-library › library/tap.spec.ts › should not send mouse events touchstart is canceled [fail] bidi-chromium-library › library/tap.spec.ts › should not send mouse events when touchend is canceled [fail] bidi-chromium-library › library/tap.spec.ts › should not wait for a navigation caused by a tap [fail] -bidi-chromium-library › library/tap.spec.ts › should work with modifiers [fail] +bidi-chromium-library › library/tap.spec.ts › should send all of the correct events @smoke [fail] bidi-chromium-library › library/tap.spec.ts › should send well formed touch points [fail] bidi-chromium-library › library/tap.spec.ts › should wait until an element is visible to tap it [fail] -bidi-chromium-library › library/tap.spec.ts › locators › should send all of the correct events [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should show empty trace viewer [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open two trace viewers [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open trace viewer on specific host [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open simple trace viewer [pass] +bidi-chromium-library › library/tap.spec.ts › should work with modifiers [fail] +bidi-chromium-library › library/tap.spec.ts › trial run should not tap [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should allow hiding route actions [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should allow showing screenshots instead of snapshots [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should capture data-url svg iframe [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should capture iframe with sandbox attribute [fail] bidi-chromium-library › library/trace-viewer.spec.ts › should complain about newer version of trace in old viewer [pass] bidi-chromium-library › library/trace-viewer.spec.ts › should contain action info [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should render network bars [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should render console [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should open console errors on click [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should show params and return value [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should show null as a param [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should have correct snapshot size [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should have correct stack trace [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should have network requests [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should filter network requests by resource type [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should show font preview [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should filter network requests by url [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should have network request overrides [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should have network request overrides 2 [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should show snapshot URL [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should popup snapshot [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should capture iframe with sandbox attribute [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should capture data-url svg iframe [fail] bidi-chromium-library › library/trace-viewer.spec.ts › should contain adopted style sheets [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should work with adopted style sheets and replace/replaceSync [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should work with adopted style sheets and all: unset [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should work with nesting CSS selectors [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should restore scroll positions [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should restore control values [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should work with meta CSP [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should display language-specific locators [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should display waitForLoadState even if did not wait for it [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should filter network requests by resource type [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should filter network requests by url [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should follow redirects [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should handle case where neither snapshots nor screenshots exist [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should handle file URIs [unknown] bidi-chromium-library › library/trace-viewer.spec.ts › should handle multiple headers [fail] bidi-chromium-library › library/trace-viewer.spec.ts › should handle src=blob [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should handle file URIs [unknown] -bidi-chromium-library › library/trace-viewer.spec.ts › should preserve currentSrc [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should register custom elements [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should highlight target elements [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should highlight target element in shadow dom [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should have correct snapshot size [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should have correct stack trace [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should have network request overrides [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should have network request overrides 2 [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should have network requests [pass] bidi-chromium-library › library/trace-viewer.spec.ts › should highlight expect failure [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should show action source [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should follow redirects [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should highlight locator in iframe while typing [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should highlight target element in shadow dom [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should highlight target elements [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should ignore 304 responses [fail] bidi-chromium-library › library/trace-viewer.spec.ts › should include metainfo [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open two trace files [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open two trace files of the same test [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should include requestUrl in route.abort [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should include requestUrl in route.continue [fail] bidi-chromium-library › library/trace-viewer.spec.ts › should include requestUrl in route.fulfill [fail] bidi-chromium-library › library/trace-viewer.spec.ts › should not crash with broken locator [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should include requestUrl in route.continue [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should include requestUrl in route.abort [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should serve overridden request [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should display waitForLoadState even if did not wait for it [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should display language-specific locators [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should pick locator [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should update highlight when typing [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should open console errors on click [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should open simple trace viewer [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should open snapshot in new browser context [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should open trace viewer on specific host [pass] bidi-chromium-library › library/trace-viewer.spec.ts › should open trace-1.31 [pass] bidi-chromium-library › library/trace-viewer.spec.ts › should open trace-1.37 [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should prefer later resource request with the same method [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should ignore 304 responses [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should open two trace files [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should open two trace files of the same test [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should open two trace viewers [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should pick locator [pass] bidi-chromium-library › library/trace-viewer.spec.ts › should pick locator in iframe [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should highlight locator in iframe while typing [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should popup snapshot [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should prefer later resource request with the same method [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should preserve currentSrc [pass] bidi-chromium-library › library/trace-viewer.spec.ts › should preserve noscript when javascript is disabled [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should register custom elements [pass] bidi-chromium-library › library/trace-viewer.spec.ts › should remove noscript by default [pass] bidi-chromium-library › library/trace-viewer.spec.ts › should remove noscript when javaScriptEnabled is set to true [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open snapshot in new browser context [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should show similar actions from library-only trace [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should show correct request start time [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should allow hiding route actions [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should show baseURL in metadata pane [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should render console [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should render network bars [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should restore control values [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should restore scroll positions [pass] bidi-chromium-library › library/trace-viewer.spec.ts › should serve css without content-type [timeout] -bidi-chromium-library › library/trace-viewer.spec.ts › should allow showing screenshots instead of snapshots [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should handle case where neither snapshots nor screenshots exist [pass] -bidi-chromium-library › library/tracing.spec.ts › should collect trace with resources, but no js [timeout] -bidi-chromium-library › library/tracing.spec.ts › should use the correct apiName for event driven callbacks [fail] -bidi-chromium-library › library/tracing.spec.ts › should not collect snapshots by default [pass] -bidi-chromium-library › library/tracing.spec.ts › should not include buffers in the trace [fail] -bidi-chromium-library › library/tracing.spec.ts › should exclude internal pages [pass] -bidi-chromium-library › library/tracing.spec.ts › should include context API requests [pass] -bidi-chromium-library › library/tracing.spec.ts › should collect two traces [pass] -bidi-chromium-library › library/tracing.spec.ts › should respect tracesDir and name [fail] -bidi-chromium-library › library/tracing.spec.ts › should not include trace resources from the previous chunks [fail] -bidi-chromium-library › library/tracing.spec.ts › should overwrite existing file [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should serve overridden request [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should show action source [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should show baseURL in metadata pane [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should show correct request start time [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should show empty trace viewer [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should show font preview [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should show null as a param [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should show only one pointer with multilevel iframes [unknown] +bidi-chromium-library › library/trace-viewer.spec.ts › should show params and return value [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should show similar actions from library-only trace [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should show snapshot URL [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should update highlight when typing [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should work with adopted style sheets and all: unset [fail] +bidi-chromium-library › library/trace-viewer.spec.ts › should work with adopted style sheets and replace/replaceSync [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should work with meta CSP [pass] +bidi-chromium-library › library/trace-viewer.spec.ts › should work with nesting CSS selectors [pass] bidi-chromium-library › library/tracing.spec.ts › should collect sources [pass] -bidi-chromium-library › library/tracing.spec.ts › should record network failures [fail] -bidi-chromium-library › library/tracing.spec.ts › should not crash when browser closes mid-trace [pass] -bidi-chromium-library › library/tracing.spec.ts › should survive browser.close with auto-created traces dir [pass] -bidi-chromium-library › library/tracing.spec.ts › should not stall on dialogs [pass] -bidi-chromium-library › library/tracing.spec.ts › should produce screencast frames fit [fail] -bidi-chromium-library › library/tracing.spec.ts › should produce screencast frames crop [fail] -bidi-chromium-library › library/tracing.spec.ts › should produce screencast frames scale [fail] -bidi-chromium-library › library/tracing.spec.ts › should include interrupted actions [pass] -bidi-chromium-library › library/tracing.spec.ts › should throw when starting with different options [pass] -bidi-chromium-library › library/tracing.spec.ts › should throw when stopping without start [pass] -bidi-chromium-library › library/tracing.spec.ts › should not throw when stopping without start but not exporting [pass] -bidi-chromium-library › library/tracing.spec.ts › should work with multiple chunks [pass] +bidi-chromium-library › library/tracing.spec.ts › should collect trace with resources, but no js [timeout] +bidi-chromium-library › library/tracing.spec.ts › should collect two traces [pass] +bidi-chromium-library › library/tracing.spec.ts › should exclude internal pages [pass] bidi-chromium-library › library/tracing.spec.ts › should export trace concurrently to second navigation [fail] -bidi-chromium-library › library/tracing.spec.ts › should not hang for clicks that open dialogs [pass] -bidi-chromium-library › library/tracing.spec.ts › should ignore iframes in head [pass] +bidi-chromium-library › library/tracing.spec.ts › should flush console events on tracing stop [pass] bidi-chromium-library › library/tracing.spec.ts › should hide internal stack frames [pass] bidi-chromium-library › library/tracing.spec.ts › should hide internal stack frames in expect [pass] +bidi-chromium-library › library/tracing.spec.ts › should ignore iframes in head [pass] +bidi-chromium-library › library/tracing.spec.ts › should include context API requests [pass] +bidi-chromium-library › library/tracing.spec.ts › should include interrupted actions [pass] +bidi-chromium-library › library/tracing.spec.ts › should not collect snapshots by default [pass] +bidi-chromium-library › library/tracing.spec.ts › should not crash when browser closes mid-trace [pass] +bidi-chromium-library › library/tracing.spec.ts › should not emit after w/o before [pass] +bidi-chromium-library › library/tracing.spec.ts › should not flush console events [pass] +bidi-chromium-library › library/tracing.spec.ts › should not hang for clicks that open dialogs [pass] +bidi-chromium-library › library/tracing.spec.ts › should not include buffers in the trace [fail] +bidi-chromium-library › library/tracing.spec.ts › should not include trace resources from the previous chunks [fail] +bidi-chromium-library › library/tracing.spec.ts › should not stall on dialogs [pass] +bidi-chromium-library › library/tracing.spec.ts › should not throw when stopping without start but not exporting [pass] +bidi-chromium-library › library/tracing.spec.ts › should overwrite existing file [fail] +bidi-chromium-library › library/tracing.spec.ts › should produce screencast frames crop [fail] +bidi-chromium-library › library/tracing.spec.ts › should produce screencast frames fit [fail] +bidi-chromium-library › library/tracing.spec.ts › should produce screencast frames scale [fail] bidi-chromium-library › library/tracing.spec.ts › should record global request trace [pass] +bidi-chromium-library › library/tracing.spec.ts › should record network failures [fail] +bidi-chromium-library › library/tracing.spec.ts › should respect tracesDir and name [fail] bidi-chromium-library › library/tracing.spec.ts › should store global request traces separately [pass] bidi-chromium-library › library/tracing.spec.ts › should store postData for global request [pass] -bidi-chromium-library › library/tracing.spec.ts › should not flush console events [pass] -bidi-chromium-library › library/tracing.spec.ts › should flush console events on tracing stop [pass] -bidi-chromium-library › library/tracing.spec.ts › should not emit after w/o before [pass] +bidi-chromium-library › library/tracing.spec.ts › should survive browser.close with auto-created traces dir [pass] +bidi-chromium-library › library/tracing.spec.ts › should throw when starting with different options [pass] +bidi-chromium-library › library/tracing.spec.ts › should throw when stopping without start [pass] +bidi-chromium-library › library/tracing.spec.ts › should use the correct apiName for event driven callbacks [fail] +bidi-chromium-library › library/tracing.spec.ts › should work with multiple chunks [pass] +bidi-chromium-library › library/unroute-behavior.spec.ts › context.close should not wait for active route handlers on the owned pages [fail] bidi-chromium-library › library/unroute-behavior.spec.ts › context.unroute should not wait for pending handlers to complete [timeout] bidi-chromium-library › library/unroute-behavior.spec.ts › context.unrouteAll removes all handlers [pass] -bidi-chromium-library › library/unroute-behavior.spec.ts › context.unrouteAll should wait for pending handlers to complete [timeout] bidi-chromium-library › library/unroute-behavior.spec.ts › context.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [timeout] +bidi-chromium-library › library/unroute-behavior.spec.ts › context.unrouteAll should wait for pending handlers to complete [timeout] +bidi-chromium-library › library/unroute-behavior.spec.ts › page.close does not wait for active route handlers [fail] bidi-chromium-library › library/unroute-behavior.spec.ts › page.close should not wait for active route handlers on the owning context [fail] -bidi-chromium-library › library/unroute-behavior.spec.ts › context.close should not wait for active route handlers on the owned pages [fail] bidi-chromium-library › library/unroute-behavior.spec.ts › page.unroute should not wait for pending handlers to complete [fail] bidi-chromium-library › library/unroute-behavior.spec.ts › page.unrouteAll removes all routes [fail] -bidi-chromium-library › library/unroute-behavior.spec.ts › page.unrouteAll should wait for pending handlers to complete [fail] bidi-chromium-library › library/unroute-behavior.spec.ts › page.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [fail] -bidi-chromium-library › library/unroute-behavior.spec.ts › page.close does not wait for active route handlers [fail] +bidi-chromium-library › library/unroute-behavior.spec.ts › page.unrouteAll should wait for pending handlers to complete [fail] bidi-chromium-library › library/unroute-behavior.spec.ts › route.continue should not throw if page has been closed [fail] bidi-chromium-library › library/unroute-behavior.spec.ts › route.fallback should not throw if page has been closed [fail] bidi-chromium-library › library/unroute-behavior.spec.ts › route.fulfill should not throw if page has been closed [fail] -bidi-chromium-library › library/video.spec.ts › screencast › videoSize should require videosPath [pass] -bidi-chromium-library › library/video.spec.ts › screencast › should work with old options [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should throw without recordVideo.dir [pass] -bidi-chromium-library › library/video.spec.ts › screencast › should capture static page [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should continue recording main page after popup closes [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should expose video path [timeout] bidi-chromium-library › library/video.spec.ts › screencast › saveAs should throw when no video frames [pass] -bidi-chromium-library › library/video.spec.ts › screencast › should delete video [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should expose video path blank page [timeout] -bidi-chromium-library › library/video.spec.ts › screencast › should work with weird screen resolution [timeout] -bidi-chromium-library › library/video.spec.ts › screencast › should work with relative path for recordVideo.dir [timeout] -bidi-chromium-library › library/video.spec.ts › screencast › should expose video path blank popup [timeout] -bidi-chromium-library › library/video.spec.ts › screencast › should capture navigation [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should capture css transformation [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should work for popups [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should scale frames down to the requested size [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should use viewport scaled down to fit into 800x800 as default size [fail] bidi-chromium-library › library/video.spec.ts › screencast › should be 800x450 by default [fail] bidi-chromium-library › library/video.spec.ts › screencast › should be 800x600 with null viewport [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should capture static page in persistent context @smoke [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should emulate an iphone [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should throw on browser close [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should throw if browser dies [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should wait for video to finish if page was closed [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should not create video for internal pages [unknown] +bidi-chromium-library › library/video.spec.ts › screencast › should capture css transformation [fail] bidi-chromium-library › library/video.spec.ts › screencast › should capture full viewport [fail] bidi-chromium-library › library/video.spec.ts › screencast › should capture full viewport on hidpi [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should capture navigation [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should capture static page [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should capture static page in persistent context @smoke [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should continue recording main page after popup closes [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should delete video [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should emulate an iphone [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should expose video path [timeout] +bidi-chromium-library › library/video.spec.ts › screencast › should expose video path blank page [timeout] +bidi-chromium-library › library/video.spec.ts › screencast › should expose video path blank popup [timeout] +bidi-chromium-library › library/video.spec.ts › screencast › should not create video for internal pages [unknown] +bidi-chromium-library › library/video.spec.ts › screencast › should scale frames down to the requested size [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should throw if browser dies [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should throw on browser close [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should throw without recordVideo.dir [pass] +bidi-chromium-library › library/video.spec.ts › screencast › should use viewport scaled down to fit into 800x800 as default size [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should wait for video to finish if page was closed [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should work for popups [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should work with old options [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should work with relative path for recordVideo.dir [timeout] bidi-chromium-library › library/video.spec.ts › screencast › should work with video+trace [fail] +bidi-chromium-library › library/video.spec.ts › screencast › should work with weird screen resolution [timeout] +bidi-chromium-library › library/video.spec.ts › screencast › videoSize should require videosPath [pass] bidi-chromium-library › library/video.spec.ts › should saveAs video [fail] -bidi-chromium-library › library/web-socket.spec.ts › should work @smoke [pass] +bidi-chromium-library › library/web-socket.spec.ts › should emit binary frame events [timeout] bidi-chromium-library › library/web-socket.spec.ts › should emit close events [timeout] +bidi-chromium-library › library/web-socket.spec.ts › should emit error [timeout] bidi-chromium-library › library/web-socket.spec.ts › should emit frame events [timeout] bidi-chromium-library › library/web-socket.spec.ts › should filter out the close events when the server closes with a message [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should pass self as argument to close event [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should emit binary frame events [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should emit error [timeout] bidi-chromium-library › library/web-socket.spec.ts › should not have stray error events [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should reject waitForEvent on socket close [timeout] +bidi-chromium-library › library/web-socket.spec.ts › should pass self as argument to close event [timeout] bidi-chromium-library › library/web-socket.spec.ts › should reject waitForEvent on page close [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should turn off when offline [unknown] \ No newline at end of file +bidi-chromium-library › library/web-socket.spec.ts › should reject waitForEvent on socket close [timeout] +bidi-chromium-library › library/web-socket.spec.ts › should turn off when offline [unknown] +bidi-chromium-library › library/web-socket.spec.ts › should work @smoke [pass] \ No newline at end of file diff --git a/tests/bidi/expectations/bidi-chromium-page.txt b/tests/bidi/expectations/bidi-chromium-page.txt index dc35691964..14d77dd0ab 100644 --- a/tests/bidi/expectations/bidi-chromium-page.txt +++ b/tests/bidi/expectations/bidi-chromium-page.txt @@ -1690,277 +1690,277 @@ bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with commi bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with history.pushState() [pass] bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with history.replaceState() [pass] bidi-chromium-page › page/page-wait-for-url.spec.ts › should work with url match for same document navigations [pass] -bidi-chromium-page › page/queryselector.spec.ts › $$ should work with bogus Array.from [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should auto-detect css selector [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should auto-detect text selector [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should auto-detect xpath selector [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should auto-detect xpath selector starting with .. [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should auto-detect xpath selector with starting parenthesis [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should query existing element with css selector @smoke [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should query existing element with text selector [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should query existing element with xpath selector [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should query existing elements [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should return empty array if nothing is found [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should return null for non-existing element [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should support >> syntax [unknown] -bidi-chromium-page › page/queryselector.spec.ts › should throw for non-string selector [unknown] -bidi-chromium-page › page/queryselector.spec.ts › xpath should query existing element [unknown] -bidi-chromium-page › page/queryselector.spec.ts › xpath should return empty array for non-existing element [unknown] -bidi-chromium-page › page/queryselector.spec.ts › xpath should return multiple elements [unknown] -bidi-chromium-page › page/retarget.spec.ts › check retargeting [unknown] -bidi-chromium-page › page/retarget.spec.ts › direct actions retargeting [unknown] -bidi-chromium-page › page/retarget.spec.ts › editable retargeting [unknown] -bidi-chromium-page › page/retarget.spec.ts › element state checks should work as expected for label with zero-sized input [unknown] -bidi-chromium-page › page/retarget.spec.ts › enabled/disabled retargeting [unknown] -bidi-chromium-page › page/retarget.spec.ts › input value retargeting [unknown] -bidi-chromium-page › page/retarget.spec.ts › select options retargeting [unknown] -bidi-chromium-page › page/retarget.spec.ts › selection retargeting [unknown] -bidi-chromium-page › page/retarget.spec.ts › setInputFiles should work with label [unknown] -bidi-chromium-page › page/retarget.spec.ts › should check the box outside shadow dom label [unknown] -bidi-chromium-page › page/retarget.spec.ts › should not retarget anchor into parent label [unknown] -bidi-chromium-page › page/retarget.spec.ts › should wait for enclosing button with a disabled fieldset [unknown] -bidi-chromium-page › page/retarget.spec.ts › should wait for enclosing disabled button [unknown] -bidi-chromium-page › page/retarget.spec.ts › should wait for enclosing enabled button [unknown] -bidi-chromium-page › page/retarget.spec.ts › visible/hidden retargeting [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › css on the handle should be relative [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should absolutize relative selectors [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should keep dom order with comma separated list [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should not match root after >> [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should return multiple captures for the same node [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should return multiple captures when going up the hierarchy [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work for open shadow roots [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with * [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with + [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with :has [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with :is [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with :not [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with :nth-child [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with :nth-child(of) notation with nested functions [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with :scope [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with :scope and class [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with > combinator and spaces [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with attribute selectors [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with comma inside text [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with comma separated list [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with comma separated list in various positions [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with large DOM @smoke [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with numerical id [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with spaces in :nth-child and :not [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with wrong-case id [unknown] -bidi-chromium-page › page/selectors-css.spec.ts › should work with ~ [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › $ should not wait for frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › $$ should not wait for frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › $$eval should throw for missing frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › $eval should throw for missing frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › click should survive frame reattach [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › click should survive iframe navigation [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › click should survive navigation [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should capture after the enter-frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should click in lazy iframe [unknown] +bidi-chromium-page › page/queryselector.spec.ts › $$ should work with bogus Array.from [fail] +bidi-chromium-page › page/queryselector.spec.ts › should auto-detect css selector [pass] +bidi-chromium-page › page/queryselector.spec.ts › should auto-detect text selector [pass] +bidi-chromium-page › page/queryselector.spec.ts › should auto-detect xpath selector [pass] +bidi-chromium-page › page/queryselector.spec.ts › should auto-detect xpath selector starting with .. [pass] +bidi-chromium-page › page/queryselector.spec.ts › should auto-detect xpath selector with starting parenthesis [pass] +bidi-chromium-page › page/queryselector.spec.ts › should query existing element with css selector @smoke [pass] +bidi-chromium-page › page/queryselector.spec.ts › should query existing element with text selector [pass] +bidi-chromium-page › page/queryselector.spec.ts › should query existing element with xpath selector [pass] +bidi-chromium-page › page/queryselector.spec.ts › should query existing elements [fail] +bidi-chromium-page › page/queryselector.spec.ts › should return empty array if nothing is found [fail] +bidi-chromium-page › page/queryselector.spec.ts › should return null for non-existing element [pass] +bidi-chromium-page › page/queryselector.spec.ts › should support >> syntax [pass] +bidi-chromium-page › page/queryselector.spec.ts › should throw for non-string selector [pass] +bidi-chromium-page › page/queryselector.spec.ts › xpath should query existing element [fail] +bidi-chromium-page › page/queryselector.spec.ts › xpath should return empty array for non-existing element [fail] +bidi-chromium-page › page/queryselector.spec.ts › xpath should return multiple elements [fail] +bidi-chromium-page › page/retarget.spec.ts › check retargeting [pass] +bidi-chromium-page › page/retarget.spec.ts › direct actions retargeting [pass] +bidi-chromium-page › page/retarget.spec.ts › editable retargeting [pass] +bidi-chromium-page › page/retarget.spec.ts › element state checks should work as expected for label with zero-sized input [pass] +bidi-chromium-page › page/retarget.spec.ts › enabled/disabled retargeting [pass] +bidi-chromium-page › page/retarget.spec.ts › input value retargeting [pass] +bidi-chromium-page › page/retarget.spec.ts › select options retargeting [pass] +bidi-chromium-page › page/retarget.spec.ts › selection retargeting [pass] +bidi-chromium-page › page/retarget.spec.ts › setInputFiles should work with label [timeout] +bidi-chromium-page › page/retarget.spec.ts › should check the box outside shadow dom label [pass] +bidi-chromium-page › page/retarget.spec.ts › should not retarget anchor into parent label [pass] +bidi-chromium-page › page/retarget.spec.ts › should wait for enclosing button with a disabled fieldset [pass] +bidi-chromium-page › page/retarget.spec.ts › should wait for enclosing disabled button [pass] +bidi-chromium-page › page/retarget.spec.ts › should wait for enclosing enabled button [pass] +bidi-chromium-page › page/retarget.spec.ts › visible/hidden retargeting [pass] +bidi-chromium-page › page/selectors-css.spec.ts › css on the handle should be relative [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should absolutize relative selectors [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should keep dom order with comma separated list [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should not match root after >> [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should return multiple captures for the same node [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should return multiple captures when going up the hierarchy [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work for open shadow roots [fail] +bidi-chromium-page › page/selectors-css.spec.ts › should work with * [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with + [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with :has [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with :is [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with :not [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with :nth-child [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with :nth-child(of) notation with nested functions [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with :scope [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with :scope and class [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with > combinator and spaces [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with attribute selectors [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with comma inside text [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with comma separated list [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with comma separated list in various positions [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with large DOM @smoke [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with numerical id [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with spaces in :nth-child and :not [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with wrong-case id [pass] +bidi-chromium-page › page/selectors-css.spec.ts › should work with ~ [pass] +bidi-chromium-page › page/selectors-frame.spec.ts › $ should not wait for frame [pass] +bidi-chromium-page › page/selectors-frame.spec.ts › $$ should not wait for frame [pass] +bidi-chromium-page › page/selectors-frame.spec.ts › $$eval should throw for missing frame [pass] +bidi-chromium-page › page/selectors-frame.spec.ts › $eval should throw for missing frame [pass] +bidi-chromium-page › page/selectors-frame.spec.ts › click should survive frame reattach [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › click should survive iframe navigation [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › click should survive navigation [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should capture after the enter-frame [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should click in lazy iframe [fail] bidi-chromium-page › page/selectors-frame.spec.ts › should fail if element removed while waiting on element handle [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should non work for non-frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should not allow capturing before enter-frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should not allow dangling enter-frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should not allow leading enter-frame [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for $ and $$ [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for $ and $$ (handle) [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for $$eval [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for $$eval (handle) [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for $eval [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for $eval (handle) [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for iframe (handle) [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for iframe @smoke [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for nested iframe [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › should work for nested iframe (handle) [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › waitFor should survive frame reattach [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › waitForSelector should survive frame reattach (handle) [unknown] -bidi-chromium-page › page/selectors-frame.spec.ts › waitForSelector should survive iframe navigation (handle) [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getBy escaping [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByAltText should work [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should ignore empty aria-label [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should prioritize aria-labelledby over aria-label [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should prioritize aria-labelledby over native label [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with ancestor label and for [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with ancestor label and multiple controls [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with aria-label [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with aria-labelledby [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with multiply-labelled input [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with nested elements [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByPlaceholder should work [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByRole escaping [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId should escape id [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId should work [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId should work for regex [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId with custom testId should work [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByText should work [unknown] -bidi-chromium-page › page/selectors-get-by.spec.ts › getByTitle should work [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › chaining should work with large DOM @smoke [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › data-testid on the handle should be relative [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should click on links in shadow dom [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should escape the scope with >> [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should print original xpath in error [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should properly determine visibility of display:contents elements [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work for open shadow roots [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with :nth-match [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with :visible [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with >> visible= [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:and= [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:chain= [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:has-not= [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:has= [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:or= [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with layout selectors [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with nth= [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with pipe in xpath [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › should work with strict mode and chaining [unknown] -bidi-chromium-page › page/selectors-misc.spec.ts › xpath should be relative [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should compose [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should exact match by props [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should not crash when there is no match [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should partially match by props [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should query by props combinations [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should support all string operators [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should support nested react trees [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should support regex [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should support truthy querying [unknown] +bidi-chromium-page › page/selectors-frame.spec.ts › should non work for non-frame [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should not allow capturing before enter-frame [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should not allow dangling enter-frame [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should not allow leading enter-frame [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for $ and $$ [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for $ and $$ (handle) [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for $$eval [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for $$eval (handle) [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for $eval [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for $eval (handle) [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for iframe (handle) [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for iframe @smoke [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for nested iframe [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › should work for nested iframe (handle) [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › waitFor should survive frame reattach [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › waitForSelector should survive frame reattach (handle) [fail] +bidi-chromium-page › page/selectors-frame.spec.ts › waitForSelector should survive iframe navigation (handle) [fail] +bidi-chromium-page › page/selectors-get-by.spec.ts › getBy escaping [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByAltText should work [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should ignore empty aria-label [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should prioritize aria-labelledby over aria-label [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should prioritize aria-labelledby over native label [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with ancestor label and for [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with ancestor label and multiple controls [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with aria-label [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with aria-labelledby [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with multiply-labelled input [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByLabel should work with nested elements [fail] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByPlaceholder should work [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByRole escaping [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId should escape id [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId should work [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId should work for regex [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByTestId with custom testId should work [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByText should work [pass] +bidi-chromium-page › page/selectors-get-by.spec.ts › getByTitle should work [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › chaining should work with large DOM @smoke [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › data-testid on the handle should be relative [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should click on links in shadow dom [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should escape the scope with >> [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should print original xpath in error [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should properly determine visibility of display:contents elements [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should work for open shadow roots [fail] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with :nth-match [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with :visible [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with >> visible= [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:and= [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:chain= [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:has-not= [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:has= [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with internal:or= [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with layout selectors [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with nth= [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with pipe in xpath [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › should work with strict mode and chaining [pass] +bidi-chromium-page › page/selectors-misc.spec.ts › xpath should be relative [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should compose [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should exact match by props [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should not crash when there is no match [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should partially match by props [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should query by props combinations [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should support all string operators [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should support nested react trees [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should support regex [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should support truthy querying [pass] bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with multi-root elements (fragments) [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with multiroot react [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with multiroot react after unmount [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with multiroot react inside shadow DOM [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with multiroot react [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with multiroot react after unmount [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with multiroot react inside shadow DOM [pass] bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with react memo [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with single-root elements @smoke [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should compose [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should exact match by props [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should not crash when there is no match [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should partially match by props [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should query by props combinations [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should support all string operators [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should support nested react trees [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should support regex [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should support truthy querying [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multi-root elements (fragments) [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multiroot react [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multiroot react after unmount [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multiroot react inside shadow DOM [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react15 › should work with single-root elements @smoke [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should compose [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should exact match by props [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should not crash when there is no match [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should partially match by props [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should query by props combinations [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should support all string operators [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should support nested react trees [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should support regex [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should support truthy querying [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multi-root elements (fragments) [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multiroot react [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multiroot react after unmount [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with multiroot react inside shadow DOM [pass] bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with react memo [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with single-root elements @smoke [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should compose [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should exact match by props [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should not crash when there is no match [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should partially match by props [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should query by props combinations [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should support all string operators [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should support nested react trees [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should support regex [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should support truthy querying [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multi-root elements (fragments) [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multiroot react [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multiroot react after unmount [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multiroot react inside shadow DOM [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with react memo [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with single-root elements @smoke [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should compose [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should exact match by props [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should not crash when there is no match [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should partially match by props [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should query by props combinations [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should support all string operators [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should support nested react trees [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should support regex [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should support truthy querying [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multi-root elements (fragments) [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multiroot react [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multiroot react after unmount [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multiroot react inside shadow DOM [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with react memo [unknown] -bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with single-root elements @smoke [unknown] -bidi-chromium-page › page/selectors-register.spec.ts › getAttribute should be atomic [unknown] -bidi-chromium-page › page/selectors-register.spec.ts › innerHTML should be atomic [unknown] -bidi-chromium-page › page/selectors-register.spec.ts › innerText should be atomic [unknown] -bidi-chromium-page › page/selectors-register.spec.ts › isVisible should be atomic [unknown] -bidi-chromium-page › page/selectors-register.spec.ts › textContent should be atomic [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › errors [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › hidden with shadow dom slots [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should detect roles [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should filter hidden, unless explicitly asked for [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should not match scope by default [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support checked [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support disabled [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support expanded [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support level [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support name [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support output accessible name [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support pressed [unknown] -bidi-chromium-page › page/selectors-role.spec.ts › should support selected [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › hasText and internal:text should match full node text in strict mode [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should be case sensitive if quotes are specified [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should clear caches [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should match input[type=button|submit] [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should match root after >> [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should match root after >> with * [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should prioritize light dom over shadow dom in the same parent [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should search for a substring without quotes [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should skip head, script and style [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should support empty string [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should waitForSelector with distributed elements [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work @smoke [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work across nodes [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work for open shadow roots [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work with :has-text [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work with :text [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work with large DOM [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work with leading and trailing spaces [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work with paired quotes in the middle of selector [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work with text nodes in quoted mode [unknown] -bidi-chromium-page › page/selectors-text.spec.ts › should work with unpaired quotes when not at the start [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should compose [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should exact match by props [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should not crash when there is no match [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should partially match by props [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should query by props combinations [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should support all string operators [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should support nested vue trees [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should support regex [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should support truthy querying [unknown] +bidi-chromium-page › page/selectors-react.spec.ts › react16 › should work with single-root elements @smoke [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should compose [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should exact match by props [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should not crash when there is no match [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should partially match by props [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should query by props combinations [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should support all string operators [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should support nested react trees [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should support regex [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should support truthy querying [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multi-root elements (fragments) [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multiroot react [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multiroot react after unmount [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with multiroot react inside shadow DOM [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with react memo [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react17 › should work with single-root elements @smoke [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should compose [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should exact match by props [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should not crash when there is no match [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should partially match by props [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should query by props combinations [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should support all string operators [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should support nested react trees [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should support regex [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should support truthy querying [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multi-root elements (fragments) [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multiroot react [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multiroot react after unmount [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with multiroot react inside shadow DOM [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with react memo [pass] +bidi-chromium-page › page/selectors-react.spec.ts › react18 › should work with single-root elements @smoke [pass] +bidi-chromium-page › page/selectors-register.spec.ts › getAttribute should be atomic [pass] +bidi-chromium-page › page/selectors-register.spec.ts › innerHTML should be atomic [pass] +bidi-chromium-page › page/selectors-register.spec.ts › innerText should be atomic [pass] +bidi-chromium-page › page/selectors-register.spec.ts › isVisible should be atomic [pass] +bidi-chromium-page › page/selectors-register.spec.ts › textContent should be atomic [pass] +bidi-chromium-page › page/selectors-role.spec.ts › errors [pass] +bidi-chromium-page › page/selectors-role.spec.ts › hidden with shadow dom slots [pass] +bidi-chromium-page › page/selectors-role.spec.ts › should detect roles [pass] +bidi-chromium-page › page/selectors-role.spec.ts › should filter hidden, unless explicitly asked for [pass] +bidi-chromium-page › page/selectors-role.spec.ts › should not match scope by default [pass] +bidi-chromium-page › page/selectors-role.spec.ts › should support checked [pass] +bidi-chromium-page › page/selectors-role.spec.ts › should support disabled [pass] +bidi-chromium-page › page/selectors-role.spec.ts › should support expanded [pass] +bidi-chromium-page › page/selectors-role.spec.ts › should support level [pass] +bidi-chromium-page › page/selectors-role.spec.ts › should support name [pass] +bidi-chromium-page › page/selectors-role.spec.ts › should support output accessible name [pass] +bidi-chromium-page › page/selectors-role.spec.ts › should support pressed [pass] +bidi-chromium-page › page/selectors-role.spec.ts › should support selected [pass] +bidi-chromium-page › page/selectors-text.spec.ts › hasText and internal:text should match full node text in strict mode [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should be case sensitive if quotes are specified [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should clear caches [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should match input[type=button|submit] [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should match root after >> [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should match root after >> with * [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should prioritize light dom over shadow dom in the same parent [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should search for a substring without quotes [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should skip head, script and style [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should support empty string [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should waitForSelector with distributed elements [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should work @smoke [fail] +bidi-chromium-page › page/selectors-text.spec.ts › should work across nodes [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should work for open shadow roots [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should work with :has-text [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should work with :text [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should work with large DOM [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should work with leading and trailing spaces [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should work with paired quotes in the middle of selector [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should work with text nodes in quoted mode [pass] +bidi-chromium-page › page/selectors-text.spec.ts › should work with unpaired quotes when not at the start [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should compose [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should exact match by props [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should not crash when there is no match [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should partially match by props [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should query by props combinations [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should support all string operators [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should support nested vue trees [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should support regex [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should support truthy querying [pass] bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should work with multi-root elements (fragments) [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should work with multiroot react [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should work with multiroot vue inside shadow DOM [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should work with single-root elements @smoke [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should compose [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should exact match by props [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should not crash when there is no match [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should partially match by props [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should query by props combinations [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should support all string operators [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should support nested vue trees [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should support regex [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should support truthy querying [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with multi-root elements (fragments) [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with multiroot react [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with multiroot vue inside shadow DOM [unknown] -bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with single-root elements @smoke [unknown] -bidi-chromium-page › page/wheel.spec.ts › should dispatch wheel event on svg element [unknown] -bidi-chromium-page › page/wheel.spec.ts › should dispatch wheel events @smoke [unknown] -bidi-chromium-page › page/wheel.spec.ts › should dispatch wheel events after context menu was opened [unknown] -bidi-chromium-page › page/wheel.spec.ts › should dispatch wheel events after popup was opened @smoke [unknown] -bidi-chromium-page › page/wheel.spec.ts › should scroll horizontally [unknown] -bidi-chromium-page › page/wheel.spec.ts › should scroll when nobody is listening [unknown] -bidi-chromium-page › page/wheel.spec.ts › should set the modifiers [unknown] -bidi-chromium-page › page/wheel.spec.ts › should work when the event is canceled [unknown] -bidi-chromium-page › page/workers.spec.ts › Page.workers @smoke [unknown] -bidi-chromium-page › page/workers.spec.ts › should attribute network activity for worker inside iframe to the iframe [unknown] -bidi-chromium-page › page/workers.spec.ts › should clear upon cross-process navigation [unknown] -bidi-chromium-page › page/workers.spec.ts › should clear upon navigation [unknown] -bidi-chromium-page › page/workers.spec.ts › should dispatch console messages when page has workers [unknown] -bidi-chromium-page › page/workers.spec.ts › should emit created and destroyed events [unknown] -bidi-chromium-page › page/workers.spec.ts › should evaluate [unknown] -bidi-chromium-page › page/workers.spec.ts › should have JSHandles for console logs [unknown] -bidi-chromium-page › page/workers.spec.ts › should not report console logs from workers twice [unknown] -bidi-chromium-page › page/workers.spec.ts › should report and intercept network from nested worker [unknown] -bidi-chromium-page › page/workers.spec.ts › should report console logs [unknown] -bidi-chromium-page › page/workers.spec.ts › should report errors [unknown] -bidi-chromium-page › page/workers.spec.ts › should report network activity [unknown] -bidi-chromium-page › page/workers.spec.ts › should report network activity on worker creation [unknown] -bidi-chromium-page › page/workers.spec.ts › should support extra http headers [unknown] -bidi-chromium-page › page/workers.spec.ts › should support offline [unknown] \ No newline at end of file +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should work with multiroot react [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should work with multiroot vue inside shadow DOM [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue2 › should work with single-root elements @smoke [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should compose [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should exact match by props [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should not crash when there is no match [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should partially match by props [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should query by props combinations [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should support all string operators [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should support nested vue trees [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should support regex [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should support truthy querying [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with multi-root elements (fragments) [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with multiroot react [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with multiroot vue inside shadow DOM [pass] +bidi-chromium-page › page/selectors-vue.spec.ts › vue3 › should work with single-root elements @smoke [pass] +bidi-chromium-page › page/wheel.spec.ts › should dispatch wheel event on svg element [pass] +bidi-chromium-page › page/wheel.spec.ts › should dispatch wheel events @smoke [pass] +bidi-chromium-page › page/wheel.spec.ts › should dispatch wheel events after context menu was opened [pass] +bidi-chromium-page › page/wheel.spec.ts › should dispatch wheel events after popup was opened @smoke [pass] +bidi-chromium-page › page/wheel.spec.ts › should scroll horizontally [pass] +bidi-chromium-page › page/wheel.spec.ts › should scroll when nobody is listening [pass] +bidi-chromium-page › page/wheel.spec.ts › should set the modifiers [pass] +bidi-chromium-page › page/wheel.spec.ts › should work when the event is canceled [pass] +bidi-chromium-page › page/workers.spec.ts › Page.workers @smoke [timeout] +bidi-chromium-page › page/workers.spec.ts › should attribute network activity for worker inside iframe to the iframe [timeout] +bidi-chromium-page › page/workers.spec.ts › should clear upon cross-process navigation [timeout] +bidi-chromium-page › page/workers.spec.ts › should clear upon navigation [timeout] +bidi-chromium-page › page/workers.spec.ts › should dispatch console messages when page has workers [timeout] +bidi-chromium-page › page/workers.spec.ts › should emit created and destroyed events [timeout] +bidi-chromium-page › page/workers.spec.ts › should evaluate [timeout] +bidi-chromium-page › page/workers.spec.ts › should have JSHandles for console logs [timeout] +bidi-chromium-page › page/workers.spec.ts › should not report console logs from workers twice [timeout] +bidi-chromium-page › page/workers.spec.ts › should report and intercept network from nested worker [fail] +bidi-chromium-page › page/workers.spec.ts › should report console logs [timeout] +bidi-chromium-page › page/workers.spec.ts › should report errors [timeout] +bidi-chromium-page › page/workers.spec.ts › should report network activity [timeout] +bidi-chromium-page › page/workers.spec.ts › should report network activity on worker creation [timeout] +bidi-chromium-page › page/workers.spec.ts › should support extra http headers [timeout] +bidi-chromium-page › page/workers.spec.ts › should support offline [timeout] \ No newline at end of file diff --git a/tests/bidi/expectations/bidi-firefox-beta-library.txt b/tests/bidi/expectations/bidi-firefox-beta-library.txt index 070ee241c1..65b898ac7d 100644 --- a/tests/bidi/expectations/bidi-firefox-beta-library.txt +++ b/tests/bidi/expectations/bidi-firefox-beta-library.txt @@ -592,7 +592,7 @@ bidi-firefox-beta-library › library/capabilities.spec.ts › service worker sh bidi-firefox-beta-library › library/capabilities.spec.ts › service worker should register in an iframe [pass] bidi-firefox-beta-library › library/capabilities.spec.ts › serviceWorker should intercept document request [pass] bidi-firefox-beta-library › library/capabilities.spec.ts › should not crash on page with mp4 @smoke [fail] -bidi-firefox-beta-library › library/capabilities.spec.ts › should not crash on showDirectoryPicker [unknown] +bidi-firefox-beta-library › library/capabilities.spec.ts › should not crash on showDirectoryPicker [flaky] bidi-firefox-beta-library › library/capabilities.spec.ts › should not crash on storage.getDirectory() [pass] bidi-firefox-beta-library › library/capabilities.spec.ts › should play audio @smoke [fail] bidi-firefox-beta-library › library/capabilities.spec.ts › should play video @smoke [pass] diff --git a/tests/bidi/expectations/bidi-firefox-beta-page.txt b/tests/bidi/expectations/bidi-firefox-beta-page.txt index 10cc403562..b9e4bd9bd7 100644 --- a/tests/bidi/expectations/bidi-firefox-beta-page.txt +++ b/tests/bidi/expectations/bidi-firefox-beta-page.txt @@ -1035,7 +1035,7 @@ bidi-firefox-beta-page › page/page-focus.spec.ts › should emit blur event [f bidi-firefox-beta-page › page/page-focus.spec.ts › should emit focus event [fail] bidi-firefox-beta-page › page/page-focus.spec.ts › should traverse focus [fail] bidi-firefox-beta-page › page/page-focus.spec.ts › should traverse focus in all directions [fail] -bidi-firefox-beta-page › page/page-focus.spec.ts › should traverse only form elements [unknown] +bidi-firefox-beta-page › page/page-focus.spec.ts › should traverse only form elements [flaky] bidi-firefox-beta-page › page/page-focus.spec.ts › should work @smoke [fail] bidi-firefox-beta-page › page/page-goto.spec.ts › js redirect overrides url bar navigation [pass] bidi-firefox-beta-page › page/page-goto.spec.ts › should be able to navigate to a page controlled by service worker [pass] @@ -1203,7 +1203,7 @@ bidi-firefox-beta-page › page/page-network-request.spec.ts › should get the bidi-firefox-beta-page › page/page-network-request.spec.ts › should get the same headers as the server CORS [fail] bidi-firefox-beta-page › page/page-network-request.spec.ts › should get |undefined| with postData() when there is no post data [pass] bidi-firefox-beta-page › page/page-network-request.spec.ts › should get |undefined| with postDataJSON() when there is no post data [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should handle mixed-content blocked requests [unknown] +bidi-firefox-beta-page › page/page-network-request.spec.ts › should handle mixed-content blocked requests [flaky] bidi-firefox-beta-page › page/page-network-request.spec.ts › should not allow to access frame on popup main request [fail] bidi-firefox-beta-page › page/page-network-request.spec.ts › should not get preflight CORS requests when intercepting [fail] bidi-firefox-beta-page › page/page-network-request.spec.ts › should not return allHeaders() until they are available [fail] @@ -1264,7 +1264,7 @@ bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should work with bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should work with 401 status code [pass] bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should work with 404 status code [pass] bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should work with 500 status code [fail] -bidi-firefox-beta-page › page/page-object-count.spec.ts › should count objects [unknown] +bidi-firefox-beta-page › page/page-object-count.spec.ts › should count objects [flaky] bidi-firefox-beta-page › page/page-request-continue.spec.ts › continue should delete headers on redirects [pass] bidi-firefox-beta-page › page/page-request-continue.spec.ts › continue should not change multipart/form-data body [fail] bidi-firefox-beta-page › page/page-request-continue.spec.ts › continue should propagate headers to redirects [pass] @@ -1487,7 +1487,7 @@ bidi-firefox-beta-page › page/page-set-content.spec.ts › content() should th bidi-firefox-beta-page › page/page-set-content.spec.ts › should await resources to load [fail] bidi-firefox-beta-page › page/page-set-content.spec.ts › should respect default navigation timeout [pass] bidi-firefox-beta-page › page/page-set-content.spec.ts › should respect timeout [pass] -bidi-firefox-beta-page › page/page-set-content.spec.ts › should return empty content there is no iframe src [unknown] +bidi-firefox-beta-page › page/page-set-content.spec.ts › should return empty content there is no iframe src [flaky] bidi-firefox-beta-page › page/page-set-content.spec.ts › should work @smoke [fail] bidi-firefox-beta-page › page/page-set-content.spec.ts › should work fast enough [fail] bidi-firefox-beta-page › page/page-set-content.spec.ts › should work with HTML 4 doctype [fail] @@ -1762,7 +1762,7 @@ bidi-firefox-beta-page › page/selectors-frame.spec.ts › click should survive bidi-firefox-beta-page › page/selectors-frame.spec.ts › click should survive navigation [pass] bidi-firefox-beta-page › page/selectors-frame.spec.ts › should capture after the enter-frame [fail] bidi-firefox-beta-page › page/selectors-frame.spec.ts › should click in lazy iframe [pass] -bidi-firefox-beta-page › page/selectors-frame.spec.ts › should fail if element removed while waiting on element handle [unknown] +bidi-firefox-beta-page › page/selectors-frame.spec.ts › should fail if element removed while waiting on element handle [flaky] bidi-firefox-beta-page › page/selectors-frame.spec.ts › should non work for non-frame [fail] bidi-firefox-beta-page › page/selectors-frame.spec.ts › should not allow capturing before enter-frame [pass] bidi-firefox-beta-page › page/selectors-frame.spec.ts › should not allow dangling enter-frame [pass] @@ -1833,7 +1833,7 @@ bidi-firefox-beta-page › page/selectors-react.spec.ts › react15 › should w bidi-firefox-beta-page › page/selectors-react.spec.ts › react15 › should work with multiroot react [pass] bidi-firefox-beta-page › page/selectors-react.spec.ts › react15 › should work with multiroot react after unmount [pass] bidi-firefox-beta-page › page/selectors-react.spec.ts › react15 › should work with multiroot react inside shadow DOM [pass] -bidi-firefox-beta-page › page/selectors-react.spec.ts › react15 › should work with react memo [unknown] +bidi-firefox-beta-page › page/selectors-react.spec.ts › react15 › should work with react memo [flaky] bidi-firefox-beta-page › page/selectors-react.spec.ts › react15 › should work with single-root elements @smoke [pass] bidi-firefox-beta-page › page/selectors-react.spec.ts › react16 › should compose [pass] bidi-firefox-beta-page › page/selectors-react.spec.ts › react16 › should exact match by props [pass] From d1926e2f9b91e31d73acfb87e564634f55b0dbb2 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Wed, 11 Sep 2024 15:15:10 -0700 Subject: [PATCH 417/498] chore: do not store project name in expectations (#32575) --- tests/bidi/expectationReporter.ts | 3 +- tests/bidi/expectationUtil.ts | 2 +- .../expectations/bidi-chromium-library.txt | 3822 ++++++++-------- .../bidi/expectations/bidi-chromium-page.txt | 3932 ++++++++-------- .../bidi-firefox-beta-library.txt | 3822 ++++++++-------- .../expectations/bidi-firefox-beta-page.txt | 3942 ++++++++--------- 6 files changed, 7762 insertions(+), 7761 deletions(-) diff --git a/tests/bidi/expectationReporter.ts b/tests/bidi/expectationReporter.ts index a4caad9861..a6d31ac1f5 100644 --- a/tests/bidi/expectationReporter.ts +++ b/tests/bidi/expectationReporter.ts @@ -54,7 +54,8 @@ class ExpectationReporter implements Reporter { const expectations = await parseExpectations(project.title); for (const test of project.allTests()) { const outcome = getOutcome(test); - const key = test.titlePath().slice(1).join(' › '); + // Strip root and project names. + const key = test.titlePath().slice(2).join(' › '); if (!expectations.has(key) || expectations.get(key) === 'unknown') expectations.set(key, outcome); } diff --git a/tests/bidi/expectationUtil.ts b/tests/bidi/expectationUtil.ts index 23491d2d91..cdf9b779f2 100644 --- a/tests/bidi/expectationUtil.ts +++ b/tests/bidi/expectationUtil.ts @@ -27,7 +27,7 @@ export async function createSkipTestPredicate(projectName: string): Promise false; const expectationsMap = await parseBidiExpectations(projectName); return (info: TestInfo) => { - const key = [info.project.name, ...info.titlePath].join(' › '); + const key = info.titlePath.join(' › '); const expectation = expectationsMap.get(key); return expectation === 'fail' || expectation === 'timeout'; }; diff --git a/tests/bidi/expectations/bidi-chromium-library.txt b/tests/bidi/expectations/bidi-chromium-library.txt index 54d7b8ebba..13dbf66eb5 100644 --- a/tests/bidi/expectations/bidi-chromium-library.txt +++ b/tests/bidi/expectations/bidi-chromium-library.txt @@ -1,1911 +1,1911 @@ -bidi-chromium-library › library/beforeunload.spec.ts › should access page after beforeunload [timeout] -bidi-chromium-library › library/beforeunload.spec.ts › should be able to navigate away from page with beforeunload [pass] -bidi-chromium-library › library/beforeunload.spec.ts › should close browser with beforeunload page [pass] -bidi-chromium-library › library/beforeunload.spec.ts › should close browsercontext with beforeunload page [pass] -bidi-chromium-library › library/beforeunload.spec.ts › should close page with beforeunload listener [pass] -bidi-chromium-library › library/beforeunload.spec.ts › should not stall on evaluate when dismissing beforeunload [pass] -bidi-chromium-library › library/beforeunload.spec.ts › should run beforeunload if asked for @smoke [timeout] -bidi-chromium-library › library/browser.spec.ts › should create new page @smoke [pass] -bidi-chromium-library › library/browser.spec.ts › should dispatch page.on(close) upon browser.close and reject evaluate [fail] -bidi-chromium-library › library/browser.spec.ts › should return browserType [pass] -bidi-chromium-library › library/browser.spec.ts › should throw upon second create new page [pass] -bidi-chromium-library › library/browser.spec.ts › version should work [fail] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should add cookies with empty value [fail] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should allow unnamed cookies [fail] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should be able to set unsecure cookie for HTTP website [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should default to setting secure cookie for HTTPS websites [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should have |expires| set to |-1| for session cookies [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should isolate cookies between launches [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should isolate cookies in browser contexts [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should isolate persistent cookies [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should isolate send cookie header [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should isolate session cookies [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should not block third party SameSite=None cookies [fail] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should not set a cookie on a data URL page [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should not set a cookie with blank page URL [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should roundtrip cookie [fail] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should send cookie header [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should set a cookie on a different domain [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should set a cookie with a path [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should set cookie with reasonable defaults [fail] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should set cookies for a frame [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should set multiple cookies [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should set secure cookies on secure WebSocket [fail] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should work @smoke [pass] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should work with expires=-1 [fail] -bidi-chromium-library › library/browsercontext-add-cookies.spec.ts › should(not) block third party cookies [pass] -bidi-chromium-library › library/browsercontext-add-init-script.spec.ts › should work with browser context scripts @smoke [pass] -bidi-chromium-library › library/browsercontext-add-init-script.spec.ts › should work with browser context scripts for already created pages [pass] -bidi-chromium-library › library/browsercontext-add-init-script.spec.ts › should work with browser context scripts with a path [pass] -bidi-chromium-library › library/browsercontext-add-init-script.spec.ts › should work without navigation in popup [fail] -bidi-chromium-library › library/browsercontext-add-init-script.spec.ts › should work without navigation, after all bindings [fail] -bidi-chromium-library › library/browsercontext-base-url.spec.ts › should be able to match a URL relative to its given URL with urlMatcher [fail] -bidi-chromium-library › library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browser.newContext is passed to page.goto @smoke [pass] -bidi-chromium-library › library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browser.newPage is passed to page.goto [pass] -bidi-chromium-library › library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browserType.launchPersistentContext is passed to page.goto [fail] -bidi-chromium-library › library/browsercontext-base-url.spec.ts › should construct the URLs correctly when a baseURL with a trailing slash in browser.newPage is passed to page.goto [pass] -bidi-chromium-library › library/browsercontext-base-url.spec.ts › should construct the URLs correctly when a baseURL without a trailing slash in browser.newPage is passed to page.goto [pass] -bidi-chromium-library › library/browsercontext-base-url.spec.ts › should not construct a new URL when valid URLs are passed [pass] -bidi-chromium-library › library/browsercontext-base-url.spec.ts › should not construct a new URL with baseURL when a glob was used [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › close() should abort waitForEvent [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › close() should be callable twice [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › close() should work for empty context [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › default user agent [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › setContent should work after disabling javascript [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should be able to click across browser contexts [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should be able to navigate after disabling javascript [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should close all belonging pages once closing context [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should create new context @smoke [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should disable javascript [fail] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should emulate media in cross-process iframe [fail] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should emulate media in popup [fail] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should emulate navigator.onLine [fail] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should isolate localStorage and cookies @smoke [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should make a copy of default viewport [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should not allow deviceScaleFactor with null viewport [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should not allow isMobile with null viewport [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should not hang on promises after disabling javascript [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should not report frameless pages on error [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should pass self to close event [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should propagate default viewport to the page [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should respect deviceScaleFactor [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should return all of the pages [pass] -bidi-chromium-library › library/browsercontext-basic.spec.ts › should work with offline option [fail] -bidi-chromium-library › library/browsercontext-basic.spec.ts › window.open should use parent tab context [pass] -bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should clear cookies [pass] -bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should isolate cookies when clearing [pass] -bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by domain [fail] -bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by name [fail] -bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by name and domain [fail] -bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by name regex [fail] -bidi-chromium-library › library/browsercontext-clearcookies.spec.ts › should remove cookies by path [fail] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should add cookies with an expiration [pass] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should be able to send third party cookies via an iframe [fail] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should get a cookie @smoke [fail] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should get a non-session cookie [fail] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should get cookies from multiple urls [pass] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should get multiple cookies [fail] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should parse cookie with large Max-Age correctly [fail] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should properly report "Lax" sameSite cookie [pass] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should properly report "Strict" sameSite cookie [pass] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should properly report httpOnly cookie [pass] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should return cookies with empty value [pass] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should return no cookies in pristine browser context [pass] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should return secure cookies based on HTTP(S) protocol [pass] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should support requestStorageAccess [fail] -bidi-chromium-library › library/browsercontext-cookies.spec.ts › should work with subdomain cookie [pass] -bidi-chromium-library › library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching hostname [fail] -bidi-chromium-library › library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching port [fail] -bidi-chromium-library › library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching scheme [fail] -bidi-chromium-library › library/browsercontext-credentials.spec.ts › should fail with wrong credentials [fail] -bidi-chromium-library › library/browsercontext-credentials.spec.ts › should fail without credentials [pass] -bidi-chromium-library › library/browsercontext-credentials.spec.ts › should return resource body [fail] -bidi-chromium-library › library/browsercontext-credentials.spec.ts › should work with correct credentials @smoke [fail] -bidi-chromium-library › library/browsercontext-credentials.spec.ts › should work with correct credentials and matching origin [fail] -bidi-chromium-library › library/browsercontext-credentials.spec.ts › should work with correct credentials and matching origin case insensitive [fail] -bidi-chromium-library › library/browsercontext-credentials.spec.ts › should work with setHTTPCredentials [fail] -bidi-chromium-library › library/browsercontext-csp.spec.ts › should bypass CSP header [fail] -bidi-chromium-library › library/browsercontext-csp.spec.ts › should bypass CSP in iframes as well [fail] -bidi-chromium-library › library/browsercontext-csp.spec.ts › should bypass CSP meta tag @smoke [fail] -bidi-chromium-library › library/browsercontext-csp.spec.ts › should bypass after cross-process navigation [fail] -bidi-chromium-library › library/browsercontext-device.spec.ts › device › should emulate viewport and screen size [fail] -bidi-chromium-library › library/browsercontext-device.spec.ts › device › should emulate viewport without screen size [fail] -bidi-chromium-library › library/browsercontext-device.spec.ts › device › should reset scroll top after a navigation [pass] -bidi-chromium-library › library/browsercontext-device.spec.ts › device › should scroll to a precise position with mobile scale [pass] -bidi-chromium-library › library/browsercontext-device.spec.ts › device › should scroll to click [pass] -bidi-chromium-library › library/browsercontext-device.spec.ts › device › should scroll twice when emulated [pass] -bidi-chromium-library › library/browsercontext-device.spec.ts › device › should support clicking [pass] -bidi-chromium-library › library/browsercontext-device.spec.ts › device › should work @smoke [fail] -bidi-chromium-library › library/browsercontext-dsf.spec.ts › should fetch hidpi assets [pass] -bidi-chromium-library › library/browsercontext-dsf.spec.ts › should fetch lodpi assets @smoke [pass] -bidi-chromium-library › library/browsercontext-events.spec.ts › console event should work @smoke [pass] -bidi-chromium-library › library/browsercontext-events.spec.ts › console event should work in immediately closed popup [timeout] -bidi-chromium-library › library/browsercontext-events.spec.ts › console event should work in popup [pass] -bidi-chromium-library › library/browsercontext-events.spec.ts › console event should work in popup 2 [timeout] -bidi-chromium-library › library/browsercontext-events.spec.ts › dialog event should work @smoke [pass] -bidi-chromium-library › library/browsercontext-events.spec.ts › dialog event should work in immediately closed popup [timeout] -bidi-chromium-library › library/browsercontext-events.spec.ts › dialog event should work in popup [timeout] -bidi-chromium-library › library/browsercontext-events.spec.ts › dialog event should work in popup 2 [pass] -bidi-chromium-library › library/browsercontext-events.spec.ts › dialog event should work with inline script tag [timeout] -bidi-chromium-library › library/browsercontext-events.spec.ts › weberror event should work [timeout] -bidi-chromium-library › library/browsercontext-expose-function.spec.ts › expose binding should work [fail] -bidi-chromium-library › library/browsercontext-expose-function.spec.ts › exposeBindingHandle should work [fail] -bidi-chromium-library › library/browsercontext-expose-function.spec.ts › should be callable from-inside addInitScript [fail] -bidi-chromium-library › library/browsercontext-expose-function.spec.ts › should throw for duplicate registrations [pass] -bidi-chromium-library › library/browsercontext-expose-function.spec.ts › should work [fail] -bidi-chromium-library › library/browsercontext-expose-function.spec.ts › should work with CSP [fail] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail if response content-length header is missing (br) [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with chunked responses (without Content-Length header) [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should support decompression [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail if response content-length header is missing (deflate) [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with chunked responses (without Content-Length header) [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should support decompression [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail if response content-length header is missing (gzip) [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with chunked responses (without Content-Length header) [pass] -bidi-chromium-library › library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should support decompression [pass] -bidi-chromium-library › library/browsercontext-fetch-happy-eyeballs.spec.ts › get should work [pass] -bidi-chromium-library › library/browsercontext-fetch-happy-eyeballs.spec.ts › get should work on request fixture [pass] -bidi-chromium-library › library/browsercontext-fetch-happy-eyeballs.spec.ts › https post should work with ignoreHTTPSErrors option [pass] -bidi-chromium-library › library/browsercontext-fetch-happy-eyeballs.spec.ts › should work with ip6 and port as the host [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › context request should export same storage state as context [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › delete should support failOnStatusCode [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › delete should support params passed as URLSearchParams [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › delete should support params passed as object [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › delete should support params passed as string [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › delete should support post data [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › deleteshould support ignoreHTTPSErrors option [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetch should not throw on long set-cookie value [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetch should support failOnStatusCode [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetch should support params passed as URLSearchParams [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetch should support params passed as object [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetch should support params passed as string [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetch should work [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › fetchshould support ignoreHTTPSErrors option [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › get should support failOnStatusCode [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › get should support params passed as URLSearchParams [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › get should support params passed as object [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › get should support params passed as string [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › get should support post data [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › get should work @smoke [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › getshould support ignoreHTTPSErrors option [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › head should support failOnStatusCode [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › head should support params passed as URLSearchParams [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › head should support params passed as object [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › head should support params passed as string [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › head should support post data [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › headshould support ignoreHTTPSErrors option [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › patch should support failOnStatusCode [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › patch should support params passed as URLSearchParams [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › patch should support params passed as object [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › patch should support params passed as string [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › patch should support post data [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › patchshould support ignoreHTTPSErrors option [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › post should support failOnStatusCode [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › post should support params passed as URLSearchParams [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › post should support params passed as object [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › post should support params passed as string [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › post should support post data [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › postshould support ignoreHTTPSErrors option [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › put should support failOnStatusCode [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › put should support params passed as URLSearchParams [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › put should support params passed as object [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › put should support params passed as string [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › put should support post data [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › putshould support ignoreHTTPSErrors option [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should abort requests when browser context closes [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should accept bool and numeric params [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should add cookies from Set-Cookie header [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should add default headers [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should add default headers to redirects [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should add session cookies to request [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should allow to override default headers [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should dispose [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should dispose when context closes [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should encode to application/json by default [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should follow redirects [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should follow redirects correctly when Location header contains UTF-8 characters [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should handle cookies on redirects [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should inherit ignoreHTTPSErrors from context [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should not add context cookie if cookie header passed as a parameter [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should not hang on a brotli encoded Range request [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should not lose body while handling Set-Cookie header [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should not work after context dispose [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should not work after dispose [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should override request parameters [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should preserve cookie order from Set-Cookie header [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should propagate custom headers with redirects [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should propagate extra http headers with redirects [fail] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should remove cookie with expires far in the past [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should remove cookie with negative max-age [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should resolve url relative to baseURL [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should respect timeout after redirects [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should retry on ECONNRESET [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should return error with wrong credentials [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should return raw headers [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should send content-length [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should send secure cookie over http for localhost [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should serialize data to json regardless of content-type [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should set domain=localhost cookie [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support HTTPCredentials.send for browser.newPage [fail] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support HTTPCredentials.send for newContext [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support SameSite cookie attribute over https [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support a timeout of 0 [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support application/x-www-form-urlencoded [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support brotli compression [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support cookie with empty value [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support deflate compression [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support gzip compression [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support https [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support multipart/form-data [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support multipart/form-data and keep the order [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support multipart/form-data with ReadStream values [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support repeating names in multipart/form-data [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support set-cookie with SameSite and without Secure attribute over HTTP [fail] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should support timeout option [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw informative error on corrupted brotli body [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw informative error on corrupted deflate body [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw informative error on corrupted gzip body [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw nice error on unsupported data type [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw on invalid header value [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw on network error [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw on network error after redirect [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw on network error when sending body [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw on network error when sending body after redirect [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should throw on non-http(s) protocol [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should update host header on redirect [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should work with connectOverCDP [unknown] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should work with http credentials [pass] -bidi-chromium-library › library/browsercontext-fetch.spec.ts › should work with setHTTPCredentials [pass] -bidi-chromium-library › library/browsercontext-har.spec.ts › by default should abort requests not found in har [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › context.unrouteAll should stop context.routeFromHAR [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › fallback:continue should continue requests on bad har [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › fallback:continue should continue when not found in har [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › newPage should fulfill from har, matching the method and following redirects [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › page.unrouteAll should stop page.routeFromHAR [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should apply overrides before routing from har [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should change document URL after redirected navigation [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should change document URL after redirected navigation on click [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should context.routeFromHAR, matching the method and following redirects [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should disambiguate by header [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should fulfill from har with content in a file [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should goBack to redirected navigation [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should goForward to redirected navigation [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should ignore aborted requests [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should ignore boundary when matching multipart/form-data body [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should only context.routeFromHAR requests matching url filter [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should only handle requests matching url filter [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should only page.routeFromHAR requests matching url filter [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should page.routeFromHAR, matching the method and following redirects [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should produce extracted zip [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should record overridden requests to har [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should reload redirected navigation [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should round-trip extracted har.zip [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should round-trip har with postData [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should round-trip har.zip [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should support regex filter [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should update extracted har.zip for page [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should update har.zip for context [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should update har.zip for page [fail] -bidi-chromium-library › library/browsercontext-har.spec.ts › should update har.zip for page with different options [fail] -bidi-chromium-library › library/browsercontext-locale.spec.ts › should affect Intl.DateTimeFormat().resolvedOptions().locale [fail] -bidi-chromium-library › library/browsercontext-locale.spec.ts › should affect accept-language header @smoke [fail] -bidi-chromium-library › library/browsercontext-locale.spec.ts › should affect navigator.language [fail] -bidi-chromium-library › library/browsercontext-locale.spec.ts › should affect navigator.language in popups [fail] -bidi-chromium-library › library/browsercontext-locale.spec.ts › should be isolated between contexts [fail] -bidi-chromium-library › library/browsercontext-locale.spec.ts › should format date [fail] -bidi-chromium-library › library/browsercontext-locale.spec.ts › should format number [fail] -bidi-chromium-library › library/browsercontext-locale.spec.ts › should format number in popups [fail] -bidi-chromium-library › library/browsercontext-locale.spec.ts › should format number in workers [timeout] -bidi-chromium-library › library/browsercontext-locale.spec.ts › should not change default locale in another context [fail] -bidi-chromium-library › library/browsercontext-locale.spec.ts › should work for multiple pages sharing same process [pass] -bidi-chromium-library › library/browsercontext-network-event.spec.ts › BrowserContext.Events.Request [pass] -bidi-chromium-library › library/browsercontext-network-event.spec.ts › BrowserContext.Events.RequestFailed [fail] -bidi-chromium-library › library/browsercontext-network-event.spec.ts › BrowserContext.Events.RequestFinished [pass] -bidi-chromium-library › library/browsercontext-network-event.spec.ts › BrowserContext.Events.Response [pass] -bidi-chromium-library › library/browsercontext-network-event.spec.ts › should fire events in proper order [pass] -bidi-chromium-library › library/browsercontext-network-event.spec.ts › should not fire events for favicon or favicon redirects [unknown] -bidi-chromium-library › library/browsercontext-page-event.spec.ts › should fire page lifecycle events [fail] -bidi-chromium-library › library/browsercontext-page-event.spec.ts › should have about:blank for empty url with domcontentloaded [fail] -bidi-chromium-library › library/browsercontext-page-event.spec.ts › should have about:blank url with domcontentloaded [fail] -bidi-chromium-library › library/browsercontext-page-event.spec.ts › should have an opener [pass] -bidi-chromium-library › library/browsercontext-page-event.spec.ts › should have url [pass] -bidi-chromium-library › library/browsercontext-page-event.spec.ts › should have url after domcontentloaded [pass] -bidi-chromium-library › library/browsercontext-page-event.spec.ts › should not crash while redirecting of original request was missed [pass] -bidi-chromium-library › library/browsercontext-page-event.spec.ts › should not hang on ctrl-click during provisional load [timeout] -bidi-chromium-library › library/browsercontext-page-event.spec.ts › should report initialized pages [fail] -bidi-chromium-library › library/browsercontext-page-event.spec.ts › should report when a new page is created and closed [fail] -bidi-chromium-library › library/browsercontext-page-event.spec.ts › should work with Ctrl-clicking [pass] -bidi-chromium-library › library/browsercontext-page-event.spec.ts › should work with Shift-clicking [pass] -bidi-chromium-library › library/browsercontext-pages.spec.ts › frame.focus should work multiple times [pass] -bidi-chromium-library › library/browsercontext-pages.spec.ts › page.context should return the correct instance [pass] -bidi-chromium-library › library/browsercontext-pages.spec.ts › should click the button with deviceScaleFactor set [pass] -bidi-chromium-library › library/browsercontext-pages.spec.ts › should click the button with offset with page scale [pass] -bidi-chromium-library › library/browsercontext-pages.spec.ts › should click with disabled javascript [pass] -bidi-chromium-library › library/browsercontext-pages.spec.ts › should keep selection in multiple pages [pass] -bidi-chromium-library › library/browsercontext-pages.spec.ts › should not be visible in context.pages [pass] -bidi-chromium-library › library/browsercontext-pages.spec.ts › should not hang with touch-enabled viewports [pass] -bidi-chromium-library › library/browsercontext-pages.spec.ts › should not leak listeners during navigation of 20 pages [fail] -bidi-chromium-library › library/browsercontext-pages.spec.ts › should return bounding box with page scale [pass] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › does launch without a port [pass] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should authenticate [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should authenticate with empty password [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should exclude patterns [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should isolate proxy credentials between contexts [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should isolate proxy credentials between contexts on navigation [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › link-local [timeout] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › localhost [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › loopback address [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › link-local [timeout] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › localhost [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › loopback address [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should set cookie for top-level domain [pass] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should throw for bad server value [pass] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should throw for socks4 authentication [pass] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should throw for socks5 authentication [pass] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use ipv6 proxy [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use proxy [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use proxy for https urls [timeout] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use proxy for second page [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use proxy twice [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use socks proxy [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should use socks proxy in second page [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should work when passing the proxy only on the context level [fail] -bidi-chromium-library › library/browsercontext-proxy.spec.ts › should work with IP:PORT notion [fail] -bidi-chromium-library › library/browsercontext-reuse.spec.ts › should continue issuing events after closing the reused page [fail] -bidi-chromium-library › library/browsercontext-reuse.spec.ts › should ignore binding from beforeunload [pass] -bidi-chromium-library › library/browsercontext-reuse.spec.ts › should not cache resources [fail] -bidi-chromium-library › library/browsercontext-reuse.spec.ts › should re-add binding after reset [fail] -bidi-chromium-library › library/browsercontext-reuse.spec.ts › should reset mouse position [pass] -bidi-chromium-library › library/browsercontext-reuse.spec.ts › should reset serviceworker [fail] -bidi-chromium-library › library/browsercontext-reuse.spec.ts › should reset serviceworker that hangs in importScripts [fail] -bidi-chromium-library › library/browsercontext-reuse.spec.ts › should reset tracing [pass] -bidi-chromium-library › library/browsercontext-reuse.spec.ts › should work with clock emulation [pass] -bidi-chromium-library › library/browsercontext-route.spec.ts › should chain fallback [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should chain fallback into page [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should chain fallback w/ dynamic URL [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should fall back async [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should fall back to context.route [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should ignore secure Set-Cookie header for insecure requests [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should intercept [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should not chain abort [pass] -bidi-chromium-library › library/browsercontext-route.spec.ts › should not chain fulfill [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should overwrite post body with empty string [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should support Set-Cookie header [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should support async handler w/ times [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should support the times parameter with route matching [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should unroute [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should use Set-Cookie header in future requests [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should work if handler with times parameter was removed from another handler [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should work with ignoreHTTPSErrors [fail] -bidi-chromium-library › library/browsercontext-route.spec.ts › should yield to page.route [fail] -bidi-chromium-library › library/browsercontext-service-worker-policy.spec.ts › block › blocks service worker registration [timeout] -bidi-chromium-library › library/browsercontext-service-worker-policy.spec.ts › block › should not throw error on about:blank [pass] -bidi-chromium-library › library/browsercontext-service-worker-policy.spec.ts › should allow service workers by default [pass] -bidi-chromium-library › library/browsercontext-set-extra-http-headers.spec.ts › should override extra headers from browser context [fail] -bidi-chromium-library › library/browsercontext-set-extra-http-headers.spec.ts › should throw for non-string header values [pass] -bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should capture cookies [fail] -bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should capture local storage [fail] -bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should handle malformed file [pass] -bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should handle missing file [pass] -bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should not emit events about internal page [fail] -bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should not restore localStorage twice [fail] -bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should round-trip through the file [fail] -bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should serialize storageState with lone surrogates [pass] -bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should set local storage [fail] -bidi-chromium-library › library/browsercontext-storage-state.spec.ts › should work when service worker is intefering [pass] -bidi-chromium-library › library/browsercontext-strict.spec.ts › should not fail page.textContent in non-strict mode [pass] -bidi-chromium-library › library/browsercontext-strict.spec.ts › strict context mode › should fail page.click in strict mode [fail] -bidi-chromium-library › library/browsercontext-strict.spec.ts › strict context mode › should fail page.textContent in strict mode [fail] -bidi-chromium-library › library/browsercontext-strict.spec.ts › strict context mode › should opt out of strict mode [pass] -bidi-chromium-library › library/browsercontext-timezone-id.spec.ts › should affect Intl.DateTimeFormat().resolvedOptions().timeZone [fail] -bidi-chromium-library › library/browsercontext-timezone-id.spec.ts › should not change default timezone in another context [fail] -bidi-chromium-library › library/browsercontext-timezone-id.spec.ts › should throw for invalid timezone IDs when creating pages [fail] -bidi-chromium-library › library/browsercontext-timezone-id.spec.ts › should work @smoke [fail] -bidi-chromium-library › library/browsercontext-timezone-id.spec.ts › should work for multiple pages sharing same process [pass] -bidi-chromium-library › library/browsercontext-user-agent.spec.ts › custom user agent for download [timeout] -bidi-chromium-library › library/browsercontext-user-agent.spec.ts › should emulate device user-agent [fail] -bidi-chromium-library › library/browsercontext-user-agent.spec.ts › should make a copy of default options [fail] -bidi-chromium-library › library/browsercontext-user-agent.spec.ts › should work [fail] -bidi-chromium-library › library/browsercontext-user-agent.spec.ts › should work for navigator.userAgentData and sec-ch-ua headers [unknown] -bidi-chromium-library › library/browsercontext-user-agent.spec.ts › should work for subframes [fail] -bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › default mobile viewports to 980 width [fail] -bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › mouse should work with mobile viewports and cross process navigations [pass] -bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › respect meta viewport tag [pass] -bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should be detectable [pass] -bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should detect touch when applying viewport with touches [pass] -bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should emulate the hover media feature [fail] -bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should fire orientationchange event [timeout] -bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should scroll when emulating a mobile viewport [pass] -bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support landscape emulation [pass] -bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support mobile emulation [pass] -bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support touch emulation [fail] -bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support window.orientation emulation [fail] -bidi-chromium-library › library/browsercontext-viewport-mobile.spec.ts › mobile viewport › view scale should reset after navigation [fail] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › WebKit Windows headed should have a minimal viewport [unknown] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should be able to get correct orientation angle on non-mobile devices [pass] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should drag with high dpi [pass] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should emulate availWidth and availHeight [fail] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should emulate device height [fail] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should emulate device width [fail] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should get the proper default viewport size [pass] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should not have touch by default [pass] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should report null viewportSize when given null viewport [pass] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should return correct outerWidth and outerHeight [pass] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should set both screen and viewport options [fail] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should set the proper viewport size [pass] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should set window.screen.orientation.type for mobile devices [fail] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should support touch with null viewport [fail] -bidi-chromium-library › library/browsercontext-viewport.spec.ts › should throw on tap if hasTouch is not enabled [pass] -bidi-chromium-library › library/browsertype-basic.spec.ts › browserType.executablePath should work [unknown] -bidi-chromium-library › library/browsertype-basic.spec.ts › browserType.name should work [fail] -bidi-chromium-library › library/browsertype-basic.spec.ts › should throw when trying to connect with not-chromium [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer only › should be able to reconnect to a browser 12 times without warnings [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer only › should properly disconnect when connection closes from the server side [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer only › should work with cluster [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › disconnected event should be emitted when browser is closed or server is closed [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › disconnected event should have browser as argument [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › setInputFiles should preserve lastModified timestamp [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should be able to connect 20 times to a single server without warnings [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should be able to connect two browsers at the same time [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should be able to connect when the wsEndpoint is passed as an option [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should be able to reconnect to a browser [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should be able to visit ipv6 [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should be able to visit ipv6 through localhost [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should connect over http [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should connect over wss [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should emit close events on pages and contexts [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should error when saving download after deletion [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should filter launch options [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should fulfill with global fetch result [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should handle exceptions during connect [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should ignore page.pause when headed [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should not throw on close after disconnect [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should print HTTP error [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should print custom ws close error [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should print ws error [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should properly disconnect when connection closes from the client side [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should record trace with sources [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should reject navigation when browser closes [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should reject waitForEvent before browser.close finishes [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should reject waitForEvent before browser.onDisconnect fires [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should reject waitForSelector when browser closes [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should respect selectors [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should save download [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should save har [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should saveAs videos from remote browser [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should send default User-Agent and X-Playwright-Browser headers with connect request [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should send extra headers with connect request [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should set the browser connected state [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should support slowmo option [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should terminate network waiters [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should throw when calling waitForNavigation after disconnect [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should throw when used after isConnected returns false [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should timeout in connect while connecting [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should timeout in socket while connecting [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › should upload large file [timeout] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should check proxy pattern on the client [unknown] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should forward non-forwarded requests [unknown] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should lead to the error page for forwarded requests when the connection is refused [unknown] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy based on the pattern [unknown] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy ipv6 localhost requests @smoke [unknown] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy local.playwright requests [unknown] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy localhost requests @smoke [unknown] -bidi-chromium-library › library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy localhost requests from fetch api [unknown] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › disconnected event should be emitted when browser is closed or server is closed [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › disconnected event should have browser as argument [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › setInputFiles should preserve lastModified timestamp [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should be able to connect 20 times to a single server without warnings [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should be able to connect two browsers at the same time [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should be able to connect when the wsEndpoint is passed as an option [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should be able to reconnect to a browser [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should be able to visit ipv6 [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should be able to visit ipv6 through localhost [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should connect over http [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should connect over wss [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should emit close events on pages and contexts [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should error when saving download after deletion [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should filter launch options [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should fulfill with global fetch result [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should handle exceptions during connect [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should ignore page.pause when headed [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should not throw on close after disconnect [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should print HTTP error [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should print custom ws close error [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should print ws error [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should properly disconnect when connection closes from the client side [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should record trace with sources [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should reject navigation when browser closes [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should reject waitForEvent before browser.close finishes [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should reject waitForEvent before browser.onDisconnect fires [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should reject waitForSelector when browser closes [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should respect selectors [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should save download [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should save har [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should saveAs videos from remote browser [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should send default User-Agent and X-Playwright-Browser headers with connect request [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should send extra headers with connect request [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should set the browser connected state [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should support slowmo option [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should terminate network waiters [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should throw when calling waitForNavigation after disconnect [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should throw when used after isConnected returns false [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should timeout in connect while connecting [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should timeout in socket while connecting [pass] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › should upload large file [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should check proxy pattern on the client [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should forward non-forwarded requests [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should lead to the error page for forwarded requests when the connection is refused [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy based on the pattern [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy ipv6 localhost requests @smoke [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy local.playwright requests [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy localhost requests @smoke [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy localhost requests from fetch api [fail] -bidi-chromium-library › library/browsertype-connect.spec.ts › should refuse connecting when versions do not match [pass] -bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 hub + node chromium [unknown] -bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone chromium [unknown] -bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone chromium through run-driver [unknown] -bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone non-chromium [unknown] -bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 hub + node chromium [unknown] -bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 standalone chromium [unknown] -bidi-chromium-library › library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 standalone chromium broken driver [unknown] -bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should default to random wsPath [fail] -bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should fire "close" event during kill [fail] -bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should fire close event [fail] -bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should log protocol [fail] -bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should provide an error when ws endpoint is incorrect [fail] -bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should return child_process instance [fail] -bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should work [fail] -bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should work when wsPath is missing leading slash [fail] -bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should work with host [fail] -bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should work with port [fail] -bidi-chromium-library › library/browsertype-launch-server.spec.ts › launch server › should work with wsPath [fail] -bidi-chromium-library › library/browsertype-launch.spec.ts › should accept objects as options [pass] -bidi-chromium-library › library/browsertype-launch.spec.ts › should allow await using [pass] -bidi-chromium-library › library/browsertype-launch.spec.ts › should be callable twice [pass] -bidi-chromium-library › library/browsertype-launch.spec.ts › should fire close event for all contexts [pass] -bidi-chromium-library › library/browsertype-launch.spec.ts › should handle exception [pass] -bidi-chromium-library › library/browsertype-launch.spec.ts › should handle timeout [pass] -bidi-chromium-library › library/browsertype-launch.spec.ts › should reject all promises when browser is closed [fail] -bidi-chromium-library › library/browsertype-launch.spec.ts › should reject if executable path is invalid [pass] -bidi-chromium-library › library/browsertype-launch.spec.ts › should reject if launched browser fails immediately [fail] -bidi-chromium-library › library/browsertype-launch.spec.ts › should report launch log [pass] -bidi-chromium-library › library/browsertype-launch.spec.ts › should throw if page argument is passed [pass] -bidi-chromium-library › library/browsertype-launch.spec.ts › should throw if port option is passed [pass] -bidi-chromium-library › library/browsertype-launch.spec.ts › should throw if port option is passed for persistent context [pass] -bidi-chromium-library › library/browsertype-launch.spec.ts › should throw if userDataDir is passed as an argument [pass] -bidi-chromium-library › library/browsertype-launch.spec.ts › should throw if userDataDir option is passed [pass] -bidi-chromium-library › library/capabilities.spec.ts › Intl.ListFormat should work [pass] -bidi-chromium-library › library/capabilities.spec.ts › SharedArrayBuffer should work @smoke [fail] -bidi-chromium-library › library/capabilities.spec.ts › Web Assembly should work @smoke [pass] -bidi-chromium-library › library/capabilities.spec.ts › WebSocket should work @smoke [pass] -bidi-chromium-library › library/capabilities.spec.ts › loading in HTMLImageElement.prototype [pass] -bidi-chromium-library › library/capabilities.spec.ts › make sure that XMLHttpRequest upload events are emitted correctly [pass] -bidi-chromium-library › library/capabilities.spec.ts › navigator.clipboard should be present [pass] -bidi-chromium-library › library/capabilities.spec.ts › requestFullscreen [pass] -bidi-chromium-library › library/capabilities.spec.ts › service worker should cover the iframe [pass] -bidi-chromium-library › library/capabilities.spec.ts › service worker should register in an iframe [pass] -bidi-chromium-library › library/capabilities.spec.ts › serviceWorker should intercept document request [pass] -bidi-chromium-library › library/capabilities.spec.ts › should not crash on page with mp4 @smoke [pass] -bidi-chromium-library › library/capabilities.spec.ts › should not crash on showDirectoryPicker [unknown] -bidi-chromium-library › library/capabilities.spec.ts › should not crash on storage.getDirectory() [pass] -bidi-chromium-library › library/capabilities.spec.ts › should play audio @smoke [pass] -bidi-chromium-library › library/capabilities.spec.ts › should play video @smoke [pass] -bidi-chromium-library › library/capabilities.spec.ts › should play webm video @smoke [pass] -bidi-chromium-library › library/capabilities.spec.ts › should respect CSP @smoke [pass] -bidi-chromium-library › library/capabilities.spec.ts › should send no Content-Length header for GET requests with a Content-Type [pass] -bidi-chromium-library › library/capabilities.spec.ts › should set CloseEvent.wasClean to false when the server terminates a WebSocket connection [pass] -bidi-chromium-library › library/capabilities.spec.ts › should support webgl 2 @smoke [pass] -bidi-chromium-library › library/capabilities.spec.ts › should support webgl @smoke [pass] -bidi-chromium-library › library/capabilities.spec.ts › webkit should define window.safari [unknown] -bidi-chromium-library › library/capabilities.spec.ts › window.GestureEvent in WebKit [pass] -bidi-chromium-library › library/channels.spec.ts › exposeFunction should not leak [fail] -bidi-chromium-library › library/channels.spec.ts › should not generate dispatchers for subresources w/o listeners [pass] -bidi-chromium-library › library/channels.spec.ts › should scope CDPSession handles [unknown] -bidi-chromium-library › library/channels.spec.ts › should scope browser handles [pass] -bidi-chromium-library › library/channels.spec.ts › should scope context handles [pass] -bidi-chromium-library › library/channels.spec.ts › should work with the domain module [timeout] -bidi-chromium-library › library/chromium/bfcache.spec.ts › bindings should work after restoring from bfcache [fail] -bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › serviceWorker(), and fromServiceWorker() work [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › setExtraHTTPHeaders [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › setOffline [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept only serviceworker request, not page [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker importScripts [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker requests (main and within) [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker update requests [unknown] -bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should produce network events, routing, and annotations for Service Worker [fail] -bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should produce network events, routing, and annotations for Service Worker (advanced) [fail] -bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report failure (due to content-type) of main service worker request [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report failure (due to redirect) of main service worker request [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report intercepted service worker requests in HAR [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › Page.route should work with intervention headers [fail] -bidi-chromium-library › library/chromium/chromium.spec.ts › http credentials › httpCredentials [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › serviceWorkers() should return current workers [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › should close service worker together with the context [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › should create a worker from a service worker [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › should create a worker from service worker with noop routing [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › should emit new service worker on update [timeout] -bidi-chromium-library › library/chromium/chromium.spec.ts › should not create a worker from a shared worker [pass] -bidi-chromium-library › library/chromium/chromium.spec.ts › should pass args with spaces [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › emulate media should not be affected by second connectOverCDP [unknown] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › setInputFiles should preserve lastModified timestamp [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should allow tracing over cdp session [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should be able to connect via localhost [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should cleanup artifacts dir after connectOverCDP disconnects due to ws close [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect over a ws endpoint [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session twice [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session when passed as a first argument [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect to existing page with iframe and navigate [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect to existing service workers [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connect via https [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should connectOverCDP and manage downloads in default context [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should print custom ws close error [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should report all pages in an existing browser [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should report an expected error when the endpoint URL JSON webSocketDebuggerUrl is undefined [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should report an expected error when the endpointURL returns a non-expected status code [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should return valid browser from context.browser() [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should send default User-Agent header with connect request [timeout] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should send extra headers with connect request [timeout] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should use logger in default context [fail] -bidi-chromium-library › library/chromium/connect-over-cdp.spec.ts › should use proxy with connectOverCDP [fail] -bidi-chromium-library › library/chromium/css-coverage.spec.ts › should NOT report scripts across navigations [fail] -bidi-chromium-library › library/chromium/css-coverage.spec.ts › should ignore injected stylesheets [fail] -bidi-chromium-library › library/chromium/css-coverage.spec.ts › should report multiple stylesheets [fail] -bidi-chromium-library › library/chromium/css-coverage.spec.ts › should report sourceURLs [fail] -bidi-chromium-library › library/chromium/css-coverage.spec.ts › should report stylesheets across navigations [fail] -bidi-chromium-library › library/chromium/css-coverage.spec.ts › should report stylesheets that have no coverage [fail] -bidi-chromium-library › library/chromium/css-coverage.spec.ts › should work [fail] -bidi-chromium-library › library/chromium/css-coverage.spec.ts › should work with a recently loaded stylesheet [fail] -bidi-chromium-library › library/chromium/css-coverage.spec.ts › should work with complicated usecases [fail] -bidi-chromium-library › library/chromium/css-coverage.spec.ts › should work with media queries [fail] -bidi-chromium-library › library/chromium/disable-web-security.spec.ts › test init script w/ --disable-web-security [fail] -bidi-chromium-library › library/chromium/disable-web-security.spec.ts › test utility world in popup w/ --disable-web-security [pass] -bidi-chromium-library › library/chromium/js-coverage.spec.ts › should NOT report scripts across navigations when enabled [fail] -bidi-chromium-library › library/chromium/js-coverage.spec.ts › should ignore eval() scripts by default [fail] -bidi-chromium-library › library/chromium/js-coverage.spec.ts › should not hang when there is a debugger statement [fail] -bidi-chromium-library › library/chromium/js-coverage.spec.ts › should report multiple scripts [fail] -bidi-chromium-library › library/chromium/js-coverage.spec.ts › should report scripts across navigations when disabled [fail] -bidi-chromium-library › library/chromium/js-coverage.spec.ts › should report sourceURLs [fail] -bidi-chromium-library › library/chromium/js-coverage.spec.ts › should work [fail] -bidi-chromium-library › library/chromium/js-coverage.spec.ts › shouldn't ignore eval() scripts if reportAnonymousScripts is true [fail] -bidi-chromium-library › library/chromium/launcher.spec.ts › should not create pages automatically [fail] -bidi-chromium-library › library/chromium/launcher.spec.ts › should not throw with remote-debugging-port argument [fail] -bidi-chromium-library › library/chromium/launcher.spec.ts › should open devtools when "devtools: true" option is given [unknown] -bidi-chromium-library › library/chromium/launcher.spec.ts › should return background pages [fail] -bidi-chromium-library › library/chromium/launcher.spec.ts › should return background pages when recording video [fail] -bidi-chromium-library › library/chromium/launcher.spec.ts › should support request/response events when using backgroundPage() [fail] -bidi-chromium-library › library/chromium/launcher.spec.ts › should throw with remote-debugging-pipe argument [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › ElementHandle.boundingBox() should work [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › contentFrame should work [pass] -bidi-chromium-library › library/chromium/oopif.spec.ts › should allow cdp sessions on oopifs [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › should be able to click in iframe [pass] -bidi-chromium-library › library/chromium/oopif.spec.ts › should click [pass] -bidi-chromium-library › library/chromium/oopif.spec.ts › should click a button when it overlays oopif [pass] -bidi-chromium-library › library/chromium/oopif.spec.ts › should emit filechooser event for iframe [timeout] -bidi-chromium-library › library/chromium/oopif.spec.ts › should emulate media [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › should emulate offline [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › should expose function [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › should get the proper viewport [unknown] -bidi-chromium-library › library/chromium/oopif.spec.ts › should handle oopif detach [pass] -bidi-chromium-library › library/chromium/oopif.spec.ts › should handle remote -> local -> remote transitions [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › should intercept response body from oopif [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › should load oopif iframes with subresources and route [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › should not throw on exposeFunction when oopif detaches [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › should report google.com frame with headed [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › should report main requests [pass] -bidi-chromium-library › library/chromium/oopif.spec.ts › should report oopif frames [pass] -bidi-chromium-library › library/chromium/oopif.spec.ts › should respect route [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › should support addInitScript [pass] -bidi-chromium-library › library/chromium/oopif.spec.ts › should support context options [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › should support exposeFunction [fail] -bidi-chromium-library › library/chromium/oopif.spec.ts › should take screenshot [fail] -bidi-chromium-library › library/chromium/session.spec.ts › should be able to detach session [fail] -bidi-chromium-library › library/chromium/session.spec.ts › should detach when page closes [fail] -bidi-chromium-library › library/chromium/session.spec.ts › should enable and disable domains independently [fail] -bidi-chromium-library › library/chromium/session.spec.ts › should not break page.close() [fail] -bidi-chromium-library › library/chromium/session.spec.ts › should only accept a page or frame [pass] -bidi-chromium-library › library/chromium/session.spec.ts › should reject protocol calls when page closes [fail] -bidi-chromium-library › library/chromium/session.spec.ts › should send events [fail] -bidi-chromium-library › library/chromium/session.spec.ts › should throw if target is part of main [fail] -bidi-chromium-library › library/chromium/session.spec.ts › should throw nice errors [fail] -bidi-chromium-library › library/chromium/session.spec.ts › should work [fail] -bidi-chromium-library › library/chromium/session.spec.ts › should work with main frame [fail] -bidi-chromium-library › library/chromium/session.spec.ts › should work with newBrowserCDPSession [fail] -bidi-chromium-library › library/chromium/tracing.spec.ts › should create directories as needed [fail] -bidi-chromium-library › library/chromium/tracing.spec.ts › should output a trace [fail] -bidi-chromium-library › library/chromium/tracing.spec.ts › should return a buffer [fail] -bidi-chromium-library › library/chromium/tracing.spec.ts › should run with custom categories if provided [fail] -bidi-chromium-library › library/chromium/tracing.spec.ts › should support a buffer without a path [fail] -bidi-chromium-library › library/chromium/tracing.spec.ts › should throw if tracing on two pages [fail] -bidi-chromium-library › library/chromium/tracing.spec.ts › should work without options [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › persistentContext › should pass with matching certificates [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › persistentContext › validate input [pass] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should fail with matching certificates in legacy pfx format [pass] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should fail with no client certificates [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should fail with self-signed client certificates [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should handle TLS renegotiation with client certificates [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should handle rejected certificate in handshake with HTTP/2 [pass] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should have ignoreHTTPSErrors=false by default [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should keep supporting http [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should not hang on tls errors during TLS 1.2 handshake [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should pass with matching certificates [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should pass with matching certificates and trailing slash [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should pass with matching certificates in pfx format [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should pass with matching certificates in pfx format when passing as content [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should pass with matching certificates on context APIRequestContext instance [pass] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should pass with matching certificates when passing as content [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should return target connection errors when using http2 [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › should throw a http error if the pfx passphrase is incorect [pass] -bidi-chromium-library › library/client-certificates.spec.ts › browser › support http2 [fail] -bidi-chromium-library › library/client-certificates.spec.ts › browser › support http2 if the browser only supports http1.1 [unknown] -bidi-chromium-library › library/client-certificates.spec.ts › browser › validate input [pass] -bidi-chromium-library › library/client-certificates.spec.ts › fetch › pass with trusted client certificates [pass] -bidi-chromium-library › library/client-certificates.spec.ts › fetch › pass with trusted client certificates in pfx format [pass] -bidi-chromium-library › library/client-certificates.spec.ts › fetch › should fail with matching certificates in legacy pfx format [pass] -bidi-chromium-library › library/client-certificates.spec.ts › fetch › should fail with no client certificates provided [pass] -bidi-chromium-library › library/client-certificates.spec.ts › fetch › should keep supporting http [pass] -bidi-chromium-library › library/client-certificates.spec.ts › fetch › should throw a http error if the pfx passphrase is incorect [pass] -bidi-chromium-library › library/client-certificates.spec.ts › fetch › should throw with untrusted client certs [pass] -bidi-chromium-library › library/client-certificates.spec.ts › fetch › should work in the browser with request interception [fail] -bidi-chromium-library › library/client-certificates.spec.ts › fetch › validate input [pass] -bidi-chromium-library › library/clock.spec.ts › Intl API › Creates a RelativeTimeFormat like normal [pass] -bidi-chromium-library › library/clock.spec.ts › Intl API › Executes formatRange like normal [pass] -bidi-chromium-library › library/clock.spec.ts › Intl API › Executes formatRangeToParts like normal [pass] -bidi-chromium-library › library/clock.spec.ts › Intl API › Executes resolvedOptions like normal [pass] -bidi-chromium-library › library/clock.spec.ts › Intl API › Executes supportedLocalesOf like normal [pass] -bidi-chromium-library › library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns false when passed a timestamp argument that is not first of the month [pass] -bidi-chromium-library › library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns false when passed no timestamp and system time is not first of the month [pass] -bidi-chromium-library › library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns true when passed a timestamp argument that is first of the month [pass] -bidi-chromium-library › library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns true when passed no timestamp and system time is first of the month [pass] -bidi-chromium-library › library/clock.spec.ts › cancelAnimationFrame › does not remove interval [pass] -bidi-chromium-library › library/clock.spec.ts › cancelAnimationFrame › does not remove timeout [pass] -bidi-chromium-library › library/clock.spec.ts › cancelAnimationFrame › ignores null argument [pass] -bidi-chromium-library › library/clock.spec.ts › cancelAnimationFrame › removes animation frame [pass] -bidi-chromium-library › library/clock.spec.ts › cancelIdleCallback › removes idle callback [pass] -bidi-chromium-library › library/clock.spec.ts › clearInterval › ignores null argument [pass] -bidi-chromium-library › library/clock.spec.ts › clearInterval › removes interval [pass] -bidi-chromium-library › library/clock.spec.ts › clearInterval › removes interval with undefined interval [pass] -bidi-chromium-library › library/clock.spec.ts › clearInterval › removes timeout [pass] -bidi-chromium-library › library/clock.spec.ts › clearTimeout › ignores null argument [pass] -bidi-chromium-library › library/clock.spec.ts › clearTimeout › removes interval [pass] -bidi-chromium-library › library/clock.spec.ts › clearTimeout › removes interval with undefined interval [pass] -bidi-chromium-library › library/clock.spec.ts › clearTimeout › removes timeout [pass] -bidi-chromium-library › library/clock.spec.ts › date › creates Date objects representing clock time [pass] -bidi-chromium-library › library/clock.spec.ts › date › creates real Date objects [pass] -bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing a date as RFC 2822 string [pass] -bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing a date as string [pass] -bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing timestamp [pass] -bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing y, m, d [pass] -bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing y, m, d, h [pass] -bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m [pass] -bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m, s [pass] -bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m, s, ms [pass] -bidi-chromium-library › library/clock.spec.ts › date › creates regular date when passing year, month [pass] -bidi-chromium-library › library/clock.spec.ts › date › listens to system clock changes [pass] -bidi-chromium-library › library/clock.spec.ts › date › listens to ticking clock [pass] -bidi-chromium-library › library/clock.spec.ts › date › mirrors UTC method [pass] -bidi-chromium-library › library/clock.spec.ts › date › mirrors native Date.prototype [pass] -bidi-chromium-library › library/clock.spec.ts › date › mirrors parse method [pass] -bidi-chromium-library › library/clock.spec.ts › date › mirrors toUTCString method [pass] -bidi-chromium-library › library/clock.spec.ts › date › provides date constructor [pass] -bidi-chromium-library › library/clock.spec.ts › date › returns clock.now() [pass] -bidi-chromium-library › library/clock.spec.ts › date › returns date as string representing clock time [pass] -bidi-chromium-library › library/clock.spec.ts › date › returns date as string when called as function [pass] -bidi-chromium-library › library/clock.spec.ts › date › returns date as string when calling with arguments [pass] -bidi-chromium-library › library/clock.spec.ts › date › returns date as string when calling with timestamp [pass] -bidi-chromium-library › library/clock.spec.ts › date › supports now method if present [pass] -bidi-chromium-library › library/clock.spec.ts › fastForward › handles multiple pending timers and types [pass] -bidi-chromium-library › library/clock.spec.ts › fastForward › ignores timers which wouldn't be run [pass] -bidi-chromium-library › library/clock.spec.ts › fastForward › pushes back execution time for skipped timers [pass] -bidi-chromium-library › library/clock.spec.ts › pauseAt › fire target timers [pass] -bidi-chromium-library › library/clock.spec.ts › pauseAt › pause at target time [pass] -bidi-chromium-library › library/clock.spec.ts › pauseAt › returns consumed clicks [pass] -bidi-chromium-library › library/clock.spec.ts › performance.now() › should listen to multiple ticks in performance.now [pass] -bidi-chromium-library › library/clock.spec.ts › performance.now() › should run along with clock.tick [pass] -bidi-chromium-library › library/clock.spec.ts › performance.now() › should run with ticks with timers set [pass] -bidi-chromium-library › library/clock.spec.ts › performance.now() › should start at 0 [pass] -bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › returns numeric id or object with numeric id [pass] -bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › returns unique id [pass] -bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should be called with performance.now() even when performance unavailable [pass] -bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should be called with performance.now() when available [pass] -bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should call callback once [pass] -bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should properly schedule callback for 3rd frame [pass] -bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should run every 16ms [pass] -bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should schedule for next frame if on current frame [pass] -bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › should schedule two callbacks before the next frame at the same time [pass] -bidi-chromium-library › library/clock.spec.ts › requestAnimationFrame › throws if no arguments [pass] -bidi-chromium-library › library/clock.spec.ts › requestIdleCallback › doesn't runs if there are any timers and no timeout option [pass] -bidi-chromium-library › library/clock.spec.ts › requestIdleCallback › returns numeric id [pass] -bidi-chromium-library › library/clock.spec.ts › requestIdleCallback › returns unique id [pass] -bidi-chromium-library › library/clock.spec.ts › requestIdleCallback › runs after all timers [pass] -bidi-chromium-library › library/clock.spec.ts › requestIdleCallback › runs no later than timeout option even if there are any timers [pass] -bidi-chromium-library › library/clock.spec.ts › requestIdleCallback › throws if no arguments [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › calls function with global object or null (strict mode) as this [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › creates updated Date while ticking [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › creates updated Date while ticking promises [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › does not fire canceled intervals [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › does not fire intervals canceled in a promise [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › does not silently catch errors [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › does not trigger without sufficient delay [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › fires nested setTimeout calls in user-created promises properly [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › fires nested setTimeout calls properly [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › fires promise timers in correct order [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › fires timer in intervals of "13" [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › fires timer in intervals of 13 [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › fires timers in correct order [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes 2 [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes in promises [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes when an error is thrown [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › is not influenced by forward system clock changes when an error is thrown 2 [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › mini integration test [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › should settle chained user-created promises [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › should settle local nested promises before calling timeouts [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › should settle local promises before calling timeouts [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › should settle multiple user-created promises [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › should settle nested user-created promises [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › should settle user-created promises [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › should settle user-created promises before calling more timeouts [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › should settle user-created promises even if some throw [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › throws for negative minutes [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › throws on negative ticks [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › triggers after sufficient delay [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › triggers even when some throw [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › triggers immediately without specified delay [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › triggers in the order scheduled [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › triggers multiple simultaneous timers [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › triggers multiple simultaneous timers with zero callAt [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › triggers simultaneous timers [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › triggers timeouts and intervals in the order scheduled [pass] -bidi-chromium-library › library/clock.spec.ts › runFor › waits after setTimeout was called [pass] -bidi-chromium-library › library/clock.spec.ts › setInterval › does not schedule recurring timeout when cleared [pass] -bidi-chromium-library › library/clock.spec.ts › setInterval › does not throw if |undefined| or |null| is passed as a callback [pass] -bidi-chromium-library › library/clock.spec.ts › setInterval › is not influenced by backward system clock changes [pass] -bidi-chromium-library › library/clock.spec.ts › setInterval › is not influenced by forward system clock changes [pass] -bidi-chromium-library › library/clock.spec.ts › setInterval › passes setTimeout parameters [pass] -bidi-chromium-library › library/clock.spec.ts › setInterval › returns numeric id or object with numeric id [pass] -bidi-chromium-library › library/clock.spec.ts › setInterval › returns unique id [pass] -bidi-chromium-library › library/clock.spec.ts › setInterval › schedules recurring timeout [pass] -bidi-chromium-library › library/clock.spec.ts › setInterval › throws if no arguments [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › calls correct timeout on recursive tick [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › does not depend on this [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › does not throw if |undefined| or |null| is passed as a callback [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › is not influenced by backward system clock changes [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › is not influenced by forward system clock changes [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › parses no-numeric string times [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › parses numeric string times [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › passes setTimeout parameters [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › returns numeric id or object with numeric id [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › returns unique id [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › sets timers on instance [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › starts id from a large number [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › throws if no arguments [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › use of eval when not in node › evals non-function callbacks [pass] -bidi-chromium-library › library/clock.spec.ts › setTimeout › use of eval when not in node › only evals on global scope [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › deletes global property on uninstall if it was inherited onto the global object [unknown] -bidi-chromium-library › library/clock.spec.ts › stubTimers › does not fake methods not provided [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › fake Date constructor should mirror Date's properties [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › fakes Date constructor [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › fakes provided methods [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › global fake setTimeout should return id [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › mirrors custom Date properties [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › replace Event.prototype.timeStamp [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › replaces global clearInterval [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › replaces global clearTimeout [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › replaces global performance.now [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › replaces global setInterval [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › replaces global setTimeout [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › resets faked methods [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › returns clock object [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › sets initial timestamp [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › should let performance.mark still be callable after install() (#136) [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › should not alter the global performance properties and methods [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › should replace the getEntries, getEntriesByX methods with noops that return [] [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › takes an object parameter [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › uninstalls Date constructor [pass] -bidi-chromium-library › library/clock.spec.ts › stubTimers › uninstalls global performance.now [pass] -bidi-chromium-library › library/clock.spec.ts › works with concurrent runFor calls [pass] -bidi-chromium-library › library/clock.spec.ts › works with slow setTimeout in busy embedder [pass] -bidi-chromium-library › library/clock.spec.ts › works with slow setTimeout in busy embedder when not paused [pass] -bidi-chromium-library › library/component-parser.spec.ts › should escape [pass] -bidi-chromium-library › library/component-parser.spec.ts › should parse [pass] -bidi-chromium-library › library/component-parser.spec.ts › should parse all operators [pass] -bidi-chromium-library › library/component-parser.spec.ts › should parse bool [pass] -bidi-chromium-library › library/component-parser.spec.ts › should parse float values [pass] -bidi-chromium-library › library/component-parser.spec.ts › should parse identifiers [pass] -bidi-chromium-library › library/component-parser.spec.ts › should parse int values [pass] -bidi-chromium-library › library/component-parser.spec.ts › should parse regex [pass] -bidi-chromium-library › library/component-parser.spec.ts › should parse short attributes [pass] -bidi-chromium-library › library/component-parser.spec.ts › should parse unquoted string [pass] -bidi-chromium-library › library/component-parser.spec.ts › should throw on malformed selector [pass] -bidi-chromium-library › library/component-parser.spec.ts › should tolerate spacing [pass] -bidi-chromium-library › library/css-parser.spec.ts › should parse css [pass] -bidi-chromium-library › library/css-parser.spec.ts › should throw on malformed css [pass] -bidi-chromium-library › library/debug-controller.spec.ts › should highlight all [fail] -bidi-chromium-library › library/debug-controller.spec.ts › should navigate all [fail] -bidi-chromium-library › library/debug-controller.spec.ts › should pick element [fail] -bidi-chromium-library › library/debug-controller.spec.ts › should record [fail] -bidi-chromium-library › library/debug-controller.spec.ts › should record custom data-testid [fail] -bidi-chromium-library › library/debug-controller.spec.ts › should report pages [fail] -bidi-chromium-library › library/debug-controller.spec.ts › should reset for reuse [fail] -bidi-chromium-library › library/debug-controller.spec.ts › should reset routes before reuse [fail] -bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › context.addCookies() should work [fail] -bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › context.clearCookies() should work [fail] -bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › context.cookies() should work @smoke [fail] -bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support acceptDownloads option [fail] -bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support bypassCSP option [fail] -bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support deviceScaleFactor option [fail] -bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support httpCredentials option [fail] -bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support javascriptEnabled option [fail] -bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support offline option [fail] -bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support userAgent option [fail] -bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should support viewport option [fail] -bidi-chromium-library › library/defaultbrowsercontext-1.spec.ts › should(not) block third party cookies [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › coverage should work [unknown] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should accept userDataDir [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should connect to a browser with the default page [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should create userDataDir if it does not exist [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should fire close event for a persistent context [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should handle exception [timeout] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should handle timeout [pass] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should have default URL when launching browser [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should have passed URL when launching with ignoreDefaultArgs: true [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should respect selectors [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should restore state from userDataDir [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support colorScheme option [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support extraHTTPHeaders option [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support forcedColors option [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support geolocation and permissions options [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support har option [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support hasTouch option [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support ignoreHTTPSErrors option [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support locale option [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support reducedMotion option [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should support timezoneId option [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should throw if page argument is passed [pass] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › should work in persistent context [fail] -bidi-chromium-library › library/defaultbrowsercontext-2.spec.ts › user agent is up to date [fail] -bidi-chromium-library › library/download.spec.ts › download event › should be able to cancel pending downloads [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should close the context without awaiting the download [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should close the context without awaiting the failed download [unknown] -bidi-chromium-library › library/download.spec.ts › download event › should create subdirectories when saving to non-existent user-specified path [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should delete downloads on browser gone [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should delete downloads on context destruction [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should delete file [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should download large binary.zip [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should emit download event from nested iframes [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should error when saving after deletion [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should error when saving with downloads disabled [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should expose stream [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should not fail explicitly to cancel a download even if that is already finished [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should report alt-click downloads [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should report download path within page.on('download', …) handler for Blobs [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should report download path within page.on('download', …) handler for Files [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should report download when navigation turns into download @smoke [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should report downloads for download attribute [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should report downloads with acceptDownloads: false [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should report downloads with acceptDownloads: true [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should report downloads with interception [fail] -bidi-chromium-library › library/download.spec.ts › download event › should report new window downloads [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should report non-navigation downloads [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should report proper download url when download is from download attribute [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should save to overwritten filepath [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should save to two different paths with multiple saveAs calls [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should save to user-specified path without updating original path [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should throw if browser dies [timeout] -bidi-chromium-library › library/download.spec.ts › download event › should work with Cross-Origin-Opener-Policy [timeout] -bidi-chromium-library › library/download.spec.ts › should be able to download a PDF file [timeout] -bidi-chromium-library › library/download.spec.ts › should be able to download a inline PDF file via navigation [timeout] -bidi-chromium-library › library/download.spec.ts › should be able to download a inline PDF file via response interception [fail] -bidi-chromium-library › library/download.spec.ts › should convert navigation to a resource with unsupported mime type into download [timeout] -bidi-chromium-library › library/download.spec.ts › should download even if there is no "attachment" value [timeout] -bidi-chromium-library › library/download.spec.ts › should download links with data url [timeout] -bidi-chromium-library › library/download.spec.ts › should download successfully when routing [timeout] -bidi-chromium-library › library/download.spec.ts › should save to user-specified path [timeout] -bidi-chromium-library › library/downloads-path.spec.ts › downloads path › should accept downloads in persistent context [fail] -bidi-chromium-library › library/downloads-path.spec.ts › downloads path › should delete downloads when context closes [timeout] -bidi-chromium-library › library/downloads-path.spec.ts › downloads path › should delete downloads when persistent context closes [fail] -bidi-chromium-library › library/downloads-path.spec.ts › downloads path › should keep downloadsPath folder [timeout] -bidi-chromium-library › library/downloads-path.spec.ts › downloads path › should report downloads in downloadsPath folder [timeout] -bidi-chromium-library › library/downloads-path.spec.ts › downloads path › should report downloads in downloadsPath folder with a relative path [timeout] -bidi-chromium-library › library/emulation-focus.spec.ts › should change document.activeElement [pass] -bidi-chromium-library › library/emulation-focus.spec.ts › should change focused iframe [pass] -bidi-chromium-library › library/emulation-focus.spec.ts › should focus popups by default [fail] -bidi-chromium-library › library/emulation-focus.spec.ts › should focus with more than one page/context [pass] -bidi-chromium-library › library/emulation-focus.spec.ts › should not affect mouse event target page [pass] -bidi-chromium-library › library/emulation-focus.spec.ts › should not affect screenshots [fail] -bidi-chromium-library › library/emulation-focus.spec.ts › should not fire blur events when interacting with more than one page/context [pass] -bidi-chromium-library › library/emulation-focus.spec.ts › should provide target for keyboard events [pass] -bidi-chromium-library › library/emulation-focus.spec.ts › should think that all pages are focused @smoke [pass] -bidi-chromium-library › library/emulation-focus.spec.ts › should think that it is focused by default [pass] -bidi-chromium-library › library/emulation-focus.spec.ts › should trigger hover state concurrently [pass] -bidi-chromium-library › library/events/add-listeners.spec.ts › EventEmitter tests › Listener order [pass] -bidi-chromium-library › library/events/add-listeners.spec.ts › EventEmitter tests › listener type check [pass] -bidi-chromium-library › library/events/add-listeners.spec.ts › EventEmitter tests › set max listeners test [pass] -bidi-chromium-library › library/events/add-listeners.spec.ts › EventEmitter tests › should work [pass] -bidi-chromium-library › library/events/check-listener-leaks.spec.ts › _maxListeners still has precedence over defaultMaxListeners [pass] -bidi-chromium-library › library/events/check-listener-leaks.spec.ts › defaultMaxListeners [pass] -bidi-chromium-library › library/events/check-listener-leaks.spec.ts › process-wide [pass] -bidi-chromium-library › library/events/events-list.spec.ts › EventEmitter › should maintain event names correctly [pass] -bidi-chromium-library › library/events/listener-count.spec.ts › Listener count test [pass] -bidi-chromium-library › library/events/listeners-side-effects.spec.ts › listeners empty check [pass] -bidi-chromium-library › library/events/listeners.spec.ts › Array copy modification does not modify orig [pass] -bidi-chromium-library › library/events/listeners.spec.ts › EventEmitter listeners with one listener [pass] -bidi-chromium-library › library/events/listeners.spec.ts › EventEmitter with no members [pass] -bidi-chromium-library › library/events/listeners.spec.ts › Modify array copy after multiple adds [pass] -bidi-chromium-library › library/events/listeners.spec.ts › listeners and once [pass] -bidi-chromium-library › library/events/listeners.spec.ts › listeners on prototype [pass] -bidi-chromium-library › library/events/listeners.spec.ts › listeners with conflicting types [pass] -bidi-chromium-library › library/events/listeners.spec.ts › raw listeners [pass] -bidi-chromium-library › library/events/listeners.spec.ts › raw listeners order [pass] -bidi-chromium-library › library/events/max-listeners.spec.ts › emit maxListeners on e [pass] -bidi-chromium-library › library/events/method-names.spec.ts › EventEmitter prototype test [pass] -bidi-chromium-library › library/events/modify-in-emit.spec.ts › add and remove listeners [pass] -bidi-chromium-library › library/events/modify-in-emit.spec.ts › removing callbacks in emit [pass] -bidi-chromium-library › library/events/num-args.spec.ts › should work [pass] -bidi-chromium-library › library/events/once.spec.ts › once() has different code paths based on the number of arguments being emitted [pass] -bidi-chromium-library › library/events/once.spec.ts › should work [pass] -bidi-chromium-library › library/events/prepend.spec.ts › EventEmitter functionality [pass] -bidi-chromium-library › library/events/prepend.spec.ts › Verify that the listener must be a function [pass] -bidi-chromium-library › library/events/remove-all-listeners-wait.spec.ts › should not throw with ignoreErrors [pass] -bidi-chromium-library › library/events/remove-all-listeners-wait.spec.ts › should wait [pass] -bidi-chromium-library › library/events/remove-all-listeners-wait.spec.ts › should wait all [pass] -bidi-chromium-library › library/events/remove-all-listeners-wait.spec.ts › wait should throw [pass] -bidi-chromium-library › library/events/remove-all-listeners.spec.ts › listener count after removeAllListeners [pass] -bidi-chromium-library › library/events/remove-all-listeners.spec.ts › listeners [pass] -bidi-chromium-library › library/events/remove-all-listeners.spec.ts › removeAllListeners on undefined _events [pass] -bidi-chromium-library › library/events/remove-all-listeners.spec.ts › removeAllListeners removes all listeners [pass] -bidi-chromium-library › library/events/remove-all-listeners.spec.ts › removeAllListeners returns EventEmitter [pass] -bidi-chromium-library › library/events/remove-all-listeners.spec.ts › removeAllListeners with no event type [pass] -bidi-chromium-library › library/events/remove-listeners.spec.ts › Eighth test [pass] -bidi-chromium-library › library/events/remove-listeners.spec.ts › Fifth test [pass] -bidi-chromium-library › library/events/remove-listeners.spec.ts › First test [pass] -bidi-chromium-library › library/events/remove-listeners.spec.ts › Fourth test [pass] -bidi-chromium-library › library/events/remove-listeners.spec.ts › Ninth test [pass] -bidi-chromium-library › library/events/remove-listeners.spec.ts › Second test [pass] -bidi-chromium-library › library/events/remove-listeners.spec.ts › Seventh test [pass] -bidi-chromium-library › library/events/remove-listeners.spec.ts › Sixth test [pass] -bidi-chromium-library › library/events/remove-listeners.spec.ts › Tenth test [pass] -bidi-chromium-library › library/events/remove-listeners.spec.ts › Third test [pass] -bidi-chromium-library › library/events/set-max-listeners-side-effects.spec.ts › set max listeners test [pass] -bidi-chromium-library › library/events/special-event-names.spec.ts › should support special event names [pass] -bidi-chromium-library › library/events/subclass.spec.ts › MyEE2 instance [pass] -bidi-chromium-library › library/events/subclass.spec.ts › myee instance [pass] -bidi-chromium-library › library/events/symbols.spec.ts › should support symbols [pass] -bidi-chromium-library › library/favicon.spec.ts › should load svg favicon with prefer-color-scheme [unknown] -bidi-chromium-library › library/fetch-proxy.spec.ts › context request should pick up proxy credentials [pass] -bidi-chromium-library › library/fetch-proxy.spec.ts › global request should pick up proxy credentials [pass] -bidi-chromium-library › library/fetch-proxy.spec.ts › should support proxy.bypass [pass] -bidi-chromium-library › library/fetch-proxy.spec.ts › should use socks proxy [pass] -bidi-chromium-library › library/fetch-proxy.spec.ts › should work with context level proxy [pass] -bidi-chromium-library › library/firefox/launcher.spec.ts › should pass firefox user preferences [fail] -bidi-chromium-library › library/firefox/launcher.spec.ts › should pass firefox user preferences in persistent [fail] -bidi-chromium-library › library/geolocation.spec.ts › should isolate contexts [timeout] -bidi-chromium-library › library/geolocation.spec.ts › should not modify passed default options object [pass] -bidi-chromium-library › library/geolocation.spec.ts › should throw when invalid longitude [fail] -bidi-chromium-library › library/geolocation.spec.ts › should throw with missing latitude [pass] -bidi-chromium-library › library/geolocation.spec.ts › should throw with missing longitude in default options [pass] -bidi-chromium-library › library/geolocation.spec.ts › should use context options [timeout] -bidi-chromium-library › library/geolocation.spec.ts › should use context options for popup [timeout] -bidi-chromium-library › library/geolocation.spec.ts › should work @smoke [timeout] -bidi-chromium-library › library/geolocation.spec.ts › watchPosition should be notified [timeout] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should do case-insensitive match of cookie domain [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should do case-insensitive match of request domain [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should export cookies to storage state [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should filter outgoing cookies by domain [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should filter outgoing cookies by path [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should override cookie from Set-Cookie header [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should override cookie from Set-Cookie header even if it expired [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should preserve local storage on import/export of storage state [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should remove cookie with expires far in the past [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should remove cookie with negative max-age [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should remove expired cookies [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should send cookies from storage state [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should send not expired cookies [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should send secure cookie over http for localhost [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should send secure cookie over https [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should store cookie from Set-Cookie header [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should store cookie from Set-Cookie header even if it contains equal signs [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › should work with empty storage state [pass] -bidi-chromium-library › library/global-fetch-cookie.spec.ts › storage state should round-trip through file [pass] -bidi-chromium-library › library/global-fetch.spec.ts › delete should work @smoke [pass] -bidi-chromium-library › library/global-fetch.spec.ts › fetch should work @smoke [pass] -bidi-chromium-library › library/global-fetch.spec.ts › get should work @smoke [pass] -bidi-chromium-library › library/global-fetch.spec.ts › head should work @smoke [pass] -bidi-chromium-library › library/global-fetch.spec.ts › patch should work @smoke [pass] -bidi-chromium-library › library/global-fetch.spec.ts › post should work @smoke [pass] -bidi-chromium-library › library/global-fetch.spec.ts › put should work @smoke [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should abort redirected requests when context is disposed [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should abort requests when context is disposed [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should accept already serialized data as Buffer when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should be able to construct with context options [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should dispose global request [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should have nice toString [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should json stringify array body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should json stringify bool (false) body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should json stringify bool body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should json stringify literal string undefined body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should json stringify null body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should json stringify number (falsey) body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should json stringify number body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should json stringify object body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should json stringify string (falsey) body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should json stringify string body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should keep headers capitalization [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify array body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify bool (false) body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify bool body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify literal string undefined body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify null body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify number (falsey) body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify number body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify object body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify string (falsey) body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should not double stringify string body when content-type is application/json [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should not fail on empty body with encoding [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should not follow redirects when maxRedirects is set to 0 [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should propagate extra http headers with redirects [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should propagate ignoreHTTPSErrors on redirects [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should remove content-length from redirected post requests [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should resolve url relative to global baseURL option [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should retry ECONNRESET [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should return body for failing requests [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should return empty body [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should return error with correct credentials and mismatching hostname [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should return error with correct credentials and mismatching port [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should return error with correct credentials and mismatching scheme [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should return error with wrong credentials [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should serialize post data on the client [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should set playwright as user-agent [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should support HTTPCredentials.send [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should support WWW-Authenticate: Basic [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should support global httpCredentials option [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should support global ignoreHTTPSErrors option [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should support global timeout option [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should support global userAgent option [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should throw after dispose [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should throw an error when maxRedirects is exceeded [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should throw an error when maxRedirects is less than 0 [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should work with correct credentials and matching origin [pass] -bidi-chromium-library › library/global-fetch.spec.ts › should work with correct credentials and matching origin case insensitive [pass] -bidi-chromium-library › library/har.spec.ts › should attach content [fail] -bidi-chromium-library › library/har.spec.ts › should calculate time [pass] -bidi-chromium-library › library/har.spec.ts › should contain http2 for http2 requests [fail] -bidi-chromium-library › library/har.spec.ts › should filter by glob [pass] -bidi-chromium-library › library/har.spec.ts › should filter by regexp [pass] -bidi-chromium-library › library/har.spec.ts › should filter favicon and favicon redirects [unknown] -bidi-chromium-library › library/har.spec.ts › should have -1 _transferSize when its a failed request [pass] -bidi-chromium-library › library/har.spec.ts › should have browser [fail] -bidi-chromium-library › library/har.spec.ts › should have connection details [fail] -bidi-chromium-library › library/har.spec.ts › should have connection details for failed requests [fail] -bidi-chromium-library › library/har.spec.ts › should have connection details for redirects [fail] -bidi-chromium-library › library/har.spec.ts › should have different hars for concurrent contexts [pass] -bidi-chromium-library › library/har.spec.ts › should have pages [pass] -bidi-chromium-library › library/har.spec.ts › should have pages in persistent context [fail] -bidi-chromium-library › library/har.spec.ts › should have popup requests [pass] -bidi-chromium-library › library/har.spec.ts › should have security details [fail] -bidi-chromium-library › library/har.spec.ts › should have version and creator [pass] -bidi-chromium-library › library/har.spec.ts › should include API request [pass] -bidi-chromium-library › library/har.spec.ts › should include binary postData [fail] -bidi-chromium-library › library/har.spec.ts › should include content @smoke [fail] -bidi-chromium-library › library/har.spec.ts › should include cookies [pass] -bidi-chromium-library › library/har.spec.ts › should include form params [fail] -bidi-chromium-library › library/har.spec.ts › should include postData [fail] -bidi-chromium-library › library/har.spec.ts › should include query params [pass] -bidi-chromium-library › library/har.spec.ts › should include redirectURL [pass] -bidi-chromium-library › library/har.spec.ts › should include request [pass] -bidi-chromium-library › library/har.spec.ts › should include response [pass] -bidi-chromium-library › library/har.spec.ts › should include secure set-cookies [fail] -bidi-chromium-library › library/har.spec.ts › should include set-cookies [fail] -bidi-chromium-library › library/har.spec.ts › should include set-cookies with comma [fail] -bidi-chromium-library › library/har.spec.ts › should include sizes [fail] -bidi-chromium-library › library/har.spec.ts › should not contain internal pages [pass] -bidi-chromium-library › library/har.spec.ts › should not hang on resources served from cache [pass] -bidi-chromium-library › library/har.spec.ts › should not hang on slow chunked response [fail] -bidi-chromium-library › library/har.spec.ts › should omit content [pass] -bidi-chromium-library › library/har.spec.ts › should omit content legacy [pass] -bidi-chromium-library › library/har.spec.ts › should record failed request headers [pass] -bidi-chromium-library › library/har.spec.ts › should record failed request overrides [fail] -bidi-chromium-library › library/har.spec.ts › should record request overrides [fail] -bidi-chromium-library › library/har.spec.ts › should report the correct _transferSize with PNG files [fail] -bidi-chromium-library › library/har.spec.ts › should report the correct request body size [pass] -bidi-chromium-library › library/har.spec.ts › should report the correct request body size when the bodySize is 0 [pass] -bidi-chromium-library › library/har.spec.ts › should report the correct response body size when the bodySize is 0 [pass] -bidi-chromium-library › library/har.spec.ts › should return receive time [fail] -bidi-chromium-library › library/har.spec.ts › should return security details directly from response [fail] -bidi-chromium-library › library/har.spec.ts › should return server address directly from response [fail] -bidi-chromium-library › library/har.spec.ts › should skip invalid Expires [pass] -bidi-chromium-library › library/har.spec.ts › should throw without path [pass] -bidi-chromium-library › library/har.spec.ts › should use attach mode for zip extension [fail] -bidi-chromium-library › library/har.spec.ts › should work with gzip compression [fail] -bidi-chromium-library › library/headful.spec.ts › Page.bringToFront should work [pass] -bidi-chromium-library › library/headful.spec.ts › headless and headful should use same default fonts [fail] -bidi-chromium-library › library/headful.spec.ts › should click background tab [timeout] -bidi-chromium-library › library/headful.spec.ts › should click bottom row w/ infobar in OOPIF [fail] -bidi-chromium-library › library/headful.spec.ts › should click in OOPIF [fail] -bidi-chromium-library › library/headful.spec.ts › should click when viewport size is larger than screen [pass] -bidi-chromium-library › library/headful.spec.ts › should close browser after context menu was triggered [pass] -bidi-chromium-library › library/headful.spec.ts › should close browser with beforeunload page [fail] -bidi-chromium-library › library/headful.spec.ts › should close browsercontext with pending beforeunload dialog [timeout] -bidi-chromium-library › library/headful.spec.ts › should dispatch click events to oversized viewports [pass] -bidi-chromium-library › library/headful.spec.ts › should have default url when launching browser @smoke [fail] -bidi-chromium-library › library/headful.spec.ts › should not block third party SameSite=None cookies [fail] -bidi-chromium-library › library/headful.spec.ts › should not crash when creating second context [pass] -bidi-chromium-library › library/headful.spec.ts › should not override viewport size when passed null [fail] -bidi-chromium-library › library/headful.spec.ts › should(not) block third party cookies [pass] -bidi-chromium-library › library/hit-target.spec.ts › should block all events when hit target is wrong [pass] -bidi-chromium-library › library/hit-target.spec.ts › should block all events when hit target is wrong and element detaches [pass] -bidi-chromium-library › library/hit-target.spec.ts › should block click when mousedown fails [pass] -bidi-chromium-library › library/hit-target.spec.ts › should click an element inside closed shadow root [pass] -bidi-chromium-library › library/hit-target.spec.ts › should click in custom element [pass] -bidi-chromium-library › library/hit-target.spec.ts › should click in iframe with padding [pass] -bidi-chromium-library › library/hit-target.spec.ts › should click in iframe with padding 2 [pass] -bidi-chromium-library › library/hit-target.spec.ts › should click into frame inside closed shadow root [fail] -bidi-chromium-library › library/hit-target.spec.ts › should click the button again after document.write [pass] -bidi-chromium-library › library/hit-target.spec.ts › should click when element detaches in mousedown [pass] -bidi-chromium-library › library/hit-target.spec.ts › should detect overlaid element in a transformed iframe [fail] -bidi-chromium-library › library/hit-target.spec.ts › should detect overlay from another shadow root [pass] -bidi-chromium-library › library/hit-target.spec.ts › should not block programmatic events [pass] -bidi-chromium-library › library/hit-target.spec.ts › should not click an element overlaying iframe with the target [pass] -bidi-chromium-library › library/hit-target.spec.ts › should not click iframe overlaying the target [pass] -bidi-chromium-library › library/hit-target.spec.ts › should work with block inside inline [pass] -bidi-chromium-library › library/hit-target.spec.ts › should work with block inside inline in shadow dom [pass] -bidi-chromium-library › library/hit-target.spec.ts › should work with block-block-block inside inline-inline [pass] -bidi-chromium-library › library/hit-target.spec.ts › should work with drag and drop that moves the element under cursor [pass] -bidi-chromium-library › library/hit-target.spec.ts › should work with mui select [pass] -bidi-chromium-library › library/ignorehttpserrors.spec.ts › serviceWorker should intercept document request [fail] -bidi-chromium-library › library/ignorehttpserrors.spec.ts › should fail with WebSocket if not ignored [pass] -bidi-chromium-library › library/ignorehttpserrors.spec.ts › should isolate contexts [fail] -bidi-chromium-library › library/ignorehttpserrors.spec.ts › should work @smoke [fail] -bidi-chromium-library › library/ignorehttpserrors.spec.ts › should work with WebSocket [fail] -bidi-chromium-library › library/ignorehttpserrors.spec.ts › should work with mixed content [fail] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should assert navigation [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should await popup [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should check [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should check a radio button [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should check with keyboard [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should click [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should click after same-document navigation [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should click button with nested div [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should emit single keyup on ArrowDown [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill [contentEditable] [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill japanese text [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill textarea [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill textarea with new lines at the end [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should ignore AltGraph [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should ignore programmatic events [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should make a positioned click on a canvas [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should middle click [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should not target selector preview by text regexp [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should not throw csp directive violation errors [pass] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should press [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should record ArrowDown [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should record omnibox navigations after performAction [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should record omnibox navigations after recordAction [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should record slider [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should select [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should select with size attribute [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should uncheck [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should update selected element after pressing Tab [timeout] -bidi-chromium-library › library/inspector/cli-codegen-1.spec.ts › cli codegen › should work with TrustedTypes [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › click should emit events in order [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should --save-trace [fail] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should check input with chaining id [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should clear files [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain close page [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain open page [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain second page [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should download files [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should fill tricky characters [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should handle dialogs [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should handle history.postData [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should not clash pages [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should not lead to an error if html gets clicked [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should record navigations after identical pushState [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should record open in a new tab with url [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should reset hover model on action when element detaches [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should save assets via SIGINT [fail] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should update active model on action [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should update hover model on action [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should upload a single file [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › cli codegen › should upload multiple files [timeout] -bidi-chromium-library › library/inspector/cli-codegen-2.spec.ts › should --test-id-attribute [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value on disabled input [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value on disabled select [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert visibility [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should click locator.first [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should click locator.nth [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should consume contextmenu events, despite a custom context menu [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should consume pointer events [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with id attribute [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with name attribute [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with special characters in name attribute [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with testId [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with title attribute [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByAltText [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByLabel [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByLabel without regex [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByPlaceholder [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByTestId [timeout] -bidi-chromium-library › library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate role locators undef frame locators [timeout] -bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should not print context options method override in mstest if no options were passed [fail] -bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should not print context options method override in nunit if no options were passed [fail] -bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print a valid basic program in mstest [fail] -bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print a valid basic program in nunit [fail] -bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print context options method override in mstest if options were passed [fail] -bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print context options method override in nunit if options were passed [fail] -bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print load/save storageState [fail] -bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options for custom settings [fail] -bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options when using a device [unknown] -bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options when using a device and additional options [unknown] -bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should print the correct imports and context options [fail] -bidi-chromium-library › library/inspector/cli-codegen-csharp.spec.ts › should work with --save-har [fail] -bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print a valid basic program in junit [fail] -bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print load/save storage_state [fail] -bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print the correct context options for custom settings [fail] -bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print the correct context options when using a device [unknown] -bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print the correct context options when using a device and additional options [unknown] -bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print the correct imports and context options [fail] -bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should print the correct imports in junit [fail] -bidi-chromium-library › library/inspector/cli-codegen-java.spec.ts › should work with --save-har [fail] -bidi-chromium-library › library/inspector/cli-codegen-javascript.spec.ts › should print load/save storageState [fail] -bidi-chromium-library › library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options for custom settings [fail] -bidi-chromium-library › library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options when using a device [unknown] -bidi-chromium-library › library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options when using a device and additional options [unknown] -bidi-chromium-library › library/inspector/cli-codegen-javascript.spec.ts › should print the correct imports and context options [fail] -bidi-chromium-library › library/inspector/cli-codegen-javascript.spec.ts › should save the codegen output to a file if specified [fail] -bidi-chromium-library › library/inspector/cli-codegen-pytest.spec.ts › should print the correct context options when using a device and lang [unknown] -bidi-chromium-library › library/inspector/cli-codegen-pytest.spec.ts › should print the correct imports and context options [fail] -bidi-chromium-library › library/inspector/cli-codegen-pytest.spec.ts › should save the codegen output to a file if specified [fail] -bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should print load/save storage_state [fail] -bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options for custom settings [fail] -bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options when using a device [unknown] -bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options when using a device and additional options [unknown] -bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should print the correct imports and context options [fail] -bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should save the codegen output to a file if specified [fail] -bidi-chromium-library › library/inspector/cli-codegen-python-async.spec.ts › should work with --save-har [fail] -bidi-chromium-library › library/inspector/cli-codegen-python.spec.ts › should print load/save storage_state [fail] -bidi-chromium-library › library/inspector/cli-codegen-python.spec.ts › should print the correct context options for custom settings [fail] -bidi-chromium-library › library/inspector/cli-codegen-python.spec.ts › should print the correct context options when using a device [unknown] -bidi-chromium-library › library/inspector/cli-codegen-python.spec.ts › should print the correct context options when using a device and additional options [unknown] -bidi-chromium-library › library/inspector/cli-codegen-python.spec.ts › should print the correct imports and context options [fail] -bidi-chromium-library › library/inspector/cli-codegen-python.spec.ts › should save the codegen output to a file if specified [fail] -bidi-chromium-library › library/inspector/cli-codegen-test.spec.ts › should print load storageState [fail] -bidi-chromium-library › library/inspector/cli-codegen-test.spec.ts › should print the correct context options for custom settings [fail] -bidi-chromium-library › library/inspector/cli-codegen-test.spec.ts › should print the correct context options when using a device [unknown] -bidi-chromium-library › library/inspector/cli-codegen-test.spec.ts › should print the correct context options when using a device and additional options [unknown] -bidi-chromium-library › library/inspector/cli-codegen-test.spec.ts › should print the correct imports and context options [fail] -bidi-chromium-library › library/inspector/cli-codegen-test.spec.ts › should work with --save-har [fail] -bidi-chromium-library › library/inspector/console-api.spec.ts › expected properties on playwright object [pass] -bidi-chromium-library › library/inspector/console-api.spec.ts › should support locator.and() [pass] -bidi-chromium-library › library/inspector/console-api.spec.ts › should support locator.or() [pass] -bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.$, playwright.$$ [pass] -bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.getBy* [pass] -bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.locator({ has }) [pass] -bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.locator({ hasNot }) [pass] -bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.locator.value [pass] -bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.locator.values [pass] -bidi-chromium-library › library/inspector/console-api.spec.ts › should support playwright.selector [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should hide internal calls [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should highlight locators with custom testId [timeout] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should highlight on explore [timeout] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should highlight on explore (csharp) [timeout] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should highlight pointer, only in main frame [timeout] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should highlight waitForEvent [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should not prevent key events [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should pause after a navigation [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should pause and resume the script [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should pause and resume the script with keyboard shortcut [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should pause on context close [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should pause on next pause [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should pause on page close [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should populate log [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should populate log with error [fail] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should populate log with error in waitForEvent [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should populate log with waitForEvent [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should resume from console [fail] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should show expect.toHaveText [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should show source [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should skip input when resuming [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should step [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › pause › should step with keyboard shortcut [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › should not reset timeouts [pass] -bidi-chromium-library › library/inspector/pause.spec.ts › should resume when closing inspector [pass] -bidi-chromium-library › library/launcher.spec.ts › should have a devices object [pass] -bidi-chromium-library › library/launcher.spec.ts › should have an errors object [pass] -bidi-chromium-library › library/launcher.spec.ts › should kill browser process on timeout after close [pass] -bidi-chromium-library › library/launcher.spec.ts › should throw a friendly error if its headed and there is no xserver on linux running [fail] -bidi-chromium-library › library/locator-generator.spec.ts › asLocator internal:and [pass] -bidi-chromium-library › library/locator-generator.spec.ts › asLocator internal:chain [pass] -bidi-chromium-library › library/locator-generator.spec.ts › asLocator internal:or [pass] -bidi-chromium-library › library/locator-generator.spec.ts › asLocator xpath [pass] -bidi-chromium-library › library/locator-generator.spec.ts › generate multiple locators [pass] -bidi-chromium-library › library/locator-generator.spec.ts › parse locators strictly [pass] -bidi-chromium-library › library/locator-generator.spec.ts › parseLocator css [pass] -bidi-chromium-library › library/locator-generator.spec.ts › parseLocator quotes [pass] -bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer frameLocator [pass] -bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer getByRole [pass] -bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer has [pass] -bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer has + hasText [pass] -bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer hasNot [pass] -bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer hasNotText [pass] -bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer hasText [pass] -bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer ignore-case locators [pass] -bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer internal:has-text locators [pass] -bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer locators [pass] -bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer locators with regex [pass] -bidi-chromium-library › library/locator-generator.spec.ts › reverse engineer ordered locators [pass] -bidi-chromium-library › library/logger.spec.ts › should log @smoke [pass] -bidi-chromium-library › library/logger.spec.ts › should log context-level [pass] -bidi-chromium-library › library/modernizr.spec.ts › Mobile Safari [unknown] -bidi-chromium-library › library/modernizr.spec.ts › Safari Desktop [unknown] -bidi-chromium-library › library/page-clock.frozen.spec.ts › clock should be frozen [unknown] -bidi-chromium-library › library/page-clock.frozen.spec.ts › clock should be realtime [unknown] -bidi-chromium-library › library/page-clock.spec.ts › Date.now › check Date.now is an integer [pass] -bidi-chromium-library › library/page-clock.spec.ts › Date.now › check Date.now is an integer (2) [pass] -bidi-chromium-library › library/page-clock.spec.ts › fastForward › ignores timers which wouldn't be run [pass] -bidi-chromium-library › library/page-clock.spec.ts › fastForward › pushes back execution time for skipped timers [fail] -bidi-chromium-library › library/page-clock.spec.ts › fastForward › supports string time arguments [fail] -bidi-chromium-library › library/page-clock.spec.ts › popup › should not run time before popup on pause [fail] -bidi-chromium-library › library/page-clock.spec.ts › popup › should run time before popup [pass] -bidi-chromium-library › library/page-clock.spec.ts › popup › should tick after popup [fail] -bidi-chromium-library › library/page-clock.spec.ts › popup › should tick before popup [fail] -bidi-chromium-library › library/page-clock.spec.ts › runFor › creates updated Date while ticking [fail] -bidi-chromium-library › library/page-clock.spec.ts › runFor › does not trigger without sufficient delay [pass] -bidi-chromium-library › library/page-clock.spec.ts › runFor › passes 1 minute [fail] -bidi-chromium-library › library/page-clock.spec.ts › runFor › passes 2 hours, 34 minutes and 10 seconds [fail] -bidi-chromium-library › library/page-clock.spec.ts › runFor › passes 8 seconds [fail] -bidi-chromium-library › library/page-clock.spec.ts › runFor › returns the current now value [pass] -bidi-chromium-library › library/page-clock.spec.ts › runFor › throws for invalid format [pass] -bidi-chromium-library › library/page-clock.spec.ts › runFor › triggers after sufficient delay [fail] -bidi-chromium-library › library/page-clock.spec.ts › runFor › triggers event when some throw [fail] -bidi-chromium-library › library/page-clock.spec.ts › runFor › triggers immediately without specified delay [fail] -bidi-chromium-library › library/page-clock.spec.ts › runFor › triggers multiple simultaneous timers [fail] -bidi-chromium-library › library/page-clock.spec.ts › runFor › triggers simultaneous timers [fail] -bidi-chromium-library › library/page-clock.spec.ts › runFor › waits after setTimeout was called [fail] -bidi-chromium-library › library/page-clock.spec.ts › setFixedTime › allows installing fake timers after settings time [fail] -bidi-chromium-library › library/page-clock.spec.ts › setFixedTime › allows setting time multiple times [pass] -bidi-chromium-library › library/page-clock.spec.ts › setFixedTime › does not fake methods [pass] -bidi-chromium-library › library/page-clock.spec.ts › setFixedTime › fixed time is not affected by clock manipulation [pass] -bidi-chromium-library › library/page-clock.spec.ts › stubTimers › fakes Date constructor [pass] -bidi-chromium-library › library/page-clock.spec.ts › stubTimers › global fake setTimeout should return id [pass] -bidi-chromium-library › library/page-clock.spec.ts › stubTimers › replaces global clearInterval [pass] -bidi-chromium-library › library/page-clock.spec.ts › stubTimers › replaces global clearTimeout [pass] -bidi-chromium-library › library/page-clock.spec.ts › stubTimers › replaces global performance.now [pass] -bidi-chromium-library › library/page-clock.spec.ts › stubTimers › replaces global performance.timeOrigin [pass] -bidi-chromium-library › library/page-clock.spec.ts › stubTimers › replaces global setInterval [fail] -bidi-chromium-library › library/page-clock.spec.ts › stubTimers › replaces global setTimeout [fail] -bidi-chromium-library › library/page-clock.spec.ts › stubTimers › sets initial timestamp [pass] -bidi-chromium-library › library/page-clock.spec.ts › stubTimers › should throw for invalid date [pass] -bidi-chromium-library › library/page-clock.spec.ts › while on pause › fastForward should not run nested immediate [fail] -bidi-chromium-library › library/page-clock.spec.ts › while on pause › runFor should not run nested immediate [fail] -bidi-chromium-library › library/page-clock.spec.ts › while on pause › runFor should not run nested immediate from microtask [fail] -bidi-chromium-library › library/page-clock.spec.ts › while running › should fastForward [pass] -bidi-chromium-library › library/page-clock.spec.ts › while running › should fastForwardTo [pass] -bidi-chromium-library › library/page-clock.spec.ts › while running › should pause [pass] -bidi-chromium-library › library/page-clock.spec.ts › while running › should pause and fastForward [pass] -bidi-chromium-library › library/page-clock.spec.ts › while running › should progress time [pass] -bidi-chromium-library › library/page-clock.spec.ts › while running › should runFor [pass] -bidi-chromium-library › library/page-clock.spec.ts › while running › should set system time on pause [pass] -bidi-chromium-library › library/page-event-crash.spec.ts › should be able to close context when page crashes [timeout] -bidi-chromium-library › library/page-event-crash.spec.ts › should cancel navigation when page crashes [timeout] -bidi-chromium-library › library/page-event-crash.spec.ts › should cancel waitForEvent when page crashes [timeout] -bidi-chromium-library › library/page-event-crash.spec.ts › should emit crash event when page crashes [timeout] -bidi-chromium-library › library/page-event-crash.spec.ts › should throw on any action after page crashes [timeout] -bidi-chromium-library › library/pdf.spec.ts › should be able to generate outline [unknown] -bidi-chromium-library › library/pdf.spec.ts › should be able to save file [unknown] -bidi-chromium-library › library/permissions.spec.ts › permissions › should accumulate when adding [fail] -bidi-chromium-library › library/permissions.spec.ts › permissions › should be prompt by default [pass] -bidi-chromium-library › library/permissions.spec.ts › permissions › should clear permissions [fail] -bidi-chromium-library › library/permissions.spec.ts › permissions › should deny permission when not listed [fail] -bidi-chromium-library › library/permissions.spec.ts › permissions › should fail when bad permission is given [fail] -bidi-chromium-library › library/permissions.spec.ts › permissions › should grant geolocation permission when origin is listed [fail] -bidi-chromium-library › library/permissions.spec.ts › permissions › should grant notifications permission when listed [fail] -bidi-chromium-library › library/permissions.spec.ts › permissions › should grant permission when creating context [fail] -bidi-chromium-library › library/permissions.spec.ts › permissions › should grant permission when listed for all domains [fail] -bidi-chromium-library › library/permissions.spec.ts › permissions › should isolate permissions between browser contexts [fail] -bidi-chromium-library › library/permissions.spec.ts › permissions › should prompt for geolocation permission when origin is not listed [pass] -bidi-chromium-library › library/permissions.spec.ts › permissions › should reset permissions [fail] -bidi-chromium-library › library/permissions.spec.ts › permissions › should trigger permission onchange [fail] -bidi-chromium-library › library/permissions.spec.ts › should support clipboard read [fail] -bidi-chromium-library › library/permissions.spec.ts › storage access [unknown] -bidi-chromium-library › library/popup.spec.ts › BrowserContext.addInitScript should apply to a cross-process popup [fail] -bidi-chromium-library › library/popup.spec.ts › BrowserContext.addInitScript should apply to an in-process popup [fail] -bidi-chromium-library › library/popup.spec.ts › should expose function from browser context [fail] -bidi-chromium-library › library/popup.spec.ts › should inherit extra headers from browser context [fail] -bidi-chromium-library › library/popup.spec.ts › should inherit http credentials from browser context [fail] -bidi-chromium-library › library/popup.spec.ts › should inherit offline from browser context [fail] -bidi-chromium-library › library/popup.spec.ts › should inherit touch support from browser context [fail] -bidi-chromium-library › library/popup.spec.ts › should inherit user agent from browser context @smoke [fail] -bidi-chromium-library › library/popup.spec.ts › should inherit viewport size from browser context [fail] -bidi-chromium-library › library/popup.spec.ts › should not dispatch binding on a closed page [fail] -bidi-chromium-library › library/popup.spec.ts › should not throttle rAF in the opener page [pass] -bidi-chromium-library › library/popup.spec.ts › should not throw when click closes popup [pass] -bidi-chromium-library › library/popup.spec.ts › should respect routes from browser context [fail] -bidi-chromium-library › library/popup.spec.ts › should respect routes from browser context when using window.open [fail] -bidi-chromium-library › library/popup.spec.ts › should use viewport size from window features [timeout] -bidi-chromium-library › library/proxy-pattern.spec.ts › socks proxy patter matcher [pass] -bidi-chromium-library › library/proxy.spec.ts › does launch without a port [pass] -bidi-chromium-library › library/proxy.spec.ts › should authenticate [fail] -bidi-chromium-library › library/proxy.spec.ts › should exclude patterns [pass] -bidi-chromium-library › library/proxy.spec.ts › should proxy local network requests › by default › link-local [pass] -bidi-chromium-library › library/proxy.spec.ts › should proxy local network requests › by default › localhost [pass] -bidi-chromium-library › library/proxy.spec.ts › should proxy local network requests › by default › loopback address [pass] -bidi-chromium-library › library/proxy.spec.ts › should proxy local network requests › with other bypasses › link-local [pass] -bidi-chromium-library › library/proxy.spec.ts › should proxy local network requests › with other bypasses › localhost [pass] -bidi-chromium-library › library/proxy.spec.ts › should proxy local network requests › with other bypasses › loopback address [pass] -bidi-chromium-library › library/proxy.spec.ts › should throw for bad server value [pass] -bidi-chromium-library › library/proxy.spec.ts › should use SOCKS proxy for websocket requests [pass] -bidi-chromium-library › library/proxy.spec.ts › should use proxy @smoke [pass] -bidi-chromium-library › library/proxy.spec.ts › should use proxy for second page [pass] -bidi-chromium-library › library/proxy.spec.ts › should use proxy with emulated user agent [unknown] -bidi-chromium-library › library/proxy.spec.ts › should use socks proxy [pass] -bidi-chromium-library › library/proxy.spec.ts › should use socks proxy in second page [pass] -bidi-chromium-library › library/proxy.spec.ts › should work with IP:PORT notion [pass] -bidi-chromium-library › library/proxy.spec.ts › should work with authenticate followed by redirect [fail] -bidi-chromium-library › library/resource-timing.spec.ts › should work @smoke [pass] -bidi-chromium-library › library/resource-timing.spec.ts › should work for SSL [fail] -bidi-chromium-library › library/resource-timing.spec.ts › should work for redirect [fail] -bidi-chromium-library › library/resource-timing.spec.ts › should work for subresource [fail] -bidi-chromium-library › library/resource-timing.spec.ts › should work when serving from memory cache [fail] -bidi-chromium-library › library/role-utils.spec.ts › accessible name nested treeitem [pass] -bidi-chromium-library › library/role-utils.spec.ts › accessible name with slots [pass] -bidi-chromium-library › library/role-utils.spec.ts › axe-core accessible-text [pass] -bidi-chromium-library › library/role-utils.spec.ts › axe-core implicit-role [pass] -bidi-chromium-library › library/role-utils.spec.ts › control embedded in a label [pass] -bidi-chromium-library › library/role-utils.spec.ts › control embedded in a target element [pass] -bidi-chromium-library › library/role-utils.spec.ts › display:contents should be visible when contents are visible [pass] -bidi-chromium-library › library/role-utils.spec.ts › label/labelled-by aria-hidden with descendants [pass] -bidi-chromium-library › library/role-utils.spec.ts › native controls [pass] -bidi-chromium-library › library/role-utils.spec.ts › native controls labelled-by [pass] -bidi-chromium-library › library/role-utils.spec.ts › own aria-label concatenated with aria-labelledby [pass] -bidi-chromium-library › library/role-utils.spec.ts › should ignore stylesheet from hidden aria-labelledby subtree [pass] -bidi-chromium-library › library/role-utils.spec.ts › should not include hidden pseudo into accessible name [pass] -bidi-chromium-library › library/role-utils.spec.ts › should work with form and tricky input names [pass] -bidi-chromium-library › library/role-utils.spec.ts › svg role=presentation [pass] -bidi-chromium-library › library/role-utils.spec.ts › svg title [pass] -bidi-chromium-library › library/role-utils.spec.ts › wpt accname #0 [pass] -bidi-chromium-library › library/role-utils.spec.ts › wpt accname #1 [pass] -bidi-chromium-library › library/role-utils.spec.ts › wpt accname #2 [pass] -bidi-chromium-library › library/role-utils.spec.ts › wpt accname #3 [pass] -bidi-chromium-library › library/role-utils.spec.ts › wpt accname non-manual [pass] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › element screenshot should work with a mobile viewport [fail] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › element screenshot should work with device scale factor [fail] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › element screenshots should handle vh units [fail] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › page screenshot should capture css transform with device pixels [fail] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should capture full element when larger than viewport with device scale factor [fail] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should capture full element when larger than viewport with device scale factor and scale:css [fail] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should restore default viewport after fullPage screenshot [fail] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should restore viewport after element screenshot and exception [pass] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should restore viewport after page screenshot and exception [pass] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should restore viewport after page screenshot and timeout [fail] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should take element screenshot when default viewport is null and restore back [fail] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should take fullPage screenshots when default viewport is null [fail] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should take screenshots when default viewport is null [fail] -bidi-chromium-library › library/screenshot.spec.ts › element screenshot › should work if the main resource hangs [fail] -bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should handle vh units [fail] -bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should run in parallel in multiple pages [fail] -bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should throw if screenshot size is too large with device scale factor [fail] -bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with a mobile viewport [fail] -bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with a mobile viewport and clip [fail] -bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with a mobile viewport and fullPage [fail] -bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with device scale factor [fail] -bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with device scale factor and clip [fail] -bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with device scale factor and scale:css [fail] -bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with device scale factor, clip and scale:css [fail] -bidi-chromium-library › library/screenshot.spec.ts › page screenshot › should work with large size [fail] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should accept valid aria-label for candidate consideration [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should accept valid data-test-id for candidate consideration [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should chain text after parent [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should escape text with quote [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should escape text with slash [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should find text in shadow dom [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact label when necessary [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact placeholder when necessary [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact role when necessary [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact text when necessary [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate exact title when necessary [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate label selector [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noId [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noId noText [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noText in role [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate multiple: noText in text [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate relative selector [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate text and normalize whitespace [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate text for [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should generate title selector [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should handle first non-unique data-testid [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should handle second non-unique data-testid [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should ignore empty aria-label for candidate consideration [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should ignore empty data-test-id for candidate consideration [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should ignore empty role for candidate consideration [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should match in deep shadow dom [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should match in shadow dom [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not accept invalid role for candidate consideration [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not escape spaces inside named attr selectors [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not escape text with >> [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not improve guid text [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not prefer zero-sized button over inner span [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not use generated id [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not use input[value] [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should not use text for select [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer button over inner span [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer data-testid [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer role other input[type] [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prefer role=button over inner span [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › name [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › placeholder [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › role [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › type [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should properly join child selectors under nested ordinals [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should separate selectors by >> [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should trim long text [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should trim text [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should try to improve label text by shortening [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should try to improve role name [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should try to improve text [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should try to improve text by shortening [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use data-testid in strict errors [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp with a quote [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use nested ordinals [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use ordinal for identical nodes [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use parent text [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use readable id [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should use the name attributes for elements that can have it [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should work in dynamic iframes without navigation [fail] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should work with tricky attributes [pass] -bidi-chromium-library › library/selector-generator.spec.ts › selector generator › should work without CSS.escape [pass] -bidi-chromium-library › library/selectors-register.spec.ts › should handle errors [pass] -bidi-chromium-library › library/selectors-register.spec.ts › should not rely on engines working from the root [pass] -bidi-chromium-library › library/selectors-register.spec.ts › should throw a nice error if the selector returns a bad value [pass] -bidi-chromium-library › library/selectors-register.spec.ts › should work [pass] -bidi-chromium-library › library/selectors-register.spec.ts › should work in main and isolated world [pass] -bidi-chromium-library › library/selectors-register.spec.ts › should work when registered on global [pass] -bidi-chromium-library › library/selectors-register.spec.ts › should work with path [pass] -bidi-chromium-library › library/shared-worker.spec.ts › should survive shared worker restart [timeout] -bidi-chromium-library › library/signals.spec.ts › should close the browser when the node process closes [timeout] -bidi-chromium-library › library/signals.spec.ts › should remove temp dir on process.exit [timeout] -bidi-chromium-library › library/signals.spec.ts › signals › should close the browser on SIGHUP [timeout] -bidi-chromium-library › library/signals.spec.ts › signals › should close the browser on SIGINT [timeout] -bidi-chromium-library › library/signals.spec.ts › signals › should close the browser on SIGTERM [timeout] -bidi-chromium-library › library/signals.spec.ts › signals › should kill the browser on SIGINT + SIGTERM [timeout] -bidi-chromium-library › library/signals.spec.ts › signals › should kill the browser on SIGTERM + SIGINT [timeout] -bidi-chromium-library › library/signals.spec.ts › signals › should kill the browser on double SIGINT and remove temp dir [timeout] -bidi-chromium-library › library/signals.spec.ts › signals › should not prevent default SIGTERM handling after browser close [timeout] -bidi-chromium-library › library/signals.spec.ts › signals › should report browser close signal 2 [timeout] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo check [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo click [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dblclick [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dispatchEvent [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo fill [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo focus [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo hover [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo press [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo selectOption [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo setInputFiles [fail] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo type [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo uncheck [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo check [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo click [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo dblclick [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo dispatchEvent [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo fill [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo focus [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo goto [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo hover [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo press [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo selectOption [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo setInputFiles [timeout] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo type [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Frame SlowMo uncheck [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo check [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo click [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo dblclick [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo dispatchEvent [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo fill [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo focus [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo goto [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo hover [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo press [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo reload [timeout] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo selectOption [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo setInputFiles [timeout] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo type [pass] -bidi-chromium-library › library/slowmo.spec.ts › slowMo › Page SlowMo uncheck [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › empty adopted style sheets should not prevent node refs [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture frame [fail] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture iframe [fail] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture iframe with srcdoc [fail] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture resources [fail] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should capture snapshot target [timeout] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should collect multiple [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should collect on attribute change [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should collect snapshot [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should have a custom doctype [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should not navigate on anchor clicks [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should preserve BASE and other content on reset [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should replace meta charset attr that specifies charset [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should replace meta content attr that specifies charset [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect CSSOM change through CSSGroupingRule [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect attr removal [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect inline CSSOM change [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect node removal [pass] -bidi-chromium-library › library/snapshotter.spec.ts › snapshots › should respect subresource CSSOM change [fail] -bidi-chromium-library › library/tap.spec.ts › locators › should send all of the correct events [fail] -bidi-chromium-library › library/tap.spec.ts › should not send mouse events touchstart is canceled [fail] -bidi-chromium-library › library/tap.spec.ts › should not send mouse events when touchend is canceled [fail] -bidi-chromium-library › library/tap.spec.ts › should not wait for a navigation caused by a tap [fail] -bidi-chromium-library › library/tap.spec.ts › should send all of the correct events @smoke [fail] -bidi-chromium-library › library/tap.spec.ts › should send well formed touch points [fail] -bidi-chromium-library › library/tap.spec.ts › should wait until an element is visible to tap it [fail] -bidi-chromium-library › library/tap.spec.ts › should work with modifiers [fail] -bidi-chromium-library › library/tap.spec.ts › trial run should not tap [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should allow hiding route actions [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should allow showing screenshots instead of snapshots [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should capture data-url svg iframe [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should capture iframe with sandbox attribute [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should complain about newer version of trace in old viewer [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should contain action info [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should contain adopted style sheets [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should display language-specific locators [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should display waitForLoadState even if did not wait for it [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should filter network requests by resource type [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should filter network requests by url [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should follow redirects [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should handle case where neither snapshots nor screenshots exist [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should handle file URIs [unknown] -bidi-chromium-library › library/trace-viewer.spec.ts › should handle multiple headers [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should handle src=blob [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should have correct snapshot size [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should have correct stack trace [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should have network request overrides [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should have network request overrides 2 [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should have network requests [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should highlight expect failure [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should highlight locator in iframe while typing [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should highlight target element in shadow dom [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should highlight target elements [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should ignore 304 responses [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should include metainfo [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should include requestUrl in route.abort [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should include requestUrl in route.continue [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should include requestUrl in route.fulfill [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should not crash with broken locator [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open console errors on click [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should open simple trace viewer [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open snapshot in new browser context [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open trace viewer on specific host [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open trace-1.31 [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open trace-1.37 [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open two trace files [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open two trace files of the same test [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should open two trace viewers [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should pick locator [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should pick locator in iframe [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should popup snapshot [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should prefer later resource request with the same method [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should preserve currentSrc [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should preserve noscript when javascript is disabled [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should register custom elements [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should remove noscript by default [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should remove noscript when javaScriptEnabled is set to true [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should render console [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should render network bars [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should restore control values [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should restore scroll positions [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should serve css without content-type [timeout] -bidi-chromium-library › library/trace-viewer.spec.ts › should serve overridden request [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should show action source [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should show baseURL in metadata pane [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should show correct request start time [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should show empty trace viewer [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should show font preview [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should show null as a param [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should show only one pointer with multilevel iframes [unknown] -bidi-chromium-library › library/trace-viewer.spec.ts › should show params and return value [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should show similar actions from library-only trace [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should show snapshot URL [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should update highlight when typing [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should work with adopted style sheets and all: unset [fail] -bidi-chromium-library › library/trace-viewer.spec.ts › should work with adopted style sheets and replace/replaceSync [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should work with meta CSP [pass] -bidi-chromium-library › library/trace-viewer.spec.ts › should work with nesting CSS selectors [pass] -bidi-chromium-library › library/tracing.spec.ts › should collect sources [pass] -bidi-chromium-library › library/tracing.spec.ts › should collect trace with resources, but no js [timeout] -bidi-chromium-library › library/tracing.spec.ts › should collect two traces [pass] -bidi-chromium-library › library/tracing.spec.ts › should exclude internal pages [pass] -bidi-chromium-library › library/tracing.spec.ts › should export trace concurrently to second navigation [fail] -bidi-chromium-library › library/tracing.spec.ts › should flush console events on tracing stop [pass] -bidi-chromium-library › library/tracing.spec.ts › should hide internal stack frames [pass] -bidi-chromium-library › library/tracing.spec.ts › should hide internal stack frames in expect [pass] -bidi-chromium-library › library/tracing.spec.ts › should ignore iframes in head [pass] -bidi-chromium-library › library/tracing.spec.ts › should include context API requests [pass] -bidi-chromium-library › library/tracing.spec.ts › should include interrupted actions [pass] -bidi-chromium-library › library/tracing.spec.ts › should not collect snapshots by default [pass] -bidi-chromium-library › library/tracing.spec.ts › should not crash when browser closes mid-trace [pass] -bidi-chromium-library › library/tracing.spec.ts › should not emit after w/o before [pass] -bidi-chromium-library › library/tracing.spec.ts › should not flush console events [pass] -bidi-chromium-library › library/tracing.spec.ts › should not hang for clicks that open dialogs [pass] -bidi-chromium-library › library/tracing.spec.ts › should not include buffers in the trace [fail] -bidi-chromium-library › library/tracing.spec.ts › should not include trace resources from the previous chunks [fail] -bidi-chromium-library › library/tracing.spec.ts › should not stall on dialogs [pass] -bidi-chromium-library › library/tracing.spec.ts › should not throw when stopping without start but not exporting [pass] -bidi-chromium-library › library/tracing.spec.ts › should overwrite existing file [fail] -bidi-chromium-library › library/tracing.spec.ts › should produce screencast frames crop [fail] -bidi-chromium-library › library/tracing.spec.ts › should produce screencast frames fit [fail] -bidi-chromium-library › library/tracing.spec.ts › should produce screencast frames scale [fail] -bidi-chromium-library › library/tracing.spec.ts › should record global request trace [pass] -bidi-chromium-library › library/tracing.spec.ts › should record network failures [fail] -bidi-chromium-library › library/tracing.spec.ts › should respect tracesDir and name [fail] -bidi-chromium-library › library/tracing.spec.ts › should store global request traces separately [pass] -bidi-chromium-library › library/tracing.spec.ts › should store postData for global request [pass] -bidi-chromium-library › library/tracing.spec.ts › should survive browser.close with auto-created traces dir [pass] -bidi-chromium-library › library/tracing.spec.ts › should throw when starting with different options [pass] -bidi-chromium-library › library/tracing.spec.ts › should throw when stopping without start [pass] -bidi-chromium-library › library/tracing.spec.ts › should use the correct apiName for event driven callbacks [fail] -bidi-chromium-library › library/tracing.spec.ts › should work with multiple chunks [pass] -bidi-chromium-library › library/unroute-behavior.spec.ts › context.close should not wait for active route handlers on the owned pages [fail] -bidi-chromium-library › library/unroute-behavior.spec.ts › context.unroute should not wait for pending handlers to complete [timeout] -bidi-chromium-library › library/unroute-behavior.spec.ts › context.unrouteAll removes all handlers [pass] -bidi-chromium-library › library/unroute-behavior.spec.ts › context.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [timeout] -bidi-chromium-library › library/unroute-behavior.spec.ts › context.unrouteAll should wait for pending handlers to complete [timeout] -bidi-chromium-library › library/unroute-behavior.spec.ts › page.close does not wait for active route handlers [fail] -bidi-chromium-library › library/unroute-behavior.spec.ts › page.close should not wait for active route handlers on the owning context [fail] -bidi-chromium-library › library/unroute-behavior.spec.ts › page.unroute should not wait for pending handlers to complete [fail] -bidi-chromium-library › library/unroute-behavior.spec.ts › page.unrouteAll removes all routes [fail] -bidi-chromium-library › library/unroute-behavior.spec.ts › page.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [fail] -bidi-chromium-library › library/unroute-behavior.spec.ts › page.unrouteAll should wait for pending handlers to complete [fail] -bidi-chromium-library › library/unroute-behavior.spec.ts › route.continue should not throw if page has been closed [fail] -bidi-chromium-library › library/unroute-behavior.spec.ts › route.fallback should not throw if page has been closed [fail] -bidi-chromium-library › library/unroute-behavior.spec.ts › route.fulfill should not throw if page has been closed [fail] -bidi-chromium-library › library/video.spec.ts › screencast › saveAs should throw when no video frames [pass] -bidi-chromium-library › library/video.spec.ts › screencast › should be 800x450 by default [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should be 800x600 with null viewport [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should capture css transformation [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should capture full viewport [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should capture full viewport on hidpi [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should capture navigation [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should capture static page [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should capture static page in persistent context @smoke [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should continue recording main page after popup closes [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should delete video [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should emulate an iphone [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should expose video path [timeout] -bidi-chromium-library › library/video.spec.ts › screencast › should expose video path blank page [timeout] -bidi-chromium-library › library/video.spec.ts › screencast › should expose video path blank popup [timeout] -bidi-chromium-library › library/video.spec.ts › screencast › should not create video for internal pages [unknown] -bidi-chromium-library › library/video.spec.ts › screencast › should scale frames down to the requested size [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should throw if browser dies [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should throw on browser close [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should throw without recordVideo.dir [pass] -bidi-chromium-library › library/video.spec.ts › screencast › should use viewport scaled down to fit into 800x800 as default size [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should wait for video to finish if page was closed [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should work for popups [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should work with old options [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should work with relative path for recordVideo.dir [timeout] -bidi-chromium-library › library/video.spec.ts › screencast › should work with video+trace [fail] -bidi-chromium-library › library/video.spec.ts › screencast › should work with weird screen resolution [timeout] -bidi-chromium-library › library/video.spec.ts › screencast › videoSize should require videosPath [pass] -bidi-chromium-library › library/video.spec.ts › should saveAs video [fail] -bidi-chromium-library › library/web-socket.spec.ts › should emit binary frame events [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should emit close events [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should emit error [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should emit frame events [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should filter out the close events when the server closes with a message [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should not have stray error events [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should pass self as argument to close event [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should reject waitForEvent on page close [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should reject waitForEvent on socket close [timeout] -bidi-chromium-library › library/web-socket.spec.ts › should turn off when offline [unknown] -bidi-chromium-library › library/web-socket.spec.ts › should work @smoke [pass] \ No newline at end of file +library/beforeunload.spec.ts › should access page after beforeunload [timeout] +library/beforeunload.spec.ts › should be able to navigate away from page with beforeunload [pass] +library/beforeunload.spec.ts › should close browser with beforeunload page [pass] +library/beforeunload.spec.ts › should close browsercontext with beforeunload page [pass] +library/beforeunload.spec.ts › should close page with beforeunload listener [pass] +library/beforeunload.spec.ts › should not stall on evaluate when dismissing beforeunload [pass] +library/beforeunload.spec.ts › should run beforeunload if asked for @smoke [timeout] +library/browser.spec.ts › should create new page @smoke [pass] +library/browser.spec.ts › should dispatch page.on(close) upon browser.close and reject evaluate [fail] +library/browser.spec.ts › should return browserType [pass] +library/browser.spec.ts › should throw upon second create new page [pass] +library/browser.spec.ts › version should work [fail] +library/browsercontext-add-cookies.spec.ts › should add cookies with empty value [fail] +library/browsercontext-add-cookies.spec.ts › should allow unnamed cookies [fail] +library/browsercontext-add-cookies.spec.ts › should be able to set unsecure cookie for HTTP website [pass] +library/browsercontext-add-cookies.spec.ts › should default to setting secure cookie for HTTPS websites [pass] +library/browsercontext-add-cookies.spec.ts › should have |expires| set to |-1| for session cookies [pass] +library/browsercontext-add-cookies.spec.ts › should isolate cookies between launches [pass] +library/browsercontext-add-cookies.spec.ts › should isolate cookies in browser contexts [pass] +library/browsercontext-add-cookies.spec.ts › should isolate persistent cookies [pass] +library/browsercontext-add-cookies.spec.ts › should isolate send cookie header [pass] +library/browsercontext-add-cookies.spec.ts › should isolate session cookies [pass] +library/browsercontext-add-cookies.spec.ts › should not block third party SameSite=None cookies [fail] +library/browsercontext-add-cookies.spec.ts › should not set a cookie on a data URL page [pass] +library/browsercontext-add-cookies.spec.ts › should not set a cookie with blank page URL [pass] +library/browsercontext-add-cookies.spec.ts › should roundtrip cookie [fail] +library/browsercontext-add-cookies.spec.ts › should send cookie header [pass] +library/browsercontext-add-cookies.spec.ts › should set a cookie on a different domain [pass] +library/browsercontext-add-cookies.spec.ts › should set a cookie with a path [pass] +library/browsercontext-add-cookies.spec.ts › should set cookie with reasonable defaults [fail] +library/browsercontext-add-cookies.spec.ts › should set cookies for a frame [pass] +library/browsercontext-add-cookies.spec.ts › should set multiple cookies [pass] +library/browsercontext-add-cookies.spec.ts › should set secure cookies on secure WebSocket [fail] +library/browsercontext-add-cookies.spec.ts › should work @smoke [pass] +library/browsercontext-add-cookies.spec.ts › should work with expires=-1 [fail] +library/browsercontext-add-cookies.spec.ts › should(not) block third party cookies [pass] +library/browsercontext-add-init-script.spec.ts › should work with browser context scripts @smoke [pass] +library/browsercontext-add-init-script.spec.ts › should work with browser context scripts for already created pages [pass] +library/browsercontext-add-init-script.spec.ts › should work with browser context scripts with a path [pass] +library/browsercontext-add-init-script.spec.ts › should work without navigation in popup [fail] +library/browsercontext-add-init-script.spec.ts › should work without navigation, after all bindings [fail] +library/browsercontext-base-url.spec.ts › should be able to match a URL relative to its given URL with urlMatcher [fail] +library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browser.newContext is passed to page.goto @smoke [pass] +library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browser.newPage is passed to page.goto [pass] +library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browserType.launchPersistentContext is passed to page.goto [fail] +library/browsercontext-base-url.spec.ts › should construct the URLs correctly when a baseURL with a trailing slash in browser.newPage is passed to page.goto [pass] +library/browsercontext-base-url.spec.ts › should construct the URLs correctly when a baseURL without a trailing slash in browser.newPage is passed to page.goto [pass] +library/browsercontext-base-url.spec.ts › should not construct a new URL when valid URLs are passed [pass] +library/browsercontext-base-url.spec.ts › should not construct a new URL with baseURL when a glob was used [pass] +library/browsercontext-basic.spec.ts › close() should abort waitForEvent [pass] +library/browsercontext-basic.spec.ts › close() should be callable twice [pass] +library/browsercontext-basic.spec.ts › close() should work for empty context [pass] +library/browsercontext-basic.spec.ts › default user agent [pass] +library/browsercontext-basic.spec.ts › setContent should work after disabling javascript [pass] +library/browsercontext-basic.spec.ts › should be able to click across browser contexts [pass] +library/browsercontext-basic.spec.ts › should be able to navigate after disabling javascript [pass] +library/browsercontext-basic.spec.ts › should close all belonging pages once closing context [pass] +library/browsercontext-basic.spec.ts › should create new context @smoke [pass] +library/browsercontext-basic.spec.ts › should disable javascript [fail] +library/browsercontext-basic.spec.ts › should emulate media in cross-process iframe [fail] +library/browsercontext-basic.spec.ts › should emulate media in popup [fail] +library/browsercontext-basic.spec.ts › should emulate navigator.onLine [fail] +library/browsercontext-basic.spec.ts › should isolate localStorage and cookies @smoke [pass] +library/browsercontext-basic.spec.ts › should make a copy of default viewport [pass] +library/browsercontext-basic.spec.ts › should not allow deviceScaleFactor with null viewport [pass] +library/browsercontext-basic.spec.ts › should not allow isMobile with null viewport [pass] +library/browsercontext-basic.spec.ts › should not hang on promises after disabling javascript [pass] +library/browsercontext-basic.spec.ts › should not report frameless pages on error [pass] +library/browsercontext-basic.spec.ts › should pass self to close event [pass] +library/browsercontext-basic.spec.ts › should propagate default viewport to the page [pass] +library/browsercontext-basic.spec.ts › should respect deviceScaleFactor [pass] +library/browsercontext-basic.spec.ts › should return all of the pages [pass] +library/browsercontext-basic.spec.ts › should work with offline option [fail] +library/browsercontext-basic.spec.ts › window.open should use parent tab context [pass] +library/browsercontext-clearcookies.spec.ts › should clear cookies [pass] +library/browsercontext-clearcookies.spec.ts › should isolate cookies when clearing [pass] +library/browsercontext-clearcookies.spec.ts › should remove cookies by domain [fail] +library/browsercontext-clearcookies.spec.ts › should remove cookies by name [fail] +library/browsercontext-clearcookies.spec.ts › should remove cookies by name and domain [fail] +library/browsercontext-clearcookies.spec.ts › should remove cookies by name regex [fail] +library/browsercontext-clearcookies.spec.ts › should remove cookies by path [fail] +library/browsercontext-cookies.spec.ts › should add cookies with an expiration [pass] +library/browsercontext-cookies.spec.ts › should be able to send third party cookies via an iframe [fail] +library/browsercontext-cookies.spec.ts › should get a cookie @smoke [fail] +library/browsercontext-cookies.spec.ts › should get a non-session cookie [fail] +library/browsercontext-cookies.spec.ts › should get cookies from multiple urls [pass] +library/browsercontext-cookies.spec.ts › should get multiple cookies [fail] +library/browsercontext-cookies.spec.ts › should parse cookie with large Max-Age correctly [fail] +library/browsercontext-cookies.spec.ts › should properly report "Lax" sameSite cookie [pass] +library/browsercontext-cookies.spec.ts › should properly report "Strict" sameSite cookie [pass] +library/browsercontext-cookies.spec.ts › should properly report httpOnly cookie [pass] +library/browsercontext-cookies.spec.ts › should return cookies with empty value [pass] +library/browsercontext-cookies.spec.ts › should return no cookies in pristine browser context [pass] +library/browsercontext-cookies.spec.ts › should return secure cookies based on HTTP(S) protocol [pass] +library/browsercontext-cookies.spec.ts › should support requestStorageAccess [fail] +library/browsercontext-cookies.spec.ts › should work with subdomain cookie [pass] +library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching hostname [fail] +library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching port [fail] +library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching scheme [fail] +library/browsercontext-credentials.spec.ts › should fail with wrong credentials [fail] +library/browsercontext-credentials.spec.ts › should fail without credentials [pass] +library/browsercontext-credentials.spec.ts › should return resource body [fail] +library/browsercontext-credentials.spec.ts › should work with correct credentials @smoke [fail] +library/browsercontext-credentials.spec.ts › should work with correct credentials and matching origin [fail] +library/browsercontext-credentials.spec.ts › should work with correct credentials and matching origin case insensitive [fail] +library/browsercontext-credentials.spec.ts › should work with setHTTPCredentials [fail] +library/browsercontext-csp.spec.ts › should bypass CSP header [fail] +library/browsercontext-csp.spec.ts › should bypass CSP in iframes as well [fail] +library/browsercontext-csp.spec.ts › should bypass CSP meta tag @smoke [fail] +library/browsercontext-csp.spec.ts › should bypass after cross-process navigation [fail] +library/browsercontext-device.spec.ts › device › should emulate viewport and screen size [fail] +library/browsercontext-device.spec.ts › device › should emulate viewport without screen size [fail] +library/browsercontext-device.spec.ts › device › should reset scroll top after a navigation [pass] +library/browsercontext-device.spec.ts › device › should scroll to a precise position with mobile scale [pass] +library/browsercontext-device.spec.ts › device › should scroll to click [pass] +library/browsercontext-device.spec.ts › device › should scroll twice when emulated [pass] +library/browsercontext-device.spec.ts › device › should support clicking [pass] +library/browsercontext-device.spec.ts › device › should work @smoke [fail] +library/browsercontext-dsf.spec.ts › should fetch hidpi assets [pass] +library/browsercontext-dsf.spec.ts › should fetch lodpi assets @smoke [pass] +library/browsercontext-events.spec.ts › console event should work @smoke [pass] +library/browsercontext-events.spec.ts › console event should work in immediately closed popup [timeout] +library/browsercontext-events.spec.ts › console event should work in popup [pass] +library/browsercontext-events.spec.ts › console event should work in popup 2 [timeout] +library/browsercontext-events.spec.ts › dialog event should work @smoke [pass] +library/browsercontext-events.spec.ts › dialog event should work in immediately closed popup [timeout] +library/browsercontext-events.spec.ts › dialog event should work in popup [timeout] +library/browsercontext-events.spec.ts › dialog event should work in popup 2 [pass] +library/browsercontext-events.spec.ts › dialog event should work with inline script tag [timeout] +library/browsercontext-events.spec.ts › weberror event should work [timeout] +library/browsercontext-expose-function.spec.ts › expose binding should work [fail] +library/browsercontext-expose-function.spec.ts › exposeBindingHandle should work [fail] +library/browsercontext-expose-function.spec.ts › should be callable from-inside addInitScript [fail] +library/browsercontext-expose-function.spec.ts › should throw for duplicate registrations [pass] +library/browsercontext-expose-function.spec.ts › should work [fail] +library/browsercontext-expose-function.spec.ts › should work with CSP [fail] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail if response content-length header is missing (br) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with chunked responses (without Content-Length header) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should support decompression [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail if response content-length header is missing (deflate) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with chunked responses (without Content-Length header) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should support decompression [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail if response content-length header is missing (gzip) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with chunked responses (without Content-Length header) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should support decompression [pass] +library/browsercontext-fetch-happy-eyeballs.spec.ts › get should work [pass] +library/browsercontext-fetch-happy-eyeballs.spec.ts › get should work on request fixture [pass] +library/browsercontext-fetch-happy-eyeballs.spec.ts › https post should work with ignoreHTTPSErrors option [pass] +library/browsercontext-fetch-happy-eyeballs.spec.ts › should work with ip6 and port as the host [pass] +library/browsercontext-fetch.spec.ts › context request should export same storage state as context [pass] +library/browsercontext-fetch.spec.ts › delete should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › delete should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › delete should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › delete should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › delete should support post data [pass] +library/browsercontext-fetch.spec.ts › deleteshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › fetch should not throw on long set-cookie value [pass] +library/browsercontext-fetch.spec.ts › fetch should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › fetch should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › fetch should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › fetch should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › fetch should work [pass] +library/browsercontext-fetch.spec.ts › fetchshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › get should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › get should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › get should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › get should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › get should support post data [pass] +library/browsercontext-fetch.spec.ts › get should work @smoke [pass] +library/browsercontext-fetch.spec.ts › getshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › head should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › head should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › head should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › head should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › head should support post data [pass] +library/browsercontext-fetch.spec.ts › headshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › patch should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › patch should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › patch should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › patch should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › patch should support post data [pass] +library/browsercontext-fetch.spec.ts › patchshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › post should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › post should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › post should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › post should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › post should support post data [pass] +library/browsercontext-fetch.spec.ts › postshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › put should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › put should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › put should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › put should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › put should support post data [pass] +library/browsercontext-fetch.spec.ts › putshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › should abort requests when browser context closes [pass] +library/browsercontext-fetch.spec.ts › should accept bool and numeric params [pass] +library/browsercontext-fetch.spec.ts › should add cookies from Set-Cookie header [pass] +library/browsercontext-fetch.spec.ts › should add default headers [pass] +library/browsercontext-fetch.spec.ts › should add default headers to redirects [pass] +library/browsercontext-fetch.spec.ts › should add session cookies to request [pass] +library/browsercontext-fetch.spec.ts › should allow to override default headers [pass] +library/browsercontext-fetch.spec.ts › should dispose [pass] +library/browsercontext-fetch.spec.ts › should dispose when context closes [pass] +library/browsercontext-fetch.spec.ts › should encode to application/json by default [pass] +library/browsercontext-fetch.spec.ts › should follow redirects [pass] +library/browsercontext-fetch.spec.ts › should follow redirects correctly when Location header contains UTF-8 characters [pass] +library/browsercontext-fetch.spec.ts › should handle cookies on redirects [pass] +library/browsercontext-fetch.spec.ts › should inherit ignoreHTTPSErrors from context [pass] +library/browsercontext-fetch.spec.ts › should not add context cookie if cookie header passed as a parameter [pass] +library/browsercontext-fetch.spec.ts › should not hang on a brotli encoded Range request [pass] +library/browsercontext-fetch.spec.ts › should not lose body while handling Set-Cookie header [pass] +library/browsercontext-fetch.spec.ts › should not work after context dispose [pass] +library/browsercontext-fetch.spec.ts › should not work after dispose [pass] +library/browsercontext-fetch.spec.ts › should override request parameters [pass] +library/browsercontext-fetch.spec.ts › should preserve cookie order from Set-Cookie header [pass] +library/browsercontext-fetch.spec.ts › should propagate custom headers with redirects [pass] +library/browsercontext-fetch.spec.ts › should propagate extra http headers with redirects [fail] +library/browsercontext-fetch.spec.ts › should remove cookie with expires far in the past [pass] +library/browsercontext-fetch.spec.ts › should remove cookie with negative max-age [pass] +library/browsercontext-fetch.spec.ts › should resolve url relative to baseURL [pass] +library/browsercontext-fetch.spec.ts › should respect timeout after redirects [pass] +library/browsercontext-fetch.spec.ts › should retry on ECONNRESET [pass] +library/browsercontext-fetch.spec.ts › should return error with wrong credentials [pass] +library/browsercontext-fetch.spec.ts › should return raw headers [pass] +library/browsercontext-fetch.spec.ts › should send content-length [pass] +library/browsercontext-fetch.spec.ts › should send secure cookie over http for localhost [pass] +library/browsercontext-fetch.spec.ts › should serialize data to json regardless of content-type [pass] +library/browsercontext-fetch.spec.ts › should set domain=localhost cookie [pass] +library/browsercontext-fetch.spec.ts › should support HTTPCredentials.send for browser.newPage [fail] +library/browsercontext-fetch.spec.ts › should support HTTPCredentials.send for newContext [pass] +library/browsercontext-fetch.spec.ts › should support SameSite cookie attribute over https [pass] +library/browsercontext-fetch.spec.ts › should support a timeout of 0 [pass] +library/browsercontext-fetch.spec.ts › should support application/x-www-form-urlencoded [pass] +library/browsercontext-fetch.spec.ts › should support brotli compression [pass] +library/browsercontext-fetch.spec.ts › should support cookie with empty value [pass] +library/browsercontext-fetch.spec.ts › should support deflate compression [pass] +library/browsercontext-fetch.spec.ts › should support gzip compression [pass] +library/browsercontext-fetch.spec.ts › should support https [pass] +library/browsercontext-fetch.spec.ts › should support multipart/form-data [pass] +library/browsercontext-fetch.spec.ts › should support multipart/form-data and keep the order [pass] +library/browsercontext-fetch.spec.ts › should support multipart/form-data with ReadStream values [pass] +library/browsercontext-fetch.spec.ts › should support repeating names in multipart/form-data [pass] +library/browsercontext-fetch.spec.ts › should support set-cookie with SameSite and without Secure attribute over HTTP [fail] +library/browsercontext-fetch.spec.ts › should support timeout option [pass] +library/browsercontext-fetch.spec.ts › should throw informative error on corrupted brotli body [pass] +library/browsercontext-fetch.spec.ts › should throw informative error on corrupted deflate body [pass] +library/browsercontext-fetch.spec.ts › should throw informative error on corrupted gzip body [pass] +library/browsercontext-fetch.spec.ts › should throw nice error on unsupported data type [pass] +library/browsercontext-fetch.spec.ts › should throw on invalid header value [pass] +library/browsercontext-fetch.spec.ts › should throw on network error [pass] +library/browsercontext-fetch.spec.ts › should throw on network error after redirect [pass] +library/browsercontext-fetch.spec.ts › should throw on network error when sending body [pass] +library/browsercontext-fetch.spec.ts › should throw on network error when sending body after redirect [pass] +library/browsercontext-fetch.spec.ts › should throw on non-http(s) protocol [pass] +library/browsercontext-fetch.spec.ts › should update host header on redirect [pass] +library/browsercontext-fetch.spec.ts › should work with connectOverCDP [unknown] +library/browsercontext-fetch.spec.ts › should work with http credentials [pass] +library/browsercontext-fetch.spec.ts › should work with setHTTPCredentials [pass] +library/browsercontext-har.spec.ts › by default should abort requests not found in har [fail] +library/browsercontext-har.spec.ts › context.unrouteAll should stop context.routeFromHAR [fail] +library/browsercontext-har.spec.ts › fallback:continue should continue requests on bad har [fail] +library/browsercontext-har.spec.ts › fallback:continue should continue when not found in har [fail] +library/browsercontext-har.spec.ts › newPage should fulfill from har, matching the method and following redirects [fail] +library/browsercontext-har.spec.ts › page.unrouteAll should stop page.routeFromHAR [fail] +library/browsercontext-har.spec.ts › should apply overrides before routing from har [fail] +library/browsercontext-har.spec.ts › should change document URL after redirected navigation [fail] +library/browsercontext-har.spec.ts › should change document URL after redirected navigation on click [fail] +library/browsercontext-har.spec.ts › should context.routeFromHAR, matching the method and following redirects [fail] +library/browsercontext-har.spec.ts › should disambiguate by header [fail] +library/browsercontext-har.spec.ts › should fulfill from har with content in a file [fail] +library/browsercontext-har.spec.ts › should goBack to redirected navigation [fail] +library/browsercontext-har.spec.ts › should goForward to redirected navigation [fail] +library/browsercontext-har.spec.ts › should ignore aborted requests [fail] +library/browsercontext-har.spec.ts › should ignore boundary when matching multipart/form-data body [fail] +library/browsercontext-har.spec.ts › should only context.routeFromHAR requests matching url filter [fail] +library/browsercontext-har.spec.ts › should only handle requests matching url filter [fail] +library/browsercontext-har.spec.ts › should only page.routeFromHAR requests matching url filter [fail] +library/browsercontext-har.spec.ts › should page.routeFromHAR, matching the method and following redirects [fail] +library/browsercontext-har.spec.ts › should produce extracted zip [fail] +library/browsercontext-har.spec.ts › should record overridden requests to har [fail] +library/browsercontext-har.spec.ts › should reload redirected navigation [fail] +library/browsercontext-har.spec.ts › should round-trip extracted har.zip [fail] +library/browsercontext-har.spec.ts › should round-trip har with postData [fail] +library/browsercontext-har.spec.ts › should round-trip har.zip [fail] +library/browsercontext-har.spec.ts › should support regex filter [fail] +library/browsercontext-har.spec.ts › should update extracted har.zip for page [fail] +library/browsercontext-har.spec.ts › should update har.zip for context [fail] +library/browsercontext-har.spec.ts › should update har.zip for page [fail] +library/browsercontext-har.spec.ts › should update har.zip for page with different options [fail] +library/browsercontext-locale.spec.ts › should affect Intl.DateTimeFormat().resolvedOptions().locale [fail] +library/browsercontext-locale.spec.ts › should affect accept-language header @smoke [fail] +library/browsercontext-locale.spec.ts › should affect navigator.language [fail] +library/browsercontext-locale.spec.ts › should affect navigator.language in popups [fail] +library/browsercontext-locale.spec.ts › should be isolated between contexts [fail] +library/browsercontext-locale.spec.ts › should format date [fail] +library/browsercontext-locale.spec.ts › should format number [fail] +library/browsercontext-locale.spec.ts › should format number in popups [fail] +library/browsercontext-locale.spec.ts › should format number in workers [timeout] +library/browsercontext-locale.spec.ts › should not change default locale in another context [fail] +library/browsercontext-locale.spec.ts › should work for multiple pages sharing same process [pass] +library/browsercontext-network-event.spec.ts › BrowserContext.Events.Request [pass] +library/browsercontext-network-event.spec.ts › BrowserContext.Events.RequestFailed [fail] +library/browsercontext-network-event.spec.ts › BrowserContext.Events.RequestFinished [pass] +library/browsercontext-network-event.spec.ts › BrowserContext.Events.Response [pass] +library/browsercontext-network-event.spec.ts › should fire events in proper order [pass] +library/browsercontext-network-event.spec.ts › should not fire events for favicon or favicon redirects [unknown] +library/browsercontext-page-event.spec.ts › should fire page lifecycle events [fail] +library/browsercontext-page-event.spec.ts › should have about:blank for empty url with domcontentloaded [fail] +library/browsercontext-page-event.spec.ts › should have about:blank url with domcontentloaded [fail] +library/browsercontext-page-event.spec.ts › should have an opener [pass] +library/browsercontext-page-event.spec.ts › should have url [pass] +library/browsercontext-page-event.spec.ts › should have url after domcontentloaded [pass] +library/browsercontext-page-event.spec.ts › should not crash while redirecting of original request was missed [pass] +library/browsercontext-page-event.spec.ts › should not hang on ctrl-click during provisional load [timeout] +library/browsercontext-page-event.spec.ts › should report initialized pages [fail] +library/browsercontext-page-event.spec.ts › should report when a new page is created and closed [fail] +library/browsercontext-page-event.spec.ts › should work with Ctrl-clicking [pass] +library/browsercontext-page-event.spec.ts › should work with Shift-clicking [pass] +library/browsercontext-pages.spec.ts › frame.focus should work multiple times [pass] +library/browsercontext-pages.spec.ts › page.context should return the correct instance [pass] +library/browsercontext-pages.spec.ts › should click the button with deviceScaleFactor set [pass] +library/browsercontext-pages.spec.ts › should click the button with offset with page scale [pass] +library/browsercontext-pages.spec.ts › should click with disabled javascript [pass] +library/browsercontext-pages.spec.ts › should keep selection in multiple pages [pass] +library/browsercontext-pages.spec.ts › should not be visible in context.pages [pass] +library/browsercontext-pages.spec.ts › should not hang with touch-enabled viewports [pass] +library/browsercontext-pages.spec.ts › should not leak listeners during navigation of 20 pages [fail] +library/browsercontext-pages.spec.ts › should return bounding box with page scale [pass] +library/browsercontext-proxy.spec.ts › does launch without a port [pass] +library/browsercontext-proxy.spec.ts › should authenticate [fail] +library/browsercontext-proxy.spec.ts › should authenticate with empty password [fail] +library/browsercontext-proxy.spec.ts › should exclude patterns [fail] +library/browsercontext-proxy.spec.ts › should isolate proxy credentials between contexts [fail] +library/browsercontext-proxy.spec.ts › should isolate proxy credentials between contexts on navigation [fail] +library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › link-local [timeout] +library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › localhost [fail] +library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › loopback address [fail] +library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › link-local [timeout] +library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › localhost [fail] +library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › loopback address [fail] +library/browsercontext-proxy.spec.ts › should set cookie for top-level domain [pass] +library/browsercontext-proxy.spec.ts › should throw for bad server value [pass] +library/browsercontext-proxy.spec.ts › should throw for socks4 authentication [pass] +library/browsercontext-proxy.spec.ts › should throw for socks5 authentication [pass] +library/browsercontext-proxy.spec.ts › should use ipv6 proxy [fail] +library/browsercontext-proxy.spec.ts › should use proxy [fail] +library/browsercontext-proxy.spec.ts › should use proxy for https urls [timeout] +library/browsercontext-proxy.spec.ts › should use proxy for second page [fail] +library/browsercontext-proxy.spec.ts › should use proxy twice [fail] +library/browsercontext-proxy.spec.ts › should use socks proxy [fail] +library/browsercontext-proxy.spec.ts › should use socks proxy in second page [fail] +library/browsercontext-proxy.spec.ts › should work when passing the proxy only on the context level [fail] +library/browsercontext-proxy.spec.ts › should work with IP:PORT notion [fail] +library/browsercontext-reuse.spec.ts › should continue issuing events after closing the reused page [fail] +library/browsercontext-reuse.spec.ts › should ignore binding from beforeunload [pass] +library/browsercontext-reuse.spec.ts › should not cache resources [fail] +library/browsercontext-reuse.spec.ts › should re-add binding after reset [fail] +library/browsercontext-reuse.spec.ts › should reset mouse position [pass] +library/browsercontext-reuse.spec.ts › should reset serviceworker [fail] +library/browsercontext-reuse.spec.ts › should reset serviceworker that hangs in importScripts [fail] +library/browsercontext-reuse.spec.ts › should reset tracing [pass] +library/browsercontext-reuse.spec.ts › should work with clock emulation [pass] +library/browsercontext-route.spec.ts › should chain fallback [fail] +library/browsercontext-route.spec.ts › should chain fallback into page [fail] +library/browsercontext-route.spec.ts › should chain fallback w/ dynamic URL [fail] +library/browsercontext-route.spec.ts › should fall back async [fail] +library/browsercontext-route.spec.ts › should fall back to context.route [fail] +library/browsercontext-route.spec.ts › should ignore secure Set-Cookie header for insecure requests [fail] +library/browsercontext-route.spec.ts › should intercept [fail] +library/browsercontext-route.spec.ts › should not chain abort [pass] +library/browsercontext-route.spec.ts › should not chain fulfill [fail] +library/browsercontext-route.spec.ts › should overwrite post body with empty string [fail] +library/browsercontext-route.spec.ts › should support Set-Cookie header [fail] +library/browsercontext-route.spec.ts › should support async handler w/ times [fail] +library/browsercontext-route.spec.ts › should support the times parameter with route matching [fail] +library/browsercontext-route.spec.ts › should unroute [fail] +library/browsercontext-route.spec.ts › should use Set-Cookie header in future requests [fail] +library/browsercontext-route.spec.ts › should work if handler with times parameter was removed from another handler [fail] +library/browsercontext-route.spec.ts › should work with ignoreHTTPSErrors [fail] +library/browsercontext-route.spec.ts › should yield to page.route [fail] +library/browsercontext-service-worker-policy.spec.ts › block › blocks service worker registration [timeout] +library/browsercontext-service-worker-policy.spec.ts › block › should not throw error on about:blank [pass] +library/browsercontext-service-worker-policy.spec.ts › should allow service workers by default [pass] +library/browsercontext-set-extra-http-headers.spec.ts › should override extra headers from browser context [fail] +library/browsercontext-set-extra-http-headers.spec.ts › should throw for non-string header values [pass] +library/browsercontext-storage-state.spec.ts › should capture cookies [fail] +library/browsercontext-storage-state.spec.ts › should capture local storage [fail] +library/browsercontext-storage-state.spec.ts › should handle malformed file [pass] +library/browsercontext-storage-state.spec.ts › should handle missing file [pass] +library/browsercontext-storage-state.spec.ts › should not emit events about internal page [fail] +library/browsercontext-storage-state.spec.ts › should not restore localStorage twice [fail] +library/browsercontext-storage-state.spec.ts › should round-trip through the file [fail] +library/browsercontext-storage-state.spec.ts › should serialize storageState with lone surrogates [pass] +library/browsercontext-storage-state.spec.ts › should set local storage [fail] +library/browsercontext-storage-state.spec.ts › should work when service worker is intefering [pass] +library/browsercontext-strict.spec.ts › should not fail page.textContent in non-strict mode [pass] +library/browsercontext-strict.spec.ts › strict context mode › should fail page.click in strict mode [fail] +library/browsercontext-strict.spec.ts › strict context mode › should fail page.textContent in strict mode [fail] +library/browsercontext-strict.spec.ts › strict context mode › should opt out of strict mode [pass] +library/browsercontext-timezone-id.spec.ts › should affect Intl.DateTimeFormat().resolvedOptions().timeZone [fail] +library/browsercontext-timezone-id.spec.ts › should not change default timezone in another context [fail] +library/browsercontext-timezone-id.spec.ts › should throw for invalid timezone IDs when creating pages [fail] +library/browsercontext-timezone-id.spec.ts › should work @smoke [fail] +library/browsercontext-timezone-id.spec.ts › should work for multiple pages sharing same process [pass] +library/browsercontext-user-agent.spec.ts › custom user agent for download [timeout] +library/browsercontext-user-agent.spec.ts › should emulate device user-agent [fail] +library/browsercontext-user-agent.spec.ts › should make a copy of default options [fail] +library/browsercontext-user-agent.spec.ts › should work [fail] +library/browsercontext-user-agent.spec.ts › should work for navigator.userAgentData and sec-ch-ua headers [unknown] +library/browsercontext-user-agent.spec.ts › should work for subframes [fail] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › default mobile viewports to 980 width [fail] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › mouse should work with mobile viewports and cross process navigations [pass] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › respect meta viewport tag [pass] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should be detectable [pass] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should detect touch when applying viewport with touches [pass] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should emulate the hover media feature [fail] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should fire orientationchange event [timeout] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should scroll when emulating a mobile viewport [pass] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support landscape emulation [pass] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support mobile emulation [pass] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support touch emulation [fail] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support window.orientation emulation [fail] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › view scale should reset after navigation [fail] +library/browsercontext-viewport.spec.ts › WebKit Windows headed should have a minimal viewport [unknown] +library/browsercontext-viewport.spec.ts › should be able to get correct orientation angle on non-mobile devices [pass] +library/browsercontext-viewport.spec.ts › should drag with high dpi [pass] +library/browsercontext-viewport.spec.ts › should emulate availWidth and availHeight [fail] +library/browsercontext-viewport.spec.ts › should emulate device height [fail] +library/browsercontext-viewport.spec.ts › should emulate device width [fail] +library/browsercontext-viewport.spec.ts › should get the proper default viewport size [pass] +library/browsercontext-viewport.spec.ts › should not have touch by default [pass] +library/browsercontext-viewport.spec.ts › should report null viewportSize when given null viewport [pass] +library/browsercontext-viewport.spec.ts › should return correct outerWidth and outerHeight [pass] +library/browsercontext-viewport.spec.ts › should set both screen and viewport options [fail] +library/browsercontext-viewport.spec.ts › should set the proper viewport size [pass] +library/browsercontext-viewport.spec.ts › should set window.screen.orientation.type for mobile devices [fail] +library/browsercontext-viewport.spec.ts › should support touch with null viewport [fail] +library/browsercontext-viewport.spec.ts › should throw on tap if hasTouch is not enabled [pass] +library/browsertype-basic.spec.ts › browserType.executablePath should work [unknown] +library/browsertype-basic.spec.ts › browserType.name should work [fail] +library/browsertype-basic.spec.ts › should throw when trying to connect with not-chromium [pass] +library/browsertype-connect.spec.ts › launchServer only › should be able to reconnect to a browser 12 times without warnings [timeout] +library/browsertype-connect.spec.ts › launchServer only › should properly disconnect when connection closes from the server side [timeout] +library/browsertype-connect.spec.ts › launchServer only › should work with cluster [timeout] +library/browsertype-connect.spec.ts › launchServer › disconnected event should be emitted when browser is closed or server is closed [timeout] +library/browsertype-connect.spec.ts › launchServer › disconnected event should have browser as argument [timeout] +library/browsertype-connect.spec.ts › launchServer › setInputFiles should preserve lastModified timestamp [timeout] +library/browsertype-connect.spec.ts › launchServer › should be able to connect 20 times to a single server without warnings [timeout] +library/browsertype-connect.spec.ts › launchServer › should be able to connect two browsers at the same time [timeout] +library/browsertype-connect.spec.ts › launchServer › should be able to connect when the wsEndpoint is passed as an option [timeout] +library/browsertype-connect.spec.ts › launchServer › should be able to reconnect to a browser [timeout] +library/browsertype-connect.spec.ts › launchServer › should be able to visit ipv6 [timeout] +library/browsertype-connect.spec.ts › launchServer › should be able to visit ipv6 through localhost [timeout] +library/browsertype-connect.spec.ts › launchServer › should connect over http [timeout] +library/browsertype-connect.spec.ts › launchServer › should connect over wss [timeout] +library/browsertype-connect.spec.ts › launchServer › should emit close events on pages and contexts [timeout] +library/browsertype-connect.spec.ts › launchServer › should error when saving download after deletion [timeout] +library/browsertype-connect.spec.ts › launchServer › should filter launch options [timeout] +library/browsertype-connect.spec.ts › launchServer › should fulfill with global fetch result [timeout] +library/browsertype-connect.spec.ts › launchServer › should handle exceptions during connect [timeout] +library/browsertype-connect.spec.ts › launchServer › should ignore page.pause when headed [timeout] +library/browsertype-connect.spec.ts › launchServer › should not throw on close after disconnect [timeout] +library/browsertype-connect.spec.ts › launchServer › should print HTTP error [pass] +library/browsertype-connect.spec.ts › launchServer › should print custom ws close error [pass] +library/browsertype-connect.spec.ts › launchServer › should print ws error [pass] +library/browsertype-connect.spec.ts › launchServer › should properly disconnect when connection closes from the client side [timeout] +library/browsertype-connect.spec.ts › launchServer › should record trace with sources [timeout] +library/browsertype-connect.spec.ts › launchServer › should reject navigation when browser closes [timeout] +library/browsertype-connect.spec.ts › launchServer › should reject waitForEvent before browser.close finishes [timeout] +library/browsertype-connect.spec.ts › launchServer › should reject waitForEvent before browser.onDisconnect fires [timeout] +library/browsertype-connect.spec.ts › launchServer › should reject waitForSelector when browser closes [timeout] +library/browsertype-connect.spec.ts › launchServer › should respect selectors [timeout] +library/browsertype-connect.spec.ts › launchServer › should save download [timeout] +library/browsertype-connect.spec.ts › launchServer › should save har [timeout] +library/browsertype-connect.spec.ts › launchServer › should saveAs videos from remote browser [timeout] +library/browsertype-connect.spec.ts › launchServer › should send default User-Agent and X-Playwright-Browser headers with connect request [fail] +library/browsertype-connect.spec.ts › launchServer › should send extra headers with connect request [pass] +library/browsertype-connect.spec.ts › launchServer › should set the browser connected state [timeout] +library/browsertype-connect.spec.ts › launchServer › should support slowmo option [timeout] +library/browsertype-connect.spec.ts › launchServer › should terminate network waiters [timeout] +library/browsertype-connect.spec.ts › launchServer › should throw when calling waitForNavigation after disconnect [timeout] +library/browsertype-connect.spec.ts › launchServer › should throw when used after isConnected returns false [timeout] +library/browsertype-connect.spec.ts › launchServer › should timeout in connect while connecting [pass] +library/browsertype-connect.spec.ts › launchServer › should timeout in socket while connecting [pass] +library/browsertype-connect.spec.ts › launchServer › should upload large file [timeout] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should check proxy pattern on the client [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should forward non-forwarded requests [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should lead to the error page for forwarded requests when the connection is refused [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy based on the pattern [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy ipv6 localhost requests @smoke [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy local.playwright requests [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy localhost requests @smoke [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy localhost requests from fetch api [unknown] +library/browsertype-connect.spec.ts › run-server › disconnected event should be emitted when browser is closed or server is closed [fail] +library/browsertype-connect.spec.ts › run-server › disconnected event should have browser as argument [fail] +library/browsertype-connect.spec.ts › run-server › setInputFiles should preserve lastModified timestamp [fail] +library/browsertype-connect.spec.ts › run-server › should be able to connect 20 times to a single server without warnings [fail] +library/browsertype-connect.spec.ts › run-server › should be able to connect two browsers at the same time [fail] +library/browsertype-connect.spec.ts › run-server › should be able to connect when the wsEndpoint is passed as an option [fail] +library/browsertype-connect.spec.ts › run-server › should be able to reconnect to a browser [fail] +library/browsertype-connect.spec.ts › run-server › should be able to visit ipv6 [fail] +library/browsertype-connect.spec.ts › run-server › should be able to visit ipv6 through localhost [fail] +library/browsertype-connect.spec.ts › run-server › should connect over http [fail] +library/browsertype-connect.spec.ts › run-server › should connect over wss [fail] +library/browsertype-connect.spec.ts › run-server › should emit close events on pages and contexts [fail] +library/browsertype-connect.spec.ts › run-server › should error when saving download after deletion [fail] +library/browsertype-connect.spec.ts › run-server › should filter launch options [fail] +library/browsertype-connect.spec.ts › run-server › should fulfill with global fetch result [fail] +library/browsertype-connect.spec.ts › run-server › should handle exceptions during connect [pass] +library/browsertype-connect.spec.ts › run-server › should ignore page.pause when headed [fail] +library/browsertype-connect.spec.ts › run-server › should not throw on close after disconnect [fail] +library/browsertype-connect.spec.ts › run-server › should print HTTP error [pass] +library/browsertype-connect.spec.ts › run-server › should print custom ws close error [pass] +library/browsertype-connect.spec.ts › run-server › should print ws error [pass] +library/browsertype-connect.spec.ts › run-server › should properly disconnect when connection closes from the client side [fail] +library/browsertype-connect.spec.ts › run-server › should record trace with sources [fail] +library/browsertype-connect.spec.ts › run-server › should reject navigation when browser closes [fail] +library/browsertype-connect.spec.ts › run-server › should reject waitForEvent before browser.close finishes [fail] +library/browsertype-connect.spec.ts › run-server › should reject waitForEvent before browser.onDisconnect fires [fail] +library/browsertype-connect.spec.ts › run-server › should reject waitForSelector when browser closes [fail] +library/browsertype-connect.spec.ts › run-server › should respect selectors [fail] +library/browsertype-connect.spec.ts › run-server › should save download [fail] +library/browsertype-connect.spec.ts › run-server › should save har [fail] +library/browsertype-connect.spec.ts › run-server › should saveAs videos from remote browser [fail] +library/browsertype-connect.spec.ts › run-server › should send default User-Agent and X-Playwright-Browser headers with connect request [fail] +library/browsertype-connect.spec.ts › run-server › should send extra headers with connect request [pass] +library/browsertype-connect.spec.ts › run-server › should set the browser connected state [fail] +library/browsertype-connect.spec.ts › run-server › should support slowmo option [fail] +library/browsertype-connect.spec.ts › run-server › should terminate network waiters [fail] +library/browsertype-connect.spec.ts › run-server › should throw when calling waitForNavigation after disconnect [fail] +library/browsertype-connect.spec.ts › run-server › should throw when used after isConnected returns false [fail] +library/browsertype-connect.spec.ts › run-server › should timeout in connect while connecting [pass] +library/browsertype-connect.spec.ts › run-server › should timeout in socket while connecting [pass] +library/browsertype-connect.spec.ts › run-server › should upload large file [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should check proxy pattern on the client [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should forward non-forwarded requests [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should lead to the error page for forwarded requests when the connection is refused [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy based on the pattern [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy ipv6 localhost requests @smoke [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy local.playwright requests [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy localhost requests @smoke [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy localhost requests from fetch api [fail] +library/browsertype-connect.spec.ts › should refuse connecting when versions do not match [pass] +library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 hub + node chromium [unknown] +library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone chromium [unknown] +library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone chromium through run-driver [unknown] +library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone non-chromium [unknown] +library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 hub + node chromium [unknown] +library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 standalone chromium [unknown] +library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 standalone chromium broken driver [unknown] +library/browsertype-launch-server.spec.ts › launch server › should default to random wsPath [fail] +library/browsertype-launch-server.spec.ts › launch server › should fire "close" event during kill [fail] +library/browsertype-launch-server.spec.ts › launch server › should fire close event [fail] +library/browsertype-launch-server.spec.ts › launch server › should log protocol [fail] +library/browsertype-launch-server.spec.ts › launch server › should provide an error when ws endpoint is incorrect [fail] +library/browsertype-launch-server.spec.ts › launch server › should return child_process instance [fail] +library/browsertype-launch-server.spec.ts › launch server › should work [fail] +library/browsertype-launch-server.spec.ts › launch server › should work when wsPath is missing leading slash [fail] +library/browsertype-launch-server.spec.ts › launch server › should work with host [fail] +library/browsertype-launch-server.spec.ts › launch server › should work with port [fail] +library/browsertype-launch-server.spec.ts › launch server › should work with wsPath [fail] +library/browsertype-launch.spec.ts › should accept objects as options [pass] +library/browsertype-launch.spec.ts › should allow await using [pass] +library/browsertype-launch.spec.ts › should be callable twice [pass] +library/browsertype-launch.spec.ts › should fire close event for all contexts [pass] +library/browsertype-launch.spec.ts › should handle exception [pass] +library/browsertype-launch.spec.ts › should handle timeout [pass] +library/browsertype-launch.spec.ts › should reject all promises when browser is closed [fail] +library/browsertype-launch.spec.ts › should reject if executable path is invalid [pass] +library/browsertype-launch.spec.ts › should reject if launched browser fails immediately [fail] +library/browsertype-launch.spec.ts › should report launch log [pass] +library/browsertype-launch.spec.ts › should throw if page argument is passed [pass] +library/browsertype-launch.spec.ts › should throw if port option is passed [pass] +library/browsertype-launch.spec.ts › should throw if port option is passed for persistent context [pass] +library/browsertype-launch.spec.ts › should throw if userDataDir is passed as an argument [pass] +library/browsertype-launch.spec.ts › should throw if userDataDir option is passed [pass] +library/capabilities.spec.ts › Intl.ListFormat should work [pass] +library/capabilities.spec.ts › SharedArrayBuffer should work @smoke [fail] +library/capabilities.spec.ts › Web Assembly should work @smoke [pass] +library/capabilities.spec.ts › WebSocket should work @smoke [pass] +library/capabilities.spec.ts › loading in HTMLImageElement.prototype [pass] +library/capabilities.spec.ts › make sure that XMLHttpRequest upload events are emitted correctly [pass] +library/capabilities.spec.ts › navigator.clipboard should be present [pass] +library/capabilities.spec.ts › requestFullscreen [pass] +library/capabilities.spec.ts › service worker should cover the iframe [pass] +library/capabilities.spec.ts › service worker should register in an iframe [pass] +library/capabilities.spec.ts › serviceWorker should intercept document request [pass] +library/capabilities.spec.ts › should not crash on page with mp4 @smoke [pass] +library/capabilities.spec.ts › should not crash on showDirectoryPicker [unknown] +library/capabilities.spec.ts › should not crash on storage.getDirectory() [pass] +library/capabilities.spec.ts › should play audio @smoke [pass] +library/capabilities.spec.ts › should play video @smoke [pass] +library/capabilities.spec.ts › should play webm video @smoke [pass] +library/capabilities.spec.ts › should respect CSP @smoke [pass] +library/capabilities.spec.ts › should send no Content-Length header for GET requests with a Content-Type [pass] +library/capabilities.spec.ts › should set CloseEvent.wasClean to false when the server terminates a WebSocket connection [pass] +library/capabilities.spec.ts › should support webgl 2 @smoke [pass] +library/capabilities.spec.ts › should support webgl @smoke [pass] +library/capabilities.spec.ts › webkit should define window.safari [unknown] +library/capabilities.spec.ts › window.GestureEvent in WebKit [pass] +library/channels.spec.ts › exposeFunction should not leak [fail] +library/channels.spec.ts › should not generate dispatchers for subresources w/o listeners [pass] +library/channels.spec.ts › should scope CDPSession handles [unknown] +library/channels.spec.ts › should scope browser handles [pass] +library/channels.spec.ts › should scope context handles [pass] +library/channels.spec.ts › should work with the domain module [timeout] +library/chromium/bfcache.spec.ts › bindings should work after restoring from bfcache [fail] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › serviceWorker(), and fromServiceWorker() work [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › setExtraHTTPHeaders [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › setOffline [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept only serviceworker request, not page [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker importScripts [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker requests (main and within) [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker update requests [unknown] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should produce network events, routing, and annotations for Service Worker [fail] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should produce network events, routing, and annotations for Service Worker (advanced) [fail] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report failure (due to content-type) of main service worker request [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report failure (due to redirect) of main service worker request [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report intercepted service worker requests in HAR [timeout] +library/chromium/chromium.spec.ts › Page.route should work with intervention headers [fail] +library/chromium/chromium.spec.ts › http credentials › httpCredentials [timeout] +library/chromium/chromium.spec.ts › serviceWorkers() should return current workers [timeout] +library/chromium/chromium.spec.ts › should close service worker together with the context [timeout] +library/chromium/chromium.spec.ts › should create a worker from a service worker [timeout] +library/chromium/chromium.spec.ts › should create a worker from service worker with noop routing [timeout] +library/chromium/chromium.spec.ts › should emit new service worker on update [timeout] +library/chromium/chromium.spec.ts › should not create a worker from a shared worker [pass] +library/chromium/chromium.spec.ts › should pass args with spaces [fail] +library/chromium/connect-over-cdp.spec.ts › emulate media should not be affected by second connectOverCDP [unknown] +library/chromium/connect-over-cdp.spec.ts › setInputFiles should preserve lastModified timestamp [fail] +library/chromium/connect-over-cdp.spec.ts › should allow tracing over cdp session [fail] +library/chromium/connect-over-cdp.spec.ts › should be able to connect via localhost [fail] +library/chromium/connect-over-cdp.spec.ts › should cleanup artifacts dir after connectOverCDP disconnects due to ws close [fail] +library/chromium/connect-over-cdp.spec.ts › should connect over a ws endpoint [fail] +library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session [fail] +library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session twice [fail] +library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session when passed as a first argument [fail] +library/chromium/connect-over-cdp.spec.ts › should connect to existing page with iframe and navigate [fail] +library/chromium/connect-over-cdp.spec.ts › should connect to existing service workers [fail] +library/chromium/connect-over-cdp.spec.ts › should connect via https [fail] +library/chromium/connect-over-cdp.spec.ts › should connectOverCDP and manage downloads in default context [fail] +library/chromium/connect-over-cdp.spec.ts › should print custom ws close error [fail] +library/chromium/connect-over-cdp.spec.ts › should report all pages in an existing browser [fail] +library/chromium/connect-over-cdp.spec.ts › should report an expected error when the endpoint URL JSON webSocketDebuggerUrl is undefined [fail] +library/chromium/connect-over-cdp.spec.ts › should report an expected error when the endpointURL returns a non-expected status code [fail] +library/chromium/connect-over-cdp.spec.ts › should return valid browser from context.browser() [fail] +library/chromium/connect-over-cdp.spec.ts › should send default User-Agent header with connect request [timeout] +library/chromium/connect-over-cdp.spec.ts › should send extra headers with connect request [timeout] +library/chromium/connect-over-cdp.spec.ts › should use logger in default context [fail] +library/chromium/connect-over-cdp.spec.ts › should use proxy with connectOverCDP [fail] +library/chromium/css-coverage.spec.ts › should NOT report scripts across navigations [fail] +library/chromium/css-coverage.spec.ts › should ignore injected stylesheets [fail] +library/chromium/css-coverage.spec.ts › should report multiple stylesheets [fail] +library/chromium/css-coverage.spec.ts › should report sourceURLs [fail] +library/chromium/css-coverage.spec.ts › should report stylesheets across navigations [fail] +library/chromium/css-coverage.spec.ts › should report stylesheets that have no coverage [fail] +library/chromium/css-coverage.spec.ts › should work [fail] +library/chromium/css-coverage.spec.ts › should work with a recently loaded stylesheet [fail] +library/chromium/css-coverage.spec.ts › should work with complicated usecases [fail] +library/chromium/css-coverage.spec.ts › should work with media queries [fail] +library/chromium/disable-web-security.spec.ts › test init script w/ --disable-web-security [fail] +library/chromium/disable-web-security.spec.ts › test utility world in popup w/ --disable-web-security [pass] +library/chromium/js-coverage.spec.ts › should NOT report scripts across navigations when enabled [fail] +library/chromium/js-coverage.spec.ts › should ignore eval() scripts by default [fail] +library/chromium/js-coverage.spec.ts › should not hang when there is a debugger statement [fail] +library/chromium/js-coverage.spec.ts › should report multiple scripts [fail] +library/chromium/js-coverage.spec.ts › should report scripts across navigations when disabled [fail] +library/chromium/js-coverage.spec.ts › should report sourceURLs [fail] +library/chromium/js-coverage.spec.ts › should work [fail] +library/chromium/js-coverage.spec.ts › shouldn't ignore eval() scripts if reportAnonymousScripts is true [fail] +library/chromium/launcher.spec.ts › should not create pages automatically [fail] +library/chromium/launcher.spec.ts › should not throw with remote-debugging-port argument [fail] +library/chromium/launcher.spec.ts › should open devtools when "devtools: true" option is given [unknown] +library/chromium/launcher.spec.ts › should return background pages [fail] +library/chromium/launcher.spec.ts › should return background pages when recording video [fail] +library/chromium/launcher.spec.ts › should support request/response events when using backgroundPage() [fail] +library/chromium/launcher.spec.ts › should throw with remote-debugging-pipe argument [fail] +library/chromium/oopif.spec.ts › ElementHandle.boundingBox() should work [fail] +library/chromium/oopif.spec.ts › contentFrame should work [pass] +library/chromium/oopif.spec.ts › should allow cdp sessions on oopifs [fail] +library/chromium/oopif.spec.ts › should be able to click in iframe [pass] +library/chromium/oopif.spec.ts › should click [pass] +library/chromium/oopif.spec.ts › should click a button when it overlays oopif [pass] +library/chromium/oopif.spec.ts › should emit filechooser event for iframe [timeout] +library/chromium/oopif.spec.ts › should emulate media [fail] +library/chromium/oopif.spec.ts › should emulate offline [fail] +library/chromium/oopif.spec.ts › should expose function [fail] +library/chromium/oopif.spec.ts › should get the proper viewport [unknown] +library/chromium/oopif.spec.ts › should handle oopif detach [pass] +library/chromium/oopif.spec.ts › should handle remote -> local -> remote transitions [fail] +library/chromium/oopif.spec.ts › should intercept response body from oopif [fail] +library/chromium/oopif.spec.ts › should load oopif iframes with subresources and route [fail] +library/chromium/oopif.spec.ts › should not throw on exposeFunction when oopif detaches [fail] +library/chromium/oopif.spec.ts › should report google.com frame with headed [fail] +library/chromium/oopif.spec.ts › should report main requests [pass] +library/chromium/oopif.spec.ts › should report oopif frames [pass] +library/chromium/oopif.spec.ts › should respect route [fail] +library/chromium/oopif.spec.ts › should support addInitScript [pass] +library/chromium/oopif.spec.ts › should support context options [fail] +library/chromium/oopif.spec.ts › should support exposeFunction [fail] +library/chromium/oopif.spec.ts › should take screenshot [fail] +library/chromium/session.spec.ts › should be able to detach session [fail] +library/chromium/session.spec.ts › should detach when page closes [fail] +library/chromium/session.spec.ts › should enable and disable domains independently [fail] +library/chromium/session.spec.ts › should not break page.close() [fail] +library/chromium/session.spec.ts › should only accept a page or frame [pass] +library/chromium/session.spec.ts › should reject protocol calls when page closes [fail] +library/chromium/session.spec.ts › should send events [fail] +library/chromium/session.spec.ts › should throw if target is part of main [fail] +library/chromium/session.spec.ts › should throw nice errors [fail] +library/chromium/session.spec.ts › should work [fail] +library/chromium/session.spec.ts › should work with main frame [fail] +library/chromium/session.spec.ts › should work with newBrowserCDPSession [fail] +library/chromium/tracing.spec.ts › should create directories as needed [fail] +library/chromium/tracing.spec.ts › should output a trace [fail] +library/chromium/tracing.spec.ts › should return a buffer [fail] +library/chromium/tracing.spec.ts › should run with custom categories if provided [fail] +library/chromium/tracing.spec.ts › should support a buffer without a path [fail] +library/chromium/tracing.spec.ts › should throw if tracing on two pages [fail] +library/chromium/tracing.spec.ts › should work without options [fail] +library/client-certificates.spec.ts › browser › persistentContext › should pass with matching certificates [fail] +library/client-certificates.spec.ts › browser › persistentContext › validate input [pass] +library/client-certificates.spec.ts › browser › should fail with matching certificates in legacy pfx format [pass] +library/client-certificates.spec.ts › browser › should fail with no client certificates [fail] +library/client-certificates.spec.ts › browser › should fail with self-signed client certificates [fail] +library/client-certificates.spec.ts › browser › should handle TLS renegotiation with client certificates [fail] +library/client-certificates.spec.ts › browser › should handle rejected certificate in handshake with HTTP/2 [pass] +library/client-certificates.spec.ts › browser › should have ignoreHTTPSErrors=false by default [fail] +library/client-certificates.spec.ts › browser › should keep supporting http [fail] +library/client-certificates.spec.ts › browser › should not hang on tls errors during TLS 1.2 handshake [fail] +library/client-certificates.spec.ts › browser › should pass with matching certificates [fail] +library/client-certificates.spec.ts › browser › should pass with matching certificates and trailing slash [fail] +library/client-certificates.spec.ts › browser › should pass with matching certificates in pfx format [fail] +library/client-certificates.spec.ts › browser › should pass with matching certificates in pfx format when passing as content [fail] +library/client-certificates.spec.ts › browser › should pass with matching certificates on context APIRequestContext instance [pass] +library/client-certificates.spec.ts › browser › should pass with matching certificates when passing as content [fail] +library/client-certificates.spec.ts › browser › should return target connection errors when using http2 [fail] +library/client-certificates.spec.ts › browser › should throw a http error if the pfx passphrase is incorect [pass] +library/client-certificates.spec.ts › browser › support http2 [fail] +library/client-certificates.spec.ts › browser › support http2 if the browser only supports http1.1 [unknown] +library/client-certificates.spec.ts › browser › validate input [pass] +library/client-certificates.spec.ts › fetch › pass with trusted client certificates [pass] +library/client-certificates.spec.ts › fetch › pass with trusted client certificates in pfx format [pass] +library/client-certificates.spec.ts › fetch › should fail with matching certificates in legacy pfx format [pass] +library/client-certificates.spec.ts › fetch › should fail with no client certificates provided [pass] +library/client-certificates.spec.ts › fetch › should keep supporting http [pass] +library/client-certificates.spec.ts › fetch › should throw a http error if the pfx passphrase is incorect [pass] +library/client-certificates.spec.ts › fetch › should throw with untrusted client certs [pass] +library/client-certificates.spec.ts › fetch › should work in the browser with request interception [fail] +library/client-certificates.spec.ts › fetch › validate input [pass] +library/clock.spec.ts › Intl API › Creates a RelativeTimeFormat like normal [pass] +library/clock.spec.ts › Intl API › Executes formatRange like normal [pass] +library/clock.spec.ts › Intl API › Executes formatRangeToParts like normal [pass] +library/clock.spec.ts › Intl API › Executes resolvedOptions like normal [pass] +library/clock.spec.ts › Intl API › Executes supportedLocalesOf like normal [pass] +library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns false when passed a timestamp argument that is not first of the month [pass] +library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns false when passed no timestamp and system time is not first of the month [pass] +library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns true when passed a timestamp argument that is first of the month [pass] +library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns true when passed no timestamp and system time is first of the month [pass] +library/clock.spec.ts › cancelAnimationFrame › does not remove interval [pass] +library/clock.spec.ts › cancelAnimationFrame › does not remove timeout [pass] +library/clock.spec.ts › cancelAnimationFrame › ignores null argument [pass] +library/clock.spec.ts › cancelAnimationFrame › removes animation frame [pass] +library/clock.spec.ts › cancelIdleCallback › removes idle callback [pass] +library/clock.spec.ts › clearInterval › ignores null argument [pass] +library/clock.spec.ts › clearInterval › removes interval [pass] +library/clock.spec.ts › clearInterval › removes interval with undefined interval [pass] +library/clock.spec.ts › clearInterval › removes timeout [pass] +library/clock.spec.ts › clearTimeout › ignores null argument [pass] +library/clock.spec.ts › clearTimeout › removes interval [pass] +library/clock.spec.ts › clearTimeout › removes interval with undefined interval [pass] +library/clock.spec.ts › clearTimeout › removes timeout [pass] +library/clock.spec.ts › date › creates Date objects representing clock time [pass] +library/clock.spec.ts › date › creates real Date objects [pass] +library/clock.spec.ts › date › creates regular date when passing a date as RFC 2822 string [pass] +library/clock.spec.ts › date › creates regular date when passing a date as string [pass] +library/clock.spec.ts › date › creates regular date when passing timestamp [pass] +library/clock.spec.ts › date › creates regular date when passing y, m, d [pass] +library/clock.spec.ts › date › creates regular date when passing y, m, d, h [pass] +library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m [pass] +library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m, s [pass] +library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m, s, ms [pass] +library/clock.spec.ts › date › creates regular date when passing year, month [pass] +library/clock.spec.ts › date › listens to system clock changes [pass] +library/clock.spec.ts › date › listens to ticking clock [pass] +library/clock.spec.ts › date › mirrors UTC method [pass] +library/clock.spec.ts › date › mirrors native Date.prototype [pass] +library/clock.spec.ts › date › mirrors parse method [pass] +library/clock.spec.ts › date › mirrors toUTCString method [pass] +library/clock.spec.ts › date › provides date constructor [pass] +library/clock.spec.ts › date › returns clock.now() [pass] +library/clock.spec.ts › date › returns date as string representing clock time [pass] +library/clock.spec.ts › date › returns date as string when called as function [pass] +library/clock.spec.ts › date › returns date as string when calling with arguments [pass] +library/clock.spec.ts › date › returns date as string when calling with timestamp [pass] +library/clock.spec.ts › date › supports now method if present [pass] +library/clock.spec.ts › fastForward › handles multiple pending timers and types [pass] +library/clock.spec.ts › fastForward › ignores timers which wouldn't be run [pass] +library/clock.spec.ts › fastForward › pushes back execution time for skipped timers [pass] +library/clock.spec.ts › pauseAt › fire target timers [pass] +library/clock.spec.ts › pauseAt › pause at target time [pass] +library/clock.spec.ts › pauseAt › returns consumed clicks [pass] +library/clock.spec.ts › performance.now() › should listen to multiple ticks in performance.now [pass] +library/clock.spec.ts › performance.now() › should run along with clock.tick [pass] +library/clock.spec.ts › performance.now() › should run with ticks with timers set [pass] +library/clock.spec.ts › performance.now() › should start at 0 [pass] +library/clock.spec.ts › requestAnimationFrame › returns numeric id or object with numeric id [pass] +library/clock.spec.ts › requestAnimationFrame › returns unique id [pass] +library/clock.spec.ts › requestAnimationFrame › should be called with performance.now() even when performance unavailable [pass] +library/clock.spec.ts › requestAnimationFrame › should be called with performance.now() when available [pass] +library/clock.spec.ts › requestAnimationFrame › should call callback once [pass] +library/clock.spec.ts › requestAnimationFrame › should properly schedule callback for 3rd frame [pass] +library/clock.spec.ts › requestAnimationFrame › should run every 16ms [pass] +library/clock.spec.ts › requestAnimationFrame › should schedule for next frame if on current frame [pass] +library/clock.spec.ts › requestAnimationFrame › should schedule two callbacks before the next frame at the same time [pass] +library/clock.spec.ts › requestAnimationFrame › throws if no arguments [pass] +library/clock.spec.ts › requestIdleCallback › doesn't runs if there are any timers and no timeout option [pass] +library/clock.spec.ts › requestIdleCallback › returns numeric id [pass] +library/clock.spec.ts › requestIdleCallback › returns unique id [pass] +library/clock.spec.ts › requestIdleCallback › runs after all timers [pass] +library/clock.spec.ts › requestIdleCallback › runs no later than timeout option even if there are any timers [pass] +library/clock.spec.ts › requestIdleCallback › throws if no arguments [pass] +library/clock.spec.ts › runFor › calls function with global object or null (strict mode) as this [pass] +library/clock.spec.ts › runFor › creates updated Date while ticking [pass] +library/clock.spec.ts › runFor › creates updated Date while ticking promises [pass] +library/clock.spec.ts › runFor › does not fire canceled intervals [pass] +library/clock.spec.ts › runFor › does not fire intervals canceled in a promise [pass] +library/clock.spec.ts › runFor › does not silently catch errors [pass] +library/clock.spec.ts › runFor › does not trigger without sufficient delay [pass] +library/clock.spec.ts › runFor › fires nested setTimeout calls in user-created promises properly [pass] +library/clock.spec.ts › runFor › fires nested setTimeout calls properly [pass] +library/clock.spec.ts › runFor › fires promise timers in correct order [pass] +library/clock.spec.ts › runFor › fires timer in intervals of "13" [pass] +library/clock.spec.ts › runFor › fires timer in intervals of 13 [pass] +library/clock.spec.ts › runFor › fires timers in correct order [pass] +library/clock.spec.ts › runFor › is not influenced by forward system clock changes [pass] +library/clock.spec.ts › runFor › is not influenced by forward system clock changes 2 [pass] +library/clock.spec.ts › runFor › is not influenced by forward system clock changes in promises [pass] +library/clock.spec.ts › runFor › is not influenced by forward system clock changes when an error is thrown [pass] +library/clock.spec.ts › runFor › is not influenced by forward system clock changes when an error is thrown 2 [pass] +library/clock.spec.ts › runFor › mini integration test [pass] +library/clock.spec.ts › runFor › should settle chained user-created promises [pass] +library/clock.spec.ts › runFor › should settle local nested promises before calling timeouts [pass] +library/clock.spec.ts › runFor › should settle local promises before calling timeouts [pass] +library/clock.spec.ts › runFor › should settle multiple user-created promises [pass] +library/clock.spec.ts › runFor › should settle nested user-created promises [pass] +library/clock.spec.ts › runFor › should settle user-created promises [pass] +library/clock.spec.ts › runFor › should settle user-created promises before calling more timeouts [pass] +library/clock.spec.ts › runFor › should settle user-created promises even if some throw [pass] +library/clock.spec.ts › runFor › throws for negative minutes [pass] +library/clock.spec.ts › runFor › throws on negative ticks [pass] +library/clock.spec.ts › runFor › triggers after sufficient delay [pass] +library/clock.spec.ts › runFor › triggers even when some throw [pass] +library/clock.spec.ts › runFor › triggers immediately without specified delay [pass] +library/clock.spec.ts › runFor › triggers in the order scheduled [pass] +library/clock.spec.ts › runFor › triggers multiple simultaneous timers [pass] +library/clock.spec.ts › runFor › triggers multiple simultaneous timers with zero callAt [pass] +library/clock.spec.ts › runFor › triggers simultaneous timers [pass] +library/clock.spec.ts › runFor › triggers timeouts and intervals in the order scheduled [pass] +library/clock.spec.ts › runFor › waits after setTimeout was called [pass] +library/clock.spec.ts › setInterval › does not schedule recurring timeout when cleared [pass] +library/clock.spec.ts › setInterval › does not throw if |undefined| or |null| is passed as a callback [pass] +library/clock.spec.ts › setInterval › is not influenced by backward system clock changes [pass] +library/clock.spec.ts › setInterval › is not influenced by forward system clock changes [pass] +library/clock.spec.ts › setInterval › passes setTimeout parameters [pass] +library/clock.spec.ts › setInterval › returns numeric id or object with numeric id [pass] +library/clock.spec.ts › setInterval › returns unique id [pass] +library/clock.spec.ts › setInterval › schedules recurring timeout [pass] +library/clock.spec.ts › setInterval › throws if no arguments [pass] +library/clock.spec.ts › setTimeout › calls correct timeout on recursive tick [pass] +library/clock.spec.ts › setTimeout › does not depend on this [pass] +library/clock.spec.ts › setTimeout › does not throw if |undefined| or |null| is passed as a callback [pass] +library/clock.spec.ts › setTimeout › is not influenced by backward system clock changes [pass] +library/clock.spec.ts › setTimeout › is not influenced by forward system clock changes [pass] +library/clock.spec.ts › setTimeout › parses no-numeric string times [pass] +library/clock.spec.ts › setTimeout › parses numeric string times [pass] +library/clock.spec.ts › setTimeout › passes setTimeout parameters [pass] +library/clock.spec.ts › setTimeout › returns numeric id or object with numeric id [pass] +library/clock.spec.ts › setTimeout › returns unique id [pass] +library/clock.spec.ts › setTimeout › sets timers on instance [pass] +library/clock.spec.ts › setTimeout › starts id from a large number [pass] +library/clock.spec.ts › setTimeout › throws if no arguments [pass] +library/clock.spec.ts › setTimeout › use of eval when not in node › evals non-function callbacks [pass] +library/clock.spec.ts › setTimeout › use of eval when not in node › only evals on global scope [pass] +library/clock.spec.ts › stubTimers › deletes global property on uninstall if it was inherited onto the global object [unknown] +library/clock.spec.ts › stubTimers › does not fake methods not provided [pass] +library/clock.spec.ts › stubTimers › fake Date constructor should mirror Date's properties [pass] +library/clock.spec.ts › stubTimers › fakes Date constructor [pass] +library/clock.spec.ts › stubTimers › fakes provided methods [pass] +library/clock.spec.ts › stubTimers › global fake setTimeout should return id [pass] +library/clock.spec.ts › stubTimers › mirrors custom Date properties [pass] +library/clock.spec.ts › stubTimers › replace Event.prototype.timeStamp [pass] +library/clock.spec.ts › stubTimers › replaces global clearInterval [pass] +library/clock.spec.ts › stubTimers › replaces global clearTimeout [pass] +library/clock.spec.ts › stubTimers › replaces global performance.now [pass] +library/clock.spec.ts › stubTimers › replaces global setInterval [pass] +library/clock.spec.ts › stubTimers › replaces global setTimeout [pass] +library/clock.spec.ts › stubTimers › resets faked methods [pass] +library/clock.spec.ts › stubTimers › returns clock object [pass] +library/clock.spec.ts › stubTimers › sets initial timestamp [pass] +library/clock.spec.ts › stubTimers › should let performance.mark still be callable after install() (#136) [pass] +library/clock.spec.ts › stubTimers › should not alter the global performance properties and methods [pass] +library/clock.spec.ts › stubTimers › should replace the getEntries, getEntriesByX methods with noops that return [] [pass] +library/clock.spec.ts › stubTimers › takes an object parameter [pass] +library/clock.spec.ts › stubTimers › uninstalls Date constructor [pass] +library/clock.spec.ts › stubTimers › uninstalls global performance.now [pass] +library/clock.spec.ts › works with concurrent runFor calls [pass] +library/clock.spec.ts › works with slow setTimeout in busy embedder [pass] +library/clock.spec.ts › works with slow setTimeout in busy embedder when not paused [pass] +library/component-parser.spec.ts › should escape [pass] +library/component-parser.spec.ts › should parse [pass] +library/component-parser.spec.ts › should parse all operators [pass] +library/component-parser.spec.ts › should parse bool [pass] +library/component-parser.spec.ts › should parse float values [pass] +library/component-parser.spec.ts › should parse identifiers [pass] +library/component-parser.spec.ts › should parse int values [pass] +library/component-parser.spec.ts › should parse regex [pass] +library/component-parser.spec.ts › should parse short attributes [pass] +library/component-parser.spec.ts › should parse unquoted string [pass] +library/component-parser.spec.ts › should throw on malformed selector [pass] +library/component-parser.spec.ts › should tolerate spacing [pass] +library/css-parser.spec.ts › should parse css [pass] +library/css-parser.spec.ts › should throw on malformed css [pass] +library/debug-controller.spec.ts › should highlight all [fail] +library/debug-controller.spec.ts › should navigate all [fail] +library/debug-controller.spec.ts › should pick element [fail] +library/debug-controller.spec.ts › should record [fail] +library/debug-controller.spec.ts › should record custom data-testid [fail] +library/debug-controller.spec.ts › should report pages [fail] +library/debug-controller.spec.ts › should reset for reuse [fail] +library/debug-controller.spec.ts › should reset routes before reuse [fail] +library/defaultbrowsercontext-1.spec.ts › context.addCookies() should work [fail] +library/defaultbrowsercontext-1.spec.ts › context.clearCookies() should work [fail] +library/defaultbrowsercontext-1.spec.ts › context.cookies() should work @smoke [fail] +library/defaultbrowsercontext-1.spec.ts › should support acceptDownloads option [fail] +library/defaultbrowsercontext-1.spec.ts › should support bypassCSP option [fail] +library/defaultbrowsercontext-1.spec.ts › should support deviceScaleFactor option [fail] +library/defaultbrowsercontext-1.spec.ts › should support httpCredentials option [fail] +library/defaultbrowsercontext-1.spec.ts › should support javascriptEnabled option [fail] +library/defaultbrowsercontext-1.spec.ts › should support offline option [fail] +library/defaultbrowsercontext-1.spec.ts › should support userAgent option [fail] +library/defaultbrowsercontext-1.spec.ts › should support viewport option [fail] +library/defaultbrowsercontext-1.spec.ts › should(not) block third party cookies [fail] +library/defaultbrowsercontext-2.spec.ts › coverage should work [unknown] +library/defaultbrowsercontext-2.spec.ts › should accept userDataDir [fail] +library/defaultbrowsercontext-2.spec.ts › should connect to a browser with the default page [fail] +library/defaultbrowsercontext-2.spec.ts › should create userDataDir if it does not exist [fail] +library/defaultbrowsercontext-2.spec.ts › should fire close event for a persistent context [fail] +library/defaultbrowsercontext-2.spec.ts › should handle exception [timeout] +library/defaultbrowsercontext-2.spec.ts › should handle timeout [pass] +library/defaultbrowsercontext-2.spec.ts › should have default URL when launching browser [fail] +library/defaultbrowsercontext-2.spec.ts › should have passed URL when launching with ignoreDefaultArgs: true [fail] +library/defaultbrowsercontext-2.spec.ts › should respect selectors [fail] +library/defaultbrowsercontext-2.spec.ts › should restore state from userDataDir [fail] +library/defaultbrowsercontext-2.spec.ts › should support colorScheme option [fail] +library/defaultbrowsercontext-2.spec.ts › should support extraHTTPHeaders option [fail] +library/defaultbrowsercontext-2.spec.ts › should support forcedColors option [fail] +library/defaultbrowsercontext-2.spec.ts › should support geolocation and permissions options [fail] +library/defaultbrowsercontext-2.spec.ts › should support har option [fail] +library/defaultbrowsercontext-2.spec.ts › should support hasTouch option [fail] +library/defaultbrowsercontext-2.spec.ts › should support ignoreHTTPSErrors option [fail] +library/defaultbrowsercontext-2.spec.ts › should support locale option [fail] +library/defaultbrowsercontext-2.spec.ts › should support reducedMotion option [fail] +library/defaultbrowsercontext-2.spec.ts › should support timezoneId option [fail] +library/defaultbrowsercontext-2.spec.ts › should throw if page argument is passed [pass] +library/defaultbrowsercontext-2.spec.ts › should work in persistent context [fail] +library/defaultbrowsercontext-2.spec.ts › user agent is up to date [fail] +library/download.spec.ts › download event › should be able to cancel pending downloads [timeout] +library/download.spec.ts › download event › should close the context without awaiting the download [timeout] +library/download.spec.ts › download event › should close the context without awaiting the failed download [unknown] +library/download.spec.ts › download event › should create subdirectories when saving to non-existent user-specified path [timeout] +library/download.spec.ts › download event › should delete downloads on browser gone [timeout] +library/download.spec.ts › download event › should delete downloads on context destruction [timeout] +library/download.spec.ts › download event › should delete file [timeout] +library/download.spec.ts › download event › should download large binary.zip [timeout] +library/download.spec.ts › download event › should emit download event from nested iframes [timeout] +library/download.spec.ts › download event › should error when saving after deletion [timeout] +library/download.spec.ts › download event › should error when saving with downloads disabled [timeout] +library/download.spec.ts › download event › should expose stream [timeout] +library/download.spec.ts › download event › should not fail explicitly to cancel a download even if that is already finished [timeout] +library/download.spec.ts › download event › should report alt-click downloads [timeout] +library/download.spec.ts › download event › should report download path within page.on('download', …) handler for Blobs [timeout] +library/download.spec.ts › download event › should report download path within page.on('download', …) handler for Files [timeout] +library/download.spec.ts › download event › should report download when navigation turns into download @smoke [timeout] +library/download.spec.ts › download event › should report downloads for download attribute [timeout] +library/download.spec.ts › download event › should report downloads with acceptDownloads: false [timeout] +library/download.spec.ts › download event › should report downloads with acceptDownloads: true [timeout] +library/download.spec.ts › download event › should report downloads with interception [fail] +library/download.spec.ts › download event › should report new window downloads [timeout] +library/download.spec.ts › download event › should report non-navigation downloads [timeout] +library/download.spec.ts › download event › should report proper download url when download is from download attribute [timeout] +library/download.spec.ts › download event › should save to overwritten filepath [timeout] +library/download.spec.ts › download event › should save to two different paths with multiple saveAs calls [timeout] +library/download.spec.ts › download event › should save to user-specified path without updating original path [timeout] +library/download.spec.ts › download event › should throw if browser dies [timeout] +library/download.spec.ts › download event › should work with Cross-Origin-Opener-Policy [timeout] +library/download.spec.ts › should be able to download a PDF file [timeout] +library/download.spec.ts › should be able to download a inline PDF file via navigation [timeout] +library/download.spec.ts › should be able to download a inline PDF file via response interception [fail] +library/download.spec.ts › should convert navigation to a resource with unsupported mime type into download [timeout] +library/download.spec.ts › should download even if there is no "attachment" value [timeout] +library/download.spec.ts › should download links with data url [timeout] +library/download.spec.ts › should download successfully when routing [timeout] +library/download.spec.ts › should save to user-specified path [timeout] +library/downloads-path.spec.ts › downloads path › should accept downloads in persistent context [fail] +library/downloads-path.spec.ts › downloads path › should delete downloads when context closes [timeout] +library/downloads-path.spec.ts › downloads path › should delete downloads when persistent context closes [fail] +library/downloads-path.spec.ts › downloads path › should keep downloadsPath folder [timeout] +library/downloads-path.spec.ts › downloads path › should report downloads in downloadsPath folder [timeout] +library/downloads-path.spec.ts › downloads path › should report downloads in downloadsPath folder with a relative path [timeout] +library/emulation-focus.spec.ts › should change document.activeElement [pass] +library/emulation-focus.spec.ts › should change focused iframe [pass] +library/emulation-focus.spec.ts › should focus popups by default [fail] +library/emulation-focus.spec.ts › should focus with more than one page/context [pass] +library/emulation-focus.spec.ts › should not affect mouse event target page [pass] +library/emulation-focus.spec.ts › should not affect screenshots [fail] +library/emulation-focus.spec.ts › should not fire blur events when interacting with more than one page/context [pass] +library/emulation-focus.spec.ts › should provide target for keyboard events [pass] +library/emulation-focus.spec.ts › should think that all pages are focused @smoke [pass] +library/emulation-focus.spec.ts › should think that it is focused by default [pass] +library/emulation-focus.spec.ts › should trigger hover state concurrently [pass] +library/events/add-listeners.spec.ts › EventEmitter tests › Listener order [pass] +library/events/add-listeners.spec.ts › EventEmitter tests › listener type check [pass] +library/events/add-listeners.spec.ts › EventEmitter tests › set max listeners test [pass] +library/events/add-listeners.spec.ts › EventEmitter tests › should work [pass] +library/events/check-listener-leaks.spec.ts › _maxListeners still has precedence over defaultMaxListeners [pass] +library/events/check-listener-leaks.spec.ts › defaultMaxListeners [pass] +library/events/check-listener-leaks.spec.ts › process-wide [pass] +library/events/events-list.spec.ts › EventEmitter › should maintain event names correctly [pass] +library/events/listener-count.spec.ts › Listener count test [pass] +library/events/listeners-side-effects.spec.ts › listeners empty check [pass] +library/events/listeners.spec.ts › Array copy modification does not modify orig [pass] +library/events/listeners.spec.ts › EventEmitter listeners with one listener [pass] +library/events/listeners.spec.ts › EventEmitter with no members [pass] +library/events/listeners.spec.ts › Modify array copy after multiple adds [pass] +library/events/listeners.spec.ts › listeners and once [pass] +library/events/listeners.spec.ts › listeners on prototype [pass] +library/events/listeners.spec.ts › listeners with conflicting types [pass] +library/events/listeners.spec.ts › raw listeners [pass] +library/events/listeners.spec.ts › raw listeners order [pass] +library/events/max-listeners.spec.ts › emit maxListeners on e [pass] +library/events/method-names.spec.ts › EventEmitter prototype test [pass] +library/events/modify-in-emit.spec.ts › add and remove listeners [pass] +library/events/modify-in-emit.spec.ts › removing callbacks in emit [pass] +library/events/num-args.spec.ts › should work [pass] +library/events/once.spec.ts › once() has different code paths based on the number of arguments being emitted [pass] +library/events/once.spec.ts › should work [pass] +library/events/prepend.spec.ts › EventEmitter functionality [pass] +library/events/prepend.spec.ts › Verify that the listener must be a function [pass] +library/events/remove-all-listeners-wait.spec.ts › should not throw with ignoreErrors [pass] +library/events/remove-all-listeners-wait.spec.ts › should wait [pass] +library/events/remove-all-listeners-wait.spec.ts › should wait all [pass] +library/events/remove-all-listeners-wait.spec.ts › wait should throw [pass] +library/events/remove-all-listeners.spec.ts › listener count after removeAllListeners [pass] +library/events/remove-all-listeners.spec.ts › listeners [pass] +library/events/remove-all-listeners.spec.ts › removeAllListeners on undefined _events [pass] +library/events/remove-all-listeners.spec.ts › removeAllListeners removes all listeners [pass] +library/events/remove-all-listeners.spec.ts › removeAllListeners returns EventEmitter [pass] +library/events/remove-all-listeners.spec.ts › removeAllListeners with no event type [pass] +library/events/remove-listeners.spec.ts › Eighth test [pass] +library/events/remove-listeners.spec.ts › Fifth test [pass] +library/events/remove-listeners.spec.ts › First test [pass] +library/events/remove-listeners.spec.ts › Fourth test [pass] +library/events/remove-listeners.spec.ts › Ninth test [pass] +library/events/remove-listeners.spec.ts › Second test [pass] +library/events/remove-listeners.spec.ts › Seventh test [pass] +library/events/remove-listeners.spec.ts › Sixth test [pass] +library/events/remove-listeners.spec.ts › Tenth test [pass] +library/events/remove-listeners.spec.ts › Third test [pass] +library/events/set-max-listeners-side-effects.spec.ts › set max listeners test [pass] +library/events/special-event-names.spec.ts › should support special event names [pass] +library/events/subclass.spec.ts › MyEE2 instance [pass] +library/events/subclass.spec.ts › myee instance [pass] +library/events/symbols.spec.ts › should support symbols [pass] +library/favicon.spec.ts › should load svg favicon with prefer-color-scheme [unknown] +library/fetch-proxy.spec.ts › context request should pick up proxy credentials [pass] +library/fetch-proxy.spec.ts › global request should pick up proxy credentials [pass] +library/fetch-proxy.spec.ts › should support proxy.bypass [pass] +library/fetch-proxy.spec.ts › should use socks proxy [pass] +library/fetch-proxy.spec.ts › should work with context level proxy [pass] +library/firefox/launcher.spec.ts › should pass firefox user preferences [fail] +library/firefox/launcher.spec.ts › should pass firefox user preferences in persistent [fail] +library/geolocation.spec.ts › should isolate contexts [timeout] +library/geolocation.spec.ts › should not modify passed default options object [pass] +library/geolocation.spec.ts › should throw when invalid longitude [fail] +library/geolocation.spec.ts › should throw with missing latitude [pass] +library/geolocation.spec.ts › should throw with missing longitude in default options [pass] +library/geolocation.spec.ts › should use context options [timeout] +library/geolocation.spec.ts › should use context options for popup [timeout] +library/geolocation.spec.ts › should work @smoke [timeout] +library/geolocation.spec.ts › watchPosition should be notified [timeout] +library/global-fetch-cookie.spec.ts › should do case-insensitive match of cookie domain [pass] +library/global-fetch-cookie.spec.ts › should do case-insensitive match of request domain [pass] +library/global-fetch-cookie.spec.ts › should export cookies to storage state [pass] +library/global-fetch-cookie.spec.ts › should filter outgoing cookies by domain [pass] +library/global-fetch-cookie.spec.ts › should filter outgoing cookies by path [pass] +library/global-fetch-cookie.spec.ts › should override cookie from Set-Cookie header [pass] +library/global-fetch-cookie.spec.ts › should override cookie from Set-Cookie header even if it expired [pass] +library/global-fetch-cookie.spec.ts › should preserve local storage on import/export of storage state [pass] +library/global-fetch-cookie.spec.ts › should remove cookie with expires far in the past [pass] +library/global-fetch-cookie.spec.ts › should remove cookie with negative max-age [pass] +library/global-fetch-cookie.spec.ts › should remove expired cookies [pass] +library/global-fetch-cookie.spec.ts › should send cookies from storage state [pass] +library/global-fetch-cookie.spec.ts › should send not expired cookies [pass] +library/global-fetch-cookie.spec.ts › should send secure cookie over http for localhost [pass] +library/global-fetch-cookie.spec.ts › should send secure cookie over https [pass] +library/global-fetch-cookie.spec.ts › should store cookie from Set-Cookie header [pass] +library/global-fetch-cookie.spec.ts › should store cookie from Set-Cookie header even if it contains equal signs [pass] +library/global-fetch-cookie.spec.ts › should work with empty storage state [pass] +library/global-fetch-cookie.spec.ts › storage state should round-trip through file [pass] +library/global-fetch.spec.ts › delete should work @smoke [pass] +library/global-fetch.spec.ts › fetch should work @smoke [pass] +library/global-fetch.spec.ts › get should work @smoke [pass] +library/global-fetch.spec.ts › head should work @smoke [pass] +library/global-fetch.spec.ts › patch should work @smoke [pass] +library/global-fetch.spec.ts › post should work @smoke [pass] +library/global-fetch.spec.ts › put should work @smoke [pass] +library/global-fetch.spec.ts › should abort redirected requests when context is disposed [pass] +library/global-fetch.spec.ts › should abort requests when context is disposed [pass] +library/global-fetch.spec.ts › should accept already serialized data as Buffer when content-type is application/json [pass] +library/global-fetch.spec.ts › should be able to construct with context options [pass] +library/global-fetch.spec.ts › should dispose global request [pass] +library/global-fetch.spec.ts › should have nice toString [pass] +library/global-fetch.spec.ts › should json stringify array body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify bool (false) body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify bool body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify literal string undefined body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify null body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify number (falsey) body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify number body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify object body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify string (falsey) body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify string body when content-type is application/json [pass] +library/global-fetch.spec.ts › should keep headers capitalization [pass] +library/global-fetch.spec.ts › should not double stringify array body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify bool (false) body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify bool body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify literal string undefined body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify null body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify number (falsey) body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify number body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify object body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify string (falsey) body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify string body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not fail on empty body with encoding [pass] +library/global-fetch.spec.ts › should not follow redirects when maxRedirects is set to 0 [pass] +library/global-fetch.spec.ts › should propagate extra http headers with redirects [pass] +library/global-fetch.spec.ts › should propagate ignoreHTTPSErrors on redirects [pass] +library/global-fetch.spec.ts › should remove content-length from redirected post requests [pass] +library/global-fetch.spec.ts › should resolve url relative to global baseURL option [pass] +library/global-fetch.spec.ts › should retry ECONNRESET [pass] +library/global-fetch.spec.ts › should return body for failing requests [pass] +library/global-fetch.spec.ts › should return empty body [pass] +library/global-fetch.spec.ts › should return error with correct credentials and mismatching hostname [pass] +library/global-fetch.spec.ts › should return error with correct credentials and mismatching port [pass] +library/global-fetch.spec.ts › should return error with correct credentials and mismatching scheme [pass] +library/global-fetch.spec.ts › should return error with wrong credentials [pass] +library/global-fetch.spec.ts › should serialize post data on the client [pass] +library/global-fetch.spec.ts › should set playwright as user-agent [pass] +library/global-fetch.spec.ts › should support HTTPCredentials.send [pass] +library/global-fetch.spec.ts › should support WWW-Authenticate: Basic [pass] +library/global-fetch.spec.ts › should support global httpCredentials option [pass] +library/global-fetch.spec.ts › should support global ignoreHTTPSErrors option [pass] +library/global-fetch.spec.ts › should support global timeout option [pass] +library/global-fetch.spec.ts › should support global userAgent option [pass] +library/global-fetch.spec.ts › should throw after dispose [pass] +library/global-fetch.spec.ts › should throw an error when maxRedirects is exceeded [pass] +library/global-fetch.spec.ts › should throw an error when maxRedirects is less than 0 [pass] +library/global-fetch.spec.ts › should work with correct credentials and matching origin [pass] +library/global-fetch.spec.ts › should work with correct credentials and matching origin case insensitive [pass] +library/har.spec.ts › should attach content [fail] +library/har.spec.ts › should calculate time [pass] +library/har.spec.ts › should contain http2 for http2 requests [fail] +library/har.spec.ts › should filter by glob [pass] +library/har.spec.ts › should filter by regexp [pass] +library/har.spec.ts › should filter favicon and favicon redirects [unknown] +library/har.spec.ts › should have -1 _transferSize when its a failed request [pass] +library/har.spec.ts › should have browser [fail] +library/har.spec.ts › should have connection details [fail] +library/har.spec.ts › should have connection details for failed requests [fail] +library/har.spec.ts › should have connection details for redirects [fail] +library/har.spec.ts › should have different hars for concurrent contexts [pass] +library/har.spec.ts › should have pages [pass] +library/har.spec.ts › should have pages in persistent context [fail] +library/har.spec.ts › should have popup requests [pass] +library/har.spec.ts › should have security details [fail] +library/har.spec.ts › should have version and creator [pass] +library/har.spec.ts › should include API request [pass] +library/har.spec.ts › should include binary postData [fail] +library/har.spec.ts › should include content @smoke [fail] +library/har.spec.ts › should include cookies [pass] +library/har.spec.ts › should include form params [fail] +library/har.spec.ts › should include postData [fail] +library/har.spec.ts › should include query params [pass] +library/har.spec.ts › should include redirectURL [pass] +library/har.spec.ts › should include request [pass] +library/har.spec.ts › should include response [pass] +library/har.spec.ts › should include secure set-cookies [fail] +library/har.spec.ts › should include set-cookies [fail] +library/har.spec.ts › should include set-cookies with comma [fail] +library/har.spec.ts › should include sizes [fail] +library/har.spec.ts › should not contain internal pages [pass] +library/har.spec.ts › should not hang on resources served from cache [pass] +library/har.spec.ts › should not hang on slow chunked response [fail] +library/har.spec.ts › should omit content [pass] +library/har.spec.ts › should omit content legacy [pass] +library/har.spec.ts › should record failed request headers [pass] +library/har.spec.ts › should record failed request overrides [fail] +library/har.spec.ts › should record request overrides [fail] +library/har.spec.ts › should report the correct _transferSize with PNG files [fail] +library/har.spec.ts › should report the correct request body size [pass] +library/har.spec.ts › should report the correct request body size when the bodySize is 0 [pass] +library/har.spec.ts › should report the correct response body size when the bodySize is 0 [pass] +library/har.spec.ts › should return receive time [fail] +library/har.spec.ts › should return security details directly from response [fail] +library/har.spec.ts › should return server address directly from response [fail] +library/har.spec.ts › should skip invalid Expires [pass] +library/har.spec.ts › should throw without path [pass] +library/har.spec.ts › should use attach mode for zip extension [fail] +library/har.spec.ts › should work with gzip compression [fail] +library/headful.spec.ts › Page.bringToFront should work [pass] +library/headful.spec.ts › headless and headful should use same default fonts [fail] +library/headful.spec.ts › should click background tab [timeout] +library/headful.spec.ts › should click bottom row w/ infobar in OOPIF [fail] +library/headful.spec.ts › should click in OOPIF [fail] +library/headful.spec.ts › should click when viewport size is larger than screen [pass] +library/headful.spec.ts › should close browser after context menu was triggered [pass] +library/headful.spec.ts › should close browser with beforeunload page [fail] +library/headful.spec.ts › should close browsercontext with pending beforeunload dialog [timeout] +library/headful.spec.ts › should dispatch click events to oversized viewports [pass] +library/headful.spec.ts › should have default url when launching browser @smoke [fail] +library/headful.spec.ts › should not block third party SameSite=None cookies [fail] +library/headful.spec.ts › should not crash when creating second context [pass] +library/headful.spec.ts › should not override viewport size when passed null [fail] +library/headful.spec.ts › should(not) block third party cookies [pass] +library/hit-target.spec.ts › should block all events when hit target is wrong [pass] +library/hit-target.spec.ts › should block all events when hit target is wrong and element detaches [pass] +library/hit-target.spec.ts › should block click when mousedown fails [pass] +library/hit-target.spec.ts › should click an element inside closed shadow root [pass] +library/hit-target.spec.ts › should click in custom element [pass] +library/hit-target.spec.ts › should click in iframe with padding [pass] +library/hit-target.spec.ts › should click in iframe with padding 2 [pass] +library/hit-target.spec.ts › should click into frame inside closed shadow root [fail] +library/hit-target.spec.ts › should click the button again after document.write [pass] +library/hit-target.spec.ts › should click when element detaches in mousedown [pass] +library/hit-target.spec.ts › should detect overlaid element in a transformed iframe [fail] +library/hit-target.spec.ts › should detect overlay from another shadow root [pass] +library/hit-target.spec.ts › should not block programmatic events [pass] +library/hit-target.spec.ts › should not click an element overlaying iframe with the target [pass] +library/hit-target.spec.ts › should not click iframe overlaying the target [pass] +library/hit-target.spec.ts › should work with block inside inline [pass] +library/hit-target.spec.ts › should work with block inside inline in shadow dom [pass] +library/hit-target.spec.ts › should work with block-block-block inside inline-inline [pass] +library/hit-target.spec.ts › should work with drag and drop that moves the element under cursor [pass] +library/hit-target.spec.ts › should work with mui select [pass] +library/ignorehttpserrors.spec.ts › serviceWorker should intercept document request [fail] +library/ignorehttpserrors.spec.ts › should fail with WebSocket if not ignored [pass] +library/ignorehttpserrors.spec.ts › should isolate contexts [fail] +library/ignorehttpserrors.spec.ts › should work @smoke [fail] +library/ignorehttpserrors.spec.ts › should work with WebSocket [fail] +library/ignorehttpserrors.spec.ts › should work with mixed content [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should assert navigation [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should await popup [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should check [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should check a radio button [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should check with keyboard [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should click [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should click after same-document navigation [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should click button with nested div [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should emit single keyup on ArrowDown [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill [contentEditable] [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill japanese text [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill textarea [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill textarea with new lines at the end [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should ignore AltGraph [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should ignore programmatic events [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should make a positioned click on a canvas [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should middle click [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should not target selector preview by text regexp [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should not throw csp directive violation errors [pass] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should press [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should record ArrowDown [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should record omnibox navigations after performAction [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should record omnibox navigations after recordAction [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should record slider [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should select [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should select with size attribute [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should uncheck [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should update selected element after pressing Tab [timeout] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should work with TrustedTypes [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › click should emit events in order [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should --save-trace [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should check input with chaining id [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should clear files [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain close page [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain open page [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain second page [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should download files [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should fill tricky characters [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should handle dialogs [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should handle history.postData [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should not clash pages [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should not lead to an error if html gets clicked [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should record navigations after identical pushState [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should record open in a new tab with url [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should reset hover model on action when element detaches [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should save assets via SIGINT [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should update active model on action [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should update hover model on action [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should upload a single file [timeout] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should upload multiple files [timeout] +library/inspector/cli-codegen-2.spec.ts › should --test-id-attribute [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value on disabled input [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value on disabled select [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert visibility [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should click locator.first [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should click locator.nth [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should consume contextmenu events, despite a custom context menu [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should consume pointer events [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with id attribute [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with name attribute [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with special characters in name attribute [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with testId [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with title attribute [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByAltText [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByLabel [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByLabel without regex [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByPlaceholder [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByTestId [timeout] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate role locators undef frame locators [timeout] +library/inspector/cli-codegen-csharp.spec.ts › should not print context options method override in mstest if no options were passed [fail] +library/inspector/cli-codegen-csharp.spec.ts › should not print context options method override in nunit if no options were passed [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print a valid basic program in mstest [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print a valid basic program in nunit [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print context options method override in mstest if options were passed [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print context options method override in nunit if options were passed [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print load/save storageState [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options for custom settings [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options when using a device [unknown] +library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options when using a device and additional options [unknown] +library/inspector/cli-codegen-csharp.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-csharp.spec.ts › should work with --save-har [fail] +library/inspector/cli-codegen-java.spec.ts › should print a valid basic program in junit [fail] +library/inspector/cli-codegen-java.spec.ts › should print load/save storage_state [fail] +library/inspector/cli-codegen-java.spec.ts › should print the correct context options for custom settings [fail] +library/inspector/cli-codegen-java.spec.ts › should print the correct context options when using a device [unknown] +library/inspector/cli-codegen-java.spec.ts › should print the correct context options when using a device and additional options [unknown] +library/inspector/cli-codegen-java.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-java.spec.ts › should print the correct imports in junit [fail] +library/inspector/cli-codegen-java.spec.ts › should work with --save-har [fail] +library/inspector/cli-codegen-javascript.spec.ts › should print load/save storageState [fail] +library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options for custom settings [fail] +library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options when using a device [unknown] +library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options when using a device and additional options [unknown] +library/inspector/cli-codegen-javascript.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-javascript.spec.ts › should save the codegen output to a file if specified [fail] +library/inspector/cli-codegen-pytest.spec.ts › should print the correct context options when using a device and lang [unknown] +library/inspector/cli-codegen-pytest.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-pytest.spec.ts › should save the codegen output to a file if specified [fail] +library/inspector/cli-codegen-python-async.spec.ts › should print load/save storage_state [fail] +library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options for custom settings [fail] +library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options when using a device [unknown] +library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options when using a device and additional options [unknown] +library/inspector/cli-codegen-python-async.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-python-async.spec.ts › should save the codegen output to a file if specified [fail] +library/inspector/cli-codegen-python-async.spec.ts › should work with --save-har [fail] +library/inspector/cli-codegen-python.spec.ts › should print load/save storage_state [fail] +library/inspector/cli-codegen-python.spec.ts › should print the correct context options for custom settings [fail] +library/inspector/cli-codegen-python.spec.ts › should print the correct context options when using a device [unknown] +library/inspector/cli-codegen-python.spec.ts › should print the correct context options when using a device and additional options [unknown] +library/inspector/cli-codegen-python.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-python.spec.ts › should save the codegen output to a file if specified [fail] +library/inspector/cli-codegen-test.spec.ts › should print load storageState [fail] +library/inspector/cli-codegen-test.spec.ts › should print the correct context options for custom settings [fail] +library/inspector/cli-codegen-test.spec.ts › should print the correct context options when using a device [unknown] +library/inspector/cli-codegen-test.spec.ts › should print the correct context options when using a device and additional options [unknown] +library/inspector/cli-codegen-test.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-test.spec.ts › should work with --save-har [fail] +library/inspector/console-api.spec.ts › expected properties on playwright object [pass] +library/inspector/console-api.spec.ts › should support locator.and() [pass] +library/inspector/console-api.spec.ts › should support locator.or() [pass] +library/inspector/console-api.spec.ts › should support playwright.$, playwright.$$ [pass] +library/inspector/console-api.spec.ts › should support playwright.getBy* [pass] +library/inspector/console-api.spec.ts › should support playwright.locator({ has }) [pass] +library/inspector/console-api.spec.ts › should support playwright.locator({ hasNot }) [pass] +library/inspector/console-api.spec.ts › should support playwright.locator.value [pass] +library/inspector/console-api.spec.ts › should support playwright.locator.values [pass] +library/inspector/console-api.spec.ts › should support playwright.selector [pass] +library/inspector/pause.spec.ts › pause › should hide internal calls [pass] +library/inspector/pause.spec.ts › pause › should highlight locators with custom testId [timeout] +library/inspector/pause.spec.ts › pause › should highlight on explore [timeout] +library/inspector/pause.spec.ts › pause › should highlight on explore (csharp) [timeout] +library/inspector/pause.spec.ts › pause › should highlight pointer, only in main frame [timeout] +library/inspector/pause.spec.ts › pause › should highlight waitForEvent [pass] +library/inspector/pause.spec.ts › pause › should not prevent key events [pass] +library/inspector/pause.spec.ts › pause › should pause after a navigation [pass] +library/inspector/pause.spec.ts › pause › should pause and resume the script [pass] +library/inspector/pause.spec.ts › pause › should pause and resume the script with keyboard shortcut [pass] +library/inspector/pause.spec.ts › pause › should pause on context close [pass] +library/inspector/pause.spec.ts › pause › should pause on next pause [pass] +library/inspector/pause.spec.ts › pause › should pause on page close [pass] +library/inspector/pause.spec.ts › pause › should populate log [pass] +library/inspector/pause.spec.ts › pause › should populate log with error [fail] +library/inspector/pause.spec.ts › pause › should populate log with error in waitForEvent [pass] +library/inspector/pause.spec.ts › pause › should populate log with waitForEvent [pass] +library/inspector/pause.spec.ts › pause › should resume from console [fail] +library/inspector/pause.spec.ts › pause › should show expect.toHaveText [pass] +library/inspector/pause.spec.ts › pause › should show source [pass] +library/inspector/pause.spec.ts › pause › should skip input when resuming [pass] +library/inspector/pause.spec.ts › pause › should step [pass] +library/inspector/pause.spec.ts › pause › should step with keyboard shortcut [pass] +library/inspector/pause.spec.ts › should not reset timeouts [pass] +library/inspector/pause.spec.ts › should resume when closing inspector [pass] +library/launcher.spec.ts › should have a devices object [pass] +library/launcher.spec.ts › should have an errors object [pass] +library/launcher.spec.ts › should kill browser process on timeout after close [pass] +library/launcher.spec.ts › should throw a friendly error if its headed and there is no xserver on linux running [fail] +library/locator-generator.spec.ts › asLocator internal:and [pass] +library/locator-generator.spec.ts › asLocator internal:chain [pass] +library/locator-generator.spec.ts › asLocator internal:or [pass] +library/locator-generator.spec.ts › asLocator xpath [pass] +library/locator-generator.spec.ts › generate multiple locators [pass] +library/locator-generator.spec.ts › parse locators strictly [pass] +library/locator-generator.spec.ts › parseLocator css [pass] +library/locator-generator.spec.ts › parseLocator quotes [pass] +library/locator-generator.spec.ts › reverse engineer frameLocator [pass] +library/locator-generator.spec.ts › reverse engineer getByRole [pass] +library/locator-generator.spec.ts › reverse engineer has [pass] +library/locator-generator.spec.ts › reverse engineer has + hasText [pass] +library/locator-generator.spec.ts › reverse engineer hasNot [pass] +library/locator-generator.spec.ts › reverse engineer hasNotText [pass] +library/locator-generator.spec.ts › reverse engineer hasText [pass] +library/locator-generator.spec.ts › reverse engineer ignore-case locators [pass] +library/locator-generator.spec.ts › reverse engineer internal:has-text locators [pass] +library/locator-generator.spec.ts › reverse engineer locators [pass] +library/locator-generator.spec.ts › reverse engineer locators with regex [pass] +library/locator-generator.spec.ts › reverse engineer ordered locators [pass] +library/logger.spec.ts › should log @smoke [pass] +library/logger.spec.ts › should log context-level [pass] +library/modernizr.spec.ts › Mobile Safari [unknown] +library/modernizr.spec.ts › Safari Desktop [unknown] +library/page-clock.frozen.spec.ts › clock should be frozen [unknown] +library/page-clock.frozen.spec.ts › clock should be realtime [unknown] +library/page-clock.spec.ts › Date.now › check Date.now is an integer [pass] +library/page-clock.spec.ts › Date.now › check Date.now is an integer (2) [pass] +library/page-clock.spec.ts › fastForward › ignores timers which wouldn't be run [pass] +library/page-clock.spec.ts › fastForward › pushes back execution time for skipped timers [fail] +library/page-clock.spec.ts › fastForward › supports string time arguments [fail] +library/page-clock.spec.ts › popup › should not run time before popup on pause [fail] +library/page-clock.spec.ts › popup › should run time before popup [pass] +library/page-clock.spec.ts › popup › should tick after popup [fail] +library/page-clock.spec.ts › popup › should tick before popup [fail] +library/page-clock.spec.ts › runFor › creates updated Date while ticking [fail] +library/page-clock.spec.ts › runFor › does not trigger without sufficient delay [pass] +library/page-clock.spec.ts › runFor › passes 1 minute [fail] +library/page-clock.spec.ts › runFor › passes 2 hours, 34 minutes and 10 seconds [fail] +library/page-clock.spec.ts › runFor › passes 8 seconds [fail] +library/page-clock.spec.ts › runFor › returns the current now value [pass] +library/page-clock.spec.ts › runFor › throws for invalid format [pass] +library/page-clock.spec.ts › runFor › triggers after sufficient delay [fail] +library/page-clock.spec.ts › runFor › triggers event when some throw [fail] +library/page-clock.spec.ts › runFor › triggers immediately without specified delay [fail] +library/page-clock.spec.ts › runFor › triggers multiple simultaneous timers [fail] +library/page-clock.spec.ts › runFor › triggers simultaneous timers [fail] +library/page-clock.spec.ts › runFor › waits after setTimeout was called [fail] +library/page-clock.spec.ts › setFixedTime › allows installing fake timers after settings time [fail] +library/page-clock.spec.ts › setFixedTime › allows setting time multiple times [pass] +library/page-clock.spec.ts › setFixedTime › does not fake methods [pass] +library/page-clock.spec.ts › setFixedTime › fixed time is not affected by clock manipulation [pass] +library/page-clock.spec.ts › stubTimers › fakes Date constructor [pass] +library/page-clock.spec.ts › stubTimers › global fake setTimeout should return id [pass] +library/page-clock.spec.ts › stubTimers › replaces global clearInterval [pass] +library/page-clock.spec.ts › stubTimers › replaces global clearTimeout [pass] +library/page-clock.spec.ts › stubTimers › replaces global performance.now [pass] +library/page-clock.spec.ts › stubTimers › replaces global performance.timeOrigin [pass] +library/page-clock.spec.ts › stubTimers › replaces global setInterval [fail] +library/page-clock.spec.ts › stubTimers › replaces global setTimeout [fail] +library/page-clock.spec.ts › stubTimers › sets initial timestamp [pass] +library/page-clock.spec.ts › stubTimers › should throw for invalid date [pass] +library/page-clock.spec.ts › while on pause › fastForward should not run nested immediate [fail] +library/page-clock.spec.ts › while on pause › runFor should not run nested immediate [fail] +library/page-clock.spec.ts › while on pause › runFor should not run nested immediate from microtask [fail] +library/page-clock.spec.ts › while running › should fastForward [pass] +library/page-clock.spec.ts › while running › should fastForwardTo [pass] +library/page-clock.spec.ts › while running › should pause [pass] +library/page-clock.spec.ts › while running › should pause and fastForward [pass] +library/page-clock.spec.ts › while running › should progress time [pass] +library/page-clock.spec.ts › while running › should runFor [pass] +library/page-clock.spec.ts › while running › should set system time on pause [pass] +library/page-event-crash.spec.ts › should be able to close context when page crashes [timeout] +library/page-event-crash.spec.ts › should cancel navigation when page crashes [timeout] +library/page-event-crash.spec.ts › should cancel waitForEvent when page crashes [timeout] +library/page-event-crash.spec.ts › should emit crash event when page crashes [timeout] +library/page-event-crash.spec.ts › should throw on any action after page crashes [timeout] +library/pdf.spec.ts › should be able to generate outline [unknown] +library/pdf.spec.ts › should be able to save file [unknown] +library/permissions.spec.ts › permissions › should accumulate when adding [fail] +library/permissions.spec.ts › permissions › should be prompt by default [pass] +library/permissions.spec.ts › permissions › should clear permissions [fail] +library/permissions.spec.ts › permissions › should deny permission when not listed [fail] +library/permissions.spec.ts › permissions › should fail when bad permission is given [fail] +library/permissions.spec.ts › permissions › should grant geolocation permission when origin is listed [fail] +library/permissions.spec.ts › permissions › should grant notifications permission when listed [fail] +library/permissions.spec.ts › permissions › should grant permission when creating context [fail] +library/permissions.spec.ts › permissions › should grant permission when listed for all domains [fail] +library/permissions.spec.ts › permissions › should isolate permissions between browser contexts [fail] +library/permissions.spec.ts › permissions › should prompt for geolocation permission when origin is not listed [pass] +library/permissions.spec.ts › permissions › should reset permissions [fail] +library/permissions.spec.ts › permissions › should trigger permission onchange [fail] +library/permissions.spec.ts › should support clipboard read [fail] +library/permissions.spec.ts › storage access [unknown] +library/popup.spec.ts › BrowserContext.addInitScript should apply to a cross-process popup [fail] +library/popup.spec.ts › BrowserContext.addInitScript should apply to an in-process popup [fail] +library/popup.spec.ts › should expose function from browser context [fail] +library/popup.spec.ts › should inherit extra headers from browser context [fail] +library/popup.spec.ts › should inherit http credentials from browser context [fail] +library/popup.spec.ts › should inherit offline from browser context [fail] +library/popup.spec.ts › should inherit touch support from browser context [fail] +library/popup.spec.ts › should inherit user agent from browser context @smoke [fail] +library/popup.spec.ts › should inherit viewport size from browser context [fail] +library/popup.spec.ts › should not dispatch binding on a closed page [fail] +library/popup.spec.ts › should not throttle rAF in the opener page [pass] +library/popup.spec.ts › should not throw when click closes popup [pass] +library/popup.spec.ts › should respect routes from browser context [fail] +library/popup.spec.ts › should respect routes from browser context when using window.open [fail] +library/popup.spec.ts › should use viewport size from window features [timeout] +library/proxy-pattern.spec.ts › socks proxy patter matcher [pass] +library/proxy.spec.ts › does launch without a port [pass] +library/proxy.spec.ts › should authenticate [fail] +library/proxy.spec.ts › should exclude patterns [pass] +library/proxy.spec.ts › should proxy local network requests › by default › link-local [pass] +library/proxy.spec.ts › should proxy local network requests › by default › localhost [pass] +library/proxy.spec.ts › should proxy local network requests › by default › loopback address [pass] +library/proxy.spec.ts › should proxy local network requests › with other bypasses › link-local [pass] +library/proxy.spec.ts › should proxy local network requests › with other bypasses › localhost [pass] +library/proxy.spec.ts › should proxy local network requests › with other bypasses › loopback address [pass] +library/proxy.spec.ts › should throw for bad server value [pass] +library/proxy.spec.ts › should use SOCKS proxy for websocket requests [pass] +library/proxy.spec.ts › should use proxy @smoke [pass] +library/proxy.spec.ts › should use proxy for second page [pass] +library/proxy.spec.ts › should use proxy with emulated user agent [unknown] +library/proxy.spec.ts › should use socks proxy [pass] +library/proxy.spec.ts › should use socks proxy in second page [pass] +library/proxy.spec.ts › should work with IP:PORT notion [pass] +library/proxy.spec.ts › should work with authenticate followed by redirect [fail] +library/resource-timing.spec.ts › should work @smoke [pass] +library/resource-timing.spec.ts › should work for SSL [fail] +library/resource-timing.spec.ts › should work for redirect [fail] +library/resource-timing.spec.ts › should work for subresource [fail] +library/resource-timing.spec.ts › should work when serving from memory cache [fail] +library/role-utils.spec.ts › accessible name nested treeitem [pass] +library/role-utils.spec.ts › accessible name with slots [pass] +library/role-utils.spec.ts › axe-core accessible-text [pass] +library/role-utils.spec.ts › axe-core implicit-role [pass] +library/role-utils.spec.ts › control embedded in a label [pass] +library/role-utils.spec.ts › control embedded in a target element [pass] +library/role-utils.spec.ts › display:contents should be visible when contents are visible [pass] +library/role-utils.spec.ts › label/labelled-by aria-hidden with descendants [pass] +library/role-utils.spec.ts › native controls [pass] +library/role-utils.spec.ts › native controls labelled-by [pass] +library/role-utils.spec.ts › own aria-label concatenated with aria-labelledby [pass] +library/role-utils.spec.ts › should ignore stylesheet from hidden aria-labelledby subtree [pass] +library/role-utils.spec.ts › should not include hidden pseudo into accessible name [pass] +library/role-utils.spec.ts › should work with form and tricky input names [pass] +library/role-utils.spec.ts › svg role=presentation [pass] +library/role-utils.spec.ts › svg title [pass] +library/role-utils.spec.ts › wpt accname #0 [pass] +library/role-utils.spec.ts › wpt accname #1 [pass] +library/role-utils.spec.ts › wpt accname #2 [pass] +library/role-utils.spec.ts › wpt accname #3 [pass] +library/role-utils.spec.ts › wpt accname non-manual [pass] +library/screenshot.spec.ts › element screenshot › element screenshot should work with a mobile viewport [fail] +library/screenshot.spec.ts › element screenshot › element screenshot should work with device scale factor [fail] +library/screenshot.spec.ts › element screenshot › element screenshots should handle vh units [fail] +library/screenshot.spec.ts › element screenshot › page screenshot should capture css transform with device pixels [fail] +library/screenshot.spec.ts › element screenshot › should capture full element when larger than viewport with device scale factor [fail] +library/screenshot.spec.ts › element screenshot › should capture full element when larger than viewport with device scale factor and scale:css [fail] +library/screenshot.spec.ts › element screenshot › should restore default viewport after fullPage screenshot [fail] +library/screenshot.spec.ts › element screenshot › should restore viewport after element screenshot and exception [pass] +library/screenshot.spec.ts › element screenshot › should restore viewport after page screenshot and exception [pass] +library/screenshot.spec.ts › element screenshot › should restore viewport after page screenshot and timeout [fail] +library/screenshot.spec.ts › element screenshot › should take element screenshot when default viewport is null and restore back [fail] +library/screenshot.spec.ts › element screenshot › should take fullPage screenshots when default viewport is null [fail] +library/screenshot.spec.ts › element screenshot › should take screenshots when default viewport is null [fail] +library/screenshot.spec.ts › element screenshot › should work if the main resource hangs [fail] +library/screenshot.spec.ts › page screenshot › should handle vh units [fail] +library/screenshot.spec.ts › page screenshot › should run in parallel in multiple pages [fail] +library/screenshot.spec.ts › page screenshot › should throw if screenshot size is too large with device scale factor [fail] +library/screenshot.spec.ts › page screenshot › should work with a mobile viewport [fail] +library/screenshot.spec.ts › page screenshot › should work with a mobile viewport and clip [fail] +library/screenshot.spec.ts › page screenshot › should work with a mobile viewport and fullPage [fail] +library/screenshot.spec.ts › page screenshot › should work with device scale factor [fail] +library/screenshot.spec.ts › page screenshot › should work with device scale factor and clip [fail] +library/screenshot.spec.ts › page screenshot › should work with device scale factor and scale:css [fail] +library/screenshot.spec.ts › page screenshot › should work with device scale factor, clip and scale:css [fail] +library/screenshot.spec.ts › page screenshot › should work with large size [fail] +library/selector-generator.spec.ts › selector generator › should accept valid aria-label for candidate consideration [pass] +library/selector-generator.spec.ts › selector generator › should accept valid data-test-id for candidate consideration [pass] +library/selector-generator.spec.ts › selector generator › should chain text after parent [pass] +library/selector-generator.spec.ts › selector generator › should escape text with quote [pass] +library/selector-generator.spec.ts › selector generator › should escape text with slash [pass] +library/selector-generator.spec.ts › selector generator › should find text in shadow dom [pass] +library/selector-generator.spec.ts › selector generator › should generate exact label when necessary [pass] +library/selector-generator.spec.ts › selector generator › should generate exact placeholder when necessary [pass] +library/selector-generator.spec.ts › selector generator › should generate exact role when necessary [pass] +library/selector-generator.spec.ts › selector generator › should generate exact text when necessary [pass] +library/selector-generator.spec.ts › selector generator › should generate exact title when necessary [pass] +library/selector-generator.spec.ts › selector generator › should generate label selector [pass] +library/selector-generator.spec.ts › selector generator › should generate multiple: noId [pass] +library/selector-generator.spec.ts › selector generator › should generate multiple: noId noText [pass] +library/selector-generator.spec.ts › selector generator › should generate multiple: noText in role [pass] +library/selector-generator.spec.ts › selector generator › should generate multiple: noText in text [pass] +library/selector-generator.spec.ts › selector generator › should generate relative selector [pass] +library/selector-generator.spec.ts › selector generator › should generate text and normalize whitespace [pass] +library/selector-generator.spec.ts › selector generator › should generate text for [pass] +library/selector-generator.spec.ts › selector generator › should generate title selector [pass] +library/selector-generator.spec.ts › selector generator › should handle first non-unique data-testid [pass] +library/selector-generator.spec.ts › selector generator › should handle second non-unique data-testid [pass] +library/selector-generator.spec.ts › selector generator › should ignore empty aria-label for candidate consideration [pass] +library/selector-generator.spec.ts › selector generator › should ignore empty data-test-id for candidate consideration [pass] +library/selector-generator.spec.ts › selector generator › should ignore empty role for candidate consideration [pass] +library/selector-generator.spec.ts › selector generator › should match in deep shadow dom [pass] +library/selector-generator.spec.ts › selector generator › should match in shadow dom [pass] +library/selector-generator.spec.ts › selector generator › should not accept invalid role for candidate consideration [pass] +library/selector-generator.spec.ts › selector generator › should not escape spaces inside named attr selectors [pass] +library/selector-generator.spec.ts › selector generator › should not escape text with >> [pass] +library/selector-generator.spec.ts › selector generator › should not improve guid text [pass] +library/selector-generator.spec.ts › selector generator › should not prefer zero-sized button over inner span [pass] +library/selector-generator.spec.ts › selector generator › should not use generated id [pass] +library/selector-generator.spec.ts › selector generator › should not use input[value] [pass] +library/selector-generator.spec.ts › selector generator › should not use text for select [pass] +library/selector-generator.spec.ts › selector generator › should prefer button over inner span [pass] +library/selector-generator.spec.ts › selector generator › should prefer data-testid [pass] +library/selector-generator.spec.ts › selector generator › should prefer role other input[type] [pass] +library/selector-generator.spec.ts › selector generator › should prefer role=button over inner span [pass] +library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › name [pass] +library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › placeholder [pass] +library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › role [pass] +library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › type [pass] +library/selector-generator.spec.ts › selector generator › should properly join child selectors under nested ordinals [pass] +library/selector-generator.spec.ts › selector generator › should separate selectors by >> [pass] +library/selector-generator.spec.ts › selector generator › should trim long text [pass] +library/selector-generator.spec.ts › selector generator › should trim text [pass] +library/selector-generator.spec.ts › selector generator › should try to improve label text by shortening [pass] +library/selector-generator.spec.ts › selector generator › should try to improve role name [pass] +library/selector-generator.spec.ts › selector generator › should try to improve text [pass] +library/selector-generator.spec.ts › selector generator › should try to improve text by shortening [pass] +library/selector-generator.spec.ts › selector generator › should use data-testid in strict errors [pass] +library/selector-generator.spec.ts › selector generator › should use internal:has-text [pass] +library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp [pass] +library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp with a quote [pass] +library/selector-generator.spec.ts › selector generator › should use nested ordinals [pass] +library/selector-generator.spec.ts › selector generator › should use ordinal for identical nodes [pass] +library/selector-generator.spec.ts › selector generator › should use parent text [pass] +library/selector-generator.spec.ts › selector generator › should use readable id [pass] +library/selector-generator.spec.ts › selector generator › should use the name attributes for elements that can have it [pass] +library/selector-generator.spec.ts › selector generator › should work in dynamic iframes without navigation [fail] +library/selector-generator.spec.ts › selector generator › should work with tricky attributes [pass] +library/selector-generator.spec.ts › selector generator › should work without CSS.escape [pass] +library/selectors-register.spec.ts › should handle errors [pass] +library/selectors-register.spec.ts › should not rely on engines working from the root [pass] +library/selectors-register.spec.ts › should throw a nice error if the selector returns a bad value [pass] +library/selectors-register.spec.ts › should work [pass] +library/selectors-register.spec.ts › should work in main and isolated world [pass] +library/selectors-register.spec.ts › should work when registered on global [pass] +library/selectors-register.spec.ts › should work with path [pass] +library/shared-worker.spec.ts › should survive shared worker restart [timeout] +library/signals.spec.ts › should close the browser when the node process closes [timeout] +library/signals.spec.ts › should remove temp dir on process.exit [timeout] +library/signals.spec.ts › signals › should close the browser on SIGHUP [timeout] +library/signals.spec.ts › signals › should close the browser on SIGINT [timeout] +library/signals.spec.ts › signals › should close the browser on SIGTERM [timeout] +library/signals.spec.ts › signals › should kill the browser on SIGINT + SIGTERM [timeout] +library/signals.spec.ts › signals › should kill the browser on SIGTERM + SIGINT [timeout] +library/signals.spec.ts › signals › should kill the browser on double SIGINT and remove temp dir [timeout] +library/signals.spec.ts › signals › should not prevent default SIGTERM handling after browser close [timeout] +library/signals.spec.ts › signals › should report browser close signal 2 [timeout] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo check [pass] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo click [pass] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dblclick [pass] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dispatchEvent [pass] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo fill [pass] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo focus [pass] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo hover [pass] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo press [pass] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo selectOption [pass] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo setInputFiles [fail] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo type [pass] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo uncheck [pass] +library/slowmo.spec.ts › slowMo › Frame SlowMo check [pass] +library/slowmo.spec.ts › slowMo › Frame SlowMo click [pass] +library/slowmo.spec.ts › slowMo › Frame SlowMo dblclick [pass] +library/slowmo.spec.ts › slowMo › Frame SlowMo dispatchEvent [pass] +library/slowmo.spec.ts › slowMo › Frame SlowMo fill [pass] +library/slowmo.spec.ts › slowMo › Frame SlowMo focus [pass] +library/slowmo.spec.ts › slowMo › Frame SlowMo goto [pass] +library/slowmo.spec.ts › slowMo › Frame SlowMo hover [pass] +library/slowmo.spec.ts › slowMo › Frame SlowMo press [pass] +library/slowmo.spec.ts › slowMo › Frame SlowMo selectOption [pass] +library/slowmo.spec.ts › slowMo › Frame SlowMo setInputFiles [timeout] +library/slowmo.spec.ts › slowMo › Frame SlowMo type [pass] +library/slowmo.spec.ts › slowMo › Frame SlowMo uncheck [pass] +library/slowmo.spec.ts › slowMo › Page SlowMo check [pass] +library/slowmo.spec.ts › slowMo › Page SlowMo click [pass] +library/slowmo.spec.ts › slowMo › Page SlowMo dblclick [pass] +library/slowmo.spec.ts › slowMo › Page SlowMo dispatchEvent [pass] +library/slowmo.spec.ts › slowMo › Page SlowMo fill [pass] +library/slowmo.spec.ts › slowMo › Page SlowMo focus [pass] +library/slowmo.spec.ts › slowMo › Page SlowMo goto [pass] +library/slowmo.spec.ts › slowMo › Page SlowMo hover [pass] +library/slowmo.spec.ts › slowMo › Page SlowMo press [pass] +library/slowmo.spec.ts › slowMo › Page SlowMo reload [timeout] +library/slowmo.spec.ts › slowMo › Page SlowMo selectOption [pass] +library/slowmo.spec.ts › slowMo › Page SlowMo setInputFiles [timeout] +library/slowmo.spec.ts › slowMo › Page SlowMo type [pass] +library/slowmo.spec.ts › slowMo › Page SlowMo uncheck [pass] +library/snapshotter.spec.ts › snapshots › empty adopted style sheets should not prevent node refs [pass] +library/snapshotter.spec.ts › snapshots › should capture frame [fail] +library/snapshotter.spec.ts › snapshots › should capture iframe [fail] +library/snapshotter.spec.ts › snapshots › should capture iframe with srcdoc [fail] +library/snapshotter.spec.ts › snapshots › should capture resources [fail] +library/snapshotter.spec.ts › snapshots › should capture snapshot target [timeout] +library/snapshotter.spec.ts › snapshots › should collect multiple [pass] +library/snapshotter.spec.ts › snapshots › should collect on attribute change [pass] +library/snapshotter.spec.ts › snapshots › should collect snapshot [pass] +library/snapshotter.spec.ts › snapshots › should have a custom doctype [pass] +library/snapshotter.spec.ts › snapshots › should not navigate on anchor clicks [pass] +library/snapshotter.spec.ts › snapshots › should preserve BASE and other content on reset [pass] +library/snapshotter.spec.ts › snapshots › should replace meta charset attr that specifies charset [pass] +library/snapshotter.spec.ts › snapshots › should replace meta content attr that specifies charset [pass] +library/snapshotter.spec.ts › snapshots › should respect CSSOM change through CSSGroupingRule [pass] +library/snapshotter.spec.ts › snapshots › should respect attr removal [pass] +library/snapshotter.spec.ts › snapshots › should respect inline CSSOM change [pass] +library/snapshotter.spec.ts › snapshots › should respect node removal [pass] +library/snapshotter.spec.ts › snapshots › should respect subresource CSSOM change [fail] +library/tap.spec.ts › locators › should send all of the correct events [fail] +library/tap.spec.ts › should not send mouse events touchstart is canceled [fail] +library/tap.spec.ts › should not send mouse events when touchend is canceled [fail] +library/tap.spec.ts › should not wait for a navigation caused by a tap [fail] +library/tap.spec.ts › should send all of the correct events @smoke [fail] +library/tap.spec.ts › should send well formed touch points [fail] +library/tap.spec.ts › should wait until an element is visible to tap it [fail] +library/tap.spec.ts › should work with modifiers [fail] +library/tap.spec.ts › trial run should not tap [fail] +library/trace-viewer.spec.ts › should allow hiding route actions [fail] +library/trace-viewer.spec.ts › should allow showing screenshots instead of snapshots [fail] +library/trace-viewer.spec.ts › should capture data-url svg iframe [fail] +library/trace-viewer.spec.ts › should capture iframe with sandbox attribute [fail] +library/trace-viewer.spec.ts › should complain about newer version of trace in old viewer [pass] +library/trace-viewer.spec.ts › should contain action info [pass] +library/trace-viewer.spec.ts › should contain adopted style sheets [pass] +library/trace-viewer.spec.ts › should display language-specific locators [pass] +library/trace-viewer.spec.ts › should display waitForLoadState even if did not wait for it [pass] +library/trace-viewer.spec.ts › should filter network requests by resource type [pass] +library/trace-viewer.spec.ts › should filter network requests by url [pass] +library/trace-viewer.spec.ts › should follow redirects [fail] +library/trace-viewer.spec.ts › should handle case where neither snapshots nor screenshots exist [pass] +library/trace-viewer.spec.ts › should handle file URIs [unknown] +library/trace-viewer.spec.ts › should handle multiple headers [fail] +library/trace-viewer.spec.ts › should handle src=blob [fail] +library/trace-viewer.spec.ts › should have correct snapshot size [pass] +library/trace-viewer.spec.ts › should have correct stack trace [pass] +library/trace-viewer.spec.ts › should have network request overrides [fail] +library/trace-viewer.spec.ts › should have network request overrides 2 [fail] +library/trace-viewer.spec.ts › should have network requests [pass] +library/trace-viewer.spec.ts › should highlight expect failure [pass] +library/trace-viewer.spec.ts › should highlight locator in iframe while typing [fail] +library/trace-viewer.spec.ts › should highlight target element in shadow dom [fail] +library/trace-viewer.spec.ts › should highlight target elements [fail] +library/trace-viewer.spec.ts › should ignore 304 responses [fail] +library/trace-viewer.spec.ts › should include metainfo [pass] +library/trace-viewer.spec.ts › should include requestUrl in route.abort [fail] +library/trace-viewer.spec.ts › should include requestUrl in route.continue [fail] +library/trace-viewer.spec.ts › should include requestUrl in route.fulfill [fail] +library/trace-viewer.spec.ts › should not crash with broken locator [pass] +library/trace-viewer.spec.ts › should open console errors on click [fail] +library/trace-viewer.spec.ts › should open simple trace viewer [pass] +library/trace-viewer.spec.ts › should open snapshot in new browser context [pass] +library/trace-viewer.spec.ts › should open trace viewer on specific host [pass] +library/trace-viewer.spec.ts › should open trace-1.31 [pass] +library/trace-viewer.spec.ts › should open trace-1.37 [pass] +library/trace-viewer.spec.ts › should open two trace files [pass] +library/trace-viewer.spec.ts › should open two trace files of the same test [pass] +library/trace-viewer.spec.ts › should open two trace viewers [pass] +library/trace-viewer.spec.ts › should pick locator [pass] +library/trace-viewer.spec.ts › should pick locator in iframe [fail] +library/trace-viewer.spec.ts › should popup snapshot [pass] +library/trace-viewer.spec.ts › should prefer later resource request with the same method [fail] +library/trace-viewer.spec.ts › should preserve currentSrc [pass] +library/trace-viewer.spec.ts › should preserve noscript when javascript is disabled [pass] +library/trace-viewer.spec.ts › should register custom elements [pass] +library/trace-viewer.spec.ts › should remove noscript by default [pass] +library/trace-viewer.spec.ts › should remove noscript when javaScriptEnabled is set to true [pass] +library/trace-viewer.spec.ts › should render console [fail] +library/trace-viewer.spec.ts › should render network bars [pass] +library/trace-viewer.spec.ts › should restore control values [fail] +library/trace-viewer.spec.ts › should restore scroll positions [pass] +library/trace-viewer.spec.ts › should serve css without content-type [timeout] +library/trace-viewer.spec.ts › should serve overridden request [fail] +library/trace-viewer.spec.ts › should show action source [pass] +library/trace-viewer.spec.ts › should show baseURL in metadata pane [pass] +library/trace-viewer.spec.ts › should show correct request start time [fail] +library/trace-viewer.spec.ts › should show empty trace viewer [pass] +library/trace-viewer.spec.ts › should show font preview [fail] +library/trace-viewer.spec.ts › should show null as a param [pass] +library/trace-viewer.spec.ts › should show only one pointer with multilevel iframes [unknown] +library/trace-viewer.spec.ts › should show params and return value [pass] +library/trace-viewer.spec.ts › should show similar actions from library-only trace [pass] +library/trace-viewer.spec.ts › should show snapshot URL [pass] +library/trace-viewer.spec.ts › should update highlight when typing [pass] +library/trace-viewer.spec.ts › should work with adopted style sheets and all: unset [fail] +library/trace-viewer.spec.ts › should work with adopted style sheets and replace/replaceSync [pass] +library/trace-viewer.spec.ts › should work with meta CSP [pass] +library/trace-viewer.spec.ts › should work with nesting CSS selectors [pass] +library/tracing.spec.ts › should collect sources [pass] +library/tracing.spec.ts › should collect trace with resources, but no js [timeout] +library/tracing.spec.ts › should collect two traces [pass] +library/tracing.spec.ts › should exclude internal pages [pass] +library/tracing.spec.ts › should export trace concurrently to second navigation [fail] +library/tracing.spec.ts › should flush console events on tracing stop [pass] +library/tracing.spec.ts › should hide internal stack frames [pass] +library/tracing.spec.ts › should hide internal stack frames in expect [pass] +library/tracing.spec.ts › should ignore iframes in head [pass] +library/tracing.spec.ts › should include context API requests [pass] +library/tracing.spec.ts › should include interrupted actions [pass] +library/tracing.spec.ts › should not collect snapshots by default [pass] +library/tracing.spec.ts › should not crash when browser closes mid-trace [pass] +library/tracing.spec.ts › should not emit after w/o before [pass] +library/tracing.spec.ts › should not flush console events [pass] +library/tracing.spec.ts › should not hang for clicks that open dialogs [pass] +library/tracing.spec.ts › should not include buffers in the trace [fail] +library/tracing.spec.ts › should not include trace resources from the previous chunks [fail] +library/tracing.spec.ts › should not stall on dialogs [pass] +library/tracing.spec.ts › should not throw when stopping without start but not exporting [pass] +library/tracing.spec.ts › should overwrite existing file [fail] +library/tracing.spec.ts › should produce screencast frames crop [fail] +library/tracing.spec.ts › should produce screencast frames fit [fail] +library/tracing.spec.ts › should produce screencast frames scale [fail] +library/tracing.spec.ts › should record global request trace [pass] +library/tracing.spec.ts › should record network failures [fail] +library/tracing.spec.ts › should respect tracesDir and name [fail] +library/tracing.spec.ts › should store global request traces separately [pass] +library/tracing.spec.ts › should store postData for global request [pass] +library/tracing.spec.ts › should survive browser.close with auto-created traces dir [pass] +library/tracing.spec.ts › should throw when starting with different options [pass] +library/tracing.spec.ts › should throw when stopping without start [pass] +library/tracing.spec.ts › should use the correct apiName for event driven callbacks [fail] +library/tracing.spec.ts › should work with multiple chunks [pass] +library/unroute-behavior.spec.ts › context.close should not wait for active route handlers on the owned pages [fail] +library/unroute-behavior.spec.ts › context.unroute should not wait for pending handlers to complete [timeout] +library/unroute-behavior.spec.ts › context.unrouteAll removes all handlers [pass] +library/unroute-behavior.spec.ts › context.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [timeout] +library/unroute-behavior.spec.ts › context.unrouteAll should wait for pending handlers to complete [timeout] +library/unroute-behavior.spec.ts › page.close does not wait for active route handlers [fail] +library/unroute-behavior.spec.ts › page.close should not wait for active route handlers on the owning context [fail] +library/unroute-behavior.spec.ts › page.unroute should not wait for pending handlers to complete [fail] +library/unroute-behavior.spec.ts › page.unrouteAll removes all routes [fail] +library/unroute-behavior.spec.ts › page.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [fail] +library/unroute-behavior.spec.ts › page.unrouteAll should wait for pending handlers to complete [fail] +library/unroute-behavior.spec.ts › route.continue should not throw if page has been closed [fail] +library/unroute-behavior.spec.ts › route.fallback should not throw if page has been closed [fail] +library/unroute-behavior.spec.ts › route.fulfill should not throw if page has been closed [fail] +library/video.spec.ts › screencast › saveAs should throw when no video frames [pass] +library/video.spec.ts › screencast › should be 800x450 by default [fail] +library/video.spec.ts › screencast › should be 800x600 with null viewport [fail] +library/video.spec.ts › screencast › should capture css transformation [fail] +library/video.spec.ts › screencast › should capture full viewport [fail] +library/video.spec.ts › screencast › should capture full viewport on hidpi [fail] +library/video.spec.ts › screencast › should capture navigation [fail] +library/video.spec.ts › screencast › should capture static page [fail] +library/video.spec.ts › screencast › should capture static page in persistent context @smoke [fail] +library/video.spec.ts › screencast › should continue recording main page after popup closes [fail] +library/video.spec.ts › screencast › should delete video [fail] +library/video.spec.ts › screencast › should emulate an iphone [fail] +library/video.spec.ts › screencast › should expose video path [timeout] +library/video.spec.ts › screencast › should expose video path blank page [timeout] +library/video.spec.ts › screencast › should expose video path blank popup [timeout] +library/video.spec.ts › screencast › should not create video for internal pages [unknown] +library/video.spec.ts › screencast › should scale frames down to the requested size [fail] +library/video.spec.ts › screencast › should throw if browser dies [fail] +library/video.spec.ts › screencast › should throw on browser close [fail] +library/video.spec.ts › screencast › should throw without recordVideo.dir [pass] +library/video.spec.ts › screencast › should use viewport scaled down to fit into 800x800 as default size [fail] +library/video.spec.ts › screencast › should wait for video to finish if page was closed [fail] +library/video.spec.ts › screencast › should work for popups [fail] +library/video.spec.ts › screencast › should work with old options [fail] +library/video.spec.ts › screencast › should work with relative path for recordVideo.dir [timeout] +library/video.spec.ts › screencast › should work with video+trace [fail] +library/video.spec.ts › screencast › should work with weird screen resolution [timeout] +library/video.spec.ts › screencast › videoSize should require videosPath [pass] +library/video.spec.ts › should saveAs video [fail] +library/web-socket.spec.ts › should emit binary frame events [timeout] +library/web-socket.spec.ts › should emit close events [timeout] +library/web-socket.spec.ts › should emit error [timeout] +library/web-socket.spec.ts › should emit frame events [timeout] +library/web-socket.spec.ts › should filter out the close events when the server closes with a message [timeout] +library/web-socket.spec.ts › should not have stray error events [timeout] +library/web-socket.spec.ts › should pass self as argument to close event [timeout] +library/web-socket.spec.ts › should reject waitForEvent on page close [timeout] +library/web-socket.spec.ts › should reject waitForEvent on socket close [timeout] +library/web-socket.spec.ts › should turn off when offline [unknown] +library/web-socket.spec.ts › should work @smoke [pass] \ No newline at end of file diff --git a/tests/bidi/expectations/bidi-chromium-page.txt b/tests/bidi/expectations/bidi-chromium-page.txt index 14d77dd0ab..da2bee1fef 100644 --- a/tests/bidi/expectations/bidi-chromium-page.txt +++ b/tests/bidi/expectations/bidi-chromium-page.txt @@ -1,1966 +1,1966 @@ -bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should force a layout [pass] -bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should get frame box [pass] -bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should handle nested frames [fail] -bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should handle scroll offset and click [pass] -bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should return null for invisible elements [fail] -bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should work [pass] -bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should work when inline box child is outside of viewport [pass] -bidi-chromium-page › page/elementhandle-bounding-box.spec.ts › should work with SVG nodes [pass] -bidi-chromium-page › page/elementhandle-click.spec.ts › should double click the button [pass] -bidi-chromium-page › page/elementhandle-click.spec.ts › should throw for
elements with force [pass] -bidi-chromium-page › page/elementhandle-click.spec.ts › should throw for detached nodes [pass] -bidi-chromium-page › page/elementhandle-click.spec.ts › should throw for hidden nodes with force [pass] -bidi-chromium-page › page/elementhandle-click.spec.ts › should throw for recursively hidden nodes with force [pass] -bidi-chromium-page › page/elementhandle-click.spec.ts › should work @smoke [pass] -bidi-chromium-page › page/elementhandle-click.spec.ts › should work for Shadow DOM v1 [pass] -bidi-chromium-page › page/elementhandle-click.spec.ts › should work for TextNodes [fail] -bidi-chromium-page › page/elementhandle-click.spec.ts › should work with Node removed [pass] -bidi-chromium-page › page/elementhandle-content-frame.spec.ts › should return null for document.documentElement [pass] -bidi-chromium-page › page/elementhandle-content-frame.spec.ts › should return null for non-iframes [pass] -bidi-chromium-page › page/elementhandle-content-frame.spec.ts › should work [pass] -bidi-chromium-page › page/elementhandle-content-frame.spec.ts › should work for cross-frame evaluations [fail] -bidi-chromium-page › page/elementhandle-content-frame.spec.ts › should work for cross-process iframes [pass] -bidi-chromium-page › page/elementhandle-convenience.spec.ts › getAttribute should work [pass] -bidi-chromium-page › page/elementhandle-convenience.spec.ts › innerHTML should work [pass] -bidi-chromium-page › page/elementhandle-convenience.spec.ts › innerText should throw [pass] -bidi-chromium-page › page/elementhandle-convenience.spec.ts › innerText should work [pass] -bidi-chromium-page › page/elementhandle-convenience.spec.ts › inputValue should work [pass] -bidi-chromium-page › page/elementhandle-convenience.spec.ts › isChecked should work [pass] -bidi-chromium-page › page/elementhandle-convenience.spec.ts › isEditable should work [pass] -bidi-chromium-page › page/elementhandle-convenience.spec.ts › isEnabled and isDisabled should work [pass] -bidi-chromium-page › page/elementhandle-convenience.spec.ts › isEnabled and isDisabled should work with [fail] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect color value [pass] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect date [pass] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect datetime-local [unknown] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect month [unknown] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect range value [pass] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect time [pass] -bidi-chromium-page › page/page-fill.spec.ts › should throw on incorrect week [unknown] -bidi-chromium-page › page/page-fill.spec.ts › should throw on unsupported inputs [pass] -bidi-chromium-page › page/page-focus.spec.ts › clicking checkbox should activate it [unknown] -bidi-chromium-page › page/page-focus.spec.ts › keeps focus on element when attempting to focus a non-focusable element [pass] -bidi-chromium-page › page/page-focus.spec.ts › should emit blur event [fail] -bidi-chromium-page › page/page-focus.spec.ts › should emit focus event [fail] -bidi-chromium-page › page/page-focus.spec.ts › should traverse focus [fail] -bidi-chromium-page › page/page-focus.spec.ts › should traverse focus in all directions [pass] -bidi-chromium-page › page/page-focus.spec.ts › should traverse only form elements [unknown] -bidi-chromium-page › page/page-focus.spec.ts › should work @smoke [pass] -bidi-chromium-page › page/page-goto.spec.ts › js redirect overrides url bar navigation [fail] -bidi-chromium-page › page/page-goto.spec.ts › should be able to navigate to a page controlled by service worker [pass] -bidi-chromium-page › page/page-goto.spec.ts › should capture cross-process iframe navigation request [pass] -bidi-chromium-page › page/page-goto.spec.ts › should capture iframe navigation request [pass] -bidi-chromium-page › page/page-goto.spec.ts › should disable timeout when its set to 0 [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when canceled by another navigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding browser context navigation timeout [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding browser context timeout [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding default maximum navigation timeout [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding default maximum timeout [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when exceeding maximum navigation timeout [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when main resources failed to load [fail] -bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating and show the url at the error message [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating to bad SSL [fail] -bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating to bad SSL after redirects [fail] -bidi-chromium-page › page/page-goto.spec.ts › should fail when navigating to bad url [fail] -bidi-chromium-page › page/page-goto.spec.ts › should fail when replaced by another navigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › should fail when server returns 204 [fail] -bidi-chromium-page › page/page-goto.spec.ts › should navigate to URL with hash and fire requests without hash [pass] -bidi-chromium-page › page/page-goto.spec.ts › should navigate to about:blank [pass] -bidi-chromium-page › page/page-goto.spec.ts › should navigate to dataURL and not fire dataURL requests [pass] -bidi-chromium-page › page/page-goto.spec.ts › should navigate to empty page with domcontentloaded [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not crash when RTCPeerConnection is used [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not crash when navigating to bad SSL after a cross origin navigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not leak listeners during 20 waitForNavigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not leak listeners during bad navigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not leak listeners during navigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not resolve goto upon window.stop() [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not throw if networkidle0 is passed as an option [pass] -bidi-chromium-page › page/page-goto.spec.ts › should not throw unhandled rejections on invalid url [pass] -bidi-chromium-page › page/page-goto.spec.ts › should override referrer-policy [fail] -bidi-chromium-page › page/page-goto.spec.ts › should prioritize default navigation timeout over default timeout [pass] -bidi-chromium-page › page/page-goto.spec.ts › should properly wait for load [pass] -bidi-chromium-page › page/page-goto.spec.ts › should reject referer option when setExtraHTTPHeaders provides referer [pass] -bidi-chromium-page › page/page-goto.spec.ts › should report raw buffer for main resource [fail] -bidi-chromium-page › page/page-goto.spec.ts › should return from goto if new navigation is started [pass] -bidi-chromium-page › page/page-goto.spec.ts › should return last response in redirect chain [pass] -bidi-chromium-page › page/page-goto.spec.ts › should return response when page changes its URL after load [pass] -bidi-chromium-page › page/page-goto.spec.ts › should return url with basic auth info [pass] -bidi-chromium-page › page/page-goto.spec.ts › should return when navigation is committed if commit is specified [fail] -bidi-chromium-page › page/page-goto.spec.ts › should send referer [fail] -bidi-chromium-page › page/page-goto.spec.ts › should send referer of cross-origin URL [fail] -bidi-chromium-page › page/page-goto.spec.ts › should succeed on url bar navigation when there is pending navigation [pass] -bidi-chromium-page › page/page-goto.spec.ts › should throw if networkidle2 is passed as an option [pass] -bidi-chromium-page › page/page-goto.spec.ts › should use http for no protocol [pass] -bidi-chromium-page › page/page-goto.spec.ts › should wait for load when iframe attaches and detaches [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work @smoke [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work cross-process [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work when navigating to 404 [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work when navigating to data url [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work when navigating to valid url [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work when page calls history API in beforeunload [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy after redirect [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy and interception [fail] -bidi-chromium-page › page/page-goto.spec.ts › should work with anchor navigation [timeout] -bidi-chromium-page › page/page-goto.spec.ts › should work with cross-process that fails before committing [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with file URL [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with file URL with subframes [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with lazy loading iframes [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with redirects [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with self requesting page [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with subframes return 204 [pass] -bidi-chromium-page › page/page-goto.spec.ts › should work with subframes return 204 with domcontentloaded [pass] -bidi-chromium-page › page/page-history.spec.ts › goBack/goForward should work with bfcache-able pages [fail] -bidi-chromium-page › page/page-history.spec.ts › page.goBack during renderer-initiated navigation [timeout] -bidi-chromium-page › page/page-history.spec.ts › page.goBack should work @smoke [fail] -bidi-chromium-page › page/page-history.spec.ts › page.goBack should work for file urls [fail] -bidi-chromium-page › page/page-history.spec.ts › page.goBack should work with HistoryAPI [fail] -bidi-chromium-page › page/page-history.spec.ts › page.goForward during renderer-initiated navigation [fail] -bidi-chromium-page › page/page-history.spec.ts › page.reload during renderer-initiated navigation [pass] -bidi-chromium-page › page/page-history.spec.ts › page.reload should not resolve with same-document navigation [fail] -bidi-chromium-page › page/page-history.spec.ts › page.reload should work [pass] -bidi-chromium-page › page/page-history.spec.ts › page.reload should work on a page with a hash [pass] -bidi-chromium-page › page/page-history.spec.ts › page.reload should work on a page with a hash at the end [pass] -bidi-chromium-page › page/page-history.spec.ts › page.reload should work with cross-origin redirect [pass] -bidi-chromium-page › page/page-history.spec.ts › page.reload should work with data url [timeout] -bidi-chromium-page › page/page-history.spec.ts › page.reload should work with same origin redirect [pass] -bidi-chromium-page › page/page-history.spec.ts › regression test for issue 20791 [pass] -bidi-chromium-page › page/page-history.spec.ts › should reload proper page [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › insertText should only emit input event [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › pressing Meta should not result in any text insertion on any platform [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should be able to prevent selectAll [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should dispatch a click event on a button when Enter gets pressed [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should dispatch a click event on a button when Space gets pressed [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should dispatch insertText after context menu was opened [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should expose keyIdentifier in webkit [unknown] -bidi-chromium-page › page/page-keyboard.spec.ts › should handle selectAll [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should have correct Keydown/Keyup order when pressing Escape key [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should move around the selection in a contenteditable [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should move to the start of the document [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should move with the arrow keys [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should not type canceled events [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should press Enter [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should press plus [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should press shift plus [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should press the meta key [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should report multiple modifiers [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should report shiftKey [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should scroll with PageDown [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should send a character with ElementHandle.press [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should send a character with insertText [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should send proper codes while typing [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should send proper codes while typing with shift [timeout] -bidi-chromium-page › page/page-keyboard.spec.ts › should shift raw codes [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should specify location [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should specify repeat property [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should support MacOS shortcuts [fail] -bidi-chromium-page › page/page-keyboard.spec.ts › should support multiple plus-separated modifiers [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should support plus-separated modifiers [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should support simple copy-pasting [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should support simple cut-pasting [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should support undo-redo [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should throw on unknown keys [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should type after context menu was opened [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should type all kinds of characters [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should type emoji [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should type emoji into an iframe [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should type into a textarea @smoke [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom with nested elements [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should type repeatedly in input in shadow dom [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should work after a cross origin navigation [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › should work with keyboard events with empty.html [pass] -bidi-chromium-page › page/page-keyboard.spec.ts › type to non-focusable element should maintain old focus [pass] -bidi-chromium-page › page/page-leaks.spec.ts › click should not leak [pass] -bidi-chromium-page › page/page-leaks.spec.ts › expect should not leak [pass] -bidi-chromium-page › page/page-leaks.spec.ts › fill should not leak [pass] -bidi-chromium-page › page/page-leaks.spec.ts › waitFor should not leak [pass] -bidi-chromium-page › page/page-listeners.spec.ts › should not throw with ignoreErrors [pass] -bidi-chromium-page › page/page-listeners.spec.ts › should wait [pass] -bidi-chromium-page › page/page-listeners.spec.ts › wait should throw [pass] -bidi-chromium-page › page/page-mouse.spec.ts › down and up should generate click [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should always round down [fail] -bidi-chromium-page › page/page-mouse.spec.ts › should click the document @smoke [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should dblclick the div [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should dispatch mouse move after context menu was opened [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should not crash on mouse drag with any button [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should pointerdown the div with a custom button [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should report correct buttons property [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should select the text with mouse [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should set modifier keys on click [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should trigger hover state [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should trigger hover state on disabled button [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should trigger hover state with removed window.Node [pass] -bidi-chromium-page › page/page-mouse.spec.ts › should tween mouse movement [pass] -bidi-chromium-page › page/page-navigation.spec.ts › should work with _blank target [pass] -bidi-chromium-page › page/page-navigation.spec.ts › should work with _blank target in form [pass] -bidi-chromium-page › page/page-navigation.spec.ts › should work with cross-process _blank target [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should navigate to empty page with networkidle [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle from the child frame [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle from the popup [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent from the child frame [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent with request from previous navigation [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle in waitForNavigation [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation with request from previous navigation [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle when iframe attaches and detaches [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should wait for networkidle when navigating iframe [pass] -bidi-chromium-page › page/page-network-idle.spec.ts › should work after repeated navigations in the same page [fail] -bidi-chromium-page › page/page-network-request.spec.ts › page.reload return 304 status code [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should get the same headers as the server [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should get the same headers as the server CORS [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should get |undefined| with postData() when there is no post data [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should get |undefined| with postDataJSON() when there is no post data [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should handle mixed-content blocked requests [unknown] -bidi-chromium-page › page/page-network-request.spec.ts › should not allow to access frame on popup main request [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should not get preflight CORS requests when intercepting [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should not return allHeaders() until they are available [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should not work for a redirect and interception [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should override post data content type [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded; charset=UTF-8 [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should parse the json post data [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should report all cookies in one header [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should report raw headers [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should report raw response headers in redirects [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should return event source [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should return headers [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should return multipart/form-data [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should return navigation bit [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should return navigation bit when navigating to image [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should return postData [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should work for a redirect [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should work for fetch requests @smoke [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should work for main frame navigation request [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should work for subframe navigation request [pass] -bidi-chromium-page › page/page-network-request.spec.ts › should work with binary post data [fail] -bidi-chromium-page › page/page-network-request.spec.ts › should work with binary post data and interception [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should behave the same way for headers and allHeaders [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should bypass disk cache when context interception is enabled [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should bypass disk cache when page interception is enabled [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should provide a Response with a file URL [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should reject response.finished if context closes [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should reject response.finished if page closes [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should report all headers [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should report if request was fromServiceWorker [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should report multiple set-cookie headers [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return body [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return body for prefetch script [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return body with compression [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return headers after route.fulfill [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return json [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return multiple header value [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return set-cookie header after route.fulfill [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return status text [pass] -bidi-chromium-page › page/page-network-response.spec.ts › should return text [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should return uncompressed text [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should throw when requesting body of redirected response [pass] -bidi-chromium-page › page/page-network-response.spec.ts › should wait until response completes [fail] -bidi-chromium-page › page/page-network-response.spec.ts › should work @smoke [fail] -bidi-chromium-page › page/page-network-sizes.spec.ts › should handle redirects [fail] -bidi-chromium-page › page/page-network-sizes.spec.ts › should have correct responseBodySize for 404 with content [pass] -bidi-chromium-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize [fail] -bidi-chromium-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize for chunked request [fail] -bidi-chromium-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize with gzip compression [fail] -bidi-chromium-page › page/page-network-sizes.spec.ts › should return sizes without hanging [pass] -bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize and headersSize [pass] -bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize to 0 if there was no body [pass] -bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize to 0 when there was no response body [pass] -bidi-chromium-page › page/page-network-sizes.spec.ts › should set bodySize, headersSize, and transferSize [fail] -bidi-chromium-page › page/page-network-sizes.spec.ts › should throw for failed requests [pass] -bidi-chromium-page › page/page-network-sizes.spec.ts › should work with 200 status code [fail] -bidi-chromium-page › page/page-network-sizes.spec.ts › should work with 401 status code [fail] -bidi-chromium-page › page/page-network-sizes.spec.ts › should work with 404 status code [fail] -bidi-chromium-page › page/page-network-sizes.spec.ts › should work with 500 status code [fail] -bidi-chromium-page › page/page-object-count.spec.ts › should count objects [unknown] -bidi-chromium-page › page/page-request-continue.spec.ts › continue should delete headers on redirects [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › continue should not change multipart/form-data body [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › continue should propagate headers to redirects [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend binary post data [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend longer post data [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend method and post data [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend post data [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should amend utf8 post data [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should compute content-length from post data [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › post data › should use content-type from original request [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › redirected requests should report overridden headers [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should amend HTTP headers [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should amend method [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should amend method on main request [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should continue preload link requests [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should delete header with undefined value [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should delete the origin header [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should intercept css variable with background url [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should not allow changing protocol when overriding url [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should not throw if request was cancelled by the page [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should not throw when continuing after page is closed [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should not throw when continuing while page is closing [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should override method along with url [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should override request url [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should work [fail] -bidi-chromium-page › page/page-request-continue.spec.ts › should work with Cross-Origin-Opener-Policy [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › post data › should amend binary post data [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › post data › should amend json post data [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › post data › should amend post data [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should amend HTTP headers [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should amend method [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should chain once [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should delete header with undefined value [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should fall back [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should fall back after exception [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should fall back async [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should not chain abort [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should not chain fulfill [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should override request url [fail] -bidi-chromium-page › page/page-request-fallback.spec.ts › should work [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › headerValue should return set-cookie from intercepted response [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should allow mocking binary responses [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should allow mocking svg with charset [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fetch original request and fulfill [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill json [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill preload link requests [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with fetch response that has multiple set-cookie [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with fetch result [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with fetch result and overrides [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with global fetch result [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with gzip and readback [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with har response [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with multiple set-cookie [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should fulfill with unuassigned status codes [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should include the origin header [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should not go to the network for fulfilled requests body [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should not modify the headers sent to the server [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should not throw if request was cancelled by the page [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should stringify intercepted request response headers [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should work [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should work with buffer as body [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should work with file path [fail] -bidi-chromium-page › page/page-request-fulfill.spec.ts › should work with status code 422 [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › request.postData is not null when fetching FormData with a Blob [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill intercepted response [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill intercepted response using alias [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill popup main request using alias [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill response with empty body [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should fulfill with any response [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should give access to the intercepted response [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should give access to the intercepted response body [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should intercept multipart/form-data request body [unknown] -bidi-chromium-page › page/page-request-intercept.spec.ts › should intercept with post data override [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should intercept with url override [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should not follow redirects when maxRedirects is set to 0 in route.fetch [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should override with defaults when intercepted response not provided [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should support fulfill after intercept [fail] -bidi-chromium-page › page/page-request-intercept.spec.ts › should support timeout option in route.fetch [fail] -bidi-chromium-page › page/page-route.spec.ts › route.abort should throw if called twice [fail] -bidi-chromium-page › page/page-route.spec.ts › route.continue should throw if called twice [fail] -bidi-chromium-page › page/page-route.spec.ts › route.fallback should throw if called twice [fail] -bidi-chromium-page › page/page-route.spec.ts › route.fulfill should throw if called twice [fail] -bidi-chromium-page › page/page-route.spec.ts › should add Access-Control-Allow-Origin by default when fulfill [fail] -bidi-chromium-page › page/page-route.spec.ts › should allow null origin for about:blank [fail] -bidi-chromium-page › page/page-route.spec.ts › should be able to fetch dataURL and not fire dataURL requests [fail] -bidi-chromium-page › page/page-route.spec.ts › should be able to remove headers [fail] -bidi-chromium-page › page/page-route.spec.ts › should be abortable [fail] -bidi-chromium-page › page/page-route.spec.ts › should be abortable with custom error codes [fail] -bidi-chromium-page › page/page-route.spec.ts › should chain fallback w/ dynamic URL [fail] -bidi-chromium-page › page/page-route.spec.ts › should contain raw request header [fail] -bidi-chromium-page › page/page-route.spec.ts › should contain raw response header [fail] -bidi-chromium-page › page/page-route.spec.ts › should contain raw response header after fulfill [fail] -bidi-chromium-page › page/page-route.spec.ts › should contain referer header [fail] -bidi-chromium-page › page/page-route.spec.ts › should fail navigation when aborting main resource [fail] -bidi-chromium-page › page/page-route.spec.ts › should fulfill with redirect status [fail] -bidi-chromium-page › page/page-route.spec.ts › should intercept @smoke [fail] -bidi-chromium-page › page/page-route.spec.ts › should intercept main resource during cross-process navigation [fail] -bidi-chromium-page › page/page-route.spec.ts › should intercept when postData is more than 1MB [fail] -bidi-chromium-page › page/page-route.spec.ts › should navigate to URL with hash and and fire requests without hash [fail] -bidi-chromium-page › page/page-route.spec.ts › should navigate to dataURL and not fire dataURL requests [fail] -bidi-chromium-page › page/page-route.spec.ts › should not auto-intercept non-preflight OPTIONS [fail] -bidi-chromium-page › page/page-route.spec.ts › should not fulfill with redirect status [unknown] -bidi-chromium-page › page/page-route.spec.ts › should not throw "Invalid Interception Id" if the request was cancelled [fail] -bidi-chromium-page › page/page-route.spec.ts › should not throw if request was cancelled by the page [fail] -bidi-chromium-page › page/page-route.spec.ts › should not work with redirects [fail] -bidi-chromium-page › page/page-route.spec.ts › should override cookie header [pass] -bidi-chromium-page › page/page-route.spec.ts › should pause intercepted XHR until continue [fail] -bidi-chromium-page › page/page-route.spec.ts › should pause intercepted fetch request until continue [fail] -bidi-chromium-page › page/page-route.spec.ts › should properly return navigation response when URL has cookies [fail] -bidi-chromium-page › page/page-route.spec.ts › should reject cors with disallowed credentials [fail] -bidi-chromium-page › page/page-route.spec.ts › should respect cors overrides [fail] -bidi-chromium-page › page/page-route.spec.ts › should send referer [fail] -bidi-chromium-page › page/page-route.spec.ts › should show custom HTTP headers [fail] -bidi-chromium-page › page/page-route.spec.ts › should support ? in glob pattern [fail] -bidi-chromium-page › page/page-route.spec.ts › should support async handler w/ times [fail] -bidi-chromium-page › page/page-route.spec.ts › should support cors for different methods [fail] -bidi-chromium-page › page/page-route.spec.ts › should support cors with GET [fail] -bidi-chromium-page › page/page-route.spec.ts › should support cors with POST [fail] -bidi-chromium-page › page/page-route.spec.ts › should support cors with credentials [fail] -bidi-chromium-page › page/page-route.spec.ts › should support the times parameter with route matching [fail] -bidi-chromium-page › page/page-route.spec.ts › should unroute [fail] -bidi-chromium-page › page/page-route.spec.ts › should work if handler with times parameter was removed from another handler [fail] -bidi-chromium-page › page/page-route.spec.ts › should work when POST is redirected with 302 [fail] -bidi-chromium-page › page/page-route.spec.ts › should work when header manipulation headers with redirect [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with badly encoded server [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with custom referer headers [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with encoded server [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with encoded server - 2 [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with equal requests [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with redirect inside sync XHR [fail] -bidi-chromium-page › page/page-route.spec.ts › should work with redirects for subresources [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should capture screenshots after layoutchanges in transitionend event [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should fire transitionend for finite transitions [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture css animations in shadow DOM [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite css animation [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite web animations [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture pseudo element css animation [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should not change animation with playbackRate equal to 0 [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should resume infinite animations [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should stop animations that happen right before screenshot [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for INfinite css animation [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for css transitions [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for finite css animation [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot animations › should wait for fonts to load [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot should capture css transform [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should hide elements based on attr [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask in parallel [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask inside iframe [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask multiple elements [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should remove elements based on attr [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should remove mask after screenshot [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when mask color is not pink #F0F [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe has stalled navigation [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe used document.open after a weird url [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work with elementhandle [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work with locator [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › path option should create subdirectories [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › path option should detect jpeg [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › path option should throw for unsupported mime type [pass] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › path option should work [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › quality option should throw for png [pass] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should allow transparency [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should capture blinking caret if explicitly asked for [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should capture blinking caret in shadow dom [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should capture canvas changes [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should clip elements to the viewport [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should clip rect [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should clip rect with fullPage [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should not capture blinking caret by default [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should not issue resize event [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should prefer type over extension [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should render white background on jpeg file [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should restore viewport after fullPage screenshot [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should run in parallel [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots and mask elements outside of it [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots during navigation [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should throw on clip outside the viewport [pass] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work @smoke [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work for canvas [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work for translateZ [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work for webgl [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work while navigating [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work with Array deleted [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work with iframe in shadow [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › should work with odd clip size on Retina displays [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › page screenshot › zero quality option should throw for png [pass] -bidi-chromium-page › page/page-screenshot.spec.ts › should capture css box-shadow [fail] -bidi-chromium-page › page/page-screenshot.spec.ts › should throw if screenshot size is too large [fail] -bidi-chromium-page › page/page-select-option.spec.ts › input event.composed should be true and cross shadow dom boundary [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should deselect all options when passed no values for a multiple select [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should deselect all options when passed no values for a select without multiple [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should fall back to selecting by label [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should not allow null items [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should not select single option when some attributes do not match [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should not throw when select causes navigation [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should respect event bubbling [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should return [] on no matched values [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should return [] on no values [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should return an array of matched values [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should return an array of one element when multiple is not set [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should select multiple options [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should select multiple options with attributes [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should select only first option [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should select single option @smoke [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should select single option by handle [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should select single option by index [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should select single option by label [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should select single option by multiple attributes [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should select single option by value [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should throw if passed wrong types [pass] -bidi-chromium-page › page/page-select-option.spec.ts › should throw when element is not a option/optgroup correctly [pass] +page/elementhandle-convenience.spec.ts › isVisible and isHidden should work [pass] +page/elementhandle-convenience.spec.ts › isVisible should not throw when the DOM element is not connected [pass] +page/elementhandle-convenience.spec.ts › should have a nice preview [pass] +page/elementhandle-convenience.spec.ts › should have a nice preview for non-ascii attributes/children [pass] +page/elementhandle-convenience.spec.ts › textContent should work [pass] +page/elementhandle-convenience.spec.ts › textContent should work on ShadowRoot [fail] +page/elementhandle-eval-on-selector.spec.ts › should not throw in case of missing selector for all [pass] +page/elementhandle-eval-on-selector.spec.ts › should retrieve content from subtree [pass] +page/elementhandle-eval-on-selector.spec.ts › should retrieve content from subtree for all [pass] +page/elementhandle-eval-on-selector.spec.ts › should throw in case of missing selector [pass] +page/elementhandle-eval-on-selector.spec.ts › should work [pass] +page/elementhandle-eval-on-selector.spec.ts › should work for all [pass] +page/elementhandle-misc.spec.ts › should allow disposing twice [pass] +page/elementhandle-misc.spec.ts › should check the box [pass] +page/elementhandle-misc.spec.ts › should check the box using setChecked [pass] +page/elementhandle-misc.spec.ts › should fill input [pass] +page/elementhandle-misc.spec.ts › should fill input when Node is removed [pass] +page/elementhandle-misc.spec.ts › should focus a button [pass] +page/elementhandle-misc.spec.ts › should hover [pass] +page/elementhandle-misc.spec.ts › should hover when Node is removed [pass] +page/elementhandle-misc.spec.ts › should select single option [pass] +page/elementhandle-misc.spec.ts › should uncheck the box [pass] +page/elementhandle-owner-frame.spec.ts › should work [fail] +page/elementhandle-owner-frame.spec.ts › should work for adopted elements [fail] +page/elementhandle-owner-frame.spec.ts › should work for cross-frame evaluations [fail] +page/elementhandle-owner-frame.spec.ts › should work for cross-process iframes [fail] +page/elementhandle-owner-frame.spec.ts › should work for detached elements [fail] +page/elementhandle-owner-frame.spec.ts › should work for document [fail] +page/elementhandle-owner-frame.spec.ts › should work for iframe elements [fail] +page/elementhandle-press.spec.ts › should not modify selection when focused [pass] +page/elementhandle-press.spec.ts › should not select existing value [pass] +page/elementhandle-press.spec.ts › should reset selection when not focused [pass] +page/elementhandle-press.spec.ts › should work [pass] +page/elementhandle-press.spec.ts › should work with number input [pass] +page/elementhandle-query-selector.spec.ts › should query existing element [pass] +page/elementhandle-query-selector.spec.ts › should query existing elements [fail] +page/elementhandle-query-selector.spec.ts › should return empty array for non-existing elements [fail] +page/elementhandle-query-selector.spec.ts › should return null for non-existing element [pass] +page/elementhandle-query-selector.spec.ts › should work for adopted elements [fail] +page/elementhandle-query-selector.spec.ts › xpath should query existing element [fail] +page/elementhandle-query-selector.spec.ts › xpath should return null for non-existing element [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › path option should create subdirectories [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should capture full element when larger than viewport [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should capture full element when larger than viewport in parallel [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should fail to screenshot a detached element [pass] +page/elementhandle-screenshot.spec.ts › element screenshot › should not issue resize event [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should prefer type over extension [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should scroll 15000px into view [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should scroll element into view [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should take into account padding and border [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should take screenshot of disabled button [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should timeout waiting for visible [pass] +page/elementhandle-screenshot.spec.ts › element screenshot › should wait for element to stop moving [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should wait for visible [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should work [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should work for an element with an offset [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should work for an element with fractional dimensions [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should work when main world busts JSON.stringify [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should work with a rotated element [fail] +page/elementhandle-scroll-into-view.spec.ts › should scroll display:contents into view [fail] +page/elementhandle-scroll-into-view.spec.ts › should throw for detached element [fail] +page/elementhandle-scroll-into-view.spec.ts › should timeout waiting for visible [fail] +page/elementhandle-scroll-into-view.spec.ts › should wait for display:none to become visible [fail] +page/elementhandle-scroll-into-view.spec.ts › should wait for element to stop moving [pass] +page/elementhandle-scroll-into-view.spec.ts › should wait for nested display:none to become visible [fail] +page/elementhandle-scroll-into-view.spec.ts › should work @smoke [pass] +page/elementhandle-scroll-into-view.spec.ts › should work for visibility:hidden element [pass] +page/elementhandle-scroll-into-view.spec.ts › should work for zero-sized element [pass] +page/elementhandle-select-text.spec.ts › should select input [pass] +page/elementhandle-select-text.spec.ts › should select plain div [pass] +page/elementhandle-select-text.spec.ts › should select textarea [pass] +page/elementhandle-select-text.spec.ts › should timeout waiting for invisible element [pass] +page/elementhandle-select-text.spec.ts › should wait for visible [pass] +page/elementhandle-type.spec.ts › should not modify selection when focused [pass] +page/elementhandle-type.spec.ts › should not select existing value [pass] +page/elementhandle-type.spec.ts › should reset selection when not focused [pass] +page/elementhandle-type.spec.ts › should work [pass] +page/elementhandle-type.spec.ts › should work with number input [pass] +page/elementhandle-wait-for-element-state.spec.ts › should throw waiting for enabled when detached [pass] +page/elementhandle-wait-for-element-state.spec.ts › should throw waiting for visible when detached [pass] +page/elementhandle-wait-for-element-state.spec.ts › should timeout waiting for visible [pass] +page/elementhandle-wait-for-element-state.spec.ts › should wait for already hidden [pass] +page/elementhandle-wait-for-element-state.spec.ts › should wait for already visible [pass] +page/elementhandle-wait-for-element-state.spec.ts › should wait for aria enabled button [pass] +page/elementhandle-wait-for-element-state.spec.ts › should wait for button with an aria-disabled parent [pass] +page/elementhandle-wait-for-element-state.spec.ts › should wait for editable input [pass] +page/elementhandle-wait-for-element-state.spec.ts › should wait for hidden [pass] +page/elementhandle-wait-for-element-state.spec.ts › should wait for hidden when detached [pass] +page/elementhandle-wait-for-element-state.spec.ts › should wait for stable position [pass] +page/elementhandle-wait-for-element-state.spec.ts › should wait for visible [pass] +page/eval-on-selector-all.spec.ts › should auto-detect css selector [pass] +page/eval-on-selector-all.spec.ts › should return complex values [pass] +page/eval-on-selector-all.spec.ts › should support * capture [pass] +page/eval-on-selector-all.spec.ts › should support * capture when multiple paths match [pass] +page/eval-on-selector-all.spec.ts › should support >> syntax [pass] +page/eval-on-selector-all.spec.ts › should work with bogus Array.from [pass] +page/eval-on-selector-all.spec.ts › should work with css selector [pass] +page/eval-on-selector-all.spec.ts › should work with text selector [pass] +page/eval-on-selector-all.spec.ts › should work with xpath selector [pass] +page/eval-on-selector.spec.ts › should accept ElementHandles as arguments [pass] +page/eval-on-selector.spec.ts › should accept arguments [pass] +page/eval-on-selector.spec.ts › should auto-detect css selector [pass] +page/eval-on-selector.spec.ts › should auto-detect css selector with attributes [pass] +page/eval-on-selector.spec.ts › should auto-detect nested selectors [pass] +page/eval-on-selector.spec.ts › should not stop at first failure with >> syntax [pass] +page/eval-on-selector.spec.ts › should return complex values [pass] +page/eval-on-selector.spec.ts › should support * capture [pass] +page/eval-on-selector.spec.ts › should support >> syntax [pass] +page/eval-on-selector.spec.ts › should support >> syntax with different engines [pass] +page/eval-on-selector.spec.ts › should support spaces with >> syntax [pass] +page/eval-on-selector.spec.ts › should throw error if no element is found [pass] +page/eval-on-selector.spec.ts › should throw on malformed * capture [pass] +page/eval-on-selector.spec.ts › should throw on multiple * captures [pass] +page/eval-on-selector.spec.ts › should work with css selector [pass] +page/eval-on-selector.spec.ts › should work with data-test selector [pass] +page/eval-on-selector.spec.ts › should work with data-test-id selector [pass] +page/eval-on-selector.spec.ts › should work with data-testid selector [pass] +page/eval-on-selector.spec.ts › should work with id selector [pass] +page/eval-on-selector.spec.ts › should work with quotes in css attributes [pass] +page/eval-on-selector.spec.ts › should work with quotes in css attributes when missing [pass] +page/eval-on-selector.spec.ts › should work with spaces in css attributes [pass] +page/eval-on-selector.spec.ts › should work with spaces in css attributes when missing [pass] +page/eval-on-selector.spec.ts › should work with text selector [pass] +page/eval-on-selector.spec.ts › should work with text selector in quotes [pass] +page/eval-on-selector.spec.ts › should work with xpath selector [pass] +page/expect-boolean.spec.ts › not.toBeDisabled div [pass] +page/expect-boolean.spec.ts › not.toBeEmpty [pass] +page/expect-boolean.spec.ts › not.toBeOK [pass] +page/expect-boolean.spec.ts › should print selector syntax error [pass] +page/expect-boolean.spec.ts › should print unknown engine error [pass] +page/expect-boolean.spec.ts › toBeAttached › default [pass] +page/expect-boolean.spec.ts › toBeAttached › eventually [pass] +page/expect-boolean.spec.ts › toBeAttached › eventually with not [pass] +page/expect-boolean.spec.ts › toBeAttached › fail [pass] +page/expect-boolean.spec.ts › toBeAttached › fail with not [pass] +page/expect-boolean.spec.ts › toBeAttached › over navigation [pass] +page/expect-boolean.spec.ts › toBeAttached › with attached:false [pass] +page/expect-boolean.spec.ts › toBeAttached › with attached:true [pass] +page/expect-boolean.spec.ts › toBeAttached › with frameLocator [pass] +page/expect-boolean.spec.ts › toBeAttached › with hidden element [pass] +page/expect-boolean.spec.ts › toBeAttached › with impossible timeout [pass] +page/expect-boolean.spec.ts › toBeAttached › with impossible timeout .not [pass] +page/expect-boolean.spec.ts › toBeAttached › with not [pass] +page/expect-boolean.spec.ts › toBeAttached › with not and attached:false [pass] +page/expect-boolean.spec.ts › toBeChecked with value [pass] +page/expect-boolean.spec.ts › toBeChecked › default [pass] +page/expect-boolean.spec.ts › toBeChecked › fail [pass] +page/expect-boolean.spec.ts › toBeChecked › fail missing [pass] +page/expect-boolean.spec.ts › toBeChecked › fail with checked:false [pass] +page/expect-boolean.spec.ts › toBeChecked › fail with not [pass] +page/expect-boolean.spec.ts › toBeChecked › friendly log [pass] +page/expect-boolean.spec.ts › toBeChecked › with checked:false [pass] +page/expect-boolean.spec.ts › toBeChecked › with checked:true [pass] +page/expect-boolean.spec.ts › toBeChecked › with impossible timeout [pass] +page/expect-boolean.spec.ts › toBeChecked › with impossible timeout .not [pass] +page/expect-boolean.spec.ts › toBeChecked › with not [pass] +page/expect-boolean.spec.ts › toBeChecked › with not and checked:false [pass] +page/expect-boolean.spec.ts › toBeChecked › with role [pass] +page/expect-boolean.spec.ts › toBeDisabled with value [pass] +page/expect-boolean.spec.ts › toBeEditable › default [pass] +page/expect-boolean.spec.ts › toBeEditable › with editable:false [pass] +page/expect-boolean.spec.ts › toBeEditable › with editable:true [pass] +page/expect-boolean.spec.ts › toBeEditable › with not [pass] +page/expect-boolean.spec.ts › toBeEditable › with not and editable:false [pass] +page/expect-boolean.spec.ts › toBeEmpty div [pass] +page/expect-boolean.spec.ts › toBeEmpty input [pass] +page/expect-boolean.spec.ts › toBeEnabled › default [pass] +page/expect-boolean.spec.ts › toBeEnabled › eventually [pass] +page/expect-boolean.spec.ts › toBeEnabled › eventually with not [pass] +page/expect-boolean.spec.ts › toBeEnabled › failed [pass] +page/expect-boolean.spec.ts › toBeEnabled › toBeDisabled [pass] +page/expect-boolean.spec.ts › toBeEnabled › with enabled:false [pass] +page/expect-boolean.spec.ts › toBeEnabled › with enabled:true [pass] +page/expect-boolean.spec.ts › toBeEnabled › with not and enabled:false [pass] +page/expect-boolean.spec.ts › toBeFocused [pass] +page/expect-boolean.spec.ts › toBeFocused with shadow elements [pass] +page/expect-boolean.spec.ts › toBeHidden with value [pass] +page/expect-boolean.spec.ts › toBeHidden › default [pass] +page/expect-boolean.spec.ts › toBeHidden › eventually [pass] +page/expect-boolean.spec.ts › toBeHidden › eventually with not [pass] +page/expect-boolean.spec.ts › toBeHidden › fail [pass] +page/expect-boolean.spec.ts › toBeHidden › fail with not [pass] +page/expect-boolean.spec.ts › toBeHidden › fail with not when nothing matching [pass] +page/expect-boolean.spec.ts › toBeHidden › when nothing matches [pass] +page/expect-boolean.spec.ts › toBeHidden › with impossible timeout [pass] +page/expect-boolean.spec.ts › toBeHidden › with impossible timeout .not [pass] +page/expect-boolean.spec.ts › toBeHidden › with not [pass] +page/expect-boolean.spec.ts › toBeOK [pass] +page/expect-boolean.spec.ts › toBeOK fail with invalid argument [pass] +page/expect-boolean.spec.ts › toBeOK fail with promise [pass] +page/expect-boolean.spec.ts › toBeOK should print response with text content type when fails › image content type [pass] +page/expect-boolean.spec.ts › toBeOK should print response with text content type when fails › no content type [pass] +page/expect-boolean.spec.ts › toBeOK should print response with text content type when fails › text content type [pass] +page/expect-boolean.spec.ts › toBeVisible › default [pass] +page/expect-boolean.spec.ts › toBeVisible › eventually [pass] +page/expect-boolean.spec.ts › toBeVisible › eventually with not [pass] +page/expect-boolean.spec.ts › toBeVisible › fail [pass] +page/expect-boolean.spec.ts › toBeVisible › fail with not [pass] +page/expect-boolean.spec.ts › toBeVisible › over navigation [pass] +page/expect-boolean.spec.ts › toBeVisible › with frameLocator [pass] +page/expect-boolean.spec.ts › toBeVisible › with frameLocator 2 [pass] +page/expect-boolean.spec.ts › toBeVisible › with impossible timeout [pass] +page/expect-boolean.spec.ts › toBeVisible › with impossible timeout .not [pass] +page/expect-boolean.spec.ts › toBeVisible › with not [pass] +page/expect-boolean.spec.ts › toBeVisible › with not and visible:false [pass] +page/expect-boolean.spec.ts › toBeVisible › with visible:false [pass] +page/expect-boolean.spec.ts › toBeVisible › with visible:true [pass] +page/expect-matcher-result.spec.ts › toBeChecked({ checked: false }) should have expected: false [pass] +page/expect-matcher-result.spec.ts › toBeTruthy-based assertions should have matcher result [pass] +page/expect-matcher-result.spec.ts › toEqual-based assertions should have matcher result [pass] +page/expect-matcher-result.spec.ts › toHaveScreenshot should populate matcherResult [fail] +page/expect-matcher-result.spec.ts › toMatchText-based assertions should have matcher result [pass] +page/expect-misc.spec.ts › toBeInViewport › should have good stack [pass] +page/expect-misc.spec.ts › toBeInViewport › should report intersection even if fully covered by other element [pass] +page/expect-misc.spec.ts › toBeInViewport › should respect ratio option [pass] +page/expect-misc.spec.ts › toBeInViewport › should work [pass] +page/expect-misc.spec.ts › toHaveAccessibleDescription [pass] +page/expect-misc.spec.ts › toHaveAccessibleName [pass] +page/expect-misc.spec.ts › toHaveAttribute › pass [pass] +page/expect-misc.spec.ts › toHaveAttribute › should match attribute without value [pass] +page/expect-misc.spec.ts › toHaveAttribute › should match boolean attribute [pass] +page/expect-misc.spec.ts › toHaveAttribute › should not match missing attribute [pass] +page/expect-misc.spec.ts › toHaveAttribute › should support boolean attribute with options [pass] +page/expect-misc.spec.ts › toHaveAttribute › support ignoreCase [pass] +page/expect-misc.spec.ts › toHaveCSS › custom css properties [pass] +page/expect-misc.spec.ts › toHaveCSS › pass [pass] +page/expect-misc.spec.ts › toHaveClass › fail [pass] +page/expect-misc.spec.ts › toHaveClass › fail with array [pass] +page/expect-misc.spec.ts › toHaveClass › pass [pass] +page/expect-misc.spec.ts › toHaveClass › pass with SVGs [pass] +page/expect-misc.spec.ts › toHaveClass › pass with array [pass] +page/expect-misc.spec.ts › toHaveCount should not produce logs twice [pass] +page/expect-misc.spec.ts › toHaveCount › eventually pass non-zero [pass] +page/expect-misc.spec.ts › toHaveCount › eventually pass not non-zero [pass] +page/expect-misc.spec.ts › toHaveCount › eventually pass zero [pass] +page/expect-misc.spec.ts › toHaveCount › fail zero [pass] +page/expect-misc.spec.ts › toHaveCount › fail zero 2 [pass] +page/expect-misc.spec.ts › toHaveCount › pass zero [pass] +page/expect-misc.spec.ts › toHaveCount › toHaveCount pass [pass] +page/expect-misc.spec.ts › toHaveId › pass [pass] +page/expect-misc.spec.ts › toHaveJSProperty › fail [pass] +page/expect-misc.spec.ts › toHaveJSProperty › fail boolean [pass] +page/expect-misc.spec.ts › toHaveJSProperty › fail boolean 2 [pass] +page/expect-misc.spec.ts › toHaveJSProperty › fail nested [pass] +page/expect-misc.spec.ts › toHaveJSProperty › fail number [pass] +page/expect-misc.spec.ts › toHaveJSProperty › fail string [pass] +page/expect-misc.spec.ts › toHaveJSProperty › pass [pass] +page/expect-misc.spec.ts › toHaveJSProperty › pass boolean [pass] +page/expect-misc.spec.ts › toHaveJSProperty › pass boolean 2 [pass] +page/expect-misc.spec.ts › toHaveJSProperty › pass nested [pass] +page/expect-misc.spec.ts › toHaveJSProperty › pass null [pass] +page/expect-misc.spec.ts › toHaveJSProperty › pass number [pass] +page/expect-misc.spec.ts › toHaveJSProperty › pass string [pass] +page/expect-misc.spec.ts › toHaveJSProperty › pass undefined [pass] +page/expect-misc.spec.ts › toHaveRole [pass] +page/expect-misc.spec.ts › toHaveText should not produce logs twice [pass] +page/expect-misc.spec.ts › toHaveText that does not match should not produce logs twice [pass] +page/expect-misc.spec.ts › toHaveTitle › fail [pass] +page/expect-misc.spec.ts › toHaveTitle › pass [pass] +page/expect-misc.spec.ts › toHaveURL › fail [pass] +page/expect-misc.spec.ts › toHaveURL › pass [pass] +page/expect-misc.spec.ts › toHaveURL › support ignoreCase [pass] +page/expect-timeout.spec.ts › should have timeout error name [pass] +page/expect-timeout.spec.ts › should not print timed out error message when page closes [timeout] +page/expect-timeout.spec.ts › should not throw when navigating during first locator handler check [pass] +page/expect-timeout.spec.ts › should not throw when navigating during one-shot check [pass] +page/expect-timeout.spec.ts › should print timed out error message [pass] +page/expect-timeout.spec.ts › should print timed out error message when value does not match [pass] +page/expect-timeout.spec.ts › should print timed out error message when value does not match with impossible timeout [pass] +page/expect-timeout.spec.ts › should print timed out error message with impossible timeout [pass] +page/expect-timeout.spec.ts › should timeout during first locator handler check [pass] +page/expect-to-have-text.spec.ts › not.toHaveText › fail [pass] +page/expect-to-have-text.spec.ts › not.toHaveText › pass [pass] +page/expect-to-have-text.spec.ts › not.toHaveText › should work when selector does not match [pass] +page/expect-to-have-text.spec.ts › toContainText with array › fail [pass] +page/expect-to-have-text.spec.ts › toContainText with array › pass [pass] +page/expect-to-have-text.spec.ts › toContainText with regex › fail [pass] +page/expect-to-have-text.spec.ts › toContainText with regex › pass [pass] +page/expect-to-have-text.spec.ts › toHaveText with array › fail [pass] +page/expect-to-have-text.spec.ts › toHaveText with array › fail on not+empty [pass] +page/expect-to-have-text.spec.ts › toHaveText with array › fail on repeating array matchers [pass] +page/expect-to-have-text.spec.ts › toHaveText with array › pass [pass] +page/expect-to-have-text.spec.ts › toHaveText with array › pass empty [pass] +page/expect-to-have-text.spec.ts › toHaveText with array › pass eventually empty [pass] +page/expect-to-have-text.spec.ts › toHaveText with array › pass lazy [pass] +page/expect-to-have-text.spec.ts › toHaveText with array › pass not empty [pass] +page/expect-to-have-text.spec.ts › toHaveText with array › pass on empty [pass] +page/expect-to-have-text.spec.ts › toHaveText with regex › fail [pass] +page/expect-to-have-text.spec.ts › toHaveText with regex › pass [pass] +page/expect-to-have-text.spec.ts › toHaveText with text › fail [pass] +page/expect-to-have-text.spec.ts › toHaveText with text › fail with impossible timeout [pass] +page/expect-to-have-text.spec.ts › toHaveText with text › in shadow dom [pass] +page/expect-to-have-text.spec.ts › toHaveText with text › pass [pass] +page/expect-to-have-text.spec.ts › toHaveText with text › pass contain [pass] +page/expect-to-have-text.spec.ts › toHaveText with text › pass eventually [pass] +page/expect-to-have-text.spec.ts › toHaveText with text › with userInnerText [pass] +page/expect-to-have-value.spec.ts › should support failure [pass] +page/expect-to-have-value.spec.ts › should work [pass] +page/expect-to-have-value.spec.ts › should work with label [pass] +page/expect-to-have-value.spec.ts › should work with regex [pass] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › exact match with text failure [pass] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › fails when items not selected [pass] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › fails when multiple not specified [pass] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › fails when not a select element [pass] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › follows labels [pass] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › works with regex [pass] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › works with text [pass] +page/frame-evaluate.spec.ts › evaluateHandle should work [pass] +page/frame-evaluate.spec.ts › should allow cross-frame element handles [fail] +page/frame-evaluate.spec.ts › should be isolated between frames [pass] +page/frame-evaluate.spec.ts › should dispose context on cross-origin navigation [fail] +page/frame-evaluate.spec.ts › should dispose context on navigation [fail] +page/frame-evaluate.spec.ts › should execute after cross-site navigation [pass] +page/frame-evaluate.spec.ts › should have correct execution contexts @smoke [pass] +page/frame-evaluate.spec.ts › should have different execution contexts [pass] +page/frame-evaluate.spec.ts › should not allow cross-frame element handles when frames do not script each other [fail] +page/frame-evaluate.spec.ts › should not allow cross-frame js handles [pass] +page/frame-evaluate.spec.ts › should throw for detached frames [pass] +page/frame-evaluate.spec.ts › should work in iframes that failed initial navigation [fail] +page/frame-evaluate.spec.ts › should work in iframes that interrupted initial javascript url navigation [pass] +page/frame-frame-element.spec.ts › should throw when detached [pass] +page/frame-frame-element.spec.ts › should work @smoke [pass] +page/frame-frame-element.spec.ts › should work inside closed shadow root [fail] +page/frame-frame-element.spec.ts › should work inside declarative shadow root [fail] +page/frame-frame-element.spec.ts › should work with contentFrame [pass] +page/frame-frame-element.spec.ts › should work with frameset [pass] +page/frame-goto.spec.ts › should continue after client redirect [pass] +page/frame-goto.spec.ts › should navigate subframes @smoke [pass] +page/frame-goto.spec.ts › should reject when frame detaches [pass] +page/frame-goto.spec.ts › should return matching responses [fail] +page/frame-hierarchy.spec.ts › should detach child frames on navigation [pass] +page/frame-hierarchy.spec.ts › should handle nested frames @smoke [fail] +page/frame-hierarchy.spec.ts › should not send attach/detach events for main frame [pass] +page/frame-hierarchy.spec.ts › should persist mainFrame on cross-process navigation [pass] +page/frame-hierarchy.spec.ts › should refuse to display x-frame-options:deny iframe [timeout] +page/frame-hierarchy.spec.ts › should report different frame instance when frame re-attaches [pass] +page/frame-hierarchy.spec.ts › should report frame from-inside shadow DOM [pass] +page/frame-hierarchy.spec.ts › should report frame.name() [fail] +page/frame-hierarchy.spec.ts › should report frame.parent() [pass] +page/frame-hierarchy.spec.ts › should return frame.page() [pass] +page/frame-hierarchy.spec.ts › should send "framenavigated" when navigating on anchor URLs [timeout] +page/frame-hierarchy.spec.ts › should send events when frames are manipulated dynamically [pass] +page/frame-hierarchy.spec.ts › should support framesets [fail] +page/interception.spec.ts › should disable memory cache when intercepting [fail] +page/interception.spec.ts › should intercept after a service worker [fail] +page/interception.spec.ts › should intercept blob url requests [unknown] +page/interception.spec.ts › should intercept network activity from worker [fail] +page/interception.spec.ts › should intercept network activity from worker 2 [fail] +page/interception.spec.ts › should intercept worker requests when enabled after worker creation [fail] +page/interception.spec.ts › should not break remote worker importScripts [fail] +page/interception.spec.ts › should work with glob [pass] +page/interception.spec.ts › should work with navigation @smoke [fail] +page/interception.spec.ts › should work with regular expression passed from a different context [fail] +page/jshandle-as-element.spec.ts › should return ElementHandle for TextNodes [pass] +page/jshandle-as-element.spec.ts › should return null for non-elements [pass] +page/jshandle-as-element.spec.ts › should work @smoke [pass] +page/jshandle-as-element.spec.ts › should work with nullified Node [pass] +page/jshandle-evaluate.spec.ts › should work with expression [pass] +page/jshandle-evaluate.spec.ts › should work with function @smoke [pass] +page/jshandle-json-value.spec.ts › should handle circular objects [pass] +page/jshandle-json-value.spec.ts › should work @smoke [pass] +page/jshandle-json-value.spec.ts › should work with dates [pass] +page/jshandle-properties.spec.ts › getProperties should return empty map for non-objects [pass] +page/jshandle-properties.spec.ts › getProperties should return even non-own properties [fail] +page/jshandle-properties.spec.ts › getProperties should work [fail] +page/jshandle-properties.spec.ts › getProperties should work with elements [fail] +page/jshandle-properties.spec.ts › should work @smoke [fail] +page/jshandle-properties.spec.ts › should work with undefined, null, and empty [fail] +page/jshandle-properties.spec.ts › should work with unserializable values [fail] +page/jshandle-to-string.spec.ts › should beautifully render sparse arrays [fail] +page/jshandle-to-string.spec.ts › should work for complicated objects [fail] +page/jshandle-to-string.spec.ts › should work for primitives [pass] +page/jshandle-to-string.spec.ts › should work for promises [fail] +page/jshandle-to-string.spec.ts › should work with different subtypes @smoke [fail] +page/jshandle-to-string.spec.ts › should work with previewable subtypes [fail] +page/locator-click.spec.ts › should click if the target element is removed in pointerdown event [pass] +page/locator-click.spec.ts › should click if the target element is removed in pointerup event [pass] +page/locator-click.spec.ts › should double click the button [pass] +page/locator-click.spec.ts › should work @smoke [pass] +page/locator-click.spec.ts › should work for TextNodes [fail] +page/locator-click.spec.ts › should work with Node removed [pass] +page/locator-convenience.spec.ts › allInnerTexts should work [pass] +page/locator-convenience.spec.ts › allTextContents should work [pass] +page/locator-convenience.spec.ts › getAttribute should work [pass] +page/locator-convenience.spec.ts › innerHTML should work [pass] +page/locator-convenience.spec.ts › innerText should produce log [pass] +page/locator-convenience.spec.ts › innerText should throw [pass] +page/locator-convenience.spec.ts › innerText should work [pass] +page/locator-convenience.spec.ts › inputValue should work [pass] +page/locator-convenience.spec.ts › isChecked should work [pass] +page/locator-convenience.spec.ts › isChecked should work for indeterminate input [pass] +page/locator-convenience.spec.ts › isEditable should work [pass] +page/locator-convenience.spec.ts › isEnabled and isDisabled should work [pass] +page/locator-convenience.spec.ts › should have a nice preview [pass] +page/locator-convenience.spec.ts › should return page [pass] +page/locator-convenience.spec.ts › textContent should work [pass] +page/locator-element-handle.spec.ts › should query existing element @smoke [pass] +page/locator-element-handle.spec.ts › should query existing elements [fail] +page/locator-element-handle.spec.ts › should return empty array for non-existing elements [fail] +page/locator-element-handle.spec.ts › xpath should query existing element [pass] +page/locator-element-handle.spec.ts › xpath should return null for non-existing element [fail] +page/locator-evaluate.spec.ts › should not throw in case of missing selector for all [pass] +page/locator-evaluate.spec.ts › should retrieve content from subtree [pass] +page/locator-evaluate.spec.ts › should retrieve content from subtree for all [pass] +page/locator-evaluate.spec.ts › should work @smoke [pass] +page/locator-evaluate.spec.ts › should work for all [pass] +page/locator-frame.spec.ts › click should survive frame reattach [fail] +page/locator-frame.spec.ts › click should survive iframe navigation [fail] +page/locator-frame.spec.ts › frameLocator.owner should work [fail] +page/locator-frame.spec.ts › getBy coverage [fail] +page/locator-frame.spec.ts › locator.contentFrame should work [fail] +page/locator-frame.spec.ts › locator.frameLocator should not throw on first/last/nth [fail] +page/locator-frame.spec.ts › locator.frameLocator should throw on ambiguity [fail] +page/locator-frame.spec.ts › locator.frameLocator should work for iframe [fail] +page/locator-frame.spec.ts › should click in lazy iframe [fail] +page/locator-frame.spec.ts › should non work for non-frame [fail] +page/locator-frame.spec.ts › should not wait for frame [pass] +page/locator-frame.spec.ts › should not wait for frame 2 [pass] +page/locator-frame.spec.ts › should not wait for frame 3 [pass] +page/locator-frame.spec.ts › should wait for frame [pass] +page/locator-frame.spec.ts › should wait for frame 2 [fail] +page/locator-frame.spec.ts › should wait for frame to go [fail] +page/locator-frame.spec.ts › should work for $ and $$ [fail] +page/locator-frame.spec.ts › should work for iframe @smoke [fail] +page/locator-frame.spec.ts › should work for nested iframe [fail] +page/locator-frame.spec.ts › should work with COEP/COOP/CORP isolated iframe [fail] +page/locator-frame.spec.ts › wait for hidden should succeed when frame is not in dom [pass] +page/locator-frame.spec.ts › waitFor should survive frame reattach [fail] +page/locator-highlight.spec.ts › should highlight locator [pass] +page/locator-is-visible.spec.ts › isVisible and isHidden should work [pass] +page/locator-is-visible.spec.ts › isVisible and isHidden should work with details [pass] +page/locator-is-visible.spec.ts › isVisible during navigation should not throw [timeout] +page/locator-is-visible.spec.ts › isVisible inside a button [pass] +page/locator-is-visible.spec.ts › isVisible inside a role=button [pass] +page/locator-is-visible.spec.ts › isVisible should be true for element outside view [pass] +page/locator-is-visible.spec.ts › isVisible should be true for opacity:0 [pass] +page/locator-is-visible.spec.ts › isVisible with invalid selector should throw [pass] +page/locator-list.spec.ts › locator.all should work [pass] +page/locator-misc-1.spec.ts › focus should respect strictness [pass] +page/locator-misc-1.spec.ts › should check the box [pass] +page/locator-misc-1.spec.ts › should check the box using setChecked [pass] +page/locator-misc-1.spec.ts › should clear input [pass] +page/locator-misc-1.spec.ts › should dispatch click event via ElementHandles [pass] +page/locator-misc-1.spec.ts › should fill input [pass] +page/locator-misc-1.spec.ts › should fill input when Node is removed [pass] +page/locator-misc-1.spec.ts › should focus and blur a button [fail] +page/locator-misc-1.spec.ts › should hover @smoke [pass] +page/locator-misc-1.spec.ts › should hover when Node is removed [pass] +page/locator-misc-1.spec.ts › should select single option [pass] +page/locator-misc-1.spec.ts › should uncheck the box [pass] +page/locator-misc-1.spec.ts › should upload the file [timeout] +page/locator-misc-2.spec.ts › Locator.locator() and FrameLocator.locator() should accept locator [pass] +page/locator-misc-2.spec.ts › locator.count should work with deleted Map in main world [pass] +page/locator-misc-2.spec.ts › should combine visible with other selectors [pass] +page/locator-misc-2.spec.ts › should press @smoke [pass] +page/locator-misc-2.spec.ts › should pressSequentially [pass] +page/locator-misc-2.spec.ts › should return bounding box [pass] +page/locator-misc-2.spec.ts › should scroll into view [pass] +page/locator-misc-2.spec.ts › should scroll zero-sized element into view [pass] +page/locator-misc-2.spec.ts › should select textarea [pass] +page/locator-misc-2.spec.ts › should take screenshot [fail] +page/locator-misc-2.spec.ts › should type [pass] +page/locator-misc-2.spec.ts › should waitFor [pass] +page/locator-misc-2.spec.ts › should waitFor hidden [pass] +page/locator-query.spec.ts › alias methods coverage [pass] +page/locator-query.spec.ts › should allow some, but not all nested frameLocators [pass] +page/locator-query.spec.ts › should enforce same frame for has/leftOf/rightOf/above/below/near [pass] +page/locator-query.spec.ts › should filter by case-insensitive regex in a child [pass] +page/locator-query.spec.ts › should filter by case-insensitive regex in multiple children [pass] +page/locator-query.spec.ts › should filter by regex [pass] +page/locator-query.spec.ts › should filter by regex and regexp flags [pass] +page/locator-query.spec.ts › should filter by regex with a single quote [pass] +page/locator-query.spec.ts › should filter by regex with quotes [pass] +page/locator-query.spec.ts › should filter by regex with special symbols [pass] +page/locator-query.spec.ts › should filter by text [pass] +page/locator-query.spec.ts › should filter by text 2 [pass] +page/locator-query.spec.ts › should filter by text with quotes [pass] +page/locator-query.spec.ts › should respect first() and last() @smoke [pass] +page/locator-query.spec.ts › should respect nth() [pass] +page/locator-query.spec.ts › should support has:locator [pass] +page/locator-query.spec.ts › should support locator.and [pass] +page/locator-query.spec.ts › should support locator.filter [pass] +page/locator-query.spec.ts › should support locator.locator with and/or [pass] +page/locator-query.spec.ts › should support locator.or [pass] +page/locator-query.spec.ts › should throw on capture w/ nth() [pass] +page/locator-query.spec.ts › should throw on due to strictness [pass] +page/locator-query.spec.ts › should throw on due to strictness 2 [pass] +page/matchers.misc.spec.ts › should outlive frame navigation [pass] +page/matchers.misc.spec.ts › should print no-locator-resolved error when locator matcher did not resolve to any element [pass] +page/network-post-data.spec.ts › should get post data for file/blob [fail] +page/network-post-data.spec.ts › should get post data for navigator.sendBeacon api calls [fail] +page/network-post-data.spec.ts › should return correct postData buffer for utf-8 body [fail] +page/network-post-data.spec.ts › should return post data for PUT requests [fail] +page/network-post-data.spec.ts › should return post data w/o content-type @smoke [fail] +page/network-post-data.spec.ts › should throw on invalid JSON in post data [fail] +page/page-accessibility.spec.ts › autocomplete [fail] +page/page-accessibility.spec.ts › checkbox with and tabIndex and label should not have children [fail] +page/page-accessibility.spec.ts › checkbox without label should not have children [fail] +page/page-accessibility.spec.ts › keyshortcuts [fail] +page/page-accessibility.spec.ts › multiselectable [fail] +page/page-accessibility.spec.ts › non editable textbox with role and tabIndex and label should not have children [fail] +page/page-accessibility.spec.ts › orientation [fail] +page/page-accessibility.spec.ts › rich text editable fields should have children [fail] +page/page-accessibility.spec.ts › rich text editable fields with role should have children [fail] +page/page-accessibility.spec.ts › roledescription [fail] +page/page-accessibility.spec.ts › should not report text nodes inside controls [fail] +page/page-accessibility.spec.ts › should return null when the element is no longer in DOM [fail] +page/page-accessibility.spec.ts › should show uninteresting nodes [fail] +page/page-accessibility.spec.ts › should work @smoke [fail] +page/page-accessibility.spec.ts › should work a button [fail] +page/page-accessibility.spec.ts › should work an input [fail] +page/page-accessibility.spec.ts › should work on a menu [fail] +page/page-accessibility.spec.ts › should work when there is a title [fail] +page/page-accessibility.spec.ts › should work with aria-invalid accessibility tree [fail] +page/page-accessibility.spec.ts › should work with regular text [fail] +page/page-add-init-script.spec.ts › init script should run only once in iframe [pass] +page/page-add-init-script.spec.ts › init script should run only once in popup [fail] +page/page-add-init-script.spec.ts › should evaluate before anything else on the page [pass] +page/page-add-init-script.spec.ts › should support multiple scripts [pass] +page/page-add-init-script.spec.ts › should throw without path and content [pass] +page/page-add-init-script.spec.ts › should work after a cross origin navigation [pass] +page/page-add-init-script.spec.ts › should work with CSP [pass] +page/page-add-init-script.spec.ts › should work with a path [pass] +page/page-add-init-script.spec.ts › should work with content @smoke [pass] +page/page-add-init-script.spec.ts › should work with trailing comments [pass] +page/page-add-locator-handler.spec.ts › should not work with force:true [pass] +page/page-add-locator-handler.spec.ts › should removeLocatorHandler [pass] +page/page-add-locator-handler.spec.ts › should throw when handler times out [pass] +page/page-add-locator-handler.spec.ts › should throw when page closes [pass] +page/page-add-locator-handler.spec.ts › should wait for hidden by default [pass] +page/page-add-locator-handler.spec.ts › should wait for hidden by default 2 [pass] +page/page-add-locator-handler.spec.ts › should work [pass] +page/page-add-locator-handler.spec.ts › should work when owner frame detaches [pass] +page/page-add-locator-handler.spec.ts › should work with a custom check [pass] +page/page-add-locator-handler.spec.ts › should work with locator.hover() [pass] +page/page-add-locator-handler.spec.ts › should work with noWaitAfter [pass] +page/page-add-locator-handler.spec.ts › should work with times: option [pass] +page/page-add-locator-handler.spec.ts › should work with toBeVisible [pass] +page/page-add-locator-handler.spec.ts › should work with toHaveScreenshot [fail] +page/page-add-script-tag.spec.ts › should include sourceURL when path is provided [pass] +page/page-add-script-tag.spec.ts › should throw a nice error when the request fails [pass] +page/page-add-script-tag.spec.ts › should throw an error if loading from url fail [pass] +page/page-add-script-tag.spec.ts › should throw an error if no options are provided [pass] +page/page-add-script-tag.spec.ts › should throw when added with URL to the CSP page [pass] +page/page-add-script-tag.spec.ts › should throw when added with content to the CSP page [fail] +page/page-add-script-tag.spec.ts › should work with a content and type=module [pass] +page/page-add-script-tag.spec.ts › should work with a path [pass] +page/page-add-script-tag.spec.ts › should work with a path and type=module [pass] +page/page-add-script-tag.spec.ts › should work with a url [pass] +page/page-add-script-tag.spec.ts › should work with a url and type=module [pass] +page/page-add-script-tag.spec.ts › should work with content [pass] +page/page-add-style-tag.spec.ts › should include sourceURL when path is provided [pass] +page/page-add-style-tag.spec.ts › should throw an error if loading from url fail [pass] +page/page-add-style-tag.spec.ts › should throw an error if no options are provided [pass] +page/page-add-style-tag.spec.ts › should throw when added with URL to the CSP page [pass] +page/page-add-style-tag.spec.ts › should throw when added with content to the CSP page [pass] +page/page-add-style-tag.spec.ts › should work with a path [pass] +page/page-add-style-tag.spec.ts › should work with a url @smoke [pass] +page/page-add-style-tag.spec.ts › should work with content [pass] +page/page-autowaiting-basic.spec.ts › should await cross-process navigation when clicking anchor [pass] +page/page-autowaiting-basic.spec.ts › should await form-get on click [pass] +page/page-autowaiting-basic.spec.ts › should await form-post on click [pass] +page/page-autowaiting-basic.spec.ts › should await navigation when clicking anchor [pass] +page/page-autowaiting-basic.spec.ts › should not stall on JS navigation link [pass] +page/page-autowaiting-basic.spec.ts › should report navigation in the log when clicking anchor [pass] +page/page-autowaiting-basic.spec.ts › should work with dblclick without noWaitAfter when navigation is stalled [pass] +page/page-autowaiting-basic.spec.ts › should work with goto following click [pass] +page/page-autowaiting-basic.spec.ts › should work with noWaitAfter: true [pass] +page/page-autowaiting-basic.spec.ts › should work with waitForLoadState(load) [pass] +page/page-autowaiting-no-hang.spec.ts › assigning location to about:blank [pass] +page/page-autowaiting-no-hang.spec.ts › assigning location to about:blank after non-about:blank [pass] +page/page-autowaiting-no-hang.spec.ts › calling window.open and window.close [pass] +page/page-autowaiting-no-hang.spec.ts › calling window.stop async [pass] +page/page-autowaiting-no-hang.spec.ts › calling window.stop sync [pass] +page/page-autowaiting-no-hang.spec.ts › clicking on links which do not commit navigation [pass] +page/page-autowaiting-no-hang.spec.ts › opening a popup [pass] +page/page-basic.spec.ts › async stacks should work [pass] +page/page-basic.spec.ts › frame.press should work [fail] +page/page-basic.spec.ts › has navigator.webdriver set to true [pass] +page/page-basic.spec.ts › page.close should work with page.close [pass] +page/page-basic.spec.ts › page.close should work with window.close [pass] +page/page-basic.spec.ts › page.frame should respect name [fail] +page/page-basic.spec.ts › page.frame should respect url [pass] +page/page-basic.spec.ts › page.press should work [pass] +page/page-basic.spec.ts › page.press should work for Enter [pass] +page/page-basic.spec.ts › page.title should return the page title [pass] +page/page-basic.spec.ts › page.url should include hashes [pass] +page/page-basic.spec.ts › page.url should work [fail] +page/page-basic.spec.ts › should be callable twice [pass] +page/page-basic.spec.ts › should fail with error upon disconnect [pass] +page/page-basic.spec.ts › should fire domcontentloaded when expected [pass] +page/page-basic.spec.ts › should fire load when expected [pass] +page/page-basic.spec.ts › should have sane user agent [fail] +page/page-basic.spec.ts › should iterate over page properties [pass] +page/page-basic.spec.ts › should pass page to close event [pass] +page/page-basic.spec.ts › should pass self as argument to domcontentloaded event [pass] +page/page-basic.spec.ts › should pass self as argument to load event [pass] +page/page-basic.spec.ts › should provide access to the opener page [pass] +page/page-basic.spec.ts › should reject all promises when page is closed [fail] +page/page-basic.spec.ts › should return null if parent page has been closed [pass] +page/page-basic.spec.ts › should set the page close state [pass] +page/page-basic.spec.ts › should terminate network waiters [pass] +page/page-check.spec.ts › should check radio [pass] +page/page-check.spec.ts › should check radio by aria role [pass] +page/page-check.spec.ts › should check the box @smoke [pass] +page/page-check.spec.ts › should check the box by aria role [pass] +page/page-check.spec.ts › should check the box inside a button [pass] +page/page-check.spec.ts › should check the box using setChecked [pass] +page/page-check.spec.ts › should check the label with position [pass] +page/page-check.spec.ts › should not check the checked box [pass] +page/page-check.spec.ts › should not uncheck the unchecked box [pass] +page/page-check.spec.ts › should throw when not a checkbox [pass] +page/page-check.spec.ts › should throw when not a checkbox 2 [pass] +page/page-check.spec.ts › should uncheck radio by aria role [pass] +page/page-check.spec.ts › should uncheck the box [pass] +page/page-check.spec.ts › should uncheck the box by aria role [pass] +page/page-check.spec.ts › trial run should not check [pass] +page/page-check.spec.ts › trial run should not uncheck [pass] +page/page-click-during-navigation.spec.ts › should not fail with internal error upon navigation [pass] +page/page-click-react.spec.ts › should not retarget the handle when element is recycled [unknown] +page/page-click-react.spec.ts › should not retarget when element changes on hover [pass] +page/page-click-react.spec.ts › should not retarget when element is recycled on hover [pass] +page/page-click-react.spec.ts › should report that selector does not match anymore [unknown] +page/page-click-react.spec.ts › should retarget when element is recycled before enabled check [unknown] +page/page-click-react.spec.ts › should retarget when element is recycled during hit testing [unknown] +page/page-click-react.spec.ts › should timeout when click opens alert [pass] +page/page-click-scroll.spec.ts › should not crash when force-clicking hidden input [pass] +page/page-click-scroll.spec.ts › should not hit scroll bar [pass] +page/page-click-scroll.spec.ts › should scroll into view display:contents [fail] +page/page-click-scroll.spec.ts › should scroll into view display:contents with a child [pass] +page/page-click-scroll.spec.ts › should scroll into view display:contents with position [fail] +page/page-click-scroll.spec.ts › should scroll into view element in iframe [pass] +page/page-click-scroll.spec.ts › should scroll into view span element [pass] +page/page-click-timeout-1.spec.ts › should avoid side effects after timeout [pass] +page/page-click-timeout-1.spec.ts › should timeout waiting for button to be enabled [pass] +page/page-click-timeout-2.spec.ts › should timeout waiting for display:none to be gone [pass] +page/page-click-timeout-2.spec.ts › should timeout waiting for visibility:hidden to be gone [pass] +page/page-click-timeout-3.spec.ts › should fail when element jumps during hit testing [pass] +page/page-click-timeout-3.spec.ts › should report wrong hit target subtree [pass] +page/page-click-timeout-3.spec.ts › should still click when force but hit target is obscured [pass] +page/page-click-timeout-3.spec.ts › should timeout waiting for hit target [pass] +page/page-click-timeout-4.spec.ts › should click for the second time after first timeout [pass] +page/page-click-timeout-4.spec.ts › should timeout waiting for stable position [pass] +page/page-click.spec.ts › ensure events are dispatched in the individual tasks [pass] +page/page-click.spec.ts › should click a button in scrolling container with offset [pass] +page/page-click.spec.ts › should click a button that is overlaid by a permission popup [pass] +page/page-click.spec.ts › should click a partially obscured button [pass] +page/page-click.spec.ts › should click a rotated button [pass] +page/page-click.spec.ts › should click a very large button with offset [pass] +page/page-click.spec.ts › should click an offscreen element when scroll-behavior is smooth [pass] +page/page-click.spec.ts › should click button inside frameset [pass] +page/page-click.spec.ts › should click disabled div [pass] +page/page-click.spec.ts › should click if opened select covers the button [pass] +page/page-click.spec.ts › should click in a nested transformed iframe [timeout] +page/page-click.spec.ts › should click in a transformed iframe [timeout] +page/page-click.spec.ts › should click in a transformed iframe with force [fail] +page/page-click.spec.ts › should click in an iframe with border [pass] +page/page-click.spec.ts › should click in an iframe with border 2 [pass] +page/page-click.spec.ts › should click links which cause navigation [pass] +page/page-click.spec.ts › should click offscreen buttons [pass] +page/page-click.spec.ts › should click on a span with an inline element inside [pass] +page/page-click.spec.ts › should click on checkbox input and toggle [pass] +page/page-click.spec.ts › should click on checkbox label and toggle [pass] +page/page-click.spec.ts › should click svg [pass] +page/page-click.spec.ts › should click the 1x1 div [pass] +page/page-click.spec.ts › should click the button @smoke [pass] +page/page-click.spec.ts › should click the button after a cross origin navigation [pass] +page/page-click.spec.ts › should click the button after navigation [pass] +page/page-click.spec.ts › should click the button behind sticky header [pass] +page/page-click.spec.ts › should click the button if window.Node is removed [pass] +page/page-click.spec.ts › should click the button inside an iframe [pass] +page/page-click.spec.ts › should click the button when window.innerWidth is corrupted [pass] +page/page-click.spec.ts › should click the button with em border with offset [pass] +page/page-click.spec.ts › should click the button with fixed position inside an iframe [timeout] +page/page-click.spec.ts › should click the button with px border with offset [pass] +page/page-click.spec.ts › should click when one of inline box children is outside of viewport [pass] +page/page-click.spec.ts › should click wrapped links [pass] +page/page-click.spec.ts › should click zero-sized input by label [pass] +page/page-click.spec.ts › should climb dom for inner label with pointer-events:none [pass] +page/page-click.spec.ts › should climb up to [role=button] [pass] +page/page-click.spec.ts › should climb up to a [role=link] [pass] +page/page-click.spec.ts › should climb up to a anchor [pass] +page/page-click.spec.ts › should dispatch microtasks in order [pass] +page/page-click.spec.ts › should double click the button [pass] +page/page-click.spec.ts › should fail when element detaches after animation [pass] +page/page-click.spec.ts › should fail when element is animating from outside the viewport with force [pass] +page/page-click.spec.ts › should fail when obscured and not waiting for hit target [pass] +page/page-click.spec.ts › should fire contextmenu event on right click [pass] +page/page-click.spec.ts › should fire contextmenu event on right click in correct order [fail] +page/page-click.spec.ts › should issue clicks in parallel in page and popup [pass] +page/page-click.spec.ts › should not hang when frame is detached [pass] +page/page-click.spec.ts › should not throw UnhandledPromiseRejection when page closes [pass] +page/page-click.spec.ts › should not throw protocol error when navigating during the click [pass] +page/page-click.spec.ts › should not wait with force [pass] +page/page-click.spec.ts › should report nice error when element is detached and force-clicked [pass] +page/page-click.spec.ts › should retry when element detaches after animation [pass] +page/page-click.spec.ts › should retry when element is animating from outside the viewport [pass] +page/page-click.spec.ts › should retry when navigating during the click [pass] +page/page-click.spec.ts › should scroll and click the button [pass] +page/page-click.spec.ts › should scroll and click the button with smooth scroll behavior [pass] +page/page-click.spec.ts › should select the text by triple clicking [pass] +page/page-click.spec.ts › should update modifiers correctly [pass] +page/page-click.spec.ts › should wait for BUTTON to be clickable when it has pointer-events:none [pass] +page/page-click.spec.ts › should wait for LABEL to be clickable when it has pointer-events:none [pass] +page/page-click.spec.ts › should wait for becoming hit target [pass] +page/page-click.spec.ts › should wait for becoming hit target with trial run [pass] +page/page-click.spec.ts › should wait for button to be enabled [pass] +page/page-click.spec.ts › should wait for input to be enabled [pass] +page/page-click.spec.ts › should wait for select to be enabled [pass] +page/page-click.spec.ts › should wait for stable position [pass] +page/page-click.spec.ts › should waitFor display:none to be gone [pass] +page/page-click.spec.ts › should waitFor visibility:hidden to be gone [pass] +page/page-click.spec.ts › should waitFor visible when already visible [pass] +page/page-click.spec.ts › should waitFor visible when parent is hidden [pass] +page/page-click.spec.ts › trial run should not click [pass] +page/page-click.spec.ts › trial run should not double click [pass] +page/page-click.spec.ts › trial run should work with short timeout [pass] +page/page-close.spec.ts › should close page with active dialog [pass] +page/page-close.spec.ts › should not accept dialog after close [pass] +page/page-dialog.spec.ts › should accept the confirm prompt [pass] +page/page-dialog.spec.ts › should allow accepting prompts @smoke [pass] +page/page-dialog.spec.ts › should auto-dismiss the alert without listeners [pass] +page/page-dialog.spec.ts › should auto-dismiss the prompt without listeners [pass] +page/page-dialog.spec.ts › should be able to close context with open alert [pass] +page/page-dialog.spec.ts › should dismiss the confirm prompt [pass] +page/page-dialog.spec.ts › should dismiss the prompt [pass] +page/page-dialog.spec.ts › should fire [pass] +page/page-dialog.spec.ts › should handle multiple alerts [timeout] +page/page-dialog.spec.ts › should handle multiple confirms [timeout] +page/page-dispatchevent.spec.ts › should be atomic [pass] +page/page-dispatchevent.spec.ts › should dispatch absolute device orientation event [pass] +page/page-dispatchevent.spec.ts › should dispatch click after a cross origin navigation [pass] +page/page-dispatchevent.spec.ts › should dispatch click after navigation [pass] +page/page-dispatchevent.spec.ts › should dispatch click event @smoke [pass] +page/page-dispatchevent.spec.ts › should dispatch click event properties [pass] +page/page-dispatchevent.spec.ts › should dispatch click event via ElementHandles [pass] +page/page-dispatchevent.spec.ts › should dispatch click on a span with an inline element inside [pass] +page/page-dispatchevent.spec.ts › should dispatch click svg [pass] +page/page-dispatchevent.spec.ts › should dispatch click when node is added in shadow dom [pass] +page/page-dispatchevent.spec.ts › should dispatch device motion event [pass] +page/page-dispatchevent.spec.ts › should dispatch device orientation event [pass] +page/page-dispatchevent.spec.ts › should dispatch drag drop events [pass] +page/page-dispatchevent.spec.ts › should dispatch drag drop events via ElementHandles [pass] +page/page-dispatchevent.spec.ts › should dispatch wheel event [pass] +page/page-dispatchevent.spec.ts › should not fail when element is blocked on hover [pass] +page/page-dispatchevent.spec.ts › should throw if argument is from different frame [pass] +page/page-drag.spec.ts › Drag and drop › iframe › should drag into an iframe [unknown] +page/page-drag.spec.ts › Drag and drop › iframe › should drag out of an iframe [unknown] +page/page-drag.spec.ts › Drag and drop › should allow specifying the position [pass] +page/page-drag.spec.ts › Drag and drop › should be able to drag the mouse in a frame [pass] +page/page-drag.spec.ts › Drag and drop › should cancel on escape [fail] +page/page-drag.spec.ts › Drag and drop › should not send dragover on the first mousemove [unknown] +page/page-drag.spec.ts › Drag and drop › should respect the drop effect [fail] +page/page-drag.spec.ts › Drag and drop › should send the right events [pass] +page/page-drag.spec.ts › Drag and drop › should work @smoke [pass] +page/page-drag.spec.ts › Drag and drop › should work if a frame is stalled [fail] +page/page-drag.spec.ts › Drag and drop › should work if the drag event is captured but not canceled [pass] +page/page-drag.spec.ts › Drag and drop › should work if the drag is canceled [pass] +page/page-drag.spec.ts › Drag and drop › should work inside iframe [pass] +page/page-drag.spec.ts › Drag and drop › should work with locators [pass] +page/page-drag.spec.ts › Drag and drop › should work with the helper method [pass] +page/page-drag.spec.ts › should handle custom dataTransfer [pass] +page/page-drag.spec.ts › should report event.buttons [pass] +page/page-drag.spec.ts › should work if not doing a drag [pass] +page/page-drag.spec.ts › what happens when dragging element is destroyed [pass] +page/page-emulate-media.spec.ts › should change the actual colors in css [fail] +page/page-emulate-media.spec.ts › should default to light [fail] +page/page-emulate-media.spec.ts › should emulate colorScheme should work @smoke [fail] +page/page-emulate-media.spec.ts › should emulate forcedColors [fail] +page/page-emulate-media.spec.ts › should emulate reduced motion [fail] +page/page-emulate-media.spec.ts › should emulate type @smoke [fail] +page/page-emulate-media.spec.ts › should keep reduced motion and color emulation after reload [fail] +page/page-emulate-media.spec.ts › should throw in case of bad colorScheme argument [pass] +page/page-emulate-media.spec.ts › should throw in case of bad media argument [pass] +page/page-emulate-media.spec.ts › should work during navigation [fail] +page/page-evaluate-handle.spec.ts › should accept multiple nested handles [pass] +page/page-evaluate-handle.spec.ts › should accept nested handle [pass] +page/page-evaluate-handle.spec.ts › should accept nested window handle [pass] +page/page-evaluate-handle.spec.ts › should accept object handle as an argument [pass] +page/page-evaluate-handle.spec.ts › should accept object handle to primitive types [pass] +page/page-evaluate-handle.spec.ts › should accept object handle to unserializable value [pass] +page/page-evaluate-handle.spec.ts › should accept same handle multiple times [pass] +page/page-evaluate-handle.spec.ts › should accept same nested object multiple times [pass] +page/page-evaluate-handle.spec.ts › should pass configurable args [pass] +page/page-evaluate-handle.spec.ts › should work [pass] +page/page-evaluate-handle.spec.ts › should work with primitives [pass] +page/page-evaluate-no-stall.spec.ts › should throw when no main execution context [pass] +page/page-evaluate-no-stall.spec.ts › should throw while pending navigation [fail] +page/page-evaluate-no-stall.spec.ts › should work [pass] +page/page-evaluate.spec.ts › should accept "undefined" as one of multiple parameters [pass] +page/page-evaluate.spec.ts › should accept a string [pass] +page/page-evaluate.spec.ts › should accept a string with comments [pass] +page/page-evaluate.spec.ts › should accept a string with semi colons [pass] +page/page-evaluate.spec.ts › should accept element handle as an argument [pass] +page/page-evaluate.spec.ts › should alias Window, Document and Node [pass] +page/page-evaluate.spec.ts › should await promise [pass] +page/page-evaluate.spec.ts › should await promise from popup [pass] +page/page-evaluate.spec.ts › should be able to throw a tricky error [pass] +page/page-evaluate.spec.ts › should evaluate date [pass] +page/page-evaluate.spec.ts › should evaluate exception [pass] +page/page-evaluate.spec.ts › should evaluate exception with a function on the stack [pass] +page/page-evaluate.spec.ts › should evaluate in the page context [pass] +page/page-evaluate.spec.ts › should evaluate url [pass] +page/page-evaluate.spec.ts › should ignore buggy toJSON [pass] +page/page-evaluate.spec.ts › should jsonValue() date [pass] +page/page-evaluate.spec.ts › should jsonValue() url [pass] +page/page-evaluate.spec.ts › should modify global environment [pass] +page/page-evaluate.spec.ts › should not add a toJSON property to newly created Arrays after evaluation [pass] +page/page-evaluate.spec.ts › should not expose the injected script export [pass] +page/page-evaluate.spec.ts › should not leak handles [pass] +page/page-evaluate.spec.ts › should not leak utility script [pass] +page/page-evaluate.spec.ts › should not throw an error when evaluation does a navigation [pass] +page/page-evaluate.spec.ts › should not throw an error when evaluation does a synchronous navigation and returns an object [pass] +page/page-evaluate.spec.ts › should not throw an error when evaluation does a synchronous navigation and returns undefined [pass] +page/page-evaluate.spec.ts › should not use Array.prototype.toJSON when evaluating [pass] +page/page-evaluate.spec.ts › should not use toJSON in jsonValue [pass] +page/page-evaluate.spec.ts › should not use toJSON when evaluating [pass] +page/page-evaluate.spec.ts › should pass exception argument [pass] +page/page-evaluate.spec.ts › should properly serialize PerformanceMeasure object [pass] +page/page-evaluate.spec.ts › should properly serialize null arguments [pass] +page/page-evaluate.spec.ts › should properly serialize null fields [pass] +page/page-evaluate.spec.ts › should properly serialize undefined arguments [pass] +page/page-evaluate.spec.ts › should properly serialize undefined fields [pass] +page/page-evaluate.spec.ts › should properly serialize window.performance object [pass] +page/page-evaluate.spec.ts › should reject promise with exception [pass] +page/page-evaluate.spec.ts › should respect use strict expression [pass] +page/page-evaluate.spec.ts › should return -0 [pass] +page/page-evaluate.spec.ts › should return -Infinity [pass] +page/page-evaluate.spec.ts › should return Infinity [pass] +page/page-evaluate.spec.ts › should return NaN [pass] +page/page-evaluate.spec.ts › should return complex objects [pass] +page/page-evaluate.spec.ts › should return undefined for non-serializable objects [pass] +page/page-evaluate.spec.ts › should return undefined for objects with symbols [pass] +page/page-evaluate.spec.ts › should return undefined properties [pass] +page/page-evaluate.spec.ts › should roundtrip date [pass] +page/page-evaluate.spec.ts › should roundtrip promise to unserializable values [pass] +page/page-evaluate.spec.ts › should roundtrip promise to value [pass] +page/page-evaluate.spec.ts › should roundtrip regex [pass] +page/page-evaluate.spec.ts › should roundtrip unserializable values [pass] +page/page-evaluate.spec.ts › should roundtrip url [pass] +page/page-evaluate.spec.ts › should simulate a user gesture [pass] +page/page-evaluate.spec.ts › should support thrown numbers as error messages [pass] +page/page-evaluate.spec.ts › should support thrown strings as error messages [pass] +page/page-evaluate.spec.ts › should throw a nice error after a navigation [fail] +page/page-evaluate.spec.ts › should throw error with detailed information on exception inside promise [pass] +page/page-evaluate.spec.ts › should throw if underlying element was disposed [pass] +page/page-evaluate.spec.ts › should throw when evaluation triggers reload [fail] +page/page-evaluate.spec.ts › should throw when frame is detached [pass] +page/page-evaluate.spec.ts › should throw when passed more than one parameter [pass] +page/page-evaluate.spec.ts › should transfer -0 [pass] +page/page-evaluate.spec.ts › should transfer -Infinity [pass] +page/page-evaluate.spec.ts › should transfer 100Mb of data from page to node.js [pass] +page/page-evaluate.spec.ts › should transfer Infinity [pass] +page/page-evaluate.spec.ts › should transfer NaN [pass] +page/page-evaluate.spec.ts › should transfer arrays [pass] +page/page-evaluate.spec.ts › should transfer arrays as arrays, not objects [pass] +page/page-evaluate.spec.ts › should transfer bigint [pass] +page/page-evaluate.spec.ts › should transfer maps as empty objects [pass] +page/page-evaluate.spec.ts › should work @smoke [pass] +page/page-evaluate.spec.ts › should work even when JSON is set to null [pass] +page/page-evaluate.spec.ts › should work for circular object [pass] +page/page-evaluate.spec.ts › should work from-inside an exposed function [fail] +page/page-evaluate.spec.ts › should work right after a cross-origin navigation [fail] +page/page-evaluate.spec.ts › should work right after framenavigated [fail] +page/page-evaluate.spec.ts › should work with Array.from/map [pass] +page/page-evaluate.spec.ts › should work with CSP [pass] +page/page-evaluate.spec.ts › should work with busted Array.prototype.map/push [pass] +page/page-evaluate.spec.ts › should work with function shorthands [pass] +page/page-evaluate.spec.ts › should work with large strings [pass] +page/page-evaluate.spec.ts › should work with large unicode strings [pass] +page/page-evaluate.spec.ts › should work with new Function() and CSP [pass] +page/page-evaluate.spec.ts › should work with non-strict expressions [pass] +page/page-evaluate.spec.ts › should work with overridden Object.defineProperty [pass] +page/page-evaluate.spec.ts › should work with overridden URL/Date/RegExp [pass] +page/page-evaluate.spec.ts › should work with overridden globalThis.Window/Document/Node [pass] +page/page-evaluate.spec.ts › should work with overwritten Promise [pass] +page/page-evaluate.spec.ts › should work with unicode chars [pass] +page/page-event-console.spec.ts › do not update console count on unhandled rejections [pass] +page/page-event-console.spec.ts › should emit same log twice [pass] +page/page-event-console.spec.ts › should format the message correctly with time/timeLog/timeEnd [pass] +page/page-event-console.spec.ts › should have location for console API calls [pass] +page/page-event-console.spec.ts › should not fail for window object [fail] +page/page-event-console.spec.ts › should not throw when there are console messages in detached iframes [pass] +page/page-event-console.spec.ts › should trigger correct Log [timeout] +page/page-event-console.spec.ts › should use object previews for arrays and objects [fail] +page/page-event-console.spec.ts › should use object previews for errors [pass] +page/page-event-console.spec.ts › should use text() for inspection [pass] +page/page-event-console.spec.ts › should work @smoke [fail] +page/page-event-console.spec.ts › should work for different console API calls [fail] +page/page-event-load.spec.ts › should fire once [pass] +page/page-event-load.spec.ts › should fire once with iframe navigation [pass] +page/page-event-network.spec.ts › Page.Events.Request @smoke [fail] +page/page-event-network.spec.ts › Page.Events.RequestFailed @smoke [fail] +page/page-event-network.spec.ts › Page.Events.RequestFinished @smoke [pass] +page/page-event-network.spec.ts › Page.Events.Response @smoke [pass] +page/page-event-network.spec.ts › interrupt request.response() and request.allHeaders() on page.close [fail] +page/page-event-network.spec.ts › should fire events in proper order [pass] +page/page-event-network.spec.ts › should resolve responses after a navigation [timeout] +page/page-event-network.spec.ts › should support redirects [pass] +page/page-event-pageerror.spec.ts › should contain sourceURL [timeout] +page/page-event-pageerror.spec.ts › should contain the Error.name property [timeout] +page/page-event-pageerror.spec.ts › should emit error from unhandled rejects [timeout] +page/page-event-pageerror.spec.ts › should fire [timeout] +page/page-event-pageerror.spec.ts › should handle object [timeout] +page/page-event-pageerror.spec.ts › should handle odd values [timeout] +page/page-event-pageerror.spec.ts › should handle window [timeout] +page/page-event-pageerror.spec.ts › should not receive console message for pageError [timeout] +page/page-event-pageerror.spec.ts › should remove a listener of a non-existing event handler [pass] +page/page-event-pageerror.spec.ts › should support an empty Error.name property [timeout] +page/page-event-popup.spec.ts › should be able to capture alert [timeout] +page/page-event-popup.spec.ts › should emit for immediately closed popups [pass] +page/page-event-popup.spec.ts › should emit for immediately closed popups 2 [pass] +page/page-event-popup.spec.ts › should not treat navigations as new popups [pass] +page/page-event-popup.spec.ts › should report popup opened from iframes [fail] +page/page-event-popup.spec.ts › should work @smoke [pass] +page/page-event-popup.spec.ts › should work with clicking target=_blank [pass] +page/page-event-popup.spec.ts › should work with clicking target=_blank and rel=noopener [pass] +page/page-event-popup.spec.ts › should work with empty url [pass] +page/page-event-popup.spec.ts › should work with fake-clicking target=_blank and rel=noopener [pass] +page/page-event-popup.spec.ts › should work with noopener and about:blank [pass] +page/page-event-popup.spec.ts › should work with noopener and no url [fail] +page/page-event-popup.spec.ts › should work with noopener and url [pass] +page/page-event-popup.spec.ts › should work with window features [pass] +page/page-event-request.spec.ts › main resource xhr should have type xhr [fail] +page/page-event-request.spec.ts › should fire for fetches [pass] +page/page-event-request.spec.ts › should fire for iframes [pass] +page/page-event-request.spec.ts › should fire for navigation requests [pass] +page/page-event-request.spec.ts › should fire requestfailed when intercepting race [unknown] +page/page-event-request.spec.ts › should report navigation requests and responses handled by service worker [fail] +page/page-event-request.spec.ts › should report navigation requests and responses handled by service worker with routing [fail] +page/page-event-request.spec.ts › should report requests and responses handled by service worker [fail] +page/page-event-request.spec.ts › should report requests and responses handled by service worker with routing [fail] +page/page-event-request.spec.ts › should return response body when Cross-Origin-Opener-Policy is set [fail] +page/page-expose-function.spec.ts › exposeBinding should work @smoke [fail] +page/page-expose-function.spec.ts › exposeBinding(handle) should work with element handles [timeout] +page/page-expose-function.spec.ts › exposeBindingHandle should not throw during navigation [fail] +page/page-expose-function.spec.ts › exposeBindingHandle should throw for multiple arguments [fail] +page/page-expose-function.spec.ts › exposeBindingHandle should work [fail] +page/page-expose-function.spec.ts › should alias Window, Document and Node [fail] +page/page-expose-function.spec.ts › should await returned promise [fail] +page/page-expose-function.spec.ts › should be callable from-inside addInitScript [timeout] +page/page-expose-function.spec.ts › should fail with busted Array.prototype.toJSON [fail] +page/page-expose-function.spec.ts › should not result in unhandled rejection [timeout] +page/page-expose-function.spec.ts › should serialize cycles [fail] +page/page-expose-function.spec.ts › should support throwing "null" [fail] +page/page-expose-function.spec.ts › should survive navigation [fail] +page/page-expose-function.spec.ts › should throw exception in page context [fail] +page/page-expose-function.spec.ts › should throw for duplicate registrations [pass] +page/page-expose-function.spec.ts › should work [fail] +page/page-expose-function.spec.ts › should work after cross origin navigation [fail] +page/page-expose-function.spec.ts › should work on frames [fail] +page/page-expose-function.spec.ts › should work on frames before navigation [fail] +page/page-expose-function.spec.ts › should work with busted Array.prototype.map/push [fail] +page/page-expose-function.spec.ts › should work with complex objects [fail] +page/page-expose-function.spec.ts › should work with handles and complex objects [fail] +page/page-expose-function.spec.ts › should work with overridden console object [fail] +page/page-expose-function.spec.ts › should work with setContent [fail] +page/page-fill.spec.ts › fill back to back [pass] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - color [pass] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - date [pass] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - datetime-local [pass] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - month [unknown] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - range [pass] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - time [pass] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - week [unknown] +page/page-fill.spec.ts › should be able to clear using fill() [pass] +page/page-fill.spec.ts › should be able to fill exponent into the input[type=number] [pass] +page/page-fill.spec.ts › should be able to fill input[type=number] with empty string [pass] +page/page-fill.spec.ts › should be able to fill the body [pass] +page/page-fill.spec.ts › should be able to fill the input[type=number] [pass] +page/page-fill.spec.ts › should be able to fill when focus is in the wrong frame [pass] +page/page-fill.spec.ts › should fill color input [pass] +page/page-fill.spec.ts › should fill contenteditable [pass] +page/page-fill.spec.ts › should fill contenteditable with new lines [pass] +page/page-fill.spec.ts › should fill date input after clicking [pass] +page/page-fill.spec.ts › should fill datetime-local input [pass] +page/page-fill.spec.ts › should fill different input types [pass] +page/page-fill.spec.ts › should fill elements with existing value and selection [pass] +page/page-fill.spec.ts › should fill fixed position input [pass] +page/page-fill.spec.ts › should fill input [pass] +page/page-fill.spec.ts › should fill month input [pass] +page/page-fill.spec.ts › should fill range input [pass] +page/page-fill.spec.ts › should fill textarea @smoke [pass] +page/page-fill.spec.ts › should fill time input [pass] +page/page-fill.spec.ts › should fill week input [pass] +page/page-fill.spec.ts › should not be able to fill text into the input[type=number] [pass] +page/page-fill.spec.ts › should not throw when fill causes navigation [pass] +page/page-fill.spec.ts › should retry on disabled element [pass] +page/page-fill.spec.ts › should retry on invisible element [pass] +page/page-fill.spec.ts › should retry on readonly element [pass] +page/page-fill.spec.ts › should throw if passed a non-string value [pass] +page/page-fill.spec.ts › should throw nice error without injected script stack when element is not an [fail] +page/page-fill.spec.ts › should throw on incorrect color value [pass] +page/page-fill.spec.ts › should throw on incorrect date [pass] +page/page-fill.spec.ts › should throw on incorrect datetime-local [unknown] +page/page-fill.spec.ts › should throw on incorrect month [unknown] +page/page-fill.spec.ts › should throw on incorrect range value [pass] +page/page-fill.spec.ts › should throw on incorrect time [pass] +page/page-fill.spec.ts › should throw on incorrect week [unknown] +page/page-fill.spec.ts › should throw on unsupported inputs [pass] +page/page-focus.spec.ts › clicking checkbox should activate it [unknown] +page/page-focus.spec.ts › keeps focus on element when attempting to focus a non-focusable element [pass] +page/page-focus.spec.ts › should emit blur event [fail] +page/page-focus.spec.ts › should emit focus event [fail] +page/page-focus.spec.ts › should traverse focus [fail] +page/page-focus.spec.ts › should traverse focus in all directions [pass] +page/page-focus.spec.ts › should traverse only form elements [unknown] +page/page-focus.spec.ts › should work @smoke [pass] +page/page-goto.spec.ts › js redirect overrides url bar navigation [fail] +page/page-goto.spec.ts › should be able to navigate to a page controlled by service worker [pass] +page/page-goto.spec.ts › should capture cross-process iframe navigation request [pass] +page/page-goto.spec.ts › should capture iframe navigation request [pass] +page/page-goto.spec.ts › should disable timeout when its set to 0 [pass] +page/page-goto.spec.ts › should fail when canceled by another navigation [pass] +page/page-goto.spec.ts › should fail when exceeding browser context navigation timeout [pass] +page/page-goto.spec.ts › should fail when exceeding browser context timeout [pass] +page/page-goto.spec.ts › should fail when exceeding default maximum navigation timeout [pass] +page/page-goto.spec.ts › should fail when exceeding default maximum timeout [pass] +page/page-goto.spec.ts › should fail when exceeding maximum navigation timeout [pass] +page/page-goto.spec.ts › should fail when main resources failed to load [fail] +page/page-goto.spec.ts › should fail when navigating and show the url at the error message [pass] +page/page-goto.spec.ts › should fail when navigating to bad SSL [fail] +page/page-goto.spec.ts › should fail when navigating to bad SSL after redirects [fail] +page/page-goto.spec.ts › should fail when navigating to bad url [fail] +page/page-goto.spec.ts › should fail when replaced by another navigation [pass] +page/page-goto.spec.ts › should fail when server returns 204 [fail] +page/page-goto.spec.ts › should navigate to URL with hash and fire requests without hash [pass] +page/page-goto.spec.ts › should navigate to about:blank [pass] +page/page-goto.spec.ts › should navigate to dataURL and not fire dataURL requests [pass] +page/page-goto.spec.ts › should navigate to empty page with domcontentloaded [pass] +page/page-goto.spec.ts › should not crash when RTCPeerConnection is used [pass] +page/page-goto.spec.ts › should not crash when navigating to bad SSL after a cross origin navigation [pass] +page/page-goto.spec.ts › should not leak listeners during 20 waitForNavigation [pass] +page/page-goto.spec.ts › should not leak listeners during bad navigation [pass] +page/page-goto.spec.ts › should not leak listeners during navigation [pass] +page/page-goto.spec.ts › should not resolve goto upon window.stop() [pass] +page/page-goto.spec.ts › should not throw if networkidle0 is passed as an option [pass] +page/page-goto.spec.ts › should not throw unhandled rejections on invalid url [pass] +page/page-goto.spec.ts › should override referrer-policy [fail] +page/page-goto.spec.ts › should prioritize default navigation timeout over default timeout [pass] +page/page-goto.spec.ts › should properly wait for load [pass] +page/page-goto.spec.ts › should reject referer option when setExtraHTTPHeaders provides referer [pass] +page/page-goto.spec.ts › should report raw buffer for main resource [fail] +page/page-goto.spec.ts › should return from goto if new navigation is started [pass] +page/page-goto.spec.ts › should return last response in redirect chain [pass] +page/page-goto.spec.ts › should return response when page changes its URL after load [pass] +page/page-goto.spec.ts › should return url with basic auth info [pass] +page/page-goto.spec.ts › should return when navigation is committed if commit is specified [fail] +page/page-goto.spec.ts › should send referer [fail] +page/page-goto.spec.ts › should send referer of cross-origin URL [fail] +page/page-goto.spec.ts › should succeed on url bar navigation when there is pending navigation [pass] +page/page-goto.spec.ts › should throw if networkidle2 is passed as an option [pass] +page/page-goto.spec.ts › should use http for no protocol [pass] +page/page-goto.spec.ts › should wait for load when iframe attaches and detaches [pass] +page/page-goto.spec.ts › should work @smoke [pass] +page/page-goto.spec.ts › should work cross-process [pass] +page/page-goto.spec.ts › should work when navigating to 404 [pass] +page/page-goto.spec.ts › should work when navigating to data url [pass] +page/page-goto.spec.ts › should work when navigating to valid url [pass] +page/page-goto.spec.ts › should work when page calls history API in beforeunload [pass] +page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy [pass] +page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy after redirect [pass] +page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy and interception [fail] +page/page-goto.spec.ts › should work with anchor navigation [timeout] +page/page-goto.spec.ts › should work with cross-process that fails before committing [pass] +page/page-goto.spec.ts › should work with file URL [pass] +page/page-goto.spec.ts › should work with file URL with subframes [pass] +page/page-goto.spec.ts › should work with lazy loading iframes [pass] +page/page-goto.spec.ts › should work with redirects [pass] +page/page-goto.spec.ts › should work with self requesting page [pass] +page/page-goto.spec.ts › should work with subframes return 204 [pass] +page/page-goto.spec.ts › should work with subframes return 204 with domcontentloaded [pass] +page/page-history.spec.ts › goBack/goForward should work with bfcache-able pages [fail] +page/page-history.spec.ts › page.goBack during renderer-initiated navigation [timeout] +page/page-history.spec.ts › page.goBack should work @smoke [fail] +page/page-history.spec.ts › page.goBack should work for file urls [fail] +page/page-history.spec.ts › page.goBack should work with HistoryAPI [fail] +page/page-history.spec.ts › page.goForward during renderer-initiated navigation [fail] +page/page-history.spec.ts › page.reload during renderer-initiated navigation [pass] +page/page-history.spec.ts › page.reload should not resolve with same-document navigation [fail] +page/page-history.spec.ts › page.reload should work [pass] +page/page-history.spec.ts › page.reload should work on a page with a hash [pass] +page/page-history.spec.ts › page.reload should work on a page with a hash at the end [pass] +page/page-history.spec.ts › page.reload should work with cross-origin redirect [pass] +page/page-history.spec.ts › page.reload should work with data url [timeout] +page/page-history.spec.ts › page.reload should work with same origin redirect [pass] +page/page-history.spec.ts › regression test for issue 20791 [pass] +page/page-history.spec.ts › should reload proper page [pass] +page/page-keyboard.spec.ts › insertText should only emit input event [fail] +page/page-keyboard.spec.ts › pressing Meta should not result in any text insertion on any platform [pass] +page/page-keyboard.spec.ts › should be able to prevent selectAll [pass] +page/page-keyboard.spec.ts › should dispatch a click event on a button when Enter gets pressed [pass] +page/page-keyboard.spec.ts › should dispatch a click event on a button when Space gets pressed [pass] +page/page-keyboard.spec.ts › should dispatch insertText after context menu was opened [pass] +page/page-keyboard.spec.ts › should expose keyIdentifier in webkit [unknown] +page/page-keyboard.spec.ts › should handle selectAll [pass] +page/page-keyboard.spec.ts › should have correct Keydown/Keyup order when pressing Escape key [pass] +page/page-keyboard.spec.ts › should move around the selection in a contenteditable [pass] +page/page-keyboard.spec.ts › should move to the start of the document [fail] +page/page-keyboard.spec.ts › should move with the arrow keys [pass] +page/page-keyboard.spec.ts › should not type canceled events [pass] +page/page-keyboard.spec.ts › should press Enter [fail] +page/page-keyboard.spec.ts › should press plus [fail] +page/page-keyboard.spec.ts › should press shift plus [fail] +page/page-keyboard.spec.ts › should press the meta key [pass] +page/page-keyboard.spec.ts › should report multiple modifiers [pass] +page/page-keyboard.spec.ts › should report shiftKey [pass] +page/page-keyboard.spec.ts › should scroll with PageDown [pass] +page/page-keyboard.spec.ts › should send a character with ElementHandle.press [pass] +page/page-keyboard.spec.ts › should send a character with insertText [fail] +page/page-keyboard.spec.ts › should send proper codes while typing [pass] +page/page-keyboard.spec.ts › should send proper codes while typing with shift [timeout] +page/page-keyboard.spec.ts › should shift raw codes [pass] +page/page-keyboard.spec.ts › should specify location [fail] +page/page-keyboard.spec.ts › should specify repeat property [pass] +page/page-keyboard.spec.ts › should support MacOS shortcuts [fail] +page/page-keyboard.spec.ts › should support multiple plus-separated modifiers [pass] +page/page-keyboard.spec.ts › should support plus-separated modifiers [pass] +page/page-keyboard.spec.ts › should support simple copy-pasting [pass] +page/page-keyboard.spec.ts › should support simple cut-pasting [pass] +page/page-keyboard.spec.ts › should support undo-redo [pass] +page/page-keyboard.spec.ts › should throw on unknown keys [pass] +page/page-keyboard.spec.ts › should type after context menu was opened [pass] +page/page-keyboard.spec.ts › should type all kinds of characters [pass] +page/page-keyboard.spec.ts › should type emoji [pass] +page/page-keyboard.spec.ts › should type emoji into an iframe [pass] +page/page-keyboard.spec.ts › should type into a textarea @smoke [pass] +page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom [pass] +page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom with nested elements [pass] +page/page-keyboard.spec.ts › should type repeatedly in input in shadow dom [pass] +page/page-keyboard.spec.ts › should work after a cross origin navigation [pass] +page/page-keyboard.spec.ts › should work with keyboard events with empty.html [pass] +page/page-keyboard.spec.ts › type to non-focusable element should maintain old focus [pass] +page/page-leaks.spec.ts › click should not leak [pass] +page/page-leaks.spec.ts › expect should not leak [pass] +page/page-leaks.spec.ts › fill should not leak [pass] +page/page-leaks.spec.ts › waitFor should not leak [pass] +page/page-listeners.spec.ts › should not throw with ignoreErrors [pass] +page/page-listeners.spec.ts › should wait [pass] +page/page-listeners.spec.ts › wait should throw [pass] +page/page-mouse.spec.ts › down and up should generate click [pass] +page/page-mouse.spec.ts › should always round down [fail] +page/page-mouse.spec.ts › should click the document @smoke [pass] +page/page-mouse.spec.ts › should dblclick the div [pass] +page/page-mouse.spec.ts › should dispatch mouse move after context menu was opened [pass] +page/page-mouse.spec.ts › should not crash on mouse drag with any button [pass] +page/page-mouse.spec.ts › should pointerdown the div with a custom button [pass] +page/page-mouse.spec.ts › should report correct buttons property [pass] +page/page-mouse.spec.ts › should select the text with mouse [pass] +page/page-mouse.spec.ts › should set modifier keys on click [pass] +page/page-mouse.spec.ts › should trigger hover state [pass] +page/page-mouse.spec.ts › should trigger hover state on disabled button [pass] +page/page-mouse.spec.ts › should trigger hover state with removed window.Node [pass] +page/page-mouse.spec.ts › should tween mouse movement [pass] +page/page-navigation.spec.ts › should work with _blank target [pass] +page/page-navigation.spec.ts › should work with _blank target in form [pass] +page/page-navigation.spec.ts › should work with cross-process _blank target [pass] +page/page-network-idle.spec.ts › should navigate to empty page with networkidle [pass] +page/page-network-idle.spec.ts › should wait for networkidle from the child frame [pass] +page/page-network-idle.spec.ts › should wait for networkidle from the popup [pass] +page/page-network-idle.spec.ts › should wait for networkidle in setContent [pass] +page/page-network-idle.spec.ts › should wait for networkidle in setContent from the child frame [pass] +page/page-network-idle.spec.ts › should wait for networkidle in setContent with request from previous navigation [pass] +page/page-network-idle.spec.ts › should wait for networkidle in waitForNavigation [pass] +page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation [pass] +page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation with request from previous navigation [pass] +page/page-network-idle.spec.ts › should wait for networkidle when iframe attaches and detaches [pass] +page/page-network-idle.spec.ts › should wait for networkidle when navigating iframe [pass] +page/page-network-idle.spec.ts › should work after repeated navigations in the same page [fail] +page/page-network-request.spec.ts › page.reload return 304 status code [fail] +page/page-network-request.spec.ts › should get the same headers as the server [fail] +page/page-network-request.spec.ts › should get the same headers as the server CORS [fail] +page/page-network-request.spec.ts › should get |undefined| with postData() when there is no post data [pass] +page/page-network-request.spec.ts › should get |undefined| with postDataJSON() when there is no post data [pass] +page/page-network-request.spec.ts › should handle mixed-content blocked requests [unknown] +page/page-network-request.spec.ts › should not allow to access frame on popup main request [pass] +page/page-network-request.spec.ts › should not get preflight CORS requests when intercepting [fail] +page/page-network-request.spec.ts › should not return allHeaders() until they are available [fail] +page/page-network-request.spec.ts › should not work for a redirect and interception [fail] +page/page-network-request.spec.ts › should override post data content type [fail] +page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded [fail] +page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded; charset=UTF-8 [fail] +page/page-network-request.spec.ts › should parse the json post data [fail] +page/page-network-request.spec.ts › should report all cookies in one header [pass] +page/page-network-request.spec.ts › should report raw headers [fail] +page/page-network-request.spec.ts › should report raw response headers in redirects [fail] +page/page-network-request.spec.ts › should return event source [fail] +page/page-network-request.spec.ts › should return headers [pass] +page/page-network-request.spec.ts › should return multipart/form-data [fail] +page/page-network-request.spec.ts › should return navigation bit [pass] +page/page-network-request.spec.ts › should return navigation bit when navigating to image [pass] +page/page-network-request.spec.ts › should return postData [fail] +page/page-network-request.spec.ts › should work for a redirect [pass] +page/page-network-request.spec.ts › should work for fetch requests @smoke [pass] +page/page-network-request.spec.ts › should work for main frame navigation request [pass] +page/page-network-request.spec.ts › should work for subframe navigation request [pass] +page/page-network-request.spec.ts › should work with binary post data [fail] +page/page-network-request.spec.ts › should work with binary post data and interception [fail] +page/page-network-response.spec.ts › should behave the same way for headers and allHeaders [fail] +page/page-network-response.spec.ts › should bypass disk cache when context interception is enabled [fail] +page/page-network-response.spec.ts › should bypass disk cache when page interception is enabled [fail] +page/page-network-response.spec.ts › should provide a Response with a file URL [fail] +page/page-network-response.spec.ts › should reject response.finished if context closes [fail] +page/page-network-response.spec.ts › should reject response.finished if page closes [fail] +page/page-network-response.spec.ts › should report all headers [fail] +page/page-network-response.spec.ts › should report if request was fromServiceWorker [fail] +page/page-network-response.spec.ts › should report multiple set-cookie headers [fail] +page/page-network-response.spec.ts › should return body [fail] +page/page-network-response.spec.ts › should return body for prefetch script [fail] +page/page-network-response.spec.ts › should return body with compression [fail] +page/page-network-response.spec.ts › should return headers after route.fulfill [fail] +page/page-network-response.spec.ts › should return json [fail] +page/page-network-response.spec.ts › should return multiple header value [fail] +page/page-network-response.spec.ts › should return set-cookie header after route.fulfill [fail] +page/page-network-response.spec.ts › should return status text [pass] +page/page-network-response.spec.ts › should return text [fail] +page/page-network-response.spec.ts › should return uncompressed text [fail] +page/page-network-response.spec.ts › should throw when requesting body of redirected response [pass] +page/page-network-response.spec.ts › should wait until response completes [fail] +page/page-network-response.spec.ts › should work @smoke [fail] +page/page-network-sizes.spec.ts › should handle redirects [fail] +page/page-network-sizes.spec.ts › should have correct responseBodySize for 404 with content [pass] +page/page-network-sizes.spec.ts › should have the correct responseBodySize [fail] +page/page-network-sizes.spec.ts › should have the correct responseBodySize for chunked request [fail] +page/page-network-sizes.spec.ts › should have the correct responseBodySize with gzip compression [fail] +page/page-network-sizes.spec.ts › should return sizes without hanging [pass] +page/page-network-sizes.spec.ts › should set bodySize and headersSize [pass] +page/page-network-sizes.spec.ts › should set bodySize to 0 if there was no body [pass] +page/page-network-sizes.spec.ts › should set bodySize to 0 when there was no response body [pass] +page/page-network-sizes.spec.ts › should set bodySize, headersSize, and transferSize [fail] +page/page-network-sizes.spec.ts › should throw for failed requests [pass] +page/page-network-sizes.spec.ts › should work with 200 status code [fail] +page/page-network-sizes.spec.ts › should work with 401 status code [fail] +page/page-network-sizes.spec.ts › should work with 404 status code [fail] +page/page-network-sizes.spec.ts › should work with 500 status code [fail] +page/page-object-count.spec.ts › should count objects [unknown] +page/page-request-continue.spec.ts › continue should delete headers on redirects [fail] +page/page-request-continue.spec.ts › continue should not change multipart/form-data body [fail] +page/page-request-continue.spec.ts › continue should propagate headers to redirects [fail] +page/page-request-continue.spec.ts › post data › should amend binary post data [fail] +page/page-request-continue.spec.ts › post data › should amend longer post data [fail] +page/page-request-continue.spec.ts › post data › should amend method and post data [fail] +page/page-request-continue.spec.ts › post data › should amend post data [fail] +page/page-request-continue.spec.ts › post data › should amend utf8 post data [fail] +page/page-request-continue.spec.ts › post data › should compute content-length from post data [fail] +page/page-request-continue.spec.ts › post data › should use content-type from original request [fail] +page/page-request-continue.spec.ts › redirected requests should report overridden headers [fail] +page/page-request-continue.spec.ts › should amend HTTP headers [fail] +page/page-request-continue.spec.ts › should amend method [fail] +page/page-request-continue.spec.ts › should amend method on main request [fail] +page/page-request-continue.spec.ts › should continue preload link requests [fail] +page/page-request-continue.spec.ts › should delete header with undefined value [fail] +page/page-request-continue.spec.ts › should delete the origin header [fail] +page/page-request-continue.spec.ts › should intercept css variable with background url [fail] +page/page-request-continue.spec.ts › should not allow changing protocol when overriding url [fail] +page/page-request-continue.spec.ts › should not throw if request was cancelled by the page [fail] +page/page-request-continue.spec.ts › should not throw when continuing after page is closed [fail] +page/page-request-continue.spec.ts › should not throw when continuing while page is closing [fail] +page/page-request-continue.spec.ts › should override method along with url [fail] +page/page-request-continue.spec.ts › should override request url [fail] +page/page-request-continue.spec.ts › should work [fail] +page/page-request-continue.spec.ts › should work with Cross-Origin-Opener-Policy [fail] +page/page-request-fallback.spec.ts › post data › should amend binary post data [fail] +page/page-request-fallback.spec.ts › post data › should amend json post data [fail] +page/page-request-fallback.spec.ts › post data › should amend post data [fail] +page/page-request-fallback.spec.ts › should amend HTTP headers [fail] +page/page-request-fallback.spec.ts › should amend method [fail] +page/page-request-fallback.spec.ts › should chain once [fail] +page/page-request-fallback.spec.ts › should delete header with undefined value [fail] +page/page-request-fallback.spec.ts › should fall back [fail] +page/page-request-fallback.spec.ts › should fall back after exception [fail] +page/page-request-fallback.spec.ts › should fall back async [fail] +page/page-request-fallback.spec.ts › should not chain abort [fail] +page/page-request-fallback.spec.ts › should not chain fulfill [fail] +page/page-request-fallback.spec.ts › should override request url [fail] +page/page-request-fallback.spec.ts › should work [fail] +page/page-request-fulfill.spec.ts › headerValue should return set-cookie from intercepted response [fail] +page/page-request-fulfill.spec.ts › should allow mocking binary responses [fail] +page/page-request-fulfill.spec.ts › should allow mocking svg with charset [fail] +page/page-request-fulfill.spec.ts › should fetch original request and fulfill [fail] +page/page-request-fulfill.spec.ts › should fulfill json [fail] +page/page-request-fulfill.spec.ts › should fulfill preload link requests [fail] +page/page-request-fulfill.spec.ts › should fulfill with fetch response that has multiple set-cookie [fail] +page/page-request-fulfill.spec.ts › should fulfill with fetch result [fail] +page/page-request-fulfill.spec.ts › should fulfill with fetch result and overrides [fail] +page/page-request-fulfill.spec.ts › should fulfill with global fetch result [fail] +page/page-request-fulfill.spec.ts › should fulfill with gzip and readback [fail] +page/page-request-fulfill.spec.ts › should fulfill with har response [fail] +page/page-request-fulfill.spec.ts › should fulfill with multiple set-cookie [fail] +page/page-request-fulfill.spec.ts › should fulfill with unuassigned status codes [fail] +page/page-request-fulfill.spec.ts › should include the origin header [fail] +page/page-request-fulfill.spec.ts › should not go to the network for fulfilled requests body [fail] +page/page-request-fulfill.spec.ts › should not modify the headers sent to the server [fail] +page/page-request-fulfill.spec.ts › should not throw if request was cancelled by the page [fail] +page/page-request-fulfill.spec.ts › should stringify intercepted request response headers [fail] +page/page-request-fulfill.spec.ts › should work [fail] +page/page-request-fulfill.spec.ts › should work with buffer as body [fail] +page/page-request-fulfill.spec.ts › should work with file path [fail] +page/page-request-fulfill.spec.ts › should work with status code 422 [fail] +page/page-request-intercept.spec.ts › request.postData is not null when fetching FormData with a Blob [fail] +page/page-request-intercept.spec.ts › should fulfill intercepted response [fail] +page/page-request-intercept.spec.ts › should fulfill intercepted response using alias [fail] +page/page-request-intercept.spec.ts › should fulfill popup main request using alias [fail] +page/page-request-intercept.spec.ts › should fulfill response with empty body [fail] +page/page-request-intercept.spec.ts › should fulfill with any response [fail] +page/page-request-intercept.spec.ts › should give access to the intercepted response [fail] +page/page-request-intercept.spec.ts › should give access to the intercepted response body [fail] +page/page-request-intercept.spec.ts › should intercept multipart/form-data request body [unknown] +page/page-request-intercept.spec.ts › should intercept with post data override [fail] +page/page-request-intercept.spec.ts › should intercept with url override [fail] +page/page-request-intercept.spec.ts › should not follow redirects when maxRedirects is set to 0 in route.fetch [fail] +page/page-request-intercept.spec.ts › should override with defaults when intercepted response not provided [fail] +page/page-request-intercept.spec.ts › should support fulfill after intercept [fail] +page/page-request-intercept.spec.ts › should support timeout option in route.fetch [fail] +page/page-route.spec.ts › route.abort should throw if called twice [fail] +page/page-route.spec.ts › route.continue should throw if called twice [fail] +page/page-route.spec.ts › route.fallback should throw if called twice [fail] +page/page-route.spec.ts › route.fulfill should throw if called twice [fail] +page/page-route.spec.ts › should add Access-Control-Allow-Origin by default when fulfill [fail] +page/page-route.spec.ts › should allow null origin for about:blank [fail] +page/page-route.spec.ts › should be able to fetch dataURL and not fire dataURL requests [fail] +page/page-route.spec.ts › should be able to remove headers [fail] +page/page-route.spec.ts › should be abortable [fail] +page/page-route.spec.ts › should be abortable with custom error codes [fail] +page/page-route.spec.ts › should chain fallback w/ dynamic URL [fail] +page/page-route.spec.ts › should contain raw request header [fail] +page/page-route.spec.ts › should contain raw response header [fail] +page/page-route.spec.ts › should contain raw response header after fulfill [fail] +page/page-route.spec.ts › should contain referer header [fail] +page/page-route.spec.ts › should fail navigation when aborting main resource [fail] +page/page-route.spec.ts › should fulfill with redirect status [fail] +page/page-route.spec.ts › should intercept @smoke [fail] +page/page-route.spec.ts › should intercept main resource during cross-process navigation [fail] +page/page-route.spec.ts › should intercept when postData is more than 1MB [fail] +page/page-route.spec.ts › should navigate to URL with hash and and fire requests without hash [fail] +page/page-route.spec.ts › should navigate to dataURL and not fire dataURL requests [fail] +page/page-route.spec.ts › should not auto-intercept non-preflight OPTIONS [fail] +page/page-route.spec.ts › should not fulfill with redirect status [unknown] +page/page-route.spec.ts › should not throw "Invalid Interception Id" if the request was cancelled [fail] +page/page-route.spec.ts › should not throw if request was cancelled by the page [fail] +page/page-route.spec.ts › should not work with redirects [fail] +page/page-route.spec.ts › should override cookie header [pass] +page/page-route.spec.ts › should pause intercepted XHR until continue [fail] +page/page-route.spec.ts › should pause intercepted fetch request until continue [fail] +page/page-route.spec.ts › should properly return navigation response when URL has cookies [fail] +page/page-route.spec.ts › should reject cors with disallowed credentials [fail] +page/page-route.spec.ts › should respect cors overrides [fail] +page/page-route.spec.ts › should send referer [fail] +page/page-route.spec.ts › should show custom HTTP headers [fail] +page/page-route.spec.ts › should support ? in glob pattern [fail] +page/page-route.spec.ts › should support async handler w/ times [fail] +page/page-route.spec.ts › should support cors for different methods [fail] +page/page-route.spec.ts › should support cors with GET [fail] +page/page-route.spec.ts › should support cors with POST [fail] +page/page-route.spec.ts › should support cors with credentials [fail] +page/page-route.spec.ts › should support the times parameter with route matching [fail] +page/page-route.spec.ts › should unroute [fail] +page/page-route.spec.ts › should work if handler with times parameter was removed from another handler [fail] +page/page-route.spec.ts › should work when POST is redirected with 302 [fail] +page/page-route.spec.ts › should work when header manipulation headers with redirect [fail] +page/page-route.spec.ts › should work with badly encoded server [fail] +page/page-route.spec.ts › should work with custom referer headers [fail] +page/page-route.spec.ts › should work with encoded server [fail] +page/page-route.spec.ts › should work with encoded server - 2 [fail] +page/page-route.spec.ts › should work with equal requests [fail] +page/page-route.spec.ts › should work with redirect inside sync XHR [fail] +page/page-route.spec.ts › should work with redirects for subresources [fail] +page/page-screenshot.spec.ts › page screenshot animations › should capture screenshots after layoutchanges in transitionend event [fail] +page/page-screenshot.spec.ts › page screenshot animations › should fire transitionend for finite transitions [fail] +page/page-screenshot.spec.ts › page screenshot animations › should not capture css animations in shadow DOM [fail] +page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite css animation [fail] +page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite web animations [fail] +page/page-screenshot.spec.ts › page screenshot animations › should not capture pseudo element css animation [fail] +page/page-screenshot.spec.ts › page screenshot animations › should not change animation with playbackRate equal to 0 [fail] +page/page-screenshot.spec.ts › page screenshot animations › should resume infinite animations [fail] +page/page-screenshot.spec.ts › page screenshot animations › should stop animations that happen right before screenshot [fail] +page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for INfinite css animation [fail] +page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for css transitions [fail] +page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for finite css animation [fail] +page/page-screenshot.spec.ts › page screenshot animations › should wait for fonts to load [fail] +page/page-screenshot.spec.ts › page screenshot should capture css transform [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should hide elements based on attr [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should mask in parallel [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should mask inside iframe [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should mask multiple elements [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should remove elements based on attr [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should remove mask after screenshot [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should work [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should work when mask color is not pink #F0F [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe has stalled navigation [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe used document.open after a weird url [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should work with elementhandle [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should work with locator [fail] +page/page-screenshot.spec.ts › page screenshot › path option should create subdirectories [fail] +page/page-screenshot.spec.ts › page screenshot › path option should detect jpeg [fail] +page/page-screenshot.spec.ts › page screenshot › path option should throw for unsupported mime type [pass] +page/page-screenshot.spec.ts › page screenshot › path option should work [fail] +page/page-screenshot.spec.ts › page screenshot › quality option should throw for png [pass] +page/page-screenshot.spec.ts › page screenshot › should allow transparency [fail] +page/page-screenshot.spec.ts › page screenshot › should capture blinking caret if explicitly asked for [fail] +page/page-screenshot.spec.ts › page screenshot › should capture blinking caret in shadow dom [fail] +page/page-screenshot.spec.ts › page screenshot › should capture canvas changes [fail] +page/page-screenshot.spec.ts › page screenshot › should clip elements to the viewport [fail] +page/page-screenshot.spec.ts › page screenshot › should clip rect [fail] +page/page-screenshot.spec.ts › page screenshot › should clip rect with fullPage [fail] +page/page-screenshot.spec.ts › page screenshot › should not capture blinking caret by default [fail] +page/page-screenshot.spec.ts › page screenshot › should not issue resize event [fail] +page/page-screenshot.spec.ts › page screenshot › should prefer type over extension [fail] +page/page-screenshot.spec.ts › page screenshot › should render white background on jpeg file [fail] +page/page-screenshot.spec.ts › page screenshot › should restore viewport after fullPage screenshot [fail] +page/page-screenshot.spec.ts › page screenshot › should run in parallel [fail] +page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots [fail] +page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots and mask elements outside of it [fail] +page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots during navigation [fail] +page/page-screenshot.spec.ts › page screenshot › should throw on clip outside the viewport [pass] +page/page-screenshot.spec.ts › page screenshot › should work @smoke [fail] +page/page-screenshot.spec.ts › page screenshot › should work for canvas [fail] +page/page-screenshot.spec.ts › page screenshot › should work for translateZ [fail] +page/page-screenshot.spec.ts › page screenshot › should work for webgl [fail] +page/page-screenshot.spec.ts › page screenshot › should work while navigating [fail] +page/page-screenshot.spec.ts › page screenshot › should work with Array deleted [fail] +page/page-screenshot.spec.ts › page screenshot › should work with iframe in shadow [fail] +page/page-screenshot.spec.ts › page screenshot › should work with odd clip size on Retina displays [fail] +page/page-screenshot.spec.ts › page screenshot › zero quality option should throw for png [pass] +page/page-screenshot.spec.ts › should capture css box-shadow [fail] +page/page-screenshot.spec.ts › should throw if screenshot size is too large [fail] +page/page-select-option.spec.ts › input event.composed should be true and cross shadow dom boundary [pass] +page/page-select-option.spec.ts › should deselect all options when passed no values for a multiple select [pass] +page/page-select-option.spec.ts › should deselect all options when passed no values for a select without multiple [pass] +page/page-select-option.spec.ts › should fall back to selecting by label [pass] +page/page-select-option.spec.ts › should not allow null items [pass] +page/page-select-option.spec.ts › should not select single option when some attributes do not match [pass] +page/page-select-option.spec.ts › should not throw when select causes navigation [pass] +page/page-select-option.spec.ts › should respect event bubbling [pass] +page/page-select-option.spec.ts › should return [] on no matched values [pass] +page/page-select-option.spec.ts › should return [] on no values [pass] +page/page-select-option.spec.ts › should return an array of matched values [pass] +page/page-select-option.spec.ts › should return an array of one element when multiple is not set [pass] +page/page-select-option.spec.ts › should select multiple options [pass] +page/page-select-option.spec.ts › should select multiple options with attributes [pass] +page/page-select-option.spec.ts › should select only first option [pass] +page/page-select-option.spec.ts › should select single option @smoke [pass] +page/page-select-option.spec.ts › should select single option by handle [pass] +page/page-select-option.spec.ts › should select single option by index [pass] +page/page-select-option.spec.ts › should select single option by label [pass] +page/page-select-option.spec.ts › should select single option by multiple attributes [pass] +page/page-select-option.spec.ts › should select single option by value [pass] +page/page-select-option.spec.ts › should throw if passed wrong types [pass] +page/page-select-option.spec.ts › should throw when element is not a [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should generate title selector [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should handle first non-unique data-testid [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should handle second non-unique data-testid [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should ignore empty aria-label for candidate consideration [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should ignore empty data-test-id for candidate consideration [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should ignore empty role for candidate consideration [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should match in deep shadow dom [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should match in shadow dom [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not accept invalid role for candidate consideration [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not escape spaces inside named attr selectors [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not escape text with >> [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not improve guid text [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not prefer zero-sized button over inner span [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not use generated id [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not use input[value] [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should not use text for select [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prefer button over inner span [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prefer data-testid [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prefer role other input[type] [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prefer role=button over inner span [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › name [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › placeholder [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › role [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › type [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should properly join child selectors under nested ordinals [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should separate selectors by >> [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should trim long text [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should trim text [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should try to improve label text by shortening [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should try to improve role name [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should try to improve text [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should try to improve text by shortening [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use data-testid in strict errors [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp with a quote [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use nested ordinals [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use ordinal for identical nodes [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use parent text [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use readable id [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should use the name attributes for elements that can have it [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should work in dynamic iframes without navigation [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should work with tricky attributes [fail] -bidi-firefox-beta-library › library/selector-generator.spec.ts › selector generator › should work without CSS.escape [fail] -bidi-firefox-beta-library › library/selectors-register.spec.ts › should handle errors [pass] -bidi-firefox-beta-library › library/selectors-register.spec.ts › should not rely on engines working from the root [fail] -bidi-firefox-beta-library › library/selectors-register.spec.ts › should throw a nice error if the selector returns a bad value [pass] -bidi-firefox-beta-library › library/selectors-register.spec.ts › should work [fail] -bidi-firefox-beta-library › library/selectors-register.spec.ts › should work in main and isolated world [fail] -bidi-firefox-beta-library › library/selectors-register.spec.ts › should work when registered on global [fail] -bidi-firefox-beta-library › library/selectors-register.spec.ts › should work with path [fail] -bidi-firefox-beta-library › library/shared-worker.spec.ts › should survive shared worker restart [pass] -bidi-firefox-beta-library › library/signals.spec.ts › should close the browser when the node process closes [timeout] -bidi-firefox-beta-library › library/signals.spec.ts › should remove temp dir on process.exit [timeout] -bidi-firefox-beta-library › library/signals.spec.ts › signals › should close the browser on SIGHUP [timeout] -bidi-firefox-beta-library › library/signals.spec.ts › signals › should close the browser on SIGINT [timeout] -bidi-firefox-beta-library › library/signals.spec.ts › signals › should close the browser on SIGTERM [timeout] -bidi-firefox-beta-library › library/signals.spec.ts › signals › should kill the browser on SIGINT + SIGTERM [timeout] -bidi-firefox-beta-library › library/signals.spec.ts › signals › should kill the browser on SIGTERM + SIGINT [timeout] -bidi-firefox-beta-library › library/signals.spec.ts › signals › should kill the browser on double SIGINT and remove temp dir [timeout] -bidi-firefox-beta-library › library/signals.spec.ts › signals › should not prevent default SIGTERM handling after browser close [timeout] -bidi-firefox-beta-library › library/signals.spec.ts › signals › should report browser close signal 2 [timeout] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo check [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo click [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dblclick [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dispatchEvent [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo fill [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo focus [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo hover [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo press [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo selectOption [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo setInputFiles [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo type [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › ElementHandle SlowMo uncheck [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo check [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo click [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo dblclick [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo dispatchEvent [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo fill [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo focus [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo goto [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo hover [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo press [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo selectOption [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo setInputFiles [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo type [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Frame SlowMo uncheck [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo check [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo click [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo dblclick [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo dispatchEvent [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo fill [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo focus [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo goto [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo hover [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo press [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo reload [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo selectOption [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo setInputFiles [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo type [fail] -bidi-firefox-beta-library › library/slowmo.spec.ts › slowMo › Page SlowMo uncheck [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › empty adopted style sheets should not prevent node refs [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should capture frame [pass] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should capture iframe [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should capture iframe with srcdoc [pass] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should capture resources [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should capture snapshot target [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should collect multiple [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should collect on attribute change [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should collect snapshot [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should have a custom doctype [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should not navigate on anchor clicks [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should preserve BASE and other content on reset [pass] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should replace meta charset attr that specifies charset [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should replace meta content attr that specifies charset [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should respect CSSOM change through CSSGroupingRule [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should respect attr removal [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should respect inline CSSOM change [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should respect node removal [fail] -bidi-firefox-beta-library › library/snapshotter.spec.ts › snapshots › should respect subresource CSSOM change [fail] -bidi-firefox-beta-library › library/tap.spec.ts › locators › should send all of the correct events [fail] -bidi-firefox-beta-library › library/tap.spec.ts › should not send mouse events touchstart is canceled [fail] -bidi-firefox-beta-library › library/tap.spec.ts › should not send mouse events when touchend is canceled [fail] -bidi-firefox-beta-library › library/tap.spec.ts › should not wait for a navigation caused by a tap [fail] -bidi-firefox-beta-library › library/tap.spec.ts › should send all of the correct events @smoke [fail] -bidi-firefox-beta-library › library/tap.spec.ts › should send well formed touch points [fail] -bidi-firefox-beta-library › library/tap.spec.ts › should wait until an element is visible to tap it [fail] -bidi-firefox-beta-library › library/tap.spec.ts › should work with modifiers [fail] -bidi-firefox-beta-library › library/tap.spec.ts › trial run should not tap [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should allow hiding route actions [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should allow showing screenshots instead of snapshots [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should capture data-url svg iframe [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should capture iframe with sandbox attribute [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should complain about newer version of trace in old viewer [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should contain action info [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should contain adopted style sheets [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should display language-specific locators [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should display waitForLoadState even if did not wait for it [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should filter network requests by resource type [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should filter network requests by url [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should follow redirects [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should handle case where neither snapshots nor screenshots exist [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should handle file URIs [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should handle multiple headers [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should handle src=blob [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should have correct snapshot size [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should have correct stack trace [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should have network request overrides [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should have network request overrides 2 [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should have network requests [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should highlight expect failure [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should highlight locator in iframe while typing [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should highlight target element in shadow dom [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should highlight target elements [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should ignore 304 responses [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should include metainfo [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should include requestUrl in route.abort [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should include requestUrl in route.continue [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should include requestUrl in route.fulfill [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should not crash with broken locator [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open console errors on click [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open simple trace viewer [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open snapshot in new browser context [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open trace viewer on specific host [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open trace-1.31 [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open trace-1.37 [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open two trace files [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open two trace files of the same test [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should open two trace viewers [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should pick locator [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should pick locator in iframe [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should popup snapshot [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should prefer later resource request with the same method [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should preserve currentSrc [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should preserve noscript when javascript is disabled [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should register custom elements [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should remove noscript by default [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should remove noscript when javaScriptEnabled is set to true [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should render console [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should render network bars [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should restore control values [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should restore scroll positions [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should serve css without content-type [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should serve overridden request [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show action source [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show baseURL in metadata pane [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show correct request start time [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show empty trace viewer [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show font preview [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show null as a param [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show only one pointer with multilevel iframes [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show params and return value [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show similar actions from library-only trace [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should show snapshot URL [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should update highlight when typing [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should work with adopted style sheets and all: unset [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should work with adopted style sheets and replace/replaceSync [fail] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should work with meta CSP [unknown] -bidi-firefox-beta-library › library/trace-viewer.spec.ts › should work with nesting CSS selectors [unknown] -bidi-firefox-beta-library › library/tracing.spec.ts › should collect sources [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should collect trace with resources, but no js [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should collect two traces [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should exclude internal pages [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should export trace concurrently to second navigation [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should flush console events on tracing stop [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should hide internal stack frames [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should hide internal stack frames in expect [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should ignore iframes in head [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should include context API requests [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should include interrupted actions [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should not collect snapshots by default [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should not crash when browser closes mid-trace [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should not emit after w/o before [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should not flush console events [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should not hang for clicks that open dialogs [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should not include buffers in the trace [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should not include trace resources from the previous chunks [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should not stall on dialogs [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should not throw when stopping without start but not exporting [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should overwrite existing file [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should produce screencast frames crop [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should produce screencast frames fit [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should produce screencast frames scale [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should record global request trace [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should record network failures [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should respect tracesDir and name [fail] -bidi-firefox-beta-library › library/tracing.spec.ts › should store global request traces separately [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should store postData for global request [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should survive browser.close with auto-created traces dir [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should throw when starting with different options [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should throw when stopping without start [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should use the correct apiName for event driven callbacks [pass] -bidi-firefox-beta-library › library/tracing.spec.ts › should work with multiple chunks [fail] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › context.close should not wait for active route handlers on the owned pages [pass] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › context.unroute should not wait for pending handlers to complete [timeout] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › context.unrouteAll removes all handlers [fail] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › context.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [timeout] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › context.unrouteAll should wait for pending handlers to complete [timeout] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › page.close does not wait for active route handlers [fail] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › page.close should not wait for active route handlers on the owning context [pass] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › page.unroute should not wait for pending handlers to complete [pass] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › page.unrouteAll removes all routes [pass] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › page.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [pass] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › page.unrouteAll should wait for pending handlers to complete [fail] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › route.continue should not throw if page has been closed [pass] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › route.fallback should not throw if page has been closed [pass] -bidi-firefox-beta-library › library/unroute-behavior.spec.ts › route.fulfill should not throw if page has been closed [pass] -bidi-firefox-beta-library › library/video.spec.ts › screencast › saveAs should throw when no video frames [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should be 800x450 by default [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should be 800x600 with null viewport [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should capture css transformation [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should capture full viewport [fail] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should capture full viewport on hidpi [fail] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should capture navigation [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should capture static page [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should capture static page in persistent context @smoke [fail] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should continue recording main page after popup closes [fail] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should delete video [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should emulate an iphone [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should expose video path [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should expose video path blank page [fail] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should expose video path blank popup [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should not create video for internal pages [unknown] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should scale frames down to the requested size [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should throw if browser dies [fail] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should throw on browser close [fail] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should throw without recordVideo.dir [pass] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should use viewport scaled down to fit into 800x800 as default size [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should wait for video to finish if page was closed [fail] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should work for popups [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should work with old options [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should work with relative path for recordVideo.dir [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should work with video+trace [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › should work with weird screen resolution [timeout] -bidi-firefox-beta-library › library/video.spec.ts › screencast › videoSize should require videosPath [pass] -bidi-firefox-beta-library › library/video.spec.ts › should saveAs video [timeout] -bidi-firefox-beta-library › library/web-socket.spec.ts › should emit binary frame events [timeout] -bidi-firefox-beta-library › library/web-socket.spec.ts › should emit close events [timeout] -bidi-firefox-beta-library › library/web-socket.spec.ts › should emit error [timeout] -bidi-firefox-beta-library › library/web-socket.spec.ts › should emit frame events [timeout] -bidi-firefox-beta-library › library/web-socket.spec.ts › should filter out the close events when the server closes with a message [timeout] -bidi-firefox-beta-library › library/web-socket.spec.ts › should not have stray error events [timeout] -bidi-firefox-beta-library › library/web-socket.spec.ts › should pass self as argument to close event [timeout] -bidi-firefox-beta-library › library/web-socket.spec.ts › should reject waitForEvent on page close [timeout] -bidi-firefox-beta-library › library/web-socket.spec.ts › should reject waitForEvent on socket close [timeout] -bidi-firefox-beta-library › library/web-socket.spec.ts › should turn off when offline [unknown] -bidi-firefox-beta-library › library/web-socket.spec.ts › should work @smoke [pass] \ No newline at end of file +library/beforeunload.spec.ts › should access page after beforeunload [fail] +library/beforeunload.spec.ts › should be able to navigate away from page with beforeunload [fail] +library/beforeunload.spec.ts › should close browser with beforeunload page [fail] +library/beforeunload.spec.ts › should close browsercontext with beforeunload page [pass] +library/beforeunload.spec.ts › should close page with beforeunload listener [pass] +library/beforeunload.spec.ts › should not stall on evaluate when dismissing beforeunload [fail] +library/beforeunload.spec.ts › should run beforeunload if asked for @smoke [fail] +library/browser.spec.ts › should create new page @smoke [pass] +library/browser.spec.ts › should dispatch page.on(close) upon browser.close and reject evaluate [pass] +library/browser.spec.ts › should return browserType [pass] +library/browser.spec.ts › should throw upon second create new page [pass] +library/browser.spec.ts › version should work [pass] +library/browsercontext-add-cookies.spec.ts › should add cookies with empty value [pass] +library/browsercontext-add-cookies.spec.ts › should allow unnamed cookies [fail] +library/browsercontext-add-cookies.spec.ts › should be able to set unsecure cookie for HTTP website [pass] +library/browsercontext-add-cookies.spec.ts › should default to setting secure cookie for HTTPS websites [pass] +library/browsercontext-add-cookies.spec.ts › should have |expires| set to |-1| for session cookies [pass] +library/browsercontext-add-cookies.spec.ts › should isolate cookies between launches [pass] +library/browsercontext-add-cookies.spec.ts › should isolate cookies in browser contexts [pass] +library/browsercontext-add-cookies.spec.ts › should isolate persistent cookies [pass] +library/browsercontext-add-cookies.spec.ts › should isolate send cookie header [fail] +library/browsercontext-add-cookies.spec.ts › should isolate session cookies [pass] +library/browsercontext-add-cookies.spec.ts › should not block third party SameSite=None cookies [fail] +library/browsercontext-add-cookies.spec.ts › should not set a cookie on a data URL page [pass] +library/browsercontext-add-cookies.spec.ts › should not set a cookie with blank page URL [pass] +library/browsercontext-add-cookies.spec.ts › should roundtrip cookie [pass] +library/browsercontext-add-cookies.spec.ts › should send cookie header [pass] +library/browsercontext-add-cookies.spec.ts › should set a cookie on a different domain [pass] +library/browsercontext-add-cookies.spec.ts › should set a cookie with a path [pass] +library/browsercontext-add-cookies.spec.ts › should set cookie with reasonable defaults [fail] +library/browsercontext-add-cookies.spec.ts › should set cookies for a frame [pass] +library/browsercontext-add-cookies.spec.ts › should set multiple cookies [pass] +library/browsercontext-add-cookies.spec.ts › should set secure cookies on secure WebSocket [fail] +library/browsercontext-add-cookies.spec.ts › should work @smoke [pass] +library/browsercontext-add-cookies.spec.ts › should work with expires=-1 [fail] +library/browsercontext-add-cookies.spec.ts › should(not) block third party cookies [fail] +library/browsercontext-add-init-script.spec.ts › should work with browser context scripts @smoke [pass] +library/browsercontext-add-init-script.spec.ts › should work with browser context scripts for already created pages [pass] +library/browsercontext-add-init-script.spec.ts › should work with browser context scripts with a path [pass] +library/browsercontext-add-init-script.spec.ts › should work without navigation in popup [fail] +library/browsercontext-add-init-script.spec.ts › should work without navigation, after all bindings [fail] +library/browsercontext-base-url.spec.ts › should be able to match a URL relative to its given URL with urlMatcher [fail] +library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browser.newContext is passed to page.goto @smoke [pass] +library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browser.newPage is passed to page.goto [pass] +library/browsercontext-base-url.spec.ts › should construct a new URL when a baseURL in browserType.launchPersistentContext is passed to page.goto [fail] +library/browsercontext-base-url.spec.ts › should construct the URLs correctly when a baseURL with a trailing slash in browser.newPage is passed to page.goto [pass] +library/browsercontext-base-url.spec.ts › should construct the URLs correctly when a baseURL without a trailing slash in browser.newPage is passed to page.goto [pass] +library/browsercontext-base-url.spec.ts › should not construct a new URL when valid URLs are passed [pass] +library/browsercontext-base-url.spec.ts › should not construct a new URL with baseURL when a glob was used [pass] +library/browsercontext-basic.spec.ts › close() should abort waitForEvent [fail] +library/browsercontext-basic.spec.ts › close() should be callable twice [pass] +library/browsercontext-basic.spec.ts › close() should work for empty context [pass] +library/browsercontext-basic.spec.ts › default user agent [pass] +library/browsercontext-basic.spec.ts › setContent should work after disabling javascript [fail] +library/browsercontext-basic.spec.ts › should be able to click across browser contexts [fail] +library/browsercontext-basic.spec.ts › should be able to navigate after disabling javascript [pass] +library/browsercontext-basic.spec.ts › should close all belonging pages once closing context [fail] +library/browsercontext-basic.spec.ts › should create new context @smoke [pass] +library/browsercontext-basic.spec.ts › should disable javascript [fail] +library/browsercontext-basic.spec.ts › should emulate media in cross-process iframe [fail] +library/browsercontext-basic.spec.ts › should emulate media in popup [fail] +library/browsercontext-basic.spec.ts › should emulate navigator.onLine [fail] +library/browsercontext-basic.spec.ts › should isolate localStorage and cookies @smoke [pass] +library/browsercontext-basic.spec.ts › should make a copy of default viewport [pass] +library/browsercontext-basic.spec.ts › should not allow deviceScaleFactor with null viewport [pass] +library/browsercontext-basic.spec.ts › should not allow isMobile with null viewport [pass] +library/browsercontext-basic.spec.ts › should not hang on promises after disabling javascript [pass] +library/browsercontext-basic.spec.ts › should not report frameless pages on error [pass] +library/browsercontext-basic.spec.ts › should pass self to close event [pass] +library/browsercontext-basic.spec.ts › should propagate default viewport to the page [pass] +library/browsercontext-basic.spec.ts › should respect deviceScaleFactor [pass] +library/browsercontext-basic.spec.ts › should return all of the pages [pass] +library/browsercontext-basic.spec.ts › should work with offline option [fail] +library/browsercontext-basic.spec.ts › window.open should use parent tab context [pass] +library/browsercontext-clearcookies.spec.ts › should clear cookies [pass] +library/browsercontext-clearcookies.spec.ts › should isolate cookies when clearing [pass] +library/browsercontext-clearcookies.spec.ts › should remove cookies by domain [pass] +library/browsercontext-clearcookies.spec.ts › should remove cookies by name [pass] +library/browsercontext-clearcookies.spec.ts › should remove cookies by name and domain [pass] +library/browsercontext-clearcookies.spec.ts › should remove cookies by name regex [pass] +library/browsercontext-clearcookies.spec.ts › should remove cookies by path [pass] +library/browsercontext-cookies.spec.ts › should add cookies with an expiration [pass] +library/browsercontext-cookies.spec.ts › should be able to send third party cookies via an iframe [fail] +library/browsercontext-cookies.spec.ts › should get a cookie @smoke [fail] +library/browsercontext-cookies.spec.ts › should get a non-session cookie [fail] +library/browsercontext-cookies.spec.ts › should get cookies from multiple urls [pass] +library/browsercontext-cookies.spec.ts › should get multiple cookies [fail] +library/browsercontext-cookies.spec.ts › should parse cookie with large Max-Age correctly [fail] +library/browsercontext-cookies.spec.ts › should properly report "Lax" sameSite cookie [pass] +library/browsercontext-cookies.spec.ts › should properly report "Strict" sameSite cookie [pass] +library/browsercontext-cookies.spec.ts › should properly report httpOnly cookie [pass] +library/browsercontext-cookies.spec.ts › should return cookies with empty value [pass] +library/browsercontext-cookies.spec.ts › should return no cookies in pristine browser context [pass] +library/browsercontext-cookies.spec.ts › should return secure cookies based on HTTP(S) protocol [pass] +library/browsercontext-cookies.spec.ts › should support requestStorageAccess [fail] +library/browsercontext-cookies.spec.ts › should work with subdomain cookie [pass] +library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching hostname [pass] +library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching port [pass] +library/browsercontext-credentials.spec.ts › should fail with correct credentials and mismatching scheme [pass] +library/browsercontext-credentials.spec.ts › should fail with wrong credentials [timeout] +library/browsercontext-credentials.spec.ts › should fail without credentials [timeout] +library/browsercontext-credentials.spec.ts › should return resource body [fail] +library/browsercontext-credentials.spec.ts › should work with correct credentials @smoke [fail] +library/browsercontext-credentials.spec.ts › should work with correct credentials and matching origin [fail] +library/browsercontext-credentials.spec.ts › should work with correct credentials and matching origin case insensitive [fail] +library/browsercontext-credentials.spec.ts › should work with setHTTPCredentials [timeout] +library/browsercontext-csp.spec.ts › should bypass CSP header [fail] +library/browsercontext-csp.spec.ts › should bypass CSP in iframes as well [fail] +library/browsercontext-csp.spec.ts › should bypass CSP meta tag @smoke [fail] +library/browsercontext-csp.spec.ts › should bypass after cross-process navigation [fail] +library/browsercontext-device.spec.ts › device › should emulate viewport and screen size [fail] +library/browsercontext-device.spec.ts › device › should emulate viewport without screen size [fail] +library/browsercontext-device.spec.ts › device › should reset scroll top after a navigation [pass] +library/browsercontext-device.spec.ts › device › should scroll to a precise position with mobile scale [pass] +library/browsercontext-device.spec.ts › device › should scroll to click [pass] +library/browsercontext-device.spec.ts › device › should scroll twice when emulated [fail] +library/browsercontext-device.spec.ts › device › should support clicking [pass] +library/browsercontext-device.spec.ts › device › should work @smoke [fail] +library/browsercontext-dsf.spec.ts › should fetch hidpi assets [fail] +library/browsercontext-dsf.spec.ts › should fetch lodpi assets @smoke [pass] +library/browsercontext-events.spec.ts › console event should work @smoke [pass] +library/browsercontext-events.spec.ts › console event should work in immediately closed popup [fail] +library/browsercontext-events.spec.ts › console event should work in popup [pass] +library/browsercontext-events.spec.ts › console event should work in popup 2 [fail] +library/browsercontext-events.spec.ts › dialog event should work @smoke [pass] +library/browsercontext-events.spec.ts › dialog event should work in immediately closed popup [pass] +library/browsercontext-events.spec.ts › dialog event should work in popup [pass] +library/browsercontext-events.spec.ts › dialog event should work in popup 2 [fail] +library/browsercontext-events.spec.ts › dialog event should work with inline script tag [fail] +library/browsercontext-events.spec.ts › weberror event should work [fail] +library/browsercontext-expose-function.spec.ts › expose binding should work [fail] +library/browsercontext-expose-function.spec.ts › exposeBindingHandle should work [fail] +library/browsercontext-expose-function.spec.ts › should be callable from-inside addInitScript [fail] +library/browsercontext-expose-function.spec.ts › should throw for duplicate registrations [pass] +library/browsercontext-expose-function.spec.ts › should work [fail] +library/browsercontext-expose-function.spec.ts › should work with CSP [fail] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail if response content-length header is missing (br) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should not fail with chunked responses (without Content-Length header) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › br decompression › should support decompression [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail if response content-length header is missing (deflate) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should not fail with chunked responses (without Content-Length header) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › deflate decompression › should support decompression [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail if response content-length header is missing (gzip) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with an empty response with content-length header (Z_BUF_ERROR) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with an empty response without content-length header (Z_BUF_ERROR) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should not fail with chunked responses (without Content-Length header) [pass] +library/browsercontext-fetch-algorithms.spec.ts › algorithms › gzip decompression › should support decompression [pass] +library/browsercontext-fetch-happy-eyeballs.spec.ts › get should work [pass] +library/browsercontext-fetch-happy-eyeballs.spec.ts › get should work on request fixture [pass] +library/browsercontext-fetch-happy-eyeballs.spec.ts › https post should work with ignoreHTTPSErrors option [pass] +library/browsercontext-fetch-happy-eyeballs.spec.ts › should work with ip6 and port as the host [pass] +library/browsercontext-fetch.spec.ts › context request should export same storage state as context [pass] +library/browsercontext-fetch.spec.ts › delete should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › delete should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › delete should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › delete should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › delete should support post data [pass] +library/browsercontext-fetch.spec.ts › deleteshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › fetch should not throw on long set-cookie value [pass] +library/browsercontext-fetch.spec.ts › fetch should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › fetch should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › fetch should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › fetch should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › fetch should work [pass] +library/browsercontext-fetch.spec.ts › fetchshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › get should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › get should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › get should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › get should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › get should support post data [pass] +library/browsercontext-fetch.spec.ts › get should work @smoke [pass] +library/browsercontext-fetch.spec.ts › getshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › head should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › head should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › head should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › head should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › head should support post data [pass] +library/browsercontext-fetch.spec.ts › headshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › patch should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › patch should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › patch should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › patch should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › patch should support post data [pass] +library/browsercontext-fetch.spec.ts › patchshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › post should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › post should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › post should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › post should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › post should support post data [pass] +library/browsercontext-fetch.spec.ts › postshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › put should support failOnStatusCode [pass] +library/browsercontext-fetch.spec.ts › put should support params passed as URLSearchParams [pass] +library/browsercontext-fetch.spec.ts › put should support params passed as object [pass] +library/browsercontext-fetch.spec.ts › put should support params passed as string [pass] +library/browsercontext-fetch.spec.ts › put should support post data [pass] +library/browsercontext-fetch.spec.ts › putshould support ignoreHTTPSErrors option [pass] +library/browsercontext-fetch.spec.ts › should abort requests when browser context closes [pass] +library/browsercontext-fetch.spec.ts › should accept bool and numeric params [pass] +library/browsercontext-fetch.spec.ts › should add cookies from Set-Cookie header [pass] +library/browsercontext-fetch.spec.ts › should add default headers [fail] +library/browsercontext-fetch.spec.ts › should add default headers to redirects [pass] +library/browsercontext-fetch.spec.ts › should add session cookies to request [pass] +library/browsercontext-fetch.spec.ts › should allow to override default headers [pass] +library/browsercontext-fetch.spec.ts › should dispose [pass] +library/browsercontext-fetch.spec.ts › should dispose when context closes [pass] +library/browsercontext-fetch.spec.ts › should encode to application/json by default [pass] +library/browsercontext-fetch.spec.ts › should follow redirects [pass] +library/browsercontext-fetch.spec.ts › should follow redirects correctly when Location header contains UTF-8 characters [pass] +library/browsercontext-fetch.spec.ts › should handle cookies on redirects [pass] +library/browsercontext-fetch.spec.ts › should inherit ignoreHTTPSErrors from context [pass] +library/browsercontext-fetch.spec.ts › should not add context cookie if cookie header passed as a parameter [pass] +library/browsercontext-fetch.spec.ts › should not hang on a brotli encoded Range request [pass] +library/browsercontext-fetch.spec.ts › should not lose body while handling Set-Cookie header [pass] +library/browsercontext-fetch.spec.ts › should not work after context dispose [pass] +library/browsercontext-fetch.spec.ts › should not work after dispose [pass] +library/browsercontext-fetch.spec.ts › should override request parameters [pass] +library/browsercontext-fetch.spec.ts › should preserve cookie order from Set-Cookie header [pass] +library/browsercontext-fetch.spec.ts › should propagate custom headers with redirects [pass] +library/browsercontext-fetch.spec.ts › should propagate extra http headers with redirects [fail] +library/browsercontext-fetch.spec.ts › should remove cookie with expires far in the past [pass] +library/browsercontext-fetch.spec.ts › should remove cookie with negative max-age [pass] +library/browsercontext-fetch.spec.ts › should resolve url relative to baseURL [pass] +library/browsercontext-fetch.spec.ts › should respect timeout after redirects [pass] +library/browsercontext-fetch.spec.ts › should retry on ECONNRESET [pass] +library/browsercontext-fetch.spec.ts › should return error with wrong credentials [pass] +library/browsercontext-fetch.spec.ts › should return raw headers [pass] +library/browsercontext-fetch.spec.ts › should send content-length [pass] +library/browsercontext-fetch.spec.ts › should send secure cookie over http for localhost [pass] +library/browsercontext-fetch.spec.ts › should serialize data to json regardless of content-type [pass] +library/browsercontext-fetch.spec.ts › should set domain=localhost cookie [pass] +library/browsercontext-fetch.spec.ts › should support HTTPCredentials.send for browser.newPage [pass] +library/browsercontext-fetch.spec.ts › should support HTTPCredentials.send for newContext [pass] +library/browsercontext-fetch.spec.ts › should support SameSite cookie attribute over https [pass] +library/browsercontext-fetch.spec.ts › should support a timeout of 0 [pass] +library/browsercontext-fetch.spec.ts › should support application/x-www-form-urlencoded [pass] +library/browsercontext-fetch.spec.ts › should support brotli compression [pass] +library/browsercontext-fetch.spec.ts › should support cookie with empty value [pass] +library/browsercontext-fetch.spec.ts › should support deflate compression [pass] +library/browsercontext-fetch.spec.ts › should support gzip compression [pass] +library/browsercontext-fetch.spec.ts › should support https [pass] +library/browsercontext-fetch.spec.ts › should support multipart/form-data [pass] +library/browsercontext-fetch.spec.ts › should support multipart/form-data and keep the order [pass] +library/browsercontext-fetch.spec.ts › should support multipart/form-data with ReadStream values [pass] +library/browsercontext-fetch.spec.ts › should support repeating names in multipart/form-data [unknown] +library/browsercontext-fetch.spec.ts › should support set-cookie with SameSite and without Secure attribute over HTTP [pass] +library/browsercontext-fetch.spec.ts › should support timeout option [pass] +library/browsercontext-fetch.spec.ts › should throw informative error on corrupted brotli body [pass] +library/browsercontext-fetch.spec.ts › should throw informative error on corrupted deflate body [pass] +library/browsercontext-fetch.spec.ts › should throw informative error on corrupted gzip body [pass] +library/browsercontext-fetch.spec.ts › should throw nice error on unsupported data type [pass] +library/browsercontext-fetch.spec.ts › should throw on invalid header value [pass] +library/browsercontext-fetch.spec.ts › should throw on network error [pass] +library/browsercontext-fetch.spec.ts › should throw on network error after redirect [pass] +library/browsercontext-fetch.spec.ts › should throw on network error when sending body [pass] +library/browsercontext-fetch.spec.ts › should throw on network error when sending body after redirect [pass] +library/browsercontext-fetch.spec.ts › should throw on non-http(s) protocol [pass] +library/browsercontext-fetch.spec.ts › should update host header on redirect [pass] +library/browsercontext-fetch.spec.ts › should work with connectOverCDP [unknown] +library/browsercontext-fetch.spec.ts › should work with http credentials [pass] +library/browsercontext-fetch.spec.ts › should work with setHTTPCredentials [pass] +library/browsercontext-har.spec.ts › by default should abort requests not found in har [pass] +library/browsercontext-har.spec.ts › context.unrouteAll should stop context.routeFromHAR [fail] +library/browsercontext-har.spec.ts › fallback:continue should continue requests on bad har [pass] +library/browsercontext-har.spec.ts › fallback:continue should continue when not found in har [pass] +library/browsercontext-har.spec.ts › newPage should fulfill from har, matching the method and following redirects [pass] +library/browsercontext-har.spec.ts › page.unrouteAll should stop page.routeFromHAR [pass] +library/browsercontext-har.spec.ts › should apply overrides before routing from har [pass] +library/browsercontext-har.spec.ts › should change document URL after redirected navigation [fail] +library/browsercontext-har.spec.ts › should change document URL after redirected navigation on click [fail] +library/browsercontext-har.spec.ts › should context.routeFromHAR, matching the method and following redirects [pass] +library/browsercontext-har.spec.ts › should disambiguate by header [fail] +library/browsercontext-har.spec.ts › should fulfill from har with content in a file [pass] +library/browsercontext-har.spec.ts › should goBack to redirected navigation [fail] +library/browsercontext-har.spec.ts › should goForward to redirected navigation [timeout] +library/browsercontext-har.spec.ts › should ignore aborted requests [pass] +library/browsercontext-har.spec.ts › should ignore boundary when matching multipart/form-data body [timeout] +library/browsercontext-har.spec.ts › should only context.routeFromHAR requests matching url filter [pass] +library/browsercontext-har.spec.ts › should only handle requests matching url filter [pass] +library/browsercontext-har.spec.ts › should only page.routeFromHAR requests matching url filter [fail] +library/browsercontext-har.spec.ts › should page.routeFromHAR, matching the method and following redirects [pass] +library/browsercontext-har.spec.ts › should produce extracted zip [fail] +library/browsercontext-har.spec.ts › should record overridden requests to har [timeout] +library/browsercontext-har.spec.ts › should reload redirected navigation [fail] +library/browsercontext-har.spec.ts › should round-trip extracted har.zip [fail] +library/browsercontext-har.spec.ts › should round-trip har with postData [fail] +library/browsercontext-har.spec.ts › should round-trip har.zip [fail] +library/browsercontext-har.spec.ts › should support regex filter [pass] +library/browsercontext-har.spec.ts › should update extracted har.zip for page [fail] +library/browsercontext-har.spec.ts › should update har.zip for context [fail] +library/browsercontext-har.spec.ts › should update har.zip for page [fail] +library/browsercontext-har.spec.ts › should update har.zip for page with different options [fail] +library/browsercontext-locale.spec.ts › should affect Intl.DateTimeFormat().resolvedOptions().locale [fail] +library/browsercontext-locale.spec.ts › should affect accept-language header @smoke [fail] +library/browsercontext-locale.spec.ts › should affect navigator.language [fail] +library/browsercontext-locale.spec.ts › should affect navigator.language in popups [fail] +library/browsercontext-locale.spec.ts › should be isolated between contexts [fail] +library/browsercontext-locale.spec.ts › should format date [fail] +library/browsercontext-locale.spec.ts › should format number [fail] +library/browsercontext-locale.spec.ts › should format number in popups [fail] +library/browsercontext-locale.spec.ts › should format number in workers [fail] +library/browsercontext-locale.spec.ts › should not change default locale in another context [fail] +library/browsercontext-locale.spec.ts › should work for multiple pages sharing same process [timeout] +library/browsercontext-network-event.spec.ts › BrowserContext.Events.Request [fail] +library/browsercontext-network-event.spec.ts › BrowserContext.Events.RequestFailed [fail] +library/browsercontext-network-event.spec.ts › BrowserContext.Events.RequestFinished [pass] +library/browsercontext-network-event.spec.ts › BrowserContext.Events.Response [fail] +library/browsercontext-network-event.spec.ts › should fire events in proper order [pass] +library/browsercontext-network-event.spec.ts › should not fire events for favicon or favicon redirects [unknown] +library/browsercontext-page-event.spec.ts › should fire page lifecycle events [fail] +library/browsercontext-page-event.spec.ts › should have about:blank for empty url with domcontentloaded [timeout] +library/browsercontext-page-event.spec.ts › should have about:blank url with domcontentloaded [pass] +library/browsercontext-page-event.spec.ts › should have an opener [fail] +library/browsercontext-page-event.spec.ts › should have url [fail] +library/browsercontext-page-event.spec.ts › should have url after domcontentloaded [pass] +library/browsercontext-page-event.spec.ts › should not crash while redirecting of original request was missed [pass] +library/browsercontext-page-event.spec.ts › should not hang on ctrl-click during provisional load [fail] +library/browsercontext-page-event.spec.ts › should report initialized pages [fail] +library/browsercontext-page-event.spec.ts › should report when a new page is created and closed [fail] +library/browsercontext-page-event.spec.ts › should work with Ctrl-clicking [fail] +library/browsercontext-page-event.spec.ts › should work with Shift-clicking [fail] +library/browsercontext-pages.spec.ts › frame.focus should work multiple times [fail] +library/browsercontext-pages.spec.ts › page.context should return the correct instance [pass] +library/browsercontext-pages.spec.ts › should click the button with deviceScaleFactor set [fail] +library/browsercontext-pages.spec.ts › should click the button with offset with page scale [pass] +library/browsercontext-pages.spec.ts › should click with disabled javascript [pass] +library/browsercontext-pages.spec.ts › should keep selection in multiple pages [fail] +library/browsercontext-pages.spec.ts › should not be visible in context.pages [fail] +library/browsercontext-pages.spec.ts › should not hang with touch-enabled viewports [pass] +library/browsercontext-pages.spec.ts › should not leak listeners during navigation of 20 pages [pass] +library/browsercontext-pages.spec.ts › should return bounding box with page scale [pass] +library/browsercontext-proxy.spec.ts › does launch without a port [pass] +library/browsercontext-proxy.spec.ts › should authenticate [fail] +library/browsercontext-proxy.spec.ts › should authenticate with empty password [fail] +library/browsercontext-proxy.spec.ts › should exclude patterns [fail] +library/browsercontext-proxy.spec.ts › should isolate proxy credentials between contexts [fail] +library/browsercontext-proxy.spec.ts › should isolate proxy credentials between contexts on navigation [fail] +library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › link-local [fail] +library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › localhost [fail] +library/browsercontext-proxy.spec.ts › should proxy local network requests › by default › loopback address [fail] +library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › link-local [fail] +library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › localhost [fail] +library/browsercontext-proxy.spec.ts › should proxy local network requests › with other bypasses › loopback address [fail] +library/browsercontext-proxy.spec.ts › should set cookie for top-level domain [pass] +library/browsercontext-proxy.spec.ts › should throw for bad server value [pass] +library/browsercontext-proxy.spec.ts › should throw for socks4 authentication [pass] +library/browsercontext-proxy.spec.ts › should throw for socks5 authentication [pass] +library/browsercontext-proxy.spec.ts › should use ipv6 proxy [fail] +library/browsercontext-proxy.spec.ts › should use proxy [fail] +library/browsercontext-proxy.spec.ts › should use proxy for https urls [timeout] +library/browsercontext-proxy.spec.ts › should use proxy for second page [fail] +library/browsercontext-proxy.spec.ts › should use proxy twice [fail] +library/browsercontext-proxy.spec.ts › should use socks proxy [fail] +library/browsercontext-proxy.spec.ts › should use socks proxy in second page [fail] +library/browsercontext-proxy.spec.ts › should work when passing the proxy only on the context level [fail] +library/browsercontext-proxy.spec.ts › should work with IP:PORT notion [fail] +library/browsercontext-reuse.spec.ts › should continue issuing events after closing the reused page [pass] +library/browsercontext-reuse.spec.ts › should ignore binding from beforeunload [fail] +library/browsercontext-reuse.spec.ts › should not cache resources [timeout] +library/browsercontext-reuse.spec.ts › should re-add binding after reset [fail] +library/browsercontext-reuse.spec.ts › should reset mouse position [fail] +library/browsercontext-reuse.spec.ts › should reset serviceworker [pass] +library/browsercontext-reuse.spec.ts › should reset serviceworker that hangs in importScripts [pass] +library/browsercontext-reuse.spec.ts › should reset tracing [pass] +library/browsercontext-reuse.spec.ts › should work with clock emulation [pass] +library/browsercontext-route.spec.ts › should chain fallback [fail] +library/browsercontext-route.spec.ts › should chain fallback into page [pass] +library/browsercontext-route.spec.ts › should chain fallback w/ dynamic URL [fail] +library/browsercontext-route.spec.ts › should fall back async [fail] +library/browsercontext-route.spec.ts › should fall back to context.route [fail] +library/browsercontext-route.spec.ts › should ignore secure Set-Cookie header for insecure requests [pass] +library/browsercontext-route.spec.ts › should intercept [fail] +library/browsercontext-route.spec.ts › should not chain abort [pass] +library/browsercontext-route.spec.ts › should not chain fulfill [fail] +library/browsercontext-route.spec.ts › should overwrite post body with empty string [fail] +library/browsercontext-route.spec.ts › should support Set-Cookie header [fail] +library/browsercontext-route.spec.ts › should support async handler w/ times [fail] +library/browsercontext-route.spec.ts › should support the times parameter with route matching [fail] +library/browsercontext-route.spec.ts › should unroute [fail] +library/browsercontext-route.spec.ts › should use Set-Cookie header in future requests [fail] +library/browsercontext-route.spec.ts › should work if handler with times parameter was removed from another handler [fail] +library/browsercontext-route.spec.ts › should work with ignoreHTTPSErrors [fail] +library/browsercontext-route.spec.ts › should yield to page.route [fail] +library/browsercontext-service-worker-policy.spec.ts › block › blocks service worker registration [timeout] +library/browsercontext-service-worker-policy.spec.ts › block › should not throw error on about:blank [pass] +library/browsercontext-service-worker-policy.spec.ts › should allow service workers by default [pass] +library/browsercontext-set-extra-http-headers.spec.ts › should override extra headers from browser context [fail] +library/browsercontext-set-extra-http-headers.spec.ts › should throw for non-string header values [pass] +library/browsercontext-storage-state.spec.ts › should capture cookies [pass] +library/browsercontext-storage-state.spec.ts › should capture local storage [fail] +library/browsercontext-storage-state.spec.ts › should handle malformed file [pass] +library/browsercontext-storage-state.spec.ts › should handle missing file [pass] +library/browsercontext-storage-state.spec.ts › should not emit events about internal page [fail] +library/browsercontext-storage-state.spec.ts › should not restore localStorage twice [pass] +library/browsercontext-storage-state.spec.ts › should round-trip through the file [pass] +library/browsercontext-storage-state.spec.ts › should serialize storageState with lone surrogates [pass] +library/browsercontext-storage-state.spec.ts › should set local storage [fail] +library/browsercontext-storage-state.spec.ts › should work when service worker is intefering [pass] +library/browsercontext-strict.spec.ts › should not fail page.textContent in non-strict mode [fail] +library/browsercontext-strict.spec.ts › strict context mode › should fail page.click in strict mode [fail] +library/browsercontext-strict.spec.ts › strict context mode › should fail page.textContent in strict mode [fail] +library/browsercontext-strict.spec.ts › strict context mode › should opt out of strict mode [fail] +library/browsercontext-timezone-id.spec.ts › should affect Intl.DateTimeFormat().resolvedOptions().timeZone [fail] +library/browsercontext-timezone-id.spec.ts › should not change default timezone in another context [fail] +library/browsercontext-timezone-id.spec.ts › should throw for invalid timezone IDs when creating pages [fail] +library/browsercontext-timezone-id.spec.ts › should work @smoke [fail] +library/browsercontext-timezone-id.spec.ts › should work for multiple pages sharing same process [timeout] +library/browsercontext-user-agent.spec.ts › custom user agent for download [fail] +library/browsercontext-user-agent.spec.ts › should emulate device user-agent [fail] +library/browsercontext-user-agent.spec.ts › should make a copy of default options [fail] +library/browsercontext-user-agent.spec.ts › should work [fail] +library/browsercontext-user-agent.spec.ts › should work for navigator.userAgentData and sec-ch-ua headers [unknown] +library/browsercontext-user-agent.spec.ts › should work for subframes [fail] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › default mobile viewports to 980 width [fail] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › mouse should work with mobile viewports and cross process navigations [pass] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › respect meta viewport tag [pass] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should be detectable [fail] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should detect touch when applying viewport with touches [fail] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should emulate the hover media feature [fail] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should fire orientationchange event [timeout] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should scroll when emulating a mobile viewport [fail] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support landscape emulation [pass] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support mobile emulation [pass] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support touch emulation [fail] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › should support window.orientation emulation [fail] +library/browsercontext-viewport-mobile.spec.ts › mobile viewport › view scale should reset after navigation [pass] +library/browsercontext-viewport.spec.ts › WebKit Windows headed should have a minimal viewport [unknown] +library/browsercontext-viewport.spec.ts › should be able to get correct orientation angle on non-mobile devices [fail] +library/browsercontext-viewport.spec.ts › should drag with high dpi [fail] +library/browsercontext-viewport.spec.ts › should emulate availWidth and availHeight [fail] +library/browsercontext-viewport.spec.ts › should emulate device height [fail] +library/browsercontext-viewport.spec.ts › should emulate device width [fail] +library/browsercontext-viewport.spec.ts › should get the proper default viewport size [pass] +library/browsercontext-viewport.spec.ts › should not have touch by default [pass] +library/browsercontext-viewport.spec.ts › should report null viewportSize when given null viewport [pass] +library/browsercontext-viewport.spec.ts › should return correct outerWidth and outerHeight [pass] +library/browsercontext-viewport.spec.ts › should set both screen and viewport options [fail] +library/browsercontext-viewport.spec.ts › should set the proper viewport size [pass] +library/browsercontext-viewport.spec.ts › should set window.screen.orientation.type for mobile devices [fail] +library/browsercontext-viewport.spec.ts › should support touch with null viewport [fail] +library/browsercontext-viewport.spec.ts › should throw on tap if hasTouch is not enabled [fail] +library/browsertype-basic.spec.ts › browserType.executablePath should work [unknown] +library/browsertype-basic.spec.ts › browserType.name should work [fail] +library/browsertype-basic.spec.ts › should throw when trying to connect with not-chromium [pass] +library/browsertype-connect.spec.ts › launchServer only › should be able to reconnect to a browser 12 times without warnings [timeout] +library/browsertype-connect.spec.ts › launchServer only › should properly disconnect when connection closes from the server side [timeout] +library/browsertype-connect.spec.ts › launchServer only › should work with cluster [timeout] +library/browsertype-connect.spec.ts › launchServer › disconnected event should be emitted when browser is closed or server is closed [timeout] +library/browsertype-connect.spec.ts › launchServer › disconnected event should have browser as argument [timeout] +library/browsertype-connect.spec.ts › launchServer › setInputFiles should preserve lastModified timestamp [timeout] +library/browsertype-connect.spec.ts › launchServer › should be able to connect 20 times to a single server without warnings [timeout] +library/browsertype-connect.spec.ts › launchServer › should be able to connect two browsers at the same time [timeout] +library/browsertype-connect.spec.ts › launchServer › should be able to connect when the wsEndpoint is passed as an option [timeout] +library/browsertype-connect.spec.ts › launchServer › should be able to reconnect to a browser [timeout] +library/browsertype-connect.spec.ts › launchServer › should be able to visit ipv6 [timeout] +library/browsertype-connect.spec.ts › launchServer › should be able to visit ipv6 through localhost [timeout] +library/browsertype-connect.spec.ts › launchServer › should connect over http [timeout] +library/browsertype-connect.spec.ts › launchServer › should connect over wss [timeout] +library/browsertype-connect.spec.ts › launchServer › should emit close events on pages and contexts [timeout] +library/browsertype-connect.spec.ts › launchServer › should error when saving download after deletion [timeout] +library/browsertype-connect.spec.ts › launchServer › should filter launch options [timeout] +library/browsertype-connect.spec.ts › launchServer › should fulfill with global fetch result [timeout] +library/browsertype-connect.spec.ts › launchServer › should handle exceptions during connect [timeout] +library/browsertype-connect.spec.ts › launchServer › should ignore page.pause when headed [timeout] +library/browsertype-connect.spec.ts › launchServer › should not throw on close after disconnect [timeout] +library/browsertype-connect.spec.ts › launchServer › should print HTTP error [pass] +library/browsertype-connect.spec.ts › launchServer › should print custom ws close error [pass] +library/browsertype-connect.spec.ts › launchServer › should print ws error [pass] +library/browsertype-connect.spec.ts › launchServer › should properly disconnect when connection closes from the client side [timeout] +library/browsertype-connect.spec.ts › launchServer › should record trace with sources [timeout] +library/browsertype-connect.spec.ts › launchServer › should reject navigation when browser closes [timeout] +library/browsertype-connect.spec.ts › launchServer › should reject waitForEvent before browser.close finishes [timeout] +library/browsertype-connect.spec.ts › launchServer › should reject waitForEvent before browser.onDisconnect fires [timeout] +library/browsertype-connect.spec.ts › launchServer › should reject waitForSelector when browser closes [timeout] +library/browsertype-connect.spec.ts › launchServer › should respect selectors [timeout] +library/browsertype-connect.spec.ts › launchServer › should save download [timeout] +library/browsertype-connect.spec.ts › launchServer › should save har [timeout] +library/browsertype-connect.spec.ts › launchServer › should saveAs videos from remote browser [timeout] +library/browsertype-connect.spec.ts › launchServer › should send default User-Agent and X-Playwright-Browser headers with connect request [fail] +library/browsertype-connect.spec.ts › launchServer › should send extra headers with connect request [pass] +library/browsertype-connect.spec.ts › launchServer › should set the browser connected state [timeout] +library/browsertype-connect.spec.ts › launchServer › should support slowmo option [timeout] +library/browsertype-connect.spec.ts › launchServer › should terminate network waiters [timeout] +library/browsertype-connect.spec.ts › launchServer › should throw when calling waitForNavigation after disconnect [timeout] +library/browsertype-connect.spec.ts › launchServer › should throw when used after isConnected returns false [timeout] +library/browsertype-connect.spec.ts › launchServer › should timeout in connect while connecting [pass] +library/browsertype-connect.spec.ts › launchServer › should timeout in socket while connecting [pass] +library/browsertype-connect.spec.ts › launchServer › should upload large file [timeout] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should check proxy pattern on the client [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should forward non-forwarded requests [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should lead to the error page for forwarded requests when the connection is refused [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy based on the pattern [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy ipv6 localhost requests @smoke [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy local.playwright requests [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy localhost requests @smoke [unknown] +library/browsertype-connect.spec.ts › launchServer › socks proxy › should proxy localhost requests from fetch api [unknown] +library/browsertype-connect.spec.ts › run-server › disconnected event should be emitted when browser is closed or server is closed [fail] +library/browsertype-connect.spec.ts › run-server › disconnected event should have browser as argument [fail] +library/browsertype-connect.spec.ts › run-server › setInputFiles should preserve lastModified timestamp [fail] +library/browsertype-connect.spec.ts › run-server › should be able to connect 20 times to a single server without warnings [fail] +library/browsertype-connect.spec.ts › run-server › should be able to connect two browsers at the same time [fail] +library/browsertype-connect.spec.ts › run-server › should be able to connect when the wsEndpoint is passed as an option [fail] +library/browsertype-connect.spec.ts › run-server › should be able to reconnect to a browser [fail] +library/browsertype-connect.spec.ts › run-server › should be able to visit ipv6 [fail] +library/browsertype-connect.spec.ts › run-server › should be able to visit ipv6 through localhost [fail] +library/browsertype-connect.spec.ts › run-server › should connect over http [fail] +library/browsertype-connect.spec.ts › run-server › should connect over wss [fail] +library/browsertype-connect.spec.ts › run-server › should emit close events on pages and contexts [fail] +library/browsertype-connect.spec.ts › run-server › should error when saving download after deletion [fail] +library/browsertype-connect.spec.ts › run-server › should filter launch options [fail] +library/browsertype-connect.spec.ts › run-server › should fulfill with global fetch result [fail] +library/browsertype-connect.spec.ts › run-server › should handle exceptions during connect [pass] +library/browsertype-connect.spec.ts › run-server › should ignore page.pause when headed [fail] +library/browsertype-connect.spec.ts › run-server › should not throw on close after disconnect [fail] +library/browsertype-connect.spec.ts › run-server › should print HTTP error [pass] +library/browsertype-connect.spec.ts › run-server › should print custom ws close error [pass] +library/browsertype-connect.spec.ts › run-server › should print ws error [pass] +library/browsertype-connect.spec.ts › run-server › should properly disconnect when connection closes from the client side [fail] +library/browsertype-connect.spec.ts › run-server › should record trace with sources [fail] +library/browsertype-connect.spec.ts › run-server › should reject navigation when browser closes [fail] +library/browsertype-connect.spec.ts › run-server › should reject waitForEvent before browser.close finishes [fail] +library/browsertype-connect.spec.ts › run-server › should reject waitForEvent before browser.onDisconnect fires [fail] +library/browsertype-connect.spec.ts › run-server › should reject waitForSelector when browser closes [fail] +library/browsertype-connect.spec.ts › run-server › should respect selectors [fail] +library/browsertype-connect.spec.ts › run-server › should save download [fail] +library/browsertype-connect.spec.ts › run-server › should save har [fail] +library/browsertype-connect.spec.ts › run-server › should saveAs videos from remote browser [fail] +library/browsertype-connect.spec.ts › run-server › should send default User-Agent and X-Playwright-Browser headers with connect request [fail] +library/browsertype-connect.spec.ts › run-server › should send extra headers with connect request [pass] +library/browsertype-connect.spec.ts › run-server › should set the browser connected state [fail] +library/browsertype-connect.spec.ts › run-server › should support slowmo option [fail] +library/browsertype-connect.spec.ts › run-server › should terminate network waiters [fail] +library/browsertype-connect.spec.ts › run-server › should throw when calling waitForNavigation after disconnect [fail] +library/browsertype-connect.spec.ts › run-server › should throw when used after isConnected returns false [fail] +library/browsertype-connect.spec.ts › run-server › should timeout in connect while connecting [pass] +library/browsertype-connect.spec.ts › run-server › should timeout in socket while connecting [pass] +library/browsertype-connect.spec.ts › run-server › should upload large file [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should check proxy pattern on the client [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should forward non-forwarded requests [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should lead to the error page for forwarded requests when the connection is refused [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy based on the pattern [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy ipv6 localhost requests @smoke [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy local.playwright requests [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy localhost requests @smoke [fail] +library/browsertype-connect.spec.ts › run-server › socks proxy › should proxy localhost requests from fetch api [fail] +library/browsertype-connect.spec.ts › should refuse connecting when versions do not match [pass] +library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 hub + node chromium [unknown] +library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone chromium [unknown] +library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone chromium through run-driver [unknown] +library/browsertype-launch-selenium.spec.ts › selenium grid 3.141.59 standalone non-chromium [unknown] +library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 hub + node chromium [unknown] +library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 standalone chromium [unknown] +library/browsertype-launch-selenium.spec.ts › selenium grid 4.8.3 standalone chromium broken driver [unknown] +library/browsertype-launch-server.spec.ts › launch server › should default to random wsPath [fail] +library/browsertype-launch-server.spec.ts › launch server › should fire "close" event during kill [fail] +library/browsertype-launch-server.spec.ts › launch server › should fire close event [fail] +library/browsertype-launch-server.spec.ts › launch server › should log protocol [fail] +library/browsertype-launch-server.spec.ts › launch server › should provide an error when ws endpoint is incorrect [fail] +library/browsertype-launch-server.spec.ts › launch server › should return child_process instance [fail] +library/browsertype-launch-server.spec.ts › launch server › should work [fail] +library/browsertype-launch-server.spec.ts › launch server › should work when wsPath is missing leading slash [fail] +library/browsertype-launch-server.spec.ts › launch server › should work with host [fail] +library/browsertype-launch-server.spec.ts › launch server › should work with port [fail] +library/browsertype-launch-server.spec.ts › launch server › should work with wsPath [fail] +library/browsertype-launch.spec.ts › should accept objects as options [pass] +library/browsertype-launch.spec.ts › should allow await using [pass] +library/browsertype-launch.spec.ts › should be callable twice [pass] +library/browsertype-launch.spec.ts › should fire close event for all contexts [pass] +library/browsertype-launch.spec.ts › should handle exception [pass] +library/browsertype-launch.spec.ts › should handle timeout [pass] +library/browsertype-launch.spec.ts › should reject all promises when browser is closed [pass] +library/browsertype-launch.spec.ts › should reject if executable path is invalid [pass] +library/browsertype-launch.spec.ts › should reject if launched browser fails immediately [fail] +library/browsertype-launch.spec.ts › should report launch log [pass] +library/browsertype-launch.spec.ts › should throw if page argument is passed [fail] +library/browsertype-launch.spec.ts › should throw if port option is passed [pass] +library/browsertype-launch.spec.ts › should throw if port option is passed for persistent context [pass] +library/browsertype-launch.spec.ts › should throw if userDataDir is passed as an argument [pass] +library/browsertype-launch.spec.ts › should throw if userDataDir option is passed [pass] +library/capabilities.spec.ts › Intl.ListFormat should work [pass] +library/capabilities.spec.ts › SharedArrayBuffer should work @smoke [fail] +library/capabilities.spec.ts › Web Assembly should work @smoke [pass] +library/capabilities.spec.ts › WebSocket should work @smoke [pass] +library/capabilities.spec.ts › loading in HTMLImageElement.prototype [pass] +library/capabilities.spec.ts › make sure that XMLHttpRequest upload events are emitted correctly [pass] +library/capabilities.spec.ts › navigator.clipboard should be present [pass] +library/capabilities.spec.ts › requestFullscreen [fail] +library/capabilities.spec.ts › service worker should cover the iframe [pass] +library/capabilities.spec.ts › service worker should register in an iframe [pass] +library/capabilities.spec.ts › serviceWorker should intercept document request [pass] +library/capabilities.spec.ts › should not crash on page with mp4 @smoke [fail] +library/capabilities.spec.ts › should not crash on showDirectoryPicker [flaky] +library/capabilities.spec.ts › should not crash on storage.getDirectory() [pass] +library/capabilities.spec.ts › should play audio @smoke [fail] +library/capabilities.spec.ts › should play video @smoke [pass] +library/capabilities.spec.ts › should play webm video @smoke [pass] +library/capabilities.spec.ts › should respect CSP @smoke [fail] +library/capabilities.spec.ts › should send no Content-Length header for GET requests with a Content-Type [pass] +library/capabilities.spec.ts › should set CloseEvent.wasClean to false when the server terminates a WebSocket connection [fail] +library/capabilities.spec.ts › should support webgl 2 @smoke [pass] +library/capabilities.spec.ts › should support webgl @smoke [fail] +library/capabilities.spec.ts › webkit should define window.safari [unknown] +library/capabilities.spec.ts › window.GestureEvent in WebKit [pass] +library/channels.spec.ts › exposeFunction should not leak [fail] +library/channels.spec.ts › should not generate dispatchers for subresources w/o listeners [pass] +library/channels.spec.ts › should scope CDPSession handles [unknown] +library/channels.spec.ts › should scope browser handles [pass] +library/channels.spec.ts › should scope context handles [pass] +library/channels.spec.ts › should work with the domain module [timeout] +library/chromium/bfcache.spec.ts › bindings should work after restoring from bfcache [fail] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › serviceWorker(), and fromServiceWorker() work [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › setExtraHTTPHeaders [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › setOffline [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept only serviceworker request, not page [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker importScripts [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker requests (main and within) [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should intercept service worker update requests [unknown] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should produce network events, routing, and annotations for Service Worker [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should produce network events, routing, and annotations for Service Worker (advanced) [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report failure (due to content-type) of main service worker request [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report failure (due to redirect) of main service worker request [timeout] +library/chromium/chromium.spec.ts › PW_EXPERIMENTAL_SERVICE_WORKER_NETWORK_EVENTS=1 › should report intercepted service worker requests in HAR [timeout] +library/chromium/chromium.spec.ts › Page.route should work with intervention headers [fail] +library/chromium/chromium.spec.ts › http credentials › httpCredentials [timeout] +library/chromium/chromium.spec.ts › serviceWorkers() should return current workers [timeout] +library/chromium/chromium.spec.ts › should close service worker together with the context [timeout] +library/chromium/chromium.spec.ts › should create a worker from a service worker [timeout] +library/chromium/chromium.spec.ts › should create a worker from service worker with noop routing [timeout] +library/chromium/chromium.spec.ts › should emit new service worker on update [timeout] +library/chromium/chromium.spec.ts › should not create a worker from a shared worker [pass] +library/chromium/chromium.spec.ts › should pass args with spaces [fail] +library/chromium/connect-over-cdp.spec.ts › emulate media should not be affected by second connectOverCDP [unknown] +library/chromium/connect-over-cdp.spec.ts › setInputFiles should preserve lastModified timestamp [fail] +library/chromium/connect-over-cdp.spec.ts › should allow tracing over cdp session [fail] +library/chromium/connect-over-cdp.spec.ts › should be able to connect via localhost [fail] +library/chromium/connect-over-cdp.spec.ts › should cleanup artifacts dir after connectOverCDP disconnects due to ws close [fail] +library/chromium/connect-over-cdp.spec.ts › should connect over a ws endpoint [fail] +library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session [fail] +library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session twice [fail] +library/chromium/connect-over-cdp.spec.ts › should connect to an existing cdp session when passed as a first argument [fail] +library/chromium/connect-over-cdp.spec.ts › should connect to existing page with iframe and navigate [fail] +library/chromium/connect-over-cdp.spec.ts › should connect to existing service workers [fail] +library/chromium/connect-over-cdp.spec.ts › should connect via https [fail] +library/chromium/connect-over-cdp.spec.ts › should connectOverCDP and manage downloads in default context [fail] +library/chromium/connect-over-cdp.spec.ts › should print custom ws close error [fail] +library/chromium/connect-over-cdp.spec.ts › should report all pages in an existing browser [fail] +library/chromium/connect-over-cdp.spec.ts › should report an expected error when the endpoint URL JSON webSocketDebuggerUrl is undefined [fail] +library/chromium/connect-over-cdp.spec.ts › should report an expected error when the endpointURL returns a non-expected status code [fail] +library/chromium/connect-over-cdp.spec.ts › should return valid browser from context.browser() [fail] +library/chromium/connect-over-cdp.spec.ts › should send default User-Agent header with connect request [timeout] +library/chromium/connect-over-cdp.spec.ts › should send extra headers with connect request [timeout] +library/chromium/connect-over-cdp.spec.ts › should use logger in default context [fail] +library/chromium/connect-over-cdp.spec.ts › should use proxy with connectOverCDP [fail] +library/chromium/css-coverage.spec.ts › should NOT report scripts across navigations [fail] +library/chromium/css-coverage.spec.ts › should ignore injected stylesheets [fail] +library/chromium/css-coverage.spec.ts › should report multiple stylesheets [fail] +library/chromium/css-coverage.spec.ts › should report sourceURLs [fail] +library/chromium/css-coverage.spec.ts › should report stylesheets across navigations [fail] +library/chromium/css-coverage.spec.ts › should report stylesheets that have no coverage [fail] +library/chromium/css-coverage.spec.ts › should work [fail] +library/chromium/css-coverage.spec.ts › should work with a recently loaded stylesheet [fail] +library/chromium/css-coverage.spec.ts › should work with complicated usecases [fail] +library/chromium/css-coverage.spec.ts › should work with media queries [fail] +library/chromium/disable-web-security.spec.ts › test init script w/ --disable-web-security [pass] +library/chromium/disable-web-security.spec.ts › test utility world in popup w/ --disable-web-security [pass] +library/chromium/js-coverage.spec.ts › should NOT report scripts across navigations when enabled [fail] +library/chromium/js-coverage.spec.ts › should ignore eval() scripts by default [fail] +library/chromium/js-coverage.spec.ts › should not hang when there is a debugger statement [fail] +library/chromium/js-coverage.spec.ts › should report multiple scripts [fail] +library/chromium/js-coverage.spec.ts › should report scripts across navigations when disabled [fail] +library/chromium/js-coverage.spec.ts › should report sourceURLs [fail] +library/chromium/js-coverage.spec.ts › should work [fail] +library/chromium/js-coverage.spec.ts › shouldn't ignore eval() scripts if reportAnonymousScripts is true [fail] +library/chromium/launcher.spec.ts › should not create pages automatically [fail] +library/chromium/launcher.spec.ts › should not throw with remote-debugging-port argument [fail] +library/chromium/launcher.spec.ts › should open devtools when "devtools: true" option is given [unknown] +library/chromium/launcher.spec.ts › should return background pages [fail] +library/chromium/launcher.spec.ts › should return background pages when recording video [fail] +library/chromium/launcher.spec.ts › should support request/response events when using backgroundPage() [fail] +library/chromium/launcher.spec.ts › should throw with remote-debugging-pipe argument [fail] +library/chromium/oopif.spec.ts › ElementHandle.boundingBox() should work [pass] +library/chromium/oopif.spec.ts › contentFrame should work [pass] +library/chromium/oopif.spec.ts › should allow cdp sessions on oopifs [fail] +library/chromium/oopif.spec.ts › should be able to click in iframe [fail] +library/chromium/oopif.spec.ts › should click [fail] +library/chromium/oopif.spec.ts › should click a button when it overlays oopif [fail] +library/chromium/oopif.spec.ts › should emit filechooser event for iframe [fail] +library/chromium/oopif.spec.ts › should emulate media [fail] +library/chromium/oopif.spec.ts › should emulate offline [fail] +library/chromium/oopif.spec.ts › should expose function [fail] +library/chromium/oopif.spec.ts › should get the proper viewport [unknown] +library/chromium/oopif.spec.ts › should handle oopif detach [pass] +library/chromium/oopif.spec.ts › should handle remote -> local -> remote transitions [pass] +library/chromium/oopif.spec.ts › should intercept response body from oopif [fail] +library/chromium/oopif.spec.ts › should load oopif iframes with subresources and route [pass] +library/chromium/oopif.spec.ts › should not throw on exposeFunction when oopif detaches [fail] +library/chromium/oopif.spec.ts › should report google.com frame with headed [pass] +library/chromium/oopif.spec.ts › should report main requests [pass] +library/chromium/oopif.spec.ts › should report oopif frames [pass] +library/chromium/oopif.spec.ts › should respect route [pass] +library/chromium/oopif.spec.ts › should support addInitScript [pass] +library/chromium/oopif.spec.ts › should support context options [fail] +library/chromium/oopif.spec.ts › should support exposeFunction [fail] +library/chromium/oopif.spec.ts › should take screenshot [fail] +library/chromium/session.spec.ts › should be able to detach session [fail] +library/chromium/session.spec.ts › should detach when page closes [fail] +library/chromium/session.spec.ts › should enable and disable domains independently [fail] +library/chromium/session.spec.ts › should not break page.close() [fail] +library/chromium/session.spec.ts › should only accept a page or frame [pass] +library/chromium/session.spec.ts › should reject protocol calls when page closes [fail] +library/chromium/session.spec.ts › should send events [fail] +library/chromium/session.spec.ts › should throw if target is part of main [fail] +library/chromium/session.spec.ts › should throw nice errors [fail] +library/chromium/session.spec.ts › should work [fail] +library/chromium/session.spec.ts › should work with main frame [fail] +library/chromium/session.spec.ts › should work with newBrowserCDPSession [fail] +library/chromium/tracing.spec.ts › should create directories as needed [fail] +library/chromium/tracing.spec.ts › should output a trace [fail] +library/chromium/tracing.spec.ts › should return a buffer [fail] +library/chromium/tracing.spec.ts › should run with custom categories if provided [fail] +library/chromium/tracing.spec.ts › should support a buffer without a path [fail] +library/chromium/tracing.spec.ts › should throw if tracing on two pages [fail] +library/chromium/tracing.spec.ts › should work without options [fail] +library/client-certificates.spec.ts › browser › persistentContext › should pass with matching certificates [fail] +library/client-certificates.spec.ts › browser › persistentContext › validate input [pass] +library/client-certificates.spec.ts › browser › should fail with matching certificates in legacy pfx format [pass] +library/client-certificates.spec.ts › browser › should fail with no client certificates [fail] +library/client-certificates.spec.ts › browser › should fail with self-signed client certificates [fail] +library/client-certificates.spec.ts › browser › should handle TLS renegotiation with client certificates [fail] +library/client-certificates.spec.ts › browser › should handle rejected certificate in handshake with HTTP/2 [pass] +library/client-certificates.spec.ts › browser › should have ignoreHTTPSErrors=false by default [fail] +library/client-certificates.spec.ts › browser › should keep supporting http [pass] +library/client-certificates.spec.ts › browser › should not hang on tls errors during TLS 1.2 handshake [fail] +library/client-certificates.spec.ts › browser › should pass with matching certificates [fail] +library/client-certificates.spec.ts › browser › should pass with matching certificates and trailing slash [fail] +library/client-certificates.spec.ts › browser › should pass with matching certificates in pfx format [fail] +library/client-certificates.spec.ts › browser › should pass with matching certificates in pfx format when passing as content [fail] +library/client-certificates.spec.ts › browser › should pass with matching certificates on context APIRequestContext instance [fail] +library/client-certificates.spec.ts › browser › should pass with matching certificates when passing as content [fail] +library/client-certificates.spec.ts › browser › should return target connection errors when using http2 [unknown] +library/client-certificates.spec.ts › browser › should throw a http error if the pfx passphrase is incorect [pass] +library/client-certificates.spec.ts › browser › support http2 [fail] +library/client-certificates.spec.ts › browser › support http2 if the browser only supports http1.1 [unknown] +library/client-certificates.spec.ts › browser › validate input [pass] +library/client-certificates.spec.ts › fetch › pass with trusted client certificates [pass] +library/client-certificates.spec.ts › fetch › pass with trusted client certificates in pfx format [pass] +library/client-certificates.spec.ts › fetch › should fail with matching certificates in legacy pfx format [pass] +library/client-certificates.spec.ts › fetch › should fail with no client certificates provided [pass] +library/client-certificates.spec.ts › fetch › should keep supporting http [pass] +library/client-certificates.spec.ts › fetch › should throw a http error if the pfx passphrase is incorect [pass] +library/client-certificates.spec.ts › fetch › should throw with untrusted client certs [pass] +library/client-certificates.spec.ts › fetch › should work in the browser with request interception [pass] +library/client-certificates.spec.ts › fetch › validate input [pass] +library/clock.spec.ts › Intl API › Creates a RelativeTimeFormat like normal [pass] +library/clock.spec.ts › Intl API › Executes formatRange like normal [pass] +library/clock.spec.ts › Intl API › Executes formatRangeToParts like normal [pass] +library/clock.spec.ts › Intl API › Executes resolvedOptions like normal [pass] +library/clock.spec.ts › Intl API › Executes supportedLocalesOf like normal [pass] +library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns false when passed a timestamp argument that is not first of the month [pass] +library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns false when passed no timestamp and system time is not first of the month [pass] +library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns true when passed a timestamp argument that is first of the month [pass] +library/clock.spec.ts › Intl API › formatToParts via isFirstOfMonth -> Returns true when passed no timestamp and system time is first of the month [pass] +library/clock.spec.ts › cancelAnimationFrame › does not remove interval [pass] +library/clock.spec.ts › cancelAnimationFrame › does not remove timeout [pass] +library/clock.spec.ts › cancelAnimationFrame › ignores null argument [pass] +library/clock.spec.ts › cancelAnimationFrame › removes animation frame [pass] +library/clock.spec.ts › cancelIdleCallback › removes idle callback [pass] +library/clock.spec.ts › clearInterval › ignores null argument [pass] +library/clock.spec.ts › clearInterval › removes interval [pass] +library/clock.spec.ts › clearInterval › removes interval with undefined interval [pass] +library/clock.spec.ts › clearInterval › removes timeout [pass] +library/clock.spec.ts › clearTimeout › ignores null argument [pass] +library/clock.spec.ts › clearTimeout › removes interval [pass] +library/clock.spec.ts › clearTimeout › removes interval with undefined interval [pass] +library/clock.spec.ts › clearTimeout › removes timeout [pass] +library/clock.spec.ts › date › creates Date objects representing clock time [pass] +library/clock.spec.ts › date › creates real Date objects [pass] +library/clock.spec.ts › date › creates regular date when passing a date as RFC 2822 string [pass] +library/clock.spec.ts › date › creates regular date when passing a date as string [pass] +library/clock.spec.ts › date › creates regular date when passing timestamp [pass] +library/clock.spec.ts › date › creates regular date when passing y, m, d [pass] +library/clock.spec.ts › date › creates regular date when passing y, m, d, h [pass] +library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m [pass] +library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m, s [pass] +library/clock.spec.ts › date › creates regular date when passing y, m, d, h, m, s, ms [pass] +library/clock.spec.ts › date › creates regular date when passing year, month [pass] +library/clock.spec.ts › date › listens to system clock changes [pass] +library/clock.spec.ts › date › listens to ticking clock [pass] +library/clock.spec.ts › date › mirrors UTC method [pass] +library/clock.spec.ts › date › mirrors native Date.prototype [pass] +library/clock.spec.ts › date › mirrors parse method [pass] +library/clock.spec.ts › date › mirrors toUTCString method [pass] +library/clock.spec.ts › date › provides date constructor [pass] +library/clock.spec.ts › date › returns clock.now() [pass] +library/clock.spec.ts › date › returns date as string representing clock time [pass] +library/clock.spec.ts › date › returns date as string when called as function [pass] +library/clock.spec.ts › date › returns date as string when calling with arguments [pass] +library/clock.spec.ts › date › returns date as string when calling with timestamp [pass] +library/clock.spec.ts › date › supports now method if present [pass] +library/clock.spec.ts › fastForward › handles multiple pending timers and types [pass] +library/clock.spec.ts › fastForward › ignores timers which wouldn't be run [pass] +library/clock.spec.ts › fastForward › pushes back execution time for skipped timers [pass] +library/clock.spec.ts › pauseAt › fire target timers [pass] +library/clock.spec.ts › pauseAt › pause at target time [pass] +library/clock.spec.ts › pauseAt › returns consumed clicks [pass] +library/clock.spec.ts › performance.now() › should listen to multiple ticks in performance.now [pass] +library/clock.spec.ts › performance.now() › should run along with clock.tick [pass] +library/clock.spec.ts › performance.now() › should run with ticks with timers set [pass] +library/clock.spec.ts › performance.now() › should start at 0 [pass] +library/clock.spec.ts › requestAnimationFrame › returns numeric id or object with numeric id [pass] +library/clock.spec.ts › requestAnimationFrame › returns unique id [pass] +library/clock.spec.ts › requestAnimationFrame › should be called with performance.now() even when performance unavailable [pass] +library/clock.spec.ts › requestAnimationFrame › should be called with performance.now() when available [pass] +library/clock.spec.ts › requestAnimationFrame › should call callback once [pass] +library/clock.spec.ts › requestAnimationFrame › should properly schedule callback for 3rd frame [pass] +library/clock.spec.ts › requestAnimationFrame › should run every 16ms [pass] +library/clock.spec.ts › requestAnimationFrame › should schedule for next frame if on current frame [pass] +library/clock.spec.ts › requestAnimationFrame › should schedule two callbacks before the next frame at the same time [pass] +library/clock.spec.ts › requestAnimationFrame › throws if no arguments [pass] +library/clock.spec.ts › requestIdleCallback › doesn't runs if there are any timers and no timeout option [pass] +library/clock.spec.ts › requestIdleCallback › returns numeric id [pass] +library/clock.spec.ts › requestIdleCallback › returns unique id [pass] +library/clock.spec.ts › requestIdleCallback › runs after all timers [pass] +library/clock.spec.ts › requestIdleCallback › runs no later than timeout option even if there are any timers [pass] +library/clock.spec.ts › requestIdleCallback › throws if no arguments [pass] +library/clock.spec.ts › runFor › calls function with global object or null (strict mode) as this [pass] +library/clock.spec.ts › runFor › creates updated Date while ticking [pass] +library/clock.spec.ts › runFor › creates updated Date while ticking promises [pass] +library/clock.spec.ts › runFor › does not fire canceled intervals [pass] +library/clock.spec.ts › runFor › does not fire intervals canceled in a promise [pass] +library/clock.spec.ts › runFor › does not silently catch errors [pass] +library/clock.spec.ts › runFor › does not trigger without sufficient delay [pass] +library/clock.spec.ts › runFor › fires nested setTimeout calls in user-created promises properly [pass] +library/clock.spec.ts › runFor › fires nested setTimeout calls properly [pass] +library/clock.spec.ts › runFor › fires promise timers in correct order [pass] +library/clock.spec.ts › runFor › fires timer in intervals of "13" [pass] +library/clock.spec.ts › runFor › fires timer in intervals of 13 [pass] +library/clock.spec.ts › runFor › fires timers in correct order [pass] +library/clock.spec.ts › runFor › is not influenced by forward system clock changes [pass] +library/clock.spec.ts › runFor › is not influenced by forward system clock changes 2 [pass] +library/clock.spec.ts › runFor › is not influenced by forward system clock changes in promises [pass] +library/clock.spec.ts › runFor › is not influenced by forward system clock changes when an error is thrown [pass] +library/clock.spec.ts › runFor › is not influenced by forward system clock changes when an error is thrown 2 [pass] +library/clock.spec.ts › runFor › mini integration test [pass] +library/clock.spec.ts › runFor › should settle chained user-created promises [pass] +library/clock.spec.ts › runFor › should settle local nested promises before calling timeouts [pass] +library/clock.spec.ts › runFor › should settle local promises before calling timeouts [pass] +library/clock.spec.ts › runFor › should settle multiple user-created promises [pass] +library/clock.spec.ts › runFor › should settle nested user-created promises [pass] +library/clock.spec.ts › runFor › should settle user-created promises [pass] +library/clock.spec.ts › runFor › should settle user-created promises before calling more timeouts [pass] +library/clock.spec.ts › runFor › should settle user-created promises even if some throw [pass] +library/clock.spec.ts › runFor › throws for negative minutes [pass] +library/clock.spec.ts › runFor › throws on negative ticks [pass] +library/clock.spec.ts › runFor › triggers after sufficient delay [pass] +library/clock.spec.ts › runFor › triggers even when some throw [pass] +library/clock.spec.ts › runFor › triggers immediately without specified delay [pass] +library/clock.spec.ts › runFor › triggers in the order scheduled [pass] +library/clock.spec.ts › runFor › triggers multiple simultaneous timers [pass] +library/clock.spec.ts › runFor › triggers multiple simultaneous timers with zero callAt [pass] +library/clock.spec.ts › runFor › triggers simultaneous timers [pass] +library/clock.spec.ts › runFor › triggers timeouts and intervals in the order scheduled [pass] +library/clock.spec.ts › runFor › waits after setTimeout was called [pass] +library/clock.spec.ts › setInterval › does not schedule recurring timeout when cleared [pass] +library/clock.spec.ts › setInterval › does not throw if |undefined| or |null| is passed as a callback [pass] +library/clock.spec.ts › setInterval › is not influenced by backward system clock changes [pass] +library/clock.spec.ts › setInterval › is not influenced by forward system clock changes [pass] +library/clock.spec.ts › setInterval › passes setTimeout parameters [pass] +library/clock.spec.ts › setInterval › returns numeric id or object with numeric id [pass] +library/clock.spec.ts › setInterval › returns unique id [pass] +library/clock.spec.ts › setInterval › schedules recurring timeout [pass] +library/clock.spec.ts › setInterval › throws if no arguments [pass] +library/clock.spec.ts › setTimeout › calls correct timeout on recursive tick [pass] +library/clock.spec.ts › setTimeout › does not depend on this [pass] +library/clock.spec.ts › setTimeout › does not throw if |undefined| or |null| is passed as a callback [pass] +library/clock.spec.ts › setTimeout › is not influenced by backward system clock changes [pass] +library/clock.spec.ts › setTimeout › is not influenced by forward system clock changes [pass] +library/clock.spec.ts › setTimeout › parses no-numeric string times [pass] +library/clock.spec.ts › setTimeout › parses numeric string times [pass] +library/clock.spec.ts › setTimeout › passes setTimeout parameters [pass] +library/clock.spec.ts › setTimeout › returns numeric id or object with numeric id [pass] +library/clock.spec.ts › setTimeout › returns unique id [pass] +library/clock.spec.ts › setTimeout › sets timers on instance [pass] +library/clock.spec.ts › setTimeout › starts id from a large number [pass] +library/clock.spec.ts › setTimeout › throws if no arguments [pass] +library/clock.spec.ts › setTimeout › use of eval when not in node › evals non-function callbacks [pass] +library/clock.spec.ts › setTimeout › use of eval when not in node › only evals on global scope [pass] +library/clock.spec.ts › stubTimers › deletes global property on uninstall if it was inherited onto the global object [unknown] +library/clock.spec.ts › stubTimers › does not fake methods not provided [pass] +library/clock.spec.ts › stubTimers › fake Date constructor should mirror Date's properties [pass] +library/clock.spec.ts › stubTimers › fakes Date constructor [pass] +library/clock.spec.ts › stubTimers › fakes provided methods [pass] +library/clock.spec.ts › stubTimers › global fake setTimeout should return id [pass] +library/clock.spec.ts › stubTimers › mirrors custom Date properties [pass] +library/clock.spec.ts › stubTimers › replace Event.prototype.timeStamp [pass] +library/clock.spec.ts › stubTimers › replaces global clearInterval [pass] +library/clock.spec.ts › stubTimers › replaces global clearTimeout [pass] +library/clock.spec.ts › stubTimers › replaces global performance.now [pass] +library/clock.spec.ts › stubTimers › replaces global setInterval [pass] +library/clock.spec.ts › stubTimers › replaces global setTimeout [pass] +library/clock.spec.ts › stubTimers › resets faked methods [pass] +library/clock.spec.ts › stubTimers › returns clock object [pass] +library/clock.spec.ts › stubTimers › sets initial timestamp [pass] +library/clock.spec.ts › stubTimers › should let performance.mark still be callable after install() (#136) [unknown] +library/clock.spec.ts › stubTimers › should not alter the global performance properties and methods [unknown] +library/clock.spec.ts › stubTimers › should replace the getEntries, getEntriesByX methods with noops that return [] [unknown] +library/clock.spec.ts › stubTimers › takes an object parameter [pass] +library/clock.spec.ts › stubTimers › uninstalls Date constructor [pass] +library/clock.spec.ts › stubTimers › uninstalls global performance.now [pass] +library/clock.spec.ts › works with concurrent runFor calls [pass] +library/clock.spec.ts › works with slow setTimeout in busy embedder [pass] +library/clock.spec.ts › works with slow setTimeout in busy embedder when not paused [pass] +library/component-parser.spec.ts › should escape [pass] +library/component-parser.spec.ts › should parse [pass] +library/component-parser.spec.ts › should parse all operators [pass] +library/component-parser.spec.ts › should parse bool [pass] +library/component-parser.spec.ts › should parse float values [pass] +library/component-parser.spec.ts › should parse identifiers [pass] +library/component-parser.spec.ts › should parse int values [pass] +library/component-parser.spec.ts › should parse regex [pass] +library/component-parser.spec.ts › should parse short attributes [pass] +library/component-parser.spec.ts › should parse unquoted string [pass] +library/component-parser.spec.ts › should throw on malformed selector [pass] +library/component-parser.spec.ts › should tolerate spacing [pass] +library/css-parser.spec.ts › should parse css [pass] +library/css-parser.spec.ts › should throw on malformed css [pass] +library/debug-controller.spec.ts › should highlight all [fail] +library/debug-controller.spec.ts › should navigate all [fail] +library/debug-controller.spec.ts › should pick element [fail] +library/debug-controller.spec.ts › should record [fail] +library/debug-controller.spec.ts › should record custom data-testid [fail] +library/debug-controller.spec.ts › should report pages [fail] +library/debug-controller.spec.ts › should reset for reuse [fail] +library/debug-controller.spec.ts › should reset routes before reuse [fail] +library/defaultbrowsercontext-1.spec.ts › context.addCookies() should work [fail] +library/defaultbrowsercontext-1.spec.ts › context.clearCookies() should work [fail] +library/defaultbrowsercontext-1.spec.ts › context.cookies() should work @smoke [fail] +library/defaultbrowsercontext-1.spec.ts › should support acceptDownloads option [fail] +library/defaultbrowsercontext-1.spec.ts › should support bypassCSP option [fail] +library/defaultbrowsercontext-1.spec.ts › should support deviceScaleFactor option [fail] +library/defaultbrowsercontext-1.spec.ts › should support httpCredentials option [fail] +library/defaultbrowsercontext-1.spec.ts › should support javascriptEnabled option [fail] +library/defaultbrowsercontext-1.spec.ts › should support offline option [fail] +library/defaultbrowsercontext-1.spec.ts › should support userAgent option [fail] +library/defaultbrowsercontext-1.spec.ts › should support viewport option [fail] +library/defaultbrowsercontext-1.spec.ts › should(not) block third party cookies [fail] +library/defaultbrowsercontext-2.spec.ts › coverage should work [unknown] +library/defaultbrowsercontext-2.spec.ts › should accept userDataDir [fail] +library/defaultbrowsercontext-2.spec.ts › should connect to a browser with the default page [fail] +library/defaultbrowsercontext-2.spec.ts › should create userDataDir if it does not exist [fail] +library/defaultbrowsercontext-2.spec.ts › should fire close event for a persistent context [fail] +library/defaultbrowsercontext-2.spec.ts › should handle exception [timeout] +library/defaultbrowsercontext-2.spec.ts › should handle timeout [pass] +library/defaultbrowsercontext-2.spec.ts › should have default URL when launching browser [fail] +library/defaultbrowsercontext-2.spec.ts › should have passed URL when launching with ignoreDefaultArgs: true [fail] +library/defaultbrowsercontext-2.spec.ts › should respect selectors [fail] +library/defaultbrowsercontext-2.spec.ts › should restore state from userDataDir [fail] +library/defaultbrowsercontext-2.spec.ts › should support colorScheme option [fail] +library/defaultbrowsercontext-2.spec.ts › should support extraHTTPHeaders option [fail] +library/defaultbrowsercontext-2.spec.ts › should support forcedColors option [fail] +library/defaultbrowsercontext-2.spec.ts › should support geolocation and permissions options [fail] +library/defaultbrowsercontext-2.spec.ts › should support har option [fail] +library/defaultbrowsercontext-2.spec.ts › should support hasTouch option [fail] +library/defaultbrowsercontext-2.spec.ts › should support ignoreHTTPSErrors option [fail] +library/defaultbrowsercontext-2.spec.ts › should support locale option [fail] +library/defaultbrowsercontext-2.spec.ts › should support reducedMotion option [fail] +library/defaultbrowsercontext-2.spec.ts › should support timezoneId option [fail] +library/defaultbrowsercontext-2.spec.ts › should throw if page argument is passed [fail] +library/defaultbrowsercontext-2.spec.ts › should work in persistent context [fail] +library/defaultbrowsercontext-2.spec.ts › user agent is up to date [fail] +library/download.spec.ts › download event › should be able to cancel pending downloads [fail] +library/download.spec.ts › download event › should close the context without awaiting the download [fail] +library/download.spec.ts › download event › should close the context without awaiting the failed download [unknown] +library/download.spec.ts › download event › should create subdirectories when saving to non-existent user-specified path [fail] +library/download.spec.ts › download event › should delete downloads on browser gone [fail] +library/download.spec.ts › download event › should delete downloads on context destruction [fail] +library/download.spec.ts › download event › should delete file [fail] +library/download.spec.ts › download event › should download large binary.zip [fail] +library/download.spec.ts › download event › should emit download event from nested iframes [timeout] +library/download.spec.ts › download event › should error when saving after deletion [fail] +library/download.spec.ts › download event › should error when saving with downloads disabled [fail] +library/download.spec.ts › download event › should expose stream [fail] +library/download.spec.ts › download event › should not fail explicitly to cancel a download even if that is already finished [fail] +library/download.spec.ts › download event › should report alt-click downloads [fail] +library/download.spec.ts › download event › should report download path within page.on('download', …) handler for Blobs [timeout] +library/download.spec.ts › download event › should report download path within page.on('download', …) handler for Files [fail] +library/download.spec.ts › download event › should report download when navigation turns into download @smoke [timeout] +library/download.spec.ts › download event › should report downloads for download attribute [fail] +library/download.spec.ts › download event › should report downloads with acceptDownloads: false [fail] +library/download.spec.ts › download event › should report downloads with acceptDownloads: true [fail] +library/download.spec.ts › download event › should report downloads with interception [fail] +library/download.spec.ts › download event › should report new window downloads [fail] +library/download.spec.ts › download event › should report non-navigation downloads [fail] +library/download.spec.ts › download event › should report proper download url when download is from download attribute [fail] +library/download.spec.ts › download event › should save to overwritten filepath [fail] +library/download.spec.ts › download event › should save to two different paths with multiple saveAs calls [fail] +library/download.spec.ts › download event › should save to user-specified path without updating original path [fail] +library/download.spec.ts › download event › should throw if browser dies [fail] +library/download.spec.ts › download event › should work with Cross-Origin-Opener-Policy [timeout] +library/download.spec.ts › should be able to download a PDF file [fail] +library/download.spec.ts › should be able to download a inline PDF file via navigation [fail] +library/download.spec.ts › should be able to download a inline PDF file via response interception [fail] +library/download.spec.ts › should convert navigation to a resource with unsupported mime type into download [timeout] +library/download.spec.ts › should download even if there is no "attachment" value [fail] +library/download.spec.ts › should download links with data url [fail] +library/download.spec.ts › should download successfully when routing [fail] +library/download.spec.ts › should save to user-specified path [fail] +library/downloads-path.spec.ts › downloads path › should accept downloads in persistent context [fail] +library/downloads-path.spec.ts › downloads path › should delete downloads when context closes [fail] +library/downloads-path.spec.ts › downloads path › should delete downloads when persistent context closes [fail] +library/downloads-path.spec.ts › downloads path › should keep downloadsPath folder [fail] +library/downloads-path.spec.ts › downloads path › should report downloads in downloadsPath folder [fail] +library/downloads-path.spec.ts › downloads path › should report downloads in downloadsPath folder with a relative path [fail] +library/emulation-focus.spec.ts › should change document.activeElement [pass] +library/emulation-focus.spec.ts › should change focused iframe [pass] +library/emulation-focus.spec.ts › should focus popups by default [fail] +library/emulation-focus.spec.ts › should focus with more than one page/context [fail] +library/emulation-focus.spec.ts › should not affect mouse event target page [pass] +library/emulation-focus.spec.ts › should not affect screenshots [fail] +library/emulation-focus.spec.ts › should not fire blur events when interacting with more than one page/context [fail] +library/emulation-focus.spec.ts › should provide target for keyboard events [pass] +library/emulation-focus.spec.ts › should think that all pages are focused @smoke [fail] +library/emulation-focus.spec.ts › should think that it is focused by default [pass] +library/emulation-focus.spec.ts › should trigger hover state concurrently [fail] +library/events/add-listeners.spec.ts › EventEmitter tests › Listener order [pass] +library/events/add-listeners.spec.ts › EventEmitter tests › listener type check [pass] +library/events/add-listeners.spec.ts › EventEmitter tests › set max listeners test [pass] +library/events/add-listeners.spec.ts › EventEmitter tests › should work [pass] +library/events/check-listener-leaks.spec.ts › _maxListeners still has precedence over defaultMaxListeners [pass] +library/events/check-listener-leaks.spec.ts › defaultMaxListeners [pass] +library/events/check-listener-leaks.spec.ts › process-wide [pass] +library/events/events-list.spec.ts › EventEmitter › should maintain event names correctly [pass] +library/events/listener-count.spec.ts › Listener count test [pass] +library/events/listeners-side-effects.spec.ts › listeners empty check [pass] +library/events/listeners.spec.ts › Array copy modification does not modify orig [pass] +library/events/listeners.spec.ts › EventEmitter listeners with one listener [pass] +library/events/listeners.spec.ts › EventEmitter with no members [pass] +library/events/listeners.spec.ts › Modify array copy after multiple adds [pass] +library/events/listeners.spec.ts › listeners and once [pass] +library/events/listeners.spec.ts › listeners on prototype [pass] +library/events/listeners.spec.ts › listeners with conflicting types [pass] +library/events/listeners.spec.ts › raw listeners [pass] +library/events/listeners.spec.ts › raw listeners order [pass] +library/events/max-listeners.spec.ts › emit maxListeners on e [pass] +library/events/method-names.spec.ts › EventEmitter prototype test [pass] +library/events/modify-in-emit.spec.ts › add and remove listeners [pass] +library/events/modify-in-emit.spec.ts › removing callbacks in emit [pass] +library/events/num-args.spec.ts › should work [pass] +library/events/once.spec.ts › once() has different code paths based on the number of arguments being emitted [pass] +library/events/once.spec.ts › should work [pass] +library/events/prepend.spec.ts › EventEmitter functionality [pass] +library/events/prepend.spec.ts › Verify that the listener must be a function [pass] +library/events/remove-all-listeners-wait.spec.ts › should not throw with ignoreErrors [pass] +library/events/remove-all-listeners-wait.spec.ts › should wait [pass] +library/events/remove-all-listeners-wait.spec.ts › should wait all [pass] +library/events/remove-all-listeners-wait.spec.ts › wait should throw [pass] +library/events/remove-all-listeners.spec.ts › listener count after removeAllListeners [pass] +library/events/remove-all-listeners.spec.ts › listeners [pass] +library/events/remove-all-listeners.spec.ts › removeAllListeners on undefined _events [pass] +library/events/remove-all-listeners.spec.ts › removeAllListeners removes all listeners [pass] +library/events/remove-all-listeners.spec.ts › removeAllListeners returns EventEmitter [pass] +library/events/remove-all-listeners.spec.ts › removeAllListeners with no event type [pass] +library/events/remove-listeners.spec.ts › Eighth test [pass] +library/events/remove-listeners.spec.ts › Fifth test [pass] +library/events/remove-listeners.spec.ts › First test [pass] +library/events/remove-listeners.spec.ts › Fourth test [pass] +library/events/remove-listeners.spec.ts › Ninth test [pass] +library/events/remove-listeners.spec.ts › Second test [pass] +library/events/remove-listeners.spec.ts › Seventh test [pass] +library/events/remove-listeners.spec.ts › Sixth test [pass] +library/events/remove-listeners.spec.ts › Tenth test [pass] +library/events/remove-listeners.spec.ts › Third test [pass] +library/events/set-max-listeners-side-effects.spec.ts › set max listeners test [pass] +library/events/special-event-names.spec.ts › should support special event names [pass] +library/events/subclass.spec.ts › MyEE2 instance [pass] +library/events/subclass.spec.ts › myee instance [pass] +library/events/symbols.spec.ts › should support symbols [pass] +library/favicon.spec.ts › should load svg favicon with prefer-color-scheme [unknown] +library/fetch-proxy.spec.ts › context request should pick up proxy credentials [timeout] +library/fetch-proxy.spec.ts › global request should pick up proxy credentials [pass] +library/fetch-proxy.spec.ts › should support proxy.bypass [pass] +library/fetch-proxy.spec.ts › should use socks proxy [pass] +library/fetch-proxy.spec.ts › should work with context level proxy [pass] +library/firefox/launcher.spec.ts › should pass firefox user preferences [fail] +library/firefox/launcher.spec.ts › should pass firefox user preferences in persistent [fail] +library/geolocation.spec.ts › should isolate contexts [fail] +library/geolocation.spec.ts › should not modify passed default options object [pass] +library/geolocation.spec.ts › should throw when invalid longitude [fail] +library/geolocation.spec.ts › should throw with missing latitude [pass] +library/geolocation.spec.ts › should throw with missing longitude in default options [pass] +library/geolocation.spec.ts › should use context options [timeout] +library/geolocation.spec.ts › should use context options for popup [timeout] +library/geolocation.spec.ts › should work @smoke [timeout] +library/geolocation.spec.ts › watchPosition should be notified [timeout] +library/global-fetch-cookie.spec.ts › should do case-insensitive match of cookie domain [pass] +library/global-fetch-cookie.spec.ts › should do case-insensitive match of request domain [pass] +library/global-fetch-cookie.spec.ts › should export cookies to storage state [pass] +library/global-fetch-cookie.spec.ts › should filter outgoing cookies by domain [pass] +library/global-fetch-cookie.spec.ts › should filter outgoing cookies by path [pass] +library/global-fetch-cookie.spec.ts › should override cookie from Set-Cookie header [pass] +library/global-fetch-cookie.spec.ts › should override cookie from Set-Cookie header even if it expired [pass] +library/global-fetch-cookie.spec.ts › should preserve local storage on import/export of storage state [pass] +library/global-fetch-cookie.spec.ts › should remove cookie with expires far in the past [pass] +library/global-fetch-cookie.spec.ts › should remove cookie with negative max-age [pass] +library/global-fetch-cookie.spec.ts › should remove expired cookies [pass] +library/global-fetch-cookie.spec.ts › should send cookies from storage state [pass] +library/global-fetch-cookie.spec.ts › should send not expired cookies [pass] +library/global-fetch-cookie.spec.ts › should send secure cookie over http for localhost [pass] +library/global-fetch-cookie.spec.ts › should send secure cookie over https [pass] +library/global-fetch-cookie.spec.ts › should store cookie from Set-Cookie header [pass] +library/global-fetch-cookie.spec.ts › should store cookie from Set-Cookie header even if it contains equal signs [pass] +library/global-fetch-cookie.spec.ts › should work with empty storage state [pass] +library/global-fetch-cookie.spec.ts › storage state should round-trip through file [pass] +library/global-fetch.spec.ts › delete should work @smoke [pass] +library/global-fetch.spec.ts › fetch should work @smoke [pass] +library/global-fetch.spec.ts › get should work @smoke [pass] +library/global-fetch.spec.ts › head should work @smoke [pass] +library/global-fetch.spec.ts › patch should work @smoke [pass] +library/global-fetch.spec.ts › post should work @smoke [pass] +library/global-fetch.spec.ts › put should work @smoke [pass] +library/global-fetch.spec.ts › should abort redirected requests when context is disposed [pass] +library/global-fetch.spec.ts › should abort requests when context is disposed [pass] +library/global-fetch.spec.ts › should accept already serialized data as Buffer when content-type is application/json [pass] +library/global-fetch.spec.ts › should be able to construct with context options [pass] +library/global-fetch.spec.ts › should dispose global request [pass] +library/global-fetch.spec.ts › should have nice toString [pass] +library/global-fetch.spec.ts › should json stringify array body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify bool (false) body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify bool body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify literal string undefined body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify null body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify number (falsey) body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify number body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify object body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify string (falsey) body when content-type is application/json [pass] +library/global-fetch.spec.ts › should json stringify string body when content-type is application/json [pass] +library/global-fetch.spec.ts › should keep headers capitalization [pass] +library/global-fetch.spec.ts › should not double stringify array body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify bool (false) body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify bool body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify literal string undefined body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify null body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify number (falsey) body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify number body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify object body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify string (falsey) body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not double stringify string body when content-type is application/json [pass] +library/global-fetch.spec.ts › should not fail on empty body with encoding [pass] +library/global-fetch.spec.ts › should not follow redirects when maxRedirects is set to 0 [pass] +library/global-fetch.spec.ts › should propagate extra http headers with redirects [pass] +library/global-fetch.spec.ts › should propagate ignoreHTTPSErrors on redirects [pass] +library/global-fetch.spec.ts › should remove content-length from redirected post requests [pass] +library/global-fetch.spec.ts › should resolve url relative to global baseURL option [pass] +library/global-fetch.spec.ts › should retry ECONNRESET [pass] +library/global-fetch.spec.ts › should return body for failing requests [pass] +library/global-fetch.spec.ts › should return empty body [pass] +library/global-fetch.spec.ts › should return error with correct credentials and mismatching hostname [pass] +library/global-fetch.spec.ts › should return error with correct credentials and mismatching port [pass] +library/global-fetch.spec.ts › should return error with correct credentials and mismatching scheme [pass] +library/global-fetch.spec.ts › should return error with wrong credentials [pass] +library/global-fetch.spec.ts › should serialize post data on the client [pass] +library/global-fetch.spec.ts › should set playwright as user-agent [pass] +library/global-fetch.spec.ts › should support HTTPCredentials.send [pass] +library/global-fetch.spec.ts › should support WWW-Authenticate: Basic [pass] +library/global-fetch.spec.ts › should support global httpCredentials option [pass] +library/global-fetch.spec.ts › should support global ignoreHTTPSErrors option [pass] +library/global-fetch.spec.ts › should support global timeout option [pass] +library/global-fetch.spec.ts › should support global userAgent option [pass] +library/global-fetch.spec.ts › should throw after dispose [pass] +library/global-fetch.spec.ts › should throw an error when maxRedirects is exceeded [pass] +library/global-fetch.spec.ts › should throw an error when maxRedirects is less than 0 [pass] +library/global-fetch.spec.ts › should work with correct credentials and matching origin [pass] +library/global-fetch.spec.ts › should work with correct credentials and matching origin case insensitive [pass] +library/har.spec.ts › should attach content [fail] +library/har.spec.ts › should calculate time [pass] +library/har.spec.ts › should contain http2 for http2 requests [fail] +library/har.spec.ts › should filter by glob [pass] +library/har.spec.ts › should filter by regexp [pass] +library/har.spec.ts › should filter favicon and favicon redirects [unknown] +library/har.spec.ts › should have -1 _transferSize when its a failed request [pass] +library/har.spec.ts › should have browser [fail] +library/har.spec.ts › should have connection details [fail] +library/har.spec.ts › should have connection details for failed requests [fail] +library/har.spec.ts › should have connection details for redirects [fail] +library/har.spec.ts › should have different hars for concurrent contexts [fail] +library/har.spec.ts › should have pages [pass] +library/har.spec.ts › should have pages in persistent context [fail] +library/har.spec.ts › should have popup requests [fail] +library/har.spec.ts › should have security details [fail] +library/har.spec.ts › should have version and creator [pass] +library/har.spec.ts › should include API request [pass] +library/har.spec.ts › should include binary postData [fail] +library/har.spec.ts › should include content @smoke [fail] +library/har.spec.ts › should include cookies [pass] +library/har.spec.ts › should include form params [fail] +library/har.spec.ts › should include postData [fail] +library/har.spec.ts › should include query params [pass] +library/har.spec.ts › should include redirectURL [pass] +library/har.spec.ts › should include request [pass] +library/har.spec.ts › should include response [pass] +library/har.spec.ts › should include secure set-cookies [fail] +library/har.spec.ts › should include set-cookies [fail] +library/har.spec.ts › should include set-cookies with comma [fail] +library/har.spec.ts › should include sizes [fail] +library/har.spec.ts › should not contain internal pages [pass] +library/har.spec.ts › should not hang on resources served from cache [fail] +library/har.spec.ts › should not hang on slow chunked response [fail] +library/har.spec.ts › should omit content [pass] +library/har.spec.ts › should omit content legacy [pass] +library/har.spec.ts › should record failed request headers [pass] +library/har.spec.ts › should record failed request overrides [timeout] +library/har.spec.ts › should record request overrides [timeout] +library/har.spec.ts › should report the correct _transferSize with PNG files [fail] +library/har.spec.ts › should report the correct request body size [pass] +library/har.spec.ts › should report the correct request body size when the bodySize is 0 [pass] +library/har.spec.ts › should report the correct response body size when the bodySize is 0 [pass] +library/har.spec.ts › should return receive time [pass] +library/har.spec.ts › should return security details directly from response [fail] +library/har.spec.ts › should return server address directly from response [fail] +library/har.spec.ts › should skip invalid Expires [pass] +library/har.spec.ts › should throw without path [pass] +library/har.spec.ts › should use attach mode for zip extension [fail] +library/har.spec.ts › should work with gzip compression [fail] +library/headful.spec.ts › Page.bringToFront should work [fail] +library/headful.spec.ts › headless and headful should use same default fonts [fail] +library/headful.spec.ts › should click background tab [fail] +library/headful.spec.ts › should click bottom row w/ infobar in OOPIF [fail] +library/headful.spec.ts › should click in OOPIF [fail] +library/headful.spec.ts › should click when viewport size is larger than screen [fail] +library/headful.spec.ts › should close browser after context menu was triggered [pass] +library/headful.spec.ts › should close browser with beforeunload page [fail] +library/headful.spec.ts › should close browsercontext with pending beforeunload dialog [fail] +library/headful.spec.ts › should dispatch click events to oversized viewports [pass] +library/headful.spec.ts › should have default url when launching browser @smoke [fail] +library/headful.spec.ts › should not block third party SameSite=None cookies [fail] +library/headful.spec.ts › should not crash when creating second context [pass] +library/headful.spec.ts › should not override viewport size when passed null [pass] +library/headful.spec.ts › should(not) block third party cookies [fail] +library/hit-target.spec.ts › should block all events when hit target is wrong [pass] +library/hit-target.spec.ts › should block all events when hit target is wrong and element detaches [pass] +library/hit-target.spec.ts › should block click when mousedown fails [pass] +library/hit-target.spec.ts › should click an element inside closed shadow root [fail] +library/hit-target.spec.ts › should click in custom element [fail] +library/hit-target.spec.ts › should click in iframe with padding [fail] +library/hit-target.spec.ts › should click in iframe with padding 2 [fail] +library/hit-target.spec.ts › should click into frame inside closed shadow root [fail] +library/hit-target.spec.ts › should click the button again after document.write [pass] +library/hit-target.spec.ts › should click when element detaches in mousedown [pass] +library/hit-target.spec.ts › should detect overlaid element in a transformed iframe [fail] +library/hit-target.spec.ts › should detect overlay from another shadow root [fail] +library/hit-target.spec.ts › should not block programmatic events [pass] +library/hit-target.spec.ts › should not click an element overlaying iframe with the target [fail] +library/hit-target.spec.ts › should not click iframe overlaying the target [fail] +library/hit-target.spec.ts › should work with block inside inline [fail] +library/hit-target.spec.ts › should work with block inside inline in shadow dom [fail] +library/hit-target.spec.ts › should work with block-block-block inside inline-inline [fail] +library/hit-target.spec.ts › should work with drag and drop that moves the element under cursor [pass] +library/hit-target.spec.ts › should work with mui select [pass] +library/ignorehttpserrors.spec.ts › serviceWorker should intercept document request [fail] +library/ignorehttpserrors.spec.ts › should fail with WebSocket if not ignored [pass] +library/ignorehttpserrors.spec.ts › should isolate contexts [fail] +library/ignorehttpserrors.spec.ts › should work @smoke [fail] +library/ignorehttpserrors.spec.ts › should work with WebSocket [fail] +library/ignorehttpserrors.spec.ts › should work with mixed content [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should assert navigation [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should await popup [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should check [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should check a radio button [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should check with keyboard [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should click [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should click after same-document navigation [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should click button with nested div [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should emit single keyup on ArrowDown [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill [contentEditable] [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill japanese text [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill textarea [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should fill textarea with new lines at the end [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should ignore AltGraph [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should ignore programmatic events [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should make a positioned click on a canvas [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should middle click [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should not target selector preview by text regexp [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should not throw csp directive violation errors [pass] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should press [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should record ArrowDown [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should record omnibox navigations after performAction [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should record omnibox navigations after recordAction [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should record slider [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should select [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should select with size attribute [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should uncheck [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should update selected element after pressing Tab [fail] +library/inspector/cli-codegen-1.spec.ts › cli codegen › should work with TrustedTypes [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › click should emit events in order [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should --save-trace [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should check input with chaining id [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should clear files [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain close page [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain open page [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should contain second page [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should download files [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should fill tricky characters [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should handle dialogs [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should handle history.postData [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should not clash pages [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should not lead to an error if html gets clicked [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should record navigations after identical pushState [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should record open in a new tab with url [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should reset hover model on action when element detaches [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should save assets via SIGINT [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should update active model on action [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should update hover model on action [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should upload a single file [fail] +library/inspector/cli-codegen-2.spec.ts › cli codegen › should upload multiple files [fail] +library/inspector/cli-codegen-2.spec.ts › should --test-id-attribute [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value on disabled input [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert value on disabled select [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should assert visibility [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should click locator.first [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should click locator.nth [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should consume contextmenu events, despite a custom context menu [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should consume pointer events [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with id attribute [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with name attribute [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with special characters in name attribute [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with testId [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate frame locators with title attribute [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByAltText [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByLabel [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByLabel without regex [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByPlaceholder [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate getByTestId [fail] +library/inspector/cli-codegen-3.spec.ts › cli codegen › should generate role locators undef frame locators [fail] +library/inspector/cli-codegen-csharp.spec.ts › should not print context options method override in mstest if no options were passed [fail] +library/inspector/cli-codegen-csharp.spec.ts › should not print context options method override in nunit if no options were passed [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print a valid basic program in mstest [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print a valid basic program in nunit [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print context options method override in mstest if options were passed [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print context options method override in nunit if options were passed [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print load/save storageState [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options for custom settings [fail] +library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options when using a device [unknown] +library/inspector/cli-codegen-csharp.spec.ts › should print the correct context options when using a device and additional options [unknown] +library/inspector/cli-codegen-csharp.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-csharp.spec.ts › should work with --save-har [fail] +library/inspector/cli-codegen-java.spec.ts › should print a valid basic program in junit [fail] +library/inspector/cli-codegen-java.spec.ts › should print load/save storage_state [fail] +library/inspector/cli-codegen-java.spec.ts › should print the correct context options for custom settings [fail] +library/inspector/cli-codegen-java.spec.ts › should print the correct context options when using a device [unknown] +library/inspector/cli-codegen-java.spec.ts › should print the correct context options when using a device and additional options [unknown] +library/inspector/cli-codegen-java.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-java.spec.ts › should print the correct imports in junit [fail] +library/inspector/cli-codegen-java.spec.ts › should work with --save-har [fail] +library/inspector/cli-codegen-javascript.spec.ts › should print load/save storageState [fail] +library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options for custom settings [fail] +library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options when using a device [unknown] +library/inspector/cli-codegen-javascript.spec.ts › should print the correct context options when using a device and additional options [unknown] +library/inspector/cli-codegen-javascript.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-javascript.spec.ts › should save the codegen output to a file if specified [fail] +library/inspector/cli-codegen-pytest.spec.ts › should print the correct context options when using a device and lang [unknown] +library/inspector/cli-codegen-pytest.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-pytest.spec.ts › should save the codegen output to a file if specified [fail] +library/inspector/cli-codegen-python-async.spec.ts › should print load/save storage_state [fail] +library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options for custom settings [fail] +library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options when using a device [unknown] +library/inspector/cli-codegen-python-async.spec.ts › should print the correct context options when using a device and additional options [unknown] +library/inspector/cli-codegen-python-async.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-python-async.spec.ts › should save the codegen output to a file if specified [fail] +library/inspector/cli-codegen-python-async.spec.ts › should work with --save-har [fail] +library/inspector/cli-codegen-python.spec.ts › should print load/save storage_state [fail] +library/inspector/cli-codegen-python.spec.ts › should print the correct context options for custom settings [fail] +library/inspector/cli-codegen-python.spec.ts › should print the correct context options when using a device [unknown] +library/inspector/cli-codegen-python.spec.ts › should print the correct context options when using a device and additional options [unknown] +library/inspector/cli-codegen-python.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-python.spec.ts › should save the codegen output to a file if specified [fail] +library/inspector/cli-codegen-test.spec.ts › should print load storageState [fail] +library/inspector/cli-codegen-test.spec.ts › should print the correct context options for custom settings [fail] +library/inspector/cli-codegen-test.spec.ts › should print the correct context options when using a device [unknown] +library/inspector/cli-codegen-test.spec.ts › should print the correct context options when using a device and additional options [unknown] +library/inspector/cli-codegen-test.spec.ts › should print the correct imports and context options [fail] +library/inspector/cli-codegen-test.spec.ts › should work with --save-har [fail] +library/inspector/console-api.spec.ts › expected properties on playwright object [pass] +library/inspector/console-api.spec.ts › should support locator.and() [fail] +library/inspector/console-api.spec.ts › should support locator.or() [fail] +library/inspector/console-api.spec.ts › should support playwright.$, playwright.$$ [pass] +library/inspector/console-api.spec.ts › should support playwright.getBy* [fail] +library/inspector/console-api.spec.ts › should support playwright.locator({ has }) [fail] +library/inspector/console-api.spec.ts › should support playwright.locator({ hasNot }) [fail] +library/inspector/console-api.spec.ts › should support playwright.locator.value [fail] +library/inspector/console-api.spec.ts › should support playwright.locator.values [fail] +library/inspector/console-api.spec.ts › should support playwright.selector [pass] +library/inspector/pause.spec.ts › pause › should hide internal calls [pass] +library/inspector/pause.spec.ts › pause › should highlight locators with custom testId [fail] +library/inspector/pause.spec.ts › pause › should highlight on explore [fail] +library/inspector/pause.spec.ts › pause › should highlight on explore (csharp) [fail] +library/inspector/pause.spec.ts › pause › should highlight pointer, only in main frame [fail] +library/inspector/pause.spec.ts › pause › should highlight waitForEvent [fail] +library/inspector/pause.spec.ts › pause › should not prevent key events [fail] +library/inspector/pause.spec.ts › pause › should pause after a navigation [pass] +library/inspector/pause.spec.ts › pause › should pause and resume the script [pass] +library/inspector/pause.spec.ts › pause › should pause and resume the script with keyboard shortcut [pass] +library/inspector/pause.spec.ts › pause › should pause on context close [pass] +library/inspector/pause.spec.ts › pause › should pause on next pause [pass] +library/inspector/pause.spec.ts › pause › should pause on page close [pass] +library/inspector/pause.spec.ts › pause › should populate log [fail] +library/inspector/pause.spec.ts › pause › should populate log with error [fail] +library/inspector/pause.spec.ts › pause › should populate log with error in waitForEvent [fail] +library/inspector/pause.spec.ts › pause › should populate log with waitForEvent [fail] +library/inspector/pause.spec.ts › pause › should resume from console [fail] +library/inspector/pause.spec.ts › pause › should show expect.toHaveText [fail] +library/inspector/pause.spec.ts › pause › should show source [pass] +library/inspector/pause.spec.ts › pause › should skip input when resuming [fail] +library/inspector/pause.spec.ts › pause › should step [fail] +library/inspector/pause.spec.ts › pause › should step with keyboard shortcut [fail] +library/inspector/pause.spec.ts › should not reset timeouts [pass] +library/inspector/pause.spec.ts › should resume when closing inspector [pass] +library/launcher.spec.ts › should have a devices object [pass] +library/launcher.spec.ts › should have an errors object [pass] +library/launcher.spec.ts › should kill browser process on timeout after close [pass] +library/launcher.spec.ts › should throw a friendly error if its headed and there is no xserver on linux running [fail] +library/locator-generator.spec.ts › asLocator internal:and [pass] +library/locator-generator.spec.ts › asLocator internal:chain [pass] +library/locator-generator.spec.ts › asLocator internal:or [pass] +library/locator-generator.spec.ts › asLocator xpath [pass] +library/locator-generator.spec.ts › generate multiple locators [pass] +library/locator-generator.spec.ts › parse locators strictly [pass] +library/locator-generator.spec.ts › parseLocator css [pass] +library/locator-generator.spec.ts › parseLocator quotes [pass] +library/locator-generator.spec.ts › reverse engineer frameLocator [pass] +library/locator-generator.spec.ts › reverse engineer getByRole [pass] +library/locator-generator.spec.ts › reverse engineer has [pass] +library/locator-generator.spec.ts › reverse engineer has + hasText [pass] +library/locator-generator.spec.ts › reverse engineer hasNot [pass] +library/locator-generator.spec.ts › reverse engineer hasNotText [pass] +library/locator-generator.spec.ts › reverse engineer hasText [pass] +library/locator-generator.spec.ts › reverse engineer ignore-case locators [pass] +library/locator-generator.spec.ts › reverse engineer internal:has-text locators [fail] +library/locator-generator.spec.ts › reverse engineer locators [pass] +library/locator-generator.spec.ts › reverse engineer locators with regex [pass] +library/locator-generator.spec.ts › reverse engineer ordered locators [pass] +library/logger.spec.ts › should log @smoke [pass] +library/logger.spec.ts › should log context-level [fail] +library/modernizr.spec.ts › Mobile Safari [unknown] +library/modernizr.spec.ts › Safari Desktop [unknown] +library/page-clock.frozen.spec.ts › clock should be frozen [unknown] +library/page-clock.frozen.spec.ts › clock should be realtime [unknown] +library/page-clock.spec.ts › Date.now › check Date.now is an integer [pass] +library/page-clock.spec.ts › Date.now › check Date.now is an integer (2) [pass] +library/page-clock.spec.ts › fastForward › ignores timers which wouldn't be run [pass] +library/page-clock.spec.ts › fastForward › pushes back execution time for skipped timers [fail] +library/page-clock.spec.ts › fastForward › supports string time arguments [fail] +library/page-clock.spec.ts › popup › should not run time before popup on pause [fail] +library/page-clock.spec.ts › popup › should run time before popup [pass] +library/page-clock.spec.ts › popup › should tick after popup [fail] +library/page-clock.spec.ts › popup › should tick before popup [fail] +library/page-clock.spec.ts › runFor › creates updated Date while ticking [fail] +library/page-clock.spec.ts › runFor › does not trigger without sufficient delay [pass] +library/page-clock.spec.ts › runFor › passes 1 minute [fail] +library/page-clock.spec.ts › runFor › passes 2 hours, 34 minutes and 10 seconds [fail] +library/page-clock.spec.ts › runFor › passes 8 seconds [fail] +library/page-clock.spec.ts › runFor › returns the current now value [pass] +library/page-clock.spec.ts › runFor › throws for invalid format [pass] +library/page-clock.spec.ts › runFor › triggers after sufficient delay [fail] +library/page-clock.spec.ts › runFor › triggers event when some throw [fail] +library/page-clock.spec.ts › runFor › triggers immediately without specified delay [fail] +library/page-clock.spec.ts › runFor › triggers multiple simultaneous timers [fail] +library/page-clock.spec.ts › runFor › triggers simultaneous timers [fail] +library/page-clock.spec.ts › runFor › waits after setTimeout was called [fail] +library/page-clock.spec.ts › setFixedTime › allows installing fake timers after settings time [fail] +library/page-clock.spec.ts › setFixedTime › allows setting time multiple times [pass] +library/page-clock.spec.ts › setFixedTime › does not fake methods [pass] +library/page-clock.spec.ts › setFixedTime › fixed time is not affected by clock manipulation [pass] +library/page-clock.spec.ts › stubTimers › fakes Date constructor [pass] +library/page-clock.spec.ts › stubTimers › global fake setTimeout should return id [pass] +library/page-clock.spec.ts › stubTimers › replaces global clearInterval [pass] +library/page-clock.spec.ts › stubTimers › replaces global clearTimeout [pass] +library/page-clock.spec.ts › stubTimers › replaces global performance.now [pass] +library/page-clock.spec.ts › stubTimers › replaces global performance.timeOrigin [pass] +library/page-clock.spec.ts › stubTimers › replaces global setInterval [fail] +library/page-clock.spec.ts › stubTimers › replaces global setTimeout [fail] +library/page-clock.spec.ts › stubTimers › sets initial timestamp [pass] +library/page-clock.spec.ts › stubTimers › should throw for invalid date [pass] +library/page-clock.spec.ts › while on pause › fastForward should not run nested immediate [fail] +library/page-clock.spec.ts › while on pause › runFor should not run nested immediate [fail] +library/page-clock.spec.ts › while on pause › runFor should not run nested immediate from microtask [fail] +library/page-clock.spec.ts › while running › should fastForward [pass] +library/page-clock.spec.ts › while running › should fastForwardTo [pass] +library/page-clock.spec.ts › while running › should pause [pass] +library/page-clock.spec.ts › while running › should pause and fastForward [pass] +library/page-clock.spec.ts › while running › should progress time [pass] +library/page-clock.spec.ts › while running › should runFor [pass] +library/page-clock.spec.ts › while running › should set system time on pause [pass] +library/page-event-crash.spec.ts › should be able to close context when page crashes [fail] +library/page-event-crash.spec.ts › should cancel navigation when page crashes [fail] +library/page-event-crash.spec.ts › should cancel waitForEvent when page crashes [fail] +library/page-event-crash.spec.ts › should emit crash event when page crashes [fail] +library/page-event-crash.spec.ts › should throw on any action after page crashes [fail] +library/pdf.spec.ts › should be able to generate outline [unknown] +library/pdf.spec.ts › should be able to save file [unknown] +library/permissions.spec.ts › permissions › should accumulate when adding [fail] +library/permissions.spec.ts › permissions › should be prompt by default [pass] +library/permissions.spec.ts › permissions › should clear permissions [fail] +library/permissions.spec.ts › permissions › should deny permission when not listed [fail] +library/permissions.spec.ts › permissions › should fail when bad permission is given [fail] +library/permissions.spec.ts › permissions › should grant geolocation permission when origin is listed [fail] +library/permissions.spec.ts › permissions › should grant notifications permission when listed [fail] +library/permissions.spec.ts › permissions › should grant permission when creating context [fail] +library/permissions.spec.ts › permissions › should grant permission when listed for all domains [fail] +library/permissions.spec.ts › permissions › should isolate permissions between browser contexts [fail] +library/permissions.spec.ts › permissions › should prompt for geolocation permission when origin is not listed [pass] +library/permissions.spec.ts › permissions › should reset permissions [fail] +library/permissions.spec.ts › permissions › should trigger permission onchange [fail] +library/permissions.spec.ts › should support clipboard read [fail] +library/permissions.spec.ts › storage access [unknown] +library/popup.spec.ts › BrowserContext.addInitScript should apply to a cross-process popup [fail] +library/popup.spec.ts › BrowserContext.addInitScript should apply to an in-process popup [fail] +library/popup.spec.ts › should expose function from browser context [fail] +library/popup.spec.ts › should inherit extra headers from browser context [fail] +library/popup.spec.ts › should inherit http credentials from browser context [pass] +library/popup.spec.ts › should inherit offline from browser context [fail] +library/popup.spec.ts › should inherit touch support from browser context [fail] +library/popup.spec.ts › should inherit user agent from browser context @smoke [fail] +library/popup.spec.ts › should inherit viewport size from browser context [fail] +library/popup.spec.ts › should not dispatch binding on a closed page [fail] +library/popup.spec.ts › should not throttle rAF in the opener page [timeout] +library/popup.spec.ts › should not throw when click closes popup [timeout] +library/popup.spec.ts › should respect routes from browser context [fail] +library/popup.spec.ts › should respect routes from browser context when using window.open [fail] +library/popup.spec.ts › should use viewport size from window features [timeout] +library/proxy-pattern.spec.ts › socks proxy patter matcher [pass] +library/proxy.spec.ts › does launch without a port [pass] +library/proxy.spec.ts › should authenticate [pass] +library/proxy.spec.ts › should exclude patterns [fail] +library/proxy.spec.ts › should proxy local network requests › by default › link-local [pass] +library/proxy.spec.ts › should proxy local network requests › by default › localhost [fail] +library/proxy.spec.ts › should proxy local network requests › by default › loopback address [fail] +library/proxy.spec.ts › should proxy local network requests › with other bypasses › link-local [pass] +library/proxy.spec.ts › should proxy local network requests › with other bypasses › localhost [fail] +library/proxy.spec.ts › should proxy local network requests › with other bypasses › loopback address [fail] +library/proxy.spec.ts › should throw for bad server value [pass] +library/proxy.spec.ts › should use SOCKS proxy for websocket requests [pass] +library/proxy.spec.ts › should use proxy @smoke [pass] +library/proxy.spec.ts › should use proxy for second page [pass] +library/proxy.spec.ts › should use proxy with emulated user agent [unknown] +library/proxy.spec.ts › should use socks proxy [pass] +library/proxy.spec.ts › should use socks proxy in second page [pass] +library/proxy.spec.ts › should work with IP:PORT notion [pass] +library/proxy.spec.ts › should work with authenticate followed by redirect [pass] +library/resource-timing.spec.ts › should work @smoke [pass] +library/resource-timing.spec.ts › should work for SSL [fail] +library/resource-timing.spec.ts › should work for redirect [pass] +library/resource-timing.spec.ts › should work for subresource [pass] +library/resource-timing.spec.ts › should work when serving from memory cache [fail] +library/role-utils.spec.ts › accessible name nested treeitem [fail] +library/role-utils.spec.ts › accessible name with slots [fail] +library/role-utils.spec.ts › axe-core accessible-text [fail] +library/role-utils.spec.ts › axe-core implicit-role [fail] +library/role-utils.spec.ts › control embedded in a label [fail] +library/role-utils.spec.ts › control embedded in a target element [fail] +library/role-utils.spec.ts › display:contents should be visible when contents are visible [fail] +library/role-utils.spec.ts › label/labelled-by aria-hidden with descendants [fail] +library/role-utils.spec.ts › native controls [fail] +library/role-utils.spec.ts › native controls labelled-by [fail] +library/role-utils.spec.ts › own aria-label concatenated with aria-labelledby [fail] +library/role-utils.spec.ts › should ignore stylesheet from hidden aria-labelledby subtree [fail] +library/role-utils.spec.ts › should not include hidden pseudo into accessible name [fail] +library/role-utils.spec.ts › should work with form and tricky input names [fail] +library/role-utils.spec.ts › svg role=presentation [fail] +library/role-utils.spec.ts › svg title [fail] +library/role-utils.spec.ts › wpt accname #0 [pass] +library/role-utils.spec.ts › wpt accname #1 [pass] +library/role-utils.spec.ts › wpt accname #2 [fail] +library/role-utils.spec.ts › wpt accname #3 [pass] +library/role-utils.spec.ts › wpt accname non-manual [pass] +library/screenshot.spec.ts › element screenshot › element screenshot should work with a mobile viewport [fail] +library/screenshot.spec.ts › element screenshot › element screenshot should work with device scale factor [fail] +library/screenshot.spec.ts › element screenshot › element screenshots should handle vh units [fail] +library/screenshot.spec.ts › element screenshot › page screenshot should capture css transform with device pixels [fail] +library/screenshot.spec.ts › element screenshot › should capture full element when larger than viewport with device scale factor [fail] +library/screenshot.spec.ts › element screenshot › should capture full element when larger than viewport with device scale factor and scale:css [fail] +library/screenshot.spec.ts › element screenshot › should restore default viewport after fullPage screenshot [fail] +library/screenshot.spec.ts › element screenshot › should restore viewport after element screenshot and exception [fail] +library/screenshot.spec.ts › element screenshot › should restore viewport after page screenshot and exception [pass] +library/screenshot.spec.ts › element screenshot › should restore viewport after page screenshot and timeout [fail] +library/screenshot.spec.ts › element screenshot › should take element screenshot when default viewport is null and restore back [fail] +library/screenshot.spec.ts › element screenshot › should take fullPage screenshots when default viewport is null [fail] +library/screenshot.spec.ts › element screenshot › should take screenshots when default viewport is null [fail] +library/screenshot.spec.ts › element screenshot › should work if the main resource hangs [fail] +library/screenshot.spec.ts › page screenshot › should handle vh units [fail] +library/screenshot.spec.ts › page screenshot › should run in parallel in multiple pages [fail] +library/screenshot.spec.ts › page screenshot › should throw if screenshot size is too large with device scale factor [fail] +library/screenshot.spec.ts › page screenshot › should work with a mobile viewport [fail] +library/screenshot.spec.ts › page screenshot › should work with a mobile viewport and clip [fail] +library/screenshot.spec.ts › page screenshot › should work with a mobile viewport and fullPage [fail] +library/screenshot.spec.ts › page screenshot › should work with device scale factor [fail] +library/screenshot.spec.ts › page screenshot › should work with device scale factor and clip [fail] +library/screenshot.spec.ts › page screenshot › should work with device scale factor and scale:css [fail] +library/screenshot.spec.ts › page screenshot › should work with device scale factor, clip and scale:css [fail] +library/screenshot.spec.ts › page screenshot › should work with large size [fail] +library/selector-generator.spec.ts › selector generator › should accept valid aria-label for candidate consideration [fail] +library/selector-generator.spec.ts › selector generator › should accept valid data-test-id for candidate consideration [fail] +library/selector-generator.spec.ts › selector generator › should chain text after parent [fail] +library/selector-generator.spec.ts › selector generator › should escape text with quote [fail] +library/selector-generator.spec.ts › selector generator › should escape text with slash [fail] +library/selector-generator.spec.ts › selector generator › should find text in shadow dom [fail] +library/selector-generator.spec.ts › selector generator › should generate exact label when necessary [fail] +library/selector-generator.spec.ts › selector generator › should generate exact placeholder when necessary [fail] +library/selector-generator.spec.ts › selector generator › should generate exact role when necessary [fail] +library/selector-generator.spec.ts › selector generator › should generate exact text when necessary [fail] +library/selector-generator.spec.ts › selector generator › should generate exact title when necessary [fail] +library/selector-generator.spec.ts › selector generator › should generate label selector [fail] +library/selector-generator.spec.ts › selector generator › should generate multiple: noId [fail] +library/selector-generator.spec.ts › selector generator › should generate multiple: noId noText [fail] +library/selector-generator.spec.ts › selector generator › should generate multiple: noText in role [fail] +library/selector-generator.spec.ts › selector generator › should generate multiple: noText in text [fail] +library/selector-generator.spec.ts › selector generator › should generate relative selector [fail] +library/selector-generator.spec.ts › selector generator › should generate text and normalize whitespace [fail] +library/selector-generator.spec.ts › selector generator › should generate text for [fail] +library/selector-generator.spec.ts › selector generator › should generate title selector [fail] +library/selector-generator.spec.ts › selector generator › should handle first non-unique data-testid [fail] +library/selector-generator.spec.ts › selector generator › should handle second non-unique data-testid [fail] +library/selector-generator.spec.ts › selector generator › should ignore empty aria-label for candidate consideration [fail] +library/selector-generator.spec.ts › selector generator › should ignore empty data-test-id for candidate consideration [fail] +library/selector-generator.spec.ts › selector generator › should ignore empty role for candidate consideration [fail] +library/selector-generator.spec.ts › selector generator › should match in deep shadow dom [fail] +library/selector-generator.spec.ts › selector generator › should match in shadow dom [fail] +library/selector-generator.spec.ts › selector generator › should not accept invalid role for candidate consideration [fail] +library/selector-generator.spec.ts › selector generator › should not escape spaces inside named attr selectors [fail] +library/selector-generator.spec.ts › selector generator › should not escape text with >> [fail] +library/selector-generator.spec.ts › selector generator › should not improve guid text [fail] +library/selector-generator.spec.ts › selector generator › should not prefer zero-sized button over inner span [fail] +library/selector-generator.spec.ts › selector generator › should not use generated id [fail] +library/selector-generator.spec.ts › selector generator › should not use input[value] [fail] +library/selector-generator.spec.ts › selector generator › should not use text for select [fail] +library/selector-generator.spec.ts › selector generator › should prefer button over inner span [fail] +library/selector-generator.spec.ts › selector generator › should prefer data-testid [fail] +library/selector-generator.spec.ts › selector generator › should prefer role other input[type] [fail] +library/selector-generator.spec.ts › selector generator › should prefer role=button over inner span [fail] +library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › name [fail] +library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › placeholder [fail] +library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › role [fail] +library/selector-generator.spec.ts › selector generator › should prioritise attributes correctly › type [fail] +library/selector-generator.spec.ts › selector generator › should properly join child selectors under nested ordinals [fail] +library/selector-generator.spec.ts › selector generator › should separate selectors by >> [fail] +library/selector-generator.spec.ts › selector generator › should trim long text [fail] +library/selector-generator.spec.ts › selector generator › should trim text [fail] +library/selector-generator.spec.ts › selector generator › should try to improve label text by shortening [fail] +library/selector-generator.spec.ts › selector generator › should try to improve role name [fail] +library/selector-generator.spec.ts › selector generator › should try to improve text [fail] +library/selector-generator.spec.ts › selector generator › should try to improve text by shortening [fail] +library/selector-generator.spec.ts › selector generator › should use data-testid in strict errors [fail] +library/selector-generator.spec.ts › selector generator › should use internal:has-text [fail] +library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp [fail] +library/selector-generator.spec.ts › selector generator › should use internal:has-text with regexp with a quote [fail] +library/selector-generator.spec.ts › selector generator › should use nested ordinals [fail] +library/selector-generator.spec.ts › selector generator › should use ordinal for identical nodes [fail] +library/selector-generator.spec.ts › selector generator › should use parent text [fail] +library/selector-generator.spec.ts › selector generator › should use readable id [fail] +library/selector-generator.spec.ts › selector generator › should use the name attributes for elements that can have it [fail] +library/selector-generator.spec.ts › selector generator › should work in dynamic iframes without navigation [fail] +library/selector-generator.spec.ts › selector generator › should work with tricky attributes [fail] +library/selector-generator.spec.ts › selector generator › should work without CSS.escape [fail] +library/selectors-register.spec.ts › should handle errors [pass] +library/selectors-register.spec.ts › should not rely on engines working from the root [fail] +library/selectors-register.spec.ts › should throw a nice error if the selector returns a bad value [pass] +library/selectors-register.spec.ts › should work [fail] +library/selectors-register.spec.ts › should work in main and isolated world [fail] +library/selectors-register.spec.ts › should work when registered on global [fail] +library/selectors-register.spec.ts › should work with path [fail] +library/shared-worker.spec.ts › should survive shared worker restart [pass] +library/signals.spec.ts › should close the browser when the node process closes [timeout] +library/signals.spec.ts › should remove temp dir on process.exit [timeout] +library/signals.spec.ts › signals › should close the browser on SIGHUP [timeout] +library/signals.spec.ts › signals › should close the browser on SIGINT [timeout] +library/signals.spec.ts › signals › should close the browser on SIGTERM [timeout] +library/signals.spec.ts › signals › should kill the browser on SIGINT + SIGTERM [timeout] +library/signals.spec.ts › signals › should kill the browser on SIGTERM + SIGINT [timeout] +library/signals.spec.ts › signals › should kill the browser on double SIGINT and remove temp dir [timeout] +library/signals.spec.ts › signals › should not prevent default SIGTERM handling after browser close [timeout] +library/signals.spec.ts › signals › should report browser close signal 2 [timeout] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo check [fail] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo click [fail] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dblclick [fail] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo dispatchEvent [fail] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo fill [fail] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo focus [fail] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo hover [fail] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo press [fail] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo selectOption [fail] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo setInputFiles [fail] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo type [fail] +library/slowmo.spec.ts › slowMo › ElementHandle SlowMo uncheck [fail] +library/slowmo.spec.ts › slowMo › Frame SlowMo check [fail] +library/slowmo.spec.ts › slowMo › Frame SlowMo click [fail] +library/slowmo.spec.ts › slowMo › Frame SlowMo dblclick [fail] +library/slowmo.spec.ts › slowMo › Frame SlowMo dispatchEvent [fail] +library/slowmo.spec.ts › slowMo › Frame SlowMo fill [fail] +library/slowmo.spec.ts › slowMo › Frame SlowMo focus [fail] +library/slowmo.spec.ts › slowMo › Frame SlowMo goto [fail] +library/slowmo.spec.ts › slowMo › Frame SlowMo hover [fail] +library/slowmo.spec.ts › slowMo › Frame SlowMo press [fail] +library/slowmo.spec.ts › slowMo › Frame SlowMo selectOption [fail] +library/slowmo.spec.ts › slowMo › Frame SlowMo setInputFiles [fail] +library/slowmo.spec.ts › slowMo › Frame SlowMo type [fail] +library/slowmo.spec.ts › slowMo › Frame SlowMo uncheck [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo check [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo click [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo dblclick [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo dispatchEvent [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo fill [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo focus [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo goto [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo hover [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo press [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo reload [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo selectOption [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo setInputFiles [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo type [fail] +library/slowmo.spec.ts › slowMo › Page SlowMo uncheck [fail] +library/snapshotter.spec.ts › snapshots › empty adopted style sheets should not prevent node refs [fail] +library/snapshotter.spec.ts › snapshots › should capture frame [pass] +library/snapshotter.spec.ts › snapshots › should capture iframe [fail] +library/snapshotter.spec.ts › snapshots › should capture iframe with srcdoc [pass] +library/snapshotter.spec.ts › snapshots › should capture resources [fail] +library/snapshotter.spec.ts › snapshots › should capture snapshot target [fail] +library/snapshotter.spec.ts › snapshots › should collect multiple [fail] +library/snapshotter.spec.ts › snapshots › should collect on attribute change [fail] +library/snapshotter.spec.ts › snapshots › should collect snapshot [fail] +library/snapshotter.spec.ts › snapshots › should have a custom doctype [fail] +library/snapshotter.spec.ts › snapshots › should not navigate on anchor clicks [fail] +library/snapshotter.spec.ts › snapshots › should preserve BASE and other content on reset [pass] +library/snapshotter.spec.ts › snapshots › should replace meta charset attr that specifies charset [fail] +library/snapshotter.spec.ts › snapshots › should replace meta content attr that specifies charset [fail] +library/snapshotter.spec.ts › snapshots › should respect CSSOM change through CSSGroupingRule [fail] +library/snapshotter.spec.ts › snapshots › should respect attr removal [fail] +library/snapshotter.spec.ts › snapshots › should respect inline CSSOM change [fail] +library/snapshotter.spec.ts › snapshots › should respect node removal [fail] +library/snapshotter.spec.ts › snapshots › should respect subresource CSSOM change [fail] +library/tap.spec.ts › locators › should send all of the correct events [fail] +library/tap.spec.ts › should not send mouse events touchstart is canceled [fail] +library/tap.spec.ts › should not send mouse events when touchend is canceled [fail] +library/tap.spec.ts › should not wait for a navigation caused by a tap [fail] +library/tap.spec.ts › should send all of the correct events @smoke [fail] +library/tap.spec.ts › should send well formed touch points [fail] +library/tap.spec.ts › should wait until an element is visible to tap it [fail] +library/tap.spec.ts › should work with modifiers [fail] +library/tap.spec.ts › trial run should not tap [fail] +library/trace-viewer.spec.ts › should allow hiding route actions [unknown] +library/trace-viewer.spec.ts › should allow showing screenshots instead of snapshots [unknown] +library/trace-viewer.spec.ts › should capture data-url svg iframe [unknown] +library/trace-viewer.spec.ts › should capture iframe with sandbox attribute [fail] +library/trace-viewer.spec.ts › should complain about newer version of trace in old viewer [unknown] +library/trace-viewer.spec.ts › should contain action info [unknown] +library/trace-viewer.spec.ts › should contain adopted style sheets [unknown] +library/trace-viewer.spec.ts › should display language-specific locators [unknown] +library/trace-viewer.spec.ts › should display waitForLoadState even if did not wait for it [fail] +library/trace-viewer.spec.ts › should filter network requests by resource type [unknown] +library/trace-viewer.spec.ts › should filter network requests by url [unknown] +library/trace-viewer.spec.ts › should follow redirects [fail] +library/trace-viewer.spec.ts › should handle case where neither snapshots nor screenshots exist [unknown] +library/trace-viewer.spec.ts › should handle file URIs [unknown] +library/trace-viewer.spec.ts › should handle multiple headers [fail] +library/trace-viewer.spec.ts › should handle src=blob [unknown] +library/trace-viewer.spec.ts › should have correct snapshot size [unknown] +library/trace-viewer.spec.ts › should have correct stack trace [fail] +library/trace-viewer.spec.ts › should have network request overrides [unknown] +library/trace-viewer.spec.ts › should have network request overrides 2 [fail] +library/trace-viewer.spec.ts › should have network requests [unknown] +library/trace-viewer.spec.ts › should highlight expect failure [unknown] +library/trace-viewer.spec.ts › should highlight locator in iframe while typing [fail] +library/trace-viewer.spec.ts › should highlight target element in shadow dom [fail] +library/trace-viewer.spec.ts › should highlight target elements [unknown] +library/trace-viewer.spec.ts › should ignore 304 responses [unknown] +library/trace-viewer.spec.ts › should include metainfo [unknown] +library/trace-viewer.spec.ts › should include requestUrl in route.abort [unknown] +library/trace-viewer.spec.ts › should include requestUrl in route.continue [fail] +library/trace-viewer.spec.ts › should include requestUrl in route.fulfill [unknown] +library/trace-viewer.spec.ts › should not crash with broken locator [unknown] +library/trace-viewer.spec.ts › should open console errors on click [unknown] +library/trace-viewer.spec.ts › should open simple trace viewer [fail] +library/trace-viewer.spec.ts › should open snapshot in new browser context [unknown] +library/trace-viewer.spec.ts › should open trace viewer on specific host [unknown] +library/trace-viewer.spec.ts › should open trace-1.31 [unknown] +library/trace-viewer.spec.ts › should open trace-1.37 [unknown] +library/trace-viewer.spec.ts › should open two trace files [unknown] +library/trace-viewer.spec.ts › should open two trace files of the same test [fail] +library/trace-viewer.spec.ts › should open two trace viewers [unknown] +library/trace-viewer.spec.ts › should pick locator [unknown] +library/trace-viewer.spec.ts › should pick locator in iframe [unknown] +library/trace-viewer.spec.ts › should popup snapshot [unknown] +library/trace-viewer.spec.ts › should prefer later resource request with the same method [fail] +library/trace-viewer.spec.ts › should preserve currentSrc [fail] +library/trace-viewer.spec.ts › should preserve noscript when javascript is disabled [unknown] +library/trace-viewer.spec.ts › should register custom elements [unknown] +library/trace-viewer.spec.ts › should remove noscript by default [unknown] +library/trace-viewer.spec.ts › should remove noscript when javaScriptEnabled is set to true [fail] +library/trace-viewer.spec.ts › should render console [unknown] +library/trace-viewer.spec.ts › should render network bars [fail] +library/trace-viewer.spec.ts › should restore control values [unknown] +library/trace-viewer.spec.ts › should restore scroll positions [fail] +library/trace-viewer.spec.ts › should serve css without content-type [fail] +library/trace-viewer.spec.ts › should serve overridden request [unknown] +library/trace-viewer.spec.ts › should show action source [unknown] +library/trace-viewer.spec.ts › should show baseURL in metadata pane [unknown] +library/trace-viewer.spec.ts › should show correct request start time [fail] +library/trace-viewer.spec.ts › should show empty trace viewer [fail] +library/trace-viewer.spec.ts › should show font preview [fail] +library/trace-viewer.spec.ts › should show null as a param [unknown] +library/trace-viewer.spec.ts › should show only one pointer with multilevel iframes [fail] +library/trace-viewer.spec.ts › should show params and return value [fail] +library/trace-viewer.spec.ts › should show similar actions from library-only trace [unknown] +library/trace-viewer.spec.ts › should show snapshot URL [unknown] +library/trace-viewer.spec.ts › should update highlight when typing [fail] +library/trace-viewer.spec.ts › should work with adopted style sheets and all: unset [unknown] +library/trace-viewer.spec.ts › should work with adopted style sheets and replace/replaceSync [fail] +library/trace-viewer.spec.ts › should work with meta CSP [unknown] +library/trace-viewer.spec.ts › should work with nesting CSS selectors [unknown] +library/tracing.spec.ts › should collect sources [fail] +library/tracing.spec.ts › should collect trace with resources, but no js [fail] +library/tracing.spec.ts › should collect two traces [fail] +library/tracing.spec.ts › should exclude internal pages [pass] +library/tracing.spec.ts › should export trace concurrently to second navigation [pass] +library/tracing.spec.ts › should flush console events on tracing stop [pass] +library/tracing.spec.ts › should hide internal stack frames [fail] +library/tracing.spec.ts › should hide internal stack frames in expect [fail] +library/tracing.spec.ts › should ignore iframes in head [pass] +library/tracing.spec.ts › should include context API requests [pass] +library/tracing.spec.ts › should include interrupted actions [fail] +library/tracing.spec.ts › should not collect snapshots by default [fail] +library/tracing.spec.ts › should not crash when browser closes mid-trace [pass] +library/tracing.spec.ts › should not emit after w/o before [pass] +library/tracing.spec.ts › should not flush console events [pass] +library/tracing.spec.ts › should not hang for clicks that open dialogs [fail] +library/tracing.spec.ts › should not include buffers in the trace [fail] +library/tracing.spec.ts › should not include trace resources from the previous chunks [fail] +library/tracing.spec.ts › should not stall on dialogs [pass] +library/tracing.spec.ts › should not throw when stopping without start but not exporting [pass] +library/tracing.spec.ts › should overwrite existing file [fail] +library/tracing.spec.ts › should produce screencast frames crop [fail] +library/tracing.spec.ts › should produce screencast frames fit [fail] +library/tracing.spec.ts › should produce screencast frames scale [fail] +library/tracing.spec.ts › should record global request trace [pass] +library/tracing.spec.ts › should record network failures [pass] +library/tracing.spec.ts › should respect tracesDir and name [fail] +library/tracing.spec.ts › should store global request traces separately [pass] +library/tracing.spec.ts › should store postData for global request [pass] +library/tracing.spec.ts › should survive browser.close with auto-created traces dir [pass] +library/tracing.spec.ts › should throw when starting with different options [pass] +library/tracing.spec.ts › should throw when stopping without start [pass] +library/tracing.spec.ts › should use the correct apiName for event driven callbacks [pass] +library/tracing.spec.ts › should work with multiple chunks [fail] +library/unroute-behavior.spec.ts › context.close should not wait for active route handlers on the owned pages [pass] +library/unroute-behavior.spec.ts › context.unroute should not wait for pending handlers to complete [timeout] +library/unroute-behavior.spec.ts › context.unrouteAll removes all handlers [fail] +library/unroute-behavior.spec.ts › context.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [timeout] +library/unroute-behavior.spec.ts › context.unrouteAll should wait for pending handlers to complete [timeout] +library/unroute-behavior.spec.ts › page.close does not wait for active route handlers [fail] +library/unroute-behavior.spec.ts › page.close should not wait for active route handlers on the owning context [pass] +library/unroute-behavior.spec.ts › page.unroute should not wait for pending handlers to complete [pass] +library/unroute-behavior.spec.ts › page.unrouteAll removes all routes [pass] +library/unroute-behavior.spec.ts › page.unrouteAll should not wait for pending handlers to complete if behavior is ignoreErrors [pass] +library/unroute-behavior.spec.ts › page.unrouteAll should wait for pending handlers to complete [fail] +library/unroute-behavior.spec.ts › route.continue should not throw if page has been closed [pass] +library/unroute-behavior.spec.ts › route.fallback should not throw if page has been closed [pass] +library/unroute-behavior.spec.ts › route.fulfill should not throw if page has been closed [pass] +library/video.spec.ts › screencast › saveAs should throw when no video frames [timeout] +library/video.spec.ts › screencast › should be 800x450 by default [timeout] +library/video.spec.ts › screencast › should be 800x600 with null viewport [timeout] +library/video.spec.ts › screencast › should capture css transformation [timeout] +library/video.spec.ts › screencast › should capture full viewport [fail] +library/video.spec.ts › screencast › should capture full viewport on hidpi [fail] +library/video.spec.ts › screencast › should capture navigation [timeout] +library/video.spec.ts › screencast › should capture static page [timeout] +library/video.spec.ts › screencast › should capture static page in persistent context @smoke [fail] +library/video.spec.ts › screencast › should continue recording main page after popup closes [fail] +library/video.spec.ts › screencast › should delete video [timeout] +library/video.spec.ts › screencast › should emulate an iphone [timeout] +library/video.spec.ts › screencast › should expose video path [timeout] +library/video.spec.ts › screencast › should expose video path blank page [fail] +library/video.spec.ts › screencast › should expose video path blank popup [timeout] +library/video.spec.ts › screencast › should not create video for internal pages [unknown] +library/video.spec.ts › screencast › should scale frames down to the requested size [timeout] +library/video.spec.ts › screencast › should throw if browser dies [fail] +library/video.spec.ts › screencast › should throw on browser close [fail] +library/video.spec.ts › screencast › should throw without recordVideo.dir [pass] +library/video.spec.ts › screencast › should use viewport scaled down to fit into 800x800 as default size [timeout] +library/video.spec.ts › screencast › should wait for video to finish if page was closed [fail] +library/video.spec.ts › screencast › should work for popups [timeout] +library/video.spec.ts › screencast › should work with old options [timeout] +library/video.spec.ts › screencast › should work with relative path for recordVideo.dir [timeout] +library/video.spec.ts › screencast › should work with video+trace [timeout] +library/video.spec.ts › screencast › should work with weird screen resolution [timeout] +library/video.spec.ts › screencast › videoSize should require videosPath [pass] +library/video.spec.ts › should saveAs video [timeout] +library/web-socket.spec.ts › should emit binary frame events [timeout] +library/web-socket.spec.ts › should emit close events [timeout] +library/web-socket.spec.ts › should emit error [timeout] +library/web-socket.spec.ts › should emit frame events [timeout] +library/web-socket.spec.ts › should filter out the close events when the server closes with a message [timeout] +library/web-socket.spec.ts › should not have stray error events [timeout] +library/web-socket.spec.ts › should pass self as argument to close event [timeout] +library/web-socket.spec.ts › should reject waitForEvent on page close [timeout] +library/web-socket.spec.ts › should reject waitForEvent on socket close [timeout] +library/web-socket.spec.ts › should turn off when offline [unknown] +library/web-socket.spec.ts › should work @smoke [pass] \ No newline at end of file diff --git a/tests/bidi/expectations/bidi-firefox-beta-page.txt b/tests/bidi/expectations/bidi-firefox-beta-page.txt index b9e4bd9bd7..85489527fa 100644 --- a/tests/bidi/expectations/bidi-firefox-beta-page.txt +++ b/tests/bidi/expectations/bidi-firefox-beta-page.txt @@ -1,1971 +1,1971 @@ -bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should force a layout [fail] -bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should get frame box [fail] -bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should handle nested frames [fail] -bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should handle scroll offset and click [fail] -bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should return null for invisible elements [fail] -bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should work [fail] -bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should work when inline box child is outside of viewport [fail] -bidi-firefox-beta-page › page/elementhandle-bounding-box.spec.ts › should work with SVG nodes [fail] -bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should double click the button [fail] -bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should throw for
elements with force [fail] -bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should throw for detached nodes [pass] -bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should throw for hidden nodes with force [pass] -bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should throw for recursively hidden nodes with force [pass] -bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should work @smoke [pass] -bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should work for Shadow DOM v1 [pass] -bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should work for TextNodes [fail] -bidi-firefox-beta-page › page/elementhandle-click.spec.ts › should work with Node removed [pass] -bidi-firefox-beta-page › page/elementhandle-content-frame.spec.ts › should return null for document.documentElement [pass] -bidi-firefox-beta-page › page/elementhandle-content-frame.spec.ts › should return null for non-iframes [pass] -bidi-firefox-beta-page › page/elementhandle-content-frame.spec.ts › should work [pass] -bidi-firefox-beta-page › page/elementhandle-content-frame.spec.ts › should work for cross-frame evaluations [fail] -bidi-firefox-beta-page › page/elementhandle-content-frame.spec.ts › should work for cross-process iframes [pass] -bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › getAttribute should work [pass] -bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › innerHTML should work [pass] -bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › innerText should throw [fail] -bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › innerText should work [pass] -bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › inputValue should work [fail] -bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › isChecked should work [fail] -bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › isEditable should work [fail] -bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › isEnabled and isDisabled should work [fail] -bidi-firefox-beta-page › page/elementhandle-convenience.spec.ts › isEnabled and isDisabled should work with [fail] -bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect color value [fail] -bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect date [fail] -bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect datetime-local [unknown] -bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect month [unknown] -bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect range value [fail] -bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect time [fail] -bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on incorrect week [unknown] -bidi-firefox-beta-page › page/page-fill.spec.ts › should throw on unsupported inputs [pass] -bidi-firefox-beta-page › page/page-focus.spec.ts › clicking checkbox should activate it [unknown] -bidi-firefox-beta-page › page/page-focus.spec.ts › keeps focus on element when attempting to focus a non-focusable element [fail] -bidi-firefox-beta-page › page/page-focus.spec.ts › should emit blur event [fail] -bidi-firefox-beta-page › page/page-focus.spec.ts › should emit focus event [fail] -bidi-firefox-beta-page › page/page-focus.spec.ts › should traverse focus [fail] -bidi-firefox-beta-page › page/page-focus.spec.ts › should traverse focus in all directions [fail] -bidi-firefox-beta-page › page/page-focus.spec.ts › should traverse only form elements [flaky] -bidi-firefox-beta-page › page/page-focus.spec.ts › should work @smoke [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › js redirect overrides url bar navigation [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should be able to navigate to a page controlled by service worker [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should capture cross-process iframe navigation request [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should capture iframe navigation request [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should disable timeout when its set to 0 [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when canceled by another navigation [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when exceeding browser context navigation timeout [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when exceeding browser context timeout [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when exceeding default maximum navigation timeout [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when exceeding default maximum timeout [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when exceeding maximum navigation timeout [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when main resources failed to load [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when navigating and show the url at the error message [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when navigating to bad SSL [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when navigating to bad SSL after redirects [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when navigating to bad url [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when replaced by another navigation [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should fail when server returns 204 [timeout] -bidi-firefox-beta-page › page/page-goto.spec.ts › should navigate to URL with hash and fire requests without hash [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should navigate to about:blank [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should navigate to dataURL and not fire dataURL requests [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should navigate to empty page with domcontentloaded [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should not crash when RTCPeerConnection is used [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should not crash when navigating to bad SSL after a cross origin navigation [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should not leak listeners during 20 waitForNavigation [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should not leak listeners during bad navigation [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should not leak listeners during navigation [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should not resolve goto upon window.stop() [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should not throw if networkidle0 is passed as an option [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should not throw unhandled rejections on invalid url [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should override referrer-policy [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should prioritize default navigation timeout over default timeout [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should properly wait for load [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should reject referer option when setExtraHTTPHeaders provides referer [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should report raw buffer for main resource [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should return from goto if new navigation is started [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should return last response in redirect chain [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should return response when page changes its URL after load [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should return url with basic auth info [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should return when navigation is committed if commit is specified [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should send referer [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should send referer of cross-origin URL [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should succeed on url bar navigation when there is pending navigation [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should throw if networkidle2 is passed as an option [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should use http for no protocol [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should wait for load when iframe attaches and detaches [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work @smoke [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work cross-process [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work when navigating to 404 [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work when navigating to data url [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work when navigating to valid url [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work when page calls history API in beforeunload [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy after redirect [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy and interception [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work with anchor navigation [timeout] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work with cross-process that fails before committing [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work with file URL [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work with file URL with subframes [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work with lazy loading iframes [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work with redirects [fail] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work with self requesting page [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work with subframes return 204 [pass] -bidi-firefox-beta-page › page/page-goto.spec.ts › should work with subframes return 204 with domcontentloaded [pass] -bidi-firefox-beta-page › page/page-history.spec.ts › goBack/goForward should work with bfcache-able pages [fail] -bidi-firefox-beta-page › page/page-history.spec.ts › page.goBack during renderer-initiated navigation [fail] -bidi-firefox-beta-page › page/page-history.spec.ts › page.goBack should work @smoke [fail] -bidi-firefox-beta-page › page/page-history.spec.ts › page.goBack should work for file urls [fail] -bidi-firefox-beta-page › page/page-history.spec.ts › page.goBack should work with HistoryAPI [fail] -bidi-firefox-beta-page › page/page-history.spec.ts › page.goForward during renderer-initiated navigation [fail] -bidi-firefox-beta-page › page/page-history.spec.ts › page.reload during renderer-initiated navigation [fail] -bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should not resolve with same-document navigation [fail] -bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should work [pass] -bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should work on a page with a hash [pass] -bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should work on a page with a hash at the end [pass] -bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should work with cross-origin redirect [pass] -bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should work with data url [pass] -bidi-firefox-beta-page › page/page-history.spec.ts › page.reload should work with same origin redirect [pass] -bidi-firefox-beta-page › page/page-history.spec.ts › regression test for issue 20791 [pass] -bidi-firefox-beta-page › page/page-history.spec.ts › should reload proper page [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › insertText should only emit input event [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › pressing Meta should not result in any text insertion on any platform [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should be able to prevent selectAll [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should dispatch a click event on a button when Enter gets pressed [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should dispatch a click event on a button when Space gets pressed [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should dispatch insertText after context menu was opened [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should expose keyIdentifier in webkit [unknown] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should handle selectAll [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should have correct Keydown/Keyup order when pressing Escape key [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should move around the selection in a contenteditable [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should move to the start of the document [unknown] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should move with the arrow keys [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should not type canceled events [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should press Enter [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should press plus [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should press shift plus [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should press the meta key [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should report multiple modifiers [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should report shiftKey [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should scroll with PageDown [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should send a character with ElementHandle.press [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should send a character with insertText [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should send proper codes while typing [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should send proper codes while typing with shift [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should shift raw codes [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should specify location [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should specify repeat property [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should support MacOS shortcuts [unknown] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should support multiple plus-separated modifiers [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should support plus-separated modifiers [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should support simple copy-pasting [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should support simple cut-pasting [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should support undo-redo [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should throw on unknown keys [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type after context menu was opened [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type all kinds of characters [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type emoji [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type emoji into an iframe [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type into a textarea @smoke [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom with nested elements [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should type repeatedly in input in shadow dom [fail] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should work after a cross origin navigation [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › should work with keyboard events with empty.html [pass] -bidi-firefox-beta-page › page/page-keyboard.spec.ts › type to non-focusable element should maintain old focus [fail] -bidi-firefox-beta-page › page/page-leaks.spec.ts › click should not leak [fail] -bidi-firefox-beta-page › page/page-leaks.spec.ts › expect should not leak [fail] -bidi-firefox-beta-page › page/page-leaks.spec.ts › fill should not leak [fail] -bidi-firefox-beta-page › page/page-leaks.spec.ts › waitFor should not leak [fail] -bidi-firefox-beta-page › page/page-listeners.spec.ts › should not throw with ignoreErrors [pass] -bidi-firefox-beta-page › page/page-listeners.spec.ts › should wait [pass] -bidi-firefox-beta-page › page/page-listeners.spec.ts › wait should throw [pass] -bidi-firefox-beta-page › page/page-mouse.spec.ts › down and up should generate click [pass] -bidi-firefox-beta-page › page/page-mouse.spec.ts › should always round down [fail] -bidi-firefox-beta-page › page/page-mouse.spec.ts › should click the document @smoke [pass] -bidi-firefox-beta-page › page/page-mouse.spec.ts › should dblclick the div [fail] -bidi-firefox-beta-page › page/page-mouse.spec.ts › should dispatch mouse move after context menu was opened [pass] -bidi-firefox-beta-page › page/page-mouse.spec.ts › should not crash on mouse drag with any button [pass] -bidi-firefox-beta-page › page/page-mouse.spec.ts › should pointerdown the div with a custom button [fail] -bidi-firefox-beta-page › page/page-mouse.spec.ts › should report correct buttons property [pass] -bidi-firefox-beta-page › page/page-mouse.spec.ts › should select the text with mouse [pass] -bidi-firefox-beta-page › page/page-mouse.spec.ts › should set modifier keys on click [pass] -bidi-firefox-beta-page › page/page-mouse.spec.ts › should trigger hover state [pass] -bidi-firefox-beta-page › page/page-mouse.spec.ts › should trigger hover state on disabled button [pass] -bidi-firefox-beta-page › page/page-mouse.spec.ts › should trigger hover state with removed window.Node [pass] -bidi-firefox-beta-page › page/page-mouse.spec.ts › should tween mouse movement [pass] -bidi-firefox-beta-page › page/page-navigation.spec.ts › should work with _blank target [pass] -bidi-firefox-beta-page › page/page-navigation.spec.ts › should work with _blank target in form [fail] -bidi-firefox-beta-page › page/page-navigation.spec.ts › should work with cross-process _blank target [pass] -bidi-firefox-beta-page › page/page-network-idle.spec.ts › should navigate to empty page with networkidle [pass] -bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle from the child frame [pass] -bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle from the popup [fail] -bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent [fail] -bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent from the child frame [fail] -bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle in setContent with request from previous navigation [fail] -bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle in waitForNavigation [pass] -bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation [pass] -bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation with request from previous navigation [fail] -bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle when iframe attaches and detaches [fail] -bidi-firefox-beta-page › page/page-network-idle.spec.ts › should wait for networkidle when navigating iframe [pass] -bidi-firefox-beta-page › page/page-network-idle.spec.ts › should work after repeated navigations in the same page [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › page.reload return 304 status code [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should get the same headers as the server [fail] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should get the same headers as the server CORS [fail] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should get |undefined| with postData() when there is no post data [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should get |undefined| with postDataJSON() when there is no post data [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should handle mixed-content blocked requests [flaky] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should not allow to access frame on popup main request [fail] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should not get preflight CORS requests when intercepting [fail] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should not return allHeaders() until they are available [fail] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should not work for a redirect and interception [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should override post data content type [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded [fail] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded; charset=UTF-8 [fail] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should parse the json post data [fail] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should report all cookies in one header [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should report raw headers [fail] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should report raw response headers in redirects [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should return event source [fail] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should return headers [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should return multipart/form-data [fail] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should return navigation bit [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should return navigation bit when navigating to image [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should return postData [fail] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should work for a redirect [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should work for fetch requests @smoke [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should work for main frame navigation request [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should work for subframe navigation request [pass] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should work with binary post data [fail] -bidi-firefox-beta-page › page/page-network-request.spec.ts › should work with binary post data and interception [fail] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should behave the same way for headers and allHeaders [pass] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should bypass disk cache when context interception is enabled [fail] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should bypass disk cache when page interception is enabled [pass] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should provide a Response with a file URL [fail] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should reject response.finished if context closes [timeout] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should reject response.finished if page closes [pass] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should report all headers [fail] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should report if request was fromServiceWorker [fail] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should report multiple set-cookie headers [fail] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should return body [fail] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should return body for prefetch script [fail] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should return body with compression [fail] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should return headers after route.fulfill [pass] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should return json [fail] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should return multiple header value [pass] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should return set-cookie header after route.fulfill [pass] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should return status text [pass] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should return text [fail] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should return uncompressed text [fail] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should throw when requesting body of redirected response [pass] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should wait until response completes [fail] -bidi-firefox-beta-page › page/page-network-response.spec.ts › should work @smoke [pass] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should handle redirects [pass] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should have correct responseBodySize for 404 with content [pass] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize [pass] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize for chunked request [fail] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should have the correct responseBodySize with gzip compression [pass] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should return sizes without hanging [pass] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should set bodySize and headersSize [fail] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should set bodySize to 0 if there was no body [pass] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should set bodySize to 0 when there was no response body [pass] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should set bodySize, headersSize, and transferSize [pass] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should throw for failed requests [pass] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should work with 200 status code [pass] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should work with 401 status code [pass] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should work with 404 status code [pass] -bidi-firefox-beta-page › page/page-network-sizes.spec.ts › should work with 500 status code [fail] -bidi-firefox-beta-page › page/page-object-count.spec.ts › should count objects [flaky] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › continue should delete headers on redirects [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › continue should not change multipart/form-data body [fail] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › continue should propagate headers to redirects [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should amend binary post data [fail] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should amend longer post data [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should amend method and post data [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should amend post data [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should amend utf8 post data [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should compute content-length from post data [fail] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › post data › should use content-type from original request [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › redirected requests should report overridden headers [fail] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should amend HTTP headers [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should amend method [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should amend method on main request [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should continue preload link requests [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should delete header with undefined value [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should delete the origin header [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should intercept css variable with background url [fail] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should not allow changing protocol when overriding url [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should not throw if request was cancelled by the page [timeout] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should not throw when continuing after page is closed [fail] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should not throw when continuing while page is closing [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should override method along with url [fail] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should override request url [timeout] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should work [pass] -bidi-firefox-beta-page › page/page-request-continue.spec.ts › should work with Cross-Origin-Opener-Policy [fail] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › post data › should amend binary post data [fail] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › post data › should amend json post data [pass] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › post data › should amend post data [pass] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should amend HTTP headers [pass] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should amend method [pass] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should chain once [fail] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should delete header with undefined value [pass] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should fall back [pass] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should fall back after exception [pass] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should fall back async [fail] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should not chain abort [fail] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should not chain fulfill [fail] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should override request url [fail] -bidi-firefox-beta-page › page/page-request-fallback.spec.ts › should work [pass] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › headerValue should return set-cookie from intercepted response [pass] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should allow mocking binary responses [fail] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should allow mocking svg with charset [fail] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fetch original request and fulfill [pass] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill json [fail] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill preload link requests [pass] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with fetch response that has multiple set-cookie [timeout] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with fetch result [fail] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with fetch result and overrides [fail] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with global fetch result [fail] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with gzip and readback [timeout] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with har response [fail] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with multiple set-cookie [fail] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should fulfill with unuassigned status codes [pass] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should include the origin header [pass] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should not go to the network for fulfilled requests body [fail] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should not modify the headers sent to the server [pass] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should not throw if request was cancelled by the page [timeout] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should stringify intercepted request response headers [pass] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should work [pass] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should work with buffer as body [fail] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should work with file path [fail] -bidi-firefox-beta-page › page/page-request-fulfill.spec.ts › should work with status code 422 [pass] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › request.postData is not null when fetching FormData with a Blob [fail] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should fulfill intercepted response [fail] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should fulfill intercepted response using alias [pass] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should fulfill popup main request using alias [fail] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should fulfill response with empty body [fail] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should fulfill with any response [fail] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should give access to the intercepted response [fail] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should give access to the intercepted response body [pass] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should intercept multipart/form-data request body [fail] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should intercept with post data override [pass] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should intercept with url override [fail] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should not follow redirects when maxRedirects is set to 0 in route.fetch [pass] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should override with defaults when intercepted response not provided [fail] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should support fulfill after intercept [fail] -bidi-firefox-beta-page › page/page-request-intercept.spec.ts › should support timeout option in route.fetch [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › route.abort should throw if called twice [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › route.continue should throw if called twice [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › route.fallback should throw if called twice [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › route.fulfill should throw if called twice [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should add Access-Control-Allow-Origin by default when fulfill [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should allow null origin for about:blank [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should be able to fetch dataURL and not fire dataURL requests [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should be able to remove headers [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should be abortable [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should be abortable with custom error codes [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should chain fallback w/ dynamic URL [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should contain raw request header [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should contain raw response header [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should contain raw response header after fulfill [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should contain referer header [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should fail navigation when aborting main resource [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should fulfill with redirect status [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should intercept @smoke [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should intercept main resource during cross-process navigation [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should intercept when postData is more than 1MB [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should navigate to URL with hash and and fire requests without hash [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should navigate to dataURL and not fire dataURL requests [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should not auto-intercept non-preflight OPTIONS [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should not fulfill with redirect status [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should not throw "Invalid Interception Id" if the request was cancelled [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should not throw if request was cancelled by the page [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should not work with redirects [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should override cookie header [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should pause intercepted XHR until continue [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should pause intercepted fetch request until continue [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should properly return navigation response when URL has cookies [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should reject cors with disallowed credentials [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should respect cors overrides [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should send referer [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should show custom HTTP headers [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should support ? in glob pattern [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should support async handler w/ times [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should support cors for different methods [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should support cors with GET [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should support cors with POST [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should support cors with credentials [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should support the times parameter with route matching [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should unroute [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should work if handler with times parameter was removed from another handler [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should work when POST is redirected with 302 [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should work when header manipulation headers with redirect [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should work with badly encoded server [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should work with custom referer headers [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should work with encoded server [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should work with encoded server - 2 [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should work with equal requests [pass] -bidi-firefox-beta-page › page/page-route.spec.ts › should work with redirect inside sync XHR [fail] -bidi-firefox-beta-page › page/page-route.spec.ts › should work with redirects for subresources [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should capture screenshots after layoutchanges in transitionend event [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should fire transitionend for finite transitions [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture css animations in shadow DOM [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite css animation [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite web animations [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should not capture pseudo element css animation [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should not change animation with playbackRate equal to 0 [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should resume infinite animations [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should stop animations that happen right before screenshot [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for INfinite css animation [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for css transitions [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for finite css animation [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot animations › should wait for fonts to load [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot should capture css transform [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should hide elements based on attr [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask in parallel [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask inside iframe [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should mask multiple elements [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should remove elements based on attr [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should remove mask after screenshot [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when mask color is not pink #F0F [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe has stalled navigation [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe used document.open after a weird url [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work with elementhandle [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › mask option › should work with locator [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › path option should create subdirectories [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › path option should detect jpeg [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › path option should throw for unsupported mime type [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › path option should work [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › quality option should throw for png [pass] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should allow transparency [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should capture blinking caret if explicitly asked for [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should capture blinking caret in shadow dom [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should capture canvas changes [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should clip elements to the viewport [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should clip rect [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should clip rect with fullPage [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should not capture blinking caret by default [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should not issue resize event [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should prefer type over extension [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should render white background on jpeg file [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should restore viewport after fullPage screenshot [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should run in parallel [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots and mask elements outside of it [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots during navigation [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should throw on clip outside the viewport [pass] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work @smoke [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work for canvas [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work for translateZ [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work for webgl [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work while navigating [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work with Array deleted [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work with iframe in shadow [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › should work with odd clip size on Retina displays [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › page screenshot › zero quality option should throw for png [pass] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › should capture css box-shadow [fail] -bidi-firefox-beta-page › page/page-screenshot.spec.ts › should throw if screenshot size is too large [fail] -bidi-firefox-beta-page › page/page-select-option.spec.ts › input event.composed should be true and cross shadow dom boundary [fail] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should deselect all options when passed no values for a multiple select [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should deselect all options when passed no values for a select without multiple [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should fall back to selecting by label [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should not allow null items [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should not select single option when some attributes do not match [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should not throw when select causes navigation [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should respect event bubbling [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should return [] on no matched values [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should return [] on no values [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should return an array of matched values [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should return an array of one element when multiple is not set [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should select multiple options [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should select multiple options with attributes [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should select only first option [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should select single option @smoke [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should select single option by handle [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should select single option by index [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should select single option by label [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should select single option by multiple attributes [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should select single option by value [pass] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should throw if passed wrong types [fail] -bidi-firefox-beta-page › page/page-select-option.spec.ts › should throw when element is not a option/optgroup correctly [fail] +page/elementhandle-convenience.spec.ts › isVisible and isHidden should work [fail] +page/elementhandle-convenience.spec.ts › isVisible should not throw when the DOM element is not connected [fail] +page/elementhandle-convenience.spec.ts › should have a nice preview [pass] +page/elementhandle-convenience.spec.ts › should have a nice preview for non-ascii attributes/children [fail] +page/elementhandle-convenience.spec.ts › textContent should work [pass] +page/elementhandle-convenience.spec.ts › textContent should work on ShadowRoot [fail] +page/elementhandle-eval-on-selector.spec.ts › should not throw in case of missing selector for all [fail] +page/elementhandle-eval-on-selector.spec.ts › should retrieve content from subtree [fail] +page/elementhandle-eval-on-selector.spec.ts › should retrieve content from subtree for all [fail] +page/elementhandle-eval-on-selector.spec.ts › should throw in case of missing selector [fail] +page/elementhandle-eval-on-selector.spec.ts › should work [fail] +page/elementhandle-eval-on-selector.spec.ts › should work for all [fail] +page/elementhandle-misc.spec.ts › should allow disposing twice [fail] +page/elementhandle-misc.spec.ts › should check the box [fail] +page/elementhandle-misc.spec.ts › should check the box using setChecked [fail] +page/elementhandle-misc.spec.ts › should fill input [pass] +page/elementhandle-misc.spec.ts › should fill input when Node is removed [pass] +page/elementhandle-misc.spec.ts › should focus a button [pass] +page/elementhandle-misc.spec.ts › should hover [pass] +page/elementhandle-misc.spec.ts › should hover when Node is removed [pass] +page/elementhandle-misc.spec.ts › should select single option [pass] +page/elementhandle-misc.spec.ts › should uncheck the box [fail] +page/elementhandle-owner-frame.spec.ts › should work [fail] +page/elementhandle-owner-frame.spec.ts › should work for adopted elements [fail] +page/elementhandle-owner-frame.spec.ts › should work for cross-frame evaluations [fail] +page/elementhandle-owner-frame.spec.ts › should work for cross-process iframes [fail] +page/elementhandle-owner-frame.spec.ts › should work for detached elements [fail] +page/elementhandle-owner-frame.spec.ts › should work for document [fail] +page/elementhandle-owner-frame.spec.ts › should work for iframe elements [fail] +page/elementhandle-press.spec.ts › should not modify selection when focused [fail] +page/elementhandle-press.spec.ts › should not select existing value [fail] +page/elementhandle-press.spec.ts › should reset selection when not focused [fail] +page/elementhandle-press.spec.ts › should work [fail] +page/elementhandle-press.spec.ts › should work with number input [fail] +page/elementhandle-query-selector.spec.ts › should query existing element [fail] +page/elementhandle-query-selector.spec.ts › should query existing elements [fail] +page/elementhandle-query-selector.spec.ts › should return empty array for non-existing elements [fail] +page/elementhandle-query-selector.spec.ts › should return null for non-existing element [fail] +page/elementhandle-query-selector.spec.ts › should work for adopted elements [pass] +page/elementhandle-query-selector.spec.ts › xpath should query existing element [fail] +page/elementhandle-query-selector.spec.ts › xpath should return null for non-existing element [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › path option should create subdirectories [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should capture full element when larger than viewport [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should capture full element when larger than viewport in parallel [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should fail to screenshot a detached element [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should not issue resize event [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should prefer type over extension [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should scroll 15000px into view [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should scroll element into view [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should take into account padding and border [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should take screenshot of disabled button [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should timeout waiting for visible [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should wait for element to stop moving [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should wait for visible [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should work [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should work for an element with an offset [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should work for an element with fractional dimensions [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should work when main world busts JSON.stringify [fail] +page/elementhandle-screenshot.spec.ts › element screenshot › should work with a rotated element [fail] +page/elementhandle-scroll-into-view.spec.ts › should scroll display:contents into view [fail] +page/elementhandle-scroll-into-view.spec.ts › should throw for detached element [fail] +page/elementhandle-scroll-into-view.spec.ts › should timeout waiting for visible [fail] +page/elementhandle-scroll-into-view.spec.ts › should wait for display:none to become visible [fail] +page/elementhandle-scroll-into-view.spec.ts › should wait for element to stop moving [fail] +page/elementhandle-scroll-into-view.spec.ts › should wait for nested display:none to become visible [fail] +page/elementhandle-scroll-into-view.spec.ts › should work @smoke [pass] +page/elementhandle-scroll-into-view.spec.ts › should work for visibility:hidden element [fail] +page/elementhandle-scroll-into-view.spec.ts › should work for zero-sized element [fail] +page/elementhandle-select-text.spec.ts › should select input [fail] +page/elementhandle-select-text.spec.ts › should select plain div [pass] +page/elementhandle-select-text.spec.ts › should select textarea [fail] +page/elementhandle-select-text.spec.ts › should timeout waiting for invisible element [pass] +page/elementhandle-select-text.spec.ts › should wait for visible [pass] +page/elementhandle-type.spec.ts › should not modify selection when focused [fail] +page/elementhandle-type.spec.ts › should not select existing value [fail] +page/elementhandle-type.spec.ts › should reset selection when not focused [fail] +page/elementhandle-type.spec.ts › should work [fail] +page/elementhandle-type.spec.ts › should work with number input [fail] +page/elementhandle-wait-for-element-state.spec.ts › should throw waiting for enabled when detached [fail] +page/elementhandle-wait-for-element-state.spec.ts › should throw waiting for visible when detached [fail] +page/elementhandle-wait-for-element-state.spec.ts › should timeout waiting for visible [fail] +page/elementhandle-wait-for-element-state.spec.ts › should wait for already hidden [fail] +page/elementhandle-wait-for-element-state.spec.ts › should wait for already visible [fail] +page/elementhandle-wait-for-element-state.spec.ts › should wait for aria enabled button [fail] +page/elementhandle-wait-for-element-state.spec.ts › should wait for button with an aria-disabled parent [fail] +page/elementhandle-wait-for-element-state.spec.ts › should wait for editable input [fail] +page/elementhandle-wait-for-element-state.spec.ts › should wait for hidden [fail] +page/elementhandle-wait-for-element-state.spec.ts › should wait for hidden when detached [fail] +page/elementhandle-wait-for-element-state.spec.ts › should wait for stable position [pass] +page/elementhandle-wait-for-element-state.spec.ts › should wait for visible [fail] +page/eval-on-selector-all.spec.ts › should auto-detect css selector [fail] +page/eval-on-selector-all.spec.ts › should return complex values [fail] +page/eval-on-selector-all.spec.ts › should support * capture [fail] +page/eval-on-selector-all.spec.ts › should support * capture when multiple paths match [fail] +page/eval-on-selector-all.spec.ts › should support >> syntax [fail] +page/eval-on-selector-all.spec.ts › should work with bogus Array.from [fail] +page/eval-on-selector-all.spec.ts › should work with css selector [fail] +page/eval-on-selector-all.spec.ts › should work with text selector [fail] +page/eval-on-selector-all.spec.ts › should work with xpath selector [fail] +page/eval-on-selector.spec.ts › should accept ElementHandles as arguments [fail] +page/eval-on-selector.spec.ts › should accept arguments [fail] +page/eval-on-selector.spec.ts › should auto-detect css selector [fail] +page/eval-on-selector.spec.ts › should auto-detect css selector with attributes [fail] +page/eval-on-selector.spec.ts › should auto-detect nested selectors [fail] +page/eval-on-selector.spec.ts › should not stop at first failure with >> syntax [fail] +page/eval-on-selector.spec.ts › should return complex values [fail] +page/eval-on-selector.spec.ts › should support * capture [fail] +page/eval-on-selector.spec.ts › should support >> syntax [fail] +page/eval-on-selector.spec.ts › should support >> syntax with different engines [fail] +page/eval-on-selector.spec.ts › should support spaces with >> syntax [fail] +page/eval-on-selector.spec.ts › should throw error if no element is found [pass] +page/eval-on-selector.spec.ts › should throw on malformed * capture [pass] +page/eval-on-selector.spec.ts › should throw on multiple * captures [pass] +page/eval-on-selector.spec.ts › should work with css selector [fail] +page/eval-on-selector.spec.ts › should work with data-test selector [fail] +page/eval-on-selector.spec.ts › should work with data-test-id selector [fail] +page/eval-on-selector.spec.ts › should work with data-testid selector [fail] +page/eval-on-selector.spec.ts › should work with id selector [fail] +page/eval-on-selector.spec.ts › should work with quotes in css attributes [fail] +page/eval-on-selector.spec.ts › should work with quotes in css attributes when missing [fail] +page/eval-on-selector.spec.ts › should work with spaces in css attributes [fail] +page/eval-on-selector.spec.ts › should work with spaces in css attributes when missing [fail] +page/eval-on-selector.spec.ts › should work with text selector [fail] +page/eval-on-selector.spec.ts › should work with text selector in quotes [fail] +page/eval-on-selector.spec.ts › should work with xpath selector [fail] +page/expect-boolean.spec.ts › not.toBeDisabled div [fail] +page/expect-boolean.spec.ts › not.toBeEmpty [fail] +page/expect-boolean.spec.ts › not.toBeOK [pass] +page/expect-boolean.spec.ts › should print selector syntax error [pass] +page/expect-boolean.spec.ts › should print unknown engine error [pass] +page/expect-boolean.spec.ts › toBeAttached › default [fail] +page/expect-boolean.spec.ts › toBeAttached › eventually [fail] +page/expect-boolean.spec.ts › toBeAttached › eventually with not [fail] +page/expect-boolean.spec.ts › toBeAttached › fail [fail] +page/expect-boolean.spec.ts › toBeAttached › fail with not [fail] +page/expect-boolean.spec.ts › toBeAttached › over navigation [pass] +page/expect-boolean.spec.ts › toBeAttached › with attached:false [fail] +page/expect-boolean.spec.ts › toBeAttached › with attached:true [fail] +page/expect-boolean.spec.ts › toBeAttached › with frameLocator [fail] +page/expect-boolean.spec.ts › toBeAttached › with hidden element [fail] +page/expect-boolean.spec.ts › toBeAttached › with impossible timeout [fail] +page/expect-boolean.spec.ts › toBeAttached › with impossible timeout .not [fail] +page/expect-boolean.spec.ts › toBeAttached › with not [fail] +page/expect-boolean.spec.ts › toBeAttached › with not and attached:false [fail] +page/expect-boolean.spec.ts › toBeChecked with value [fail] +page/expect-boolean.spec.ts › toBeChecked › default [fail] +page/expect-boolean.spec.ts › toBeChecked › fail [fail] +page/expect-boolean.spec.ts › toBeChecked › fail missing [fail] +page/expect-boolean.spec.ts › toBeChecked › fail with checked:false [fail] +page/expect-boolean.spec.ts › toBeChecked › fail with not [fail] +page/expect-boolean.spec.ts › toBeChecked › friendly log [fail] +page/expect-boolean.spec.ts › toBeChecked › with checked:false [fail] +page/expect-boolean.spec.ts › toBeChecked › with checked:true [fail] +page/expect-boolean.spec.ts › toBeChecked › with impossible timeout [fail] +page/expect-boolean.spec.ts › toBeChecked › with impossible timeout .not [fail] +page/expect-boolean.spec.ts › toBeChecked › with not [fail] +page/expect-boolean.spec.ts › toBeChecked › with not and checked:false [fail] +page/expect-boolean.spec.ts › toBeChecked › with role [fail] +page/expect-boolean.spec.ts › toBeDisabled with value [fail] +page/expect-boolean.spec.ts › toBeEditable › default [fail] +page/expect-boolean.spec.ts › toBeEditable › with editable:false [fail] +page/expect-boolean.spec.ts › toBeEditable › with editable:true [fail] +page/expect-boolean.spec.ts › toBeEditable › with not [fail] +page/expect-boolean.spec.ts › toBeEditable › with not and editable:false [fail] +page/expect-boolean.spec.ts › toBeEmpty div [fail] +page/expect-boolean.spec.ts › toBeEmpty input [fail] +page/expect-boolean.spec.ts › toBeEnabled › default [fail] +page/expect-boolean.spec.ts › toBeEnabled › eventually [fail] +page/expect-boolean.spec.ts › toBeEnabled › eventually with not [fail] +page/expect-boolean.spec.ts › toBeEnabled › failed [fail] +page/expect-boolean.spec.ts › toBeEnabled › toBeDisabled [fail] +page/expect-boolean.spec.ts › toBeEnabled › with enabled:false [fail] +page/expect-boolean.spec.ts › toBeEnabled › with enabled:true [fail] +page/expect-boolean.spec.ts › toBeEnabled › with not and enabled:false [fail] +page/expect-boolean.spec.ts › toBeFocused [fail] +page/expect-boolean.spec.ts › toBeFocused with shadow elements [fail] +page/expect-boolean.spec.ts › toBeHidden with value [fail] +page/expect-boolean.spec.ts › toBeHidden › default [fail] +page/expect-boolean.spec.ts › toBeHidden › eventually [fail] +page/expect-boolean.spec.ts › toBeHidden › eventually with not [fail] +page/expect-boolean.spec.ts › toBeHidden › fail [fail] +page/expect-boolean.spec.ts › toBeHidden › fail with not [fail] +page/expect-boolean.spec.ts › toBeHidden › fail with not when nothing matching [fail] +page/expect-boolean.spec.ts › toBeHidden › when nothing matches [fail] +page/expect-boolean.spec.ts › toBeHidden › with impossible timeout [fail] +page/expect-boolean.spec.ts › toBeHidden › with impossible timeout .not [fail] +page/expect-boolean.spec.ts › toBeHidden › with not [fail] +page/expect-boolean.spec.ts › toBeOK [pass] +page/expect-boolean.spec.ts › toBeOK fail with invalid argument [pass] +page/expect-boolean.spec.ts › toBeOK fail with promise [pass] +page/expect-boolean.spec.ts › toBeOK should print response with text content type when fails › image content type [pass] +page/expect-boolean.spec.ts › toBeOK should print response with text content type when fails › no content type [pass] +page/expect-boolean.spec.ts › toBeOK should print response with text content type when fails › text content type [pass] +page/expect-boolean.spec.ts › toBeVisible › default [fail] +page/expect-boolean.spec.ts › toBeVisible › eventually [fail] +page/expect-boolean.spec.ts › toBeVisible › eventually with not [fail] +page/expect-boolean.spec.ts › toBeVisible › fail [fail] +page/expect-boolean.spec.ts › toBeVisible › fail with not [fail] +page/expect-boolean.spec.ts › toBeVisible › over navigation [pass] +page/expect-boolean.spec.ts › toBeVisible › with frameLocator [fail] +page/expect-boolean.spec.ts › toBeVisible › with frameLocator 2 [fail] +page/expect-boolean.spec.ts › toBeVisible › with impossible timeout [fail] +page/expect-boolean.spec.ts › toBeVisible › with impossible timeout .not [fail] +page/expect-boolean.spec.ts › toBeVisible › with not [fail] +page/expect-boolean.spec.ts › toBeVisible › with not and visible:false [fail] +page/expect-boolean.spec.ts › toBeVisible › with visible:false [fail] +page/expect-boolean.spec.ts › toBeVisible › with visible:true [fail] +page/expect-matcher-result.spec.ts › toBeChecked({ checked: false }) should have expected: false [fail] +page/expect-matcher-result.spec.ts › toBeTruthy-based assertions should have matcher result [fail] +page/expect-matcher-result.spec.ts › toEqual-based assertions should have matcher result [fail] +page/expect-matcher-result.spec.ts › toHaveScreenshot should populate matcherResult [fail] +page/expect-matcher-result.spec.ts › toMatchText-based assertions should have matcher result [fail] +page/expect-misc.spec.ts › toBeInViewport › should have good stack [pass] +page/expect-misc.spec.ts › toBeInViewport › should report intersection even if fully covered by other element [fail] +page/expect-misc.spec.ts › toBeInViewport › should respect ratio option [fail] +page/expect-misc.spec.ts › toBeInViewport › should work [fail] +page/expect-misc.spec.ts › toHaveAccessibleDescription [fail] +page/expect-misc.spec.ts › toHaveAccessibleName [fail] +page/expect-misc.spec.ts › toHaveAttribute › pass [fail] +page/expect-misc.spec.ts › toHaveAttribute › should match attribute without value [fail] +page/expect-misc.spec.ts › toHaveAttribute › should match boolean attribute [fail] +page/expect-misc.spec.ts › toHaveAttribute › should not match missing attribute [fail] +page/expect-misc.spec.ts › toHaveAttribute › should support boolean attribute with options [fail] +page/expect-misc.spec.ts › toHaveAttribute › support ignoreCase [fail] +page/expect-misc.spec.ts › toHaveCSS › custom css properties [fail] +page/expect-misc.spec.ts › toHaveCSS › pass [fail] +page/expect-misc.spec.ts › toHaveClass › fail [fail] +page/expect-misc.spec.ts › toHaveClass › fail with array [fail] +page/expect-misc.spec.ts › toHaveClass › pass [fail] +page/expect-misc.spec.ts › toHaveClass › pass with SVGs [fail] +page/expect-misc.spec.ts › toHaveClass › pass with array [fail] +page/expect-misc.spec.ts › toHaveCount should not produce logs twice [fail] +page/expect-misc.spec.ts › toHaveCount › eventually pass non-zero [fail] +page/expect-misc.spec.ts › toHaveCount › eventually pass not non-zero [fail] +page/expect-misc.spec.ts › toHaveCount › eventually pass zero [fail] +page/expect-misc.spec.ts › toHaveCount › fail zero [fail] +page/expect-misc.spec.ts › toHaveCount › fail zero 2 [fail] +page/expect-misc.spec.ts › toHaveCount › pass zero [fail] +page/expect-misc.spec.ts › toHaveCount › toHaveCount pass [fail] +page/expect-misc.spec.ts › toHaveId › pass [fail] +page/expect-misc.spec.ts › toHaveJSProperty › fail [fail] +page/expect-misc.spec.ts › toHaveJSProperty › fail boolean [fail] +page/expect-misc.spec.ts › toHaveJSProperty › fail boolean 2 [fail] +page/expect-misc.spec.ts › toHaveJSProperty › fail nested [fail] +page/expect-misc.spec.ts › toHaveJSProperty › fail number [fail] +page/expect-misc.spec.ts › toHaveJSProperty › fail string [fail] +page/expect-misc.spec.ts › toHaveJSProperty › pass [fail] +page/expect-misc.spec.ts › toHaveJSProperty › pass boolean [fail] +page/expect-misc.spec.ts › toHaveJSProperty › pass boolean 2 [fail] +page/expect-misc.spec.ts › toHaveJSProperty › pass nested [fail] +page/expect-misc.spec.ts › toHaveJSProperty › pass null [fail] +page/expect-misc.spec.ts › toHaveJSProperty › pass number [fail] +page/expect-misc.spec.ts › toHaveJSProperty › pass string [fail] +page/expect-misc.spec.ts › toHaveJSProperty › pass undefined [fail] +page/expect-misc.spec.ts › toHaveRole [fail] +page/expect-misc.spec.ts › toHaveText should not produce logs twice [fail] +page/expect-misc.spec.ts › toHaveText that does not match should not produce logs twice [fail] +page/expect-misc.spec.ts › toHaveTitle › fail [fail] +page/expect-misc.spec.ts › toHaveTitle › pass [fail] +page/expect-misc.spec.ts › toHaveURL › fail [pass] +page/expect-misc.spec.ts › toHaveURL › pass [pass] +page/expect-misc.spec.ts › toHaveURL › support ignoreCase [pass] +page/expect-timeout.spec.ts › should have timeout error name [pass] +page/expect-timeout.spec.ts › should not print timed out error message when page closes [fail] +page/expect-timeout.spec.ts › should not throw when navigating during first locator handler check [fail] +page/expect-timeout.spec.ts › should not throw when navigating during one-shot check [fail] +page/expect-timeout.spec.ts › should print timed out error message [fail] +page/expect-timeout.spec.ts › should print timed out error message when value does not match [fail] +page/expect-timeout.spec.ts › should print timed out error message when value does not match with impossible timeout [fail] +page/expect-timeout.spec.ts › should print timed out error message with impossible timeout [fail] +page/expect-timeout.spec.ts › should timeout during first locator handler check [fail] +page/expect-to-have-text.spec.ts › not.toHaveText › fail [fail] +page/expect-to-have-text.spec.ts › not.toHaveText › pass [fail] +page/expect-to-have-text.spec.ts › not.toHaveText › should work when selector does not match [fail] +page/expect-to-have-text.spec.ts › toContainText with array › fail [fail] +page/expect-to-have-text.spec.ts › toContainText with array › pass [fail] +page/expect-to-have-text.spec.ts › toContainText with regex › fail [fail] +page/expect-to-have-text.spec.ts › toContainText with regex › pass [fail] +page/expect-to-have-text.spec.ts › toHaveText with array › fail [fail] +page/expect-to-have-text.spec.ts › toHaveText with array › fail on not+empty [fail] +page/expect-to-have-text.spec.ts › toHaveText with array › fail on repeating array matchers [fail] +page/expect-to-have-text.spec.ts › toHaveText with array › pass [fail] +page/expect-to-have-text.spec.ts › toHaveText with array › pass empty [fail] +page/expect-to-have-text.spec.ts › toHaveText with array › pass eventually empty [fail] +page/expect-to-have-text.spec.ts › toHaveText with array › pass lazy [fail] +page/expect-to-have-text.spec.ts › toHaveText with array › pass not empty [fail] +page/expect-to-have-text.spec.ts › toHaveText with array › pass on empty [fail] +page/expect-to-have-text.spec.ts › toHaveText with regex › fail [fail] +page/expect-to-have-text.spec.ts › toHaveText with regex › pass [fail] +page/expect-to-have-text.spec.ts › toHaveText with text › fail [fail] +page/expect-to-have-text.spec.ts › toHaveText with text › fail with impossible timeout [fail] +page/expect-to-have-text.spec.ts › toHaveText with text › in shadow dom [fail] +page/expect-to-have-text.spec.ts › toHaveText with text › pass [fail] +page/expect-to-have-text.spec.ts › toHaveText with text › pass contain [fail] +page/expect-to-have-text.spec.ts › toHaveText with text › pass eventually [fail] +page/expect-to-have-text.spec.ts › toHaveText with text › with userInnerText [fail] +page/expect-to-have-value.spec.ts › should support failure [fail] +page/expect-to-have-value.spec.ts › should work [fail] +page/expect-to-have-value.spec.ts › should work with label [fail] +page/expect-to-have-value.spec.ts › should work with regex [fail] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › exact match with text failure [fail] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › fails when items not selected [fail] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › fails when multiple not specified [fail] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › fails when not a select element [fail] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › follows labels [fail] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › works with regex [fail] +page/expect-to-have-value.spec.ts › toHaveValues with multi-select › works with text [fail] +page/frame-evaluate.spec.ts › evaluateHandle should work [pass] +page/frame-evaluate.spec.ts › should allow cross-frame element handles [fail] +page/frame-evaluate.spec.ts › should be isolated between frames [pass] +page/frame-evaluate.spec.ts › should dispose context on cross-origin navigation [fail] +page/frame-evaluate.spec.ts › should dispose context on navigation [fail] +page/frame-evaluate.spec.ts › should execute after cross-site navigation [pass] +page/frame-evaluate.spec.ts › should have correct execution contexts @smoke [pass] +page/frame-evaluate.spec.ts › should have different execution contexts [pass] +page/frame-evaluate.spec.ts › should not allow cross-frame element handles when frames do not script each other [fail] +page/frame-evaluate.spec.ts › should not allow cross-frame js handles [pass] +page/frame-evaluate.spec.ts › should throw for detached frames [pass] +page/frame-evaluate.spec.ts › should work in iframes that failed initial navigation [fail] +page/frame-evaluate.spec.ts › should work in iframes that interrupted initial javascript url navigation [pass] +page/frame-frame-element.spec.ts › should throw when detached [pass] +page/frame-frame-element.spec.ts › should work @smoke [pass] +page/frame-frame-element.spec.ts › should work inside closed shadow root [fail] +page/frame-frame-element.spec.ts › should work inside declarative shadow root [fail] +page/frame-frame-element.spec.ts › should work with contentFrame [pass] +page/frame-frame-element.spec.ts › should work with frameset [pass] +page/frame-goto.spec.ts › should continue after client redirect [pass] +page/frame-goto.spec.ts › should navigate subframes @smoke [pass] +page/frame-goto.spec.ts › should reject when frame detaches [pass] +page/frame-goto.spec.ts › should return matching responses [fail] +page/frame-hierarchy.spec.ts › should detach child frames on navigation [pass] +page/frame-hierarchy.spec.ts › should handle nested frames @smoke [fail] +page/frame-hierarchy.spec.ts › should not send attach/detach events for main frame [pass] +page/frame-hierarchy.spec.ts › should persist mainFrame on cross-process navigation [pass] +page/frame-hierarchy.spec.ts › should refuse to display x-frame-options:deny iframe [fail] +page/frame-hierarchy.spec.ts › should report different frame instance when frame re-attaches [pass] +page/frame-hierarchy.spec.ts › should report frame from-inside shadow DOM [pass] +page/frame-hierarchy.spec.ts › should report frame.name() [fail] +page/frame-hierarchy.spec.ts › should report frame.parent() [pass] +page/frame-hierarchy.spec.ts › should return frame.page() [pass] +page/frame-hierarchy.spec.ts › should send "framenavigated" when navigating on anchor URLs [timeout] +page/frame-hierarchy.spec.ts › should send events when frames are manipulated dynamically [pass] +page/frame-hierarchy.spec.ts › should support framesets [pass] +page/interception.spec.ts › should disable memory cache when intercepting [fail] +page/interception.spec.ts › should intercept after a service worker [pass] +page/interception.spec.ts › should intercept blob url requests [fail] +page/interception.spec.ts › should intercept network activity from worker [pass] +page/interception.spec.ts › should intercept network activity from worker 2 [pass] +page/interception.spec.ts › should intercept worker requests when enabled after worker creation [pass] +page/interception.spec.ts › should not break remote worker importScripts [pass] +page/interception.spec.ts › should work with glob [pass] +page/interception.spec.ts › should work with navigation @smoke [pass] +page/interception.spec.ts › should work with regular expression passed from a different context [fail] +page/jshandle-as-element.spec.ts › should return ElementHandle for TextNodes [fail] +page/jshandle-as-element.spec.ts › should return null for non-elements [pass] +page/jshandle-as-element.spec.ts › should work @smoke [fail] +page/jshandle-as-element.spec.ts › should work with nullified Node [fail] +page/jshandle-evaluate.spec.ts › should work with expression [pass] +page/jshandle-evaluate.spec.ts › should work with function @smoke [pass] +page/jshandle-json-value.spec.ts › should handle circular objects [pass] +page/jshandle-json-value.spec.ts › should work @smoke [pass] +page/jshandle-json-value.spec.ts › should work with dates [pass] +page/jshandle-properties.spec.ts › getProperties should return empty map for non-objects [pass] +page/jshandle-properties.spec.ts › getProperties should return even non-own properties [fail] +page/jshandle-properties.spec.ts › getProperties should work [fail] +page/jshandle-properties.spec.ts › getProperties should work with elements [fail] +page/jshandle-properties.spec.ts › should work @smoke [fail] +page/jshandle-properties.spec.ts › should work with undefined, null, and empty [fail] +page/jshandle-properties.spec.ts › should work with unserializable values [fail] +page/jshandle-to-string.spec.ts › should beautifully render sparse arrays [fail] +page/jshandle-to-string.spec.ts › should work for complicated objects [fail] +page/jshandle-to-string.spec.ts › should work for primitives [pass] +page/jshandle-to-string.spec.ts › should work for promises [fail] +page/jshandle-to-string.spec.ts › should work with different subtypes @smoke [fail] +page/jshandle-to-string.spec.ts › should work with previewable subtypes [fail] +page/locator-click.spec.ts › should click if the target element is removed in pointerdown event [fail] +page/locator-click.spec.ts › should click if the target element is removed in pointerup event [fail] +page/locator-click.spec.ts › should double click the button [fail] +page/locator-click.spec.ts › should work @smoke [pass] +page/locator-click.spec.ts › should work for TextNodes [fail] +page/locator-click.spec.ts › should work with Node removed [pass] +page/locator-convenience.spec.ts › allInnerTexts should work [fail] +page/locator-convenience.spec.ts › allTextContents should work [fail] +page/locator-convenience.spec.ts › getAttribute should work [pass] +page/locator-convenience.spec.ts › innerHTML should work [pass] +page/locator-convenience.spec.ts › innerText should produce log [fail] +page/locator-convenience.spec.ts › innerText should throw [fail] +page/locator-convenience.spec.ts › innerText should work [pass] +page/locator-convenience.spec.ts › inputValue should work [pass] +page/locator-convenience.spec.ts › isChecked should work [fail] +page/locator-convenience.spec.ts › isChecked should work for indeterminate input [fail] +page/locator-convenience.spec.ts › isEditable should work [fail] +page/locator-convenience.spec.ts › isEnabled and isDisabled should work [fail] +page/locator-convenience.spec.ts › should have a nice preview [pass] +page/locator-convenience.spec.ts › should return page [pass] +page/locator-convenience.spec.ts › textContent should work [pass] +page/locator-element-handle.spec.ts › should query existing element @smoke [fail] +page/locator-element-handle.spec.ts › should query existing elements [fail] +page/locator-element-handle.spec.ts › should return empty array for non-existing elements [fail] +page/locator-element-handle.spec.ts › xpath should query existing element [fail] +page/locator-element-handle.spec.ts › xpath should return null for non-existing element [fail] +page/locator-evaluate.spec.ts › should not throw in case of missing selector for all [fail] +page/locator-evaluate.spec.ts › should retrieve content from subtree [fail] +page/locator-evaluate.spec.ts › should retrieve content from subtree for all [fail] +page/locator-evaluate.spec.ts › should work @smoke [fail] +page/locator-evaluate.spec.ts › should work for all [fail] +page/locator-frame.spec.ts › click should survive frame reattach [pass] +page/locator-frame.spec.ts › click should survive iframe navigation [fail] +page/locator-frame.spec.ts › frameLocator.owner should work [pass] +page/locator-frame.spec.ts › getBy coverage [pass] +page/locator-frame.spec.ts › locator.contentFrame should work [pass] +page/locator-frame.spec.ts › locator.frameLocator should not throw on first/last/nth [pass] +page/locator-frame.spec.ts › locator.frameLocator should throw on ambiguity [pass] +page/locator-frame.spec.ts › locator.frameLocator should work for iframe [pass] +page/locator-frame.spec.ts › should click in lazy iframe [pass] +page/locator-frame.spec.ts › should non work for non-frame [fail] +page/locator-frame.spec.ts › should not wait for frame [fail] +page/locator-frame.spec.ts › should not wait for frame 2 [pass] +page/locator-frame.spec.ts › should not wait for frame 3 [fail] +page/locator-frame.spec.ts › should wait for frame [pass] +page/locator-frame.spec.ts › should wait for frame 2 [pass] +page/locator-frame.spec.ts › should wait for frame to go [pass] +page/locator-frame.spec.ts › should work for $ and $$ [pass] +page/locator-frame.spec.ts › should work for iframe @smoke [pass] +page/locator-frame.spec.ts › should work for nested iframe [pass] +page/locator-frame.spec.ts › should work with COEP/COOP/CORP isolated iframe [fail] +page/locator-frame.spec.ts › wait for hidden should succeed when frame is not in dom [pass] +page/locator-frame.spec.ts › waitFor should survive frame reattach [pass] +page/locator-highlight.spec.ts › should highlight locator [fail] +page/locator-is-visible.spec.ts › isVisible and isHidden should work [fail] +page/locator-is-visible.spec.ts › isVisible and isHidden should work with details [fail] +page/locator-is-visible.spec.ts › isVisible during navigation should not throw [pass] +page/locator-is-visible.spec.ts › isVisible inside a button [fail] +page/locator-is-visible.spec.ts › isVisible inside a role=button [fail] +page/locator-is-visible.spec.ts › isVisible should be true for element outside view [fail] +page/locator-is-visible.spec.ts › isVisible should be true for opacity:0 [fail] +page/locator-is-visible.spec.ts › isVisible with invalid selector should throw [pass] +page/locator-list.spec.ts › locator.all should work [fail] +page/locator-misc-1.spec.ts › focus should respect strictness [fail] +page/locator-misc-1.spec.ts › should check the box [fail] +page/locator-misc-1.spec.ts › should check the box using setChecked [fail] +page/locator-misc-1.spec.ts › should clear input [pass] +page/locator-misc-1.spec.ts › should dispatch click event via ElementHandles [fail] +page/locator-misc-1.spec.ts › should fill input [pass] +page/locator-misc-1.spec.ts › should fill input when Node is removed [pass] +page/locator-misc-1.spec.ts › should focus and blur a button [fail] +page/locator-misc-1.spec.ts › should hover @smoke [pass] +page/locator-misc-1.spec.ts › should hover when Node is removed [pass] +page/locator-misc-1.spec.ts › should select single option [fail] +page/locator-misc-1.spec.ts › should uncheck the box [fail] +page/locator-misc-1.spec.ts › should upload the file [timeout] +page/locator-misc-2.spec.ts › Locator.locator() and FrameLocator.locator() should accept locator [fail] +page/locator-misc-2.spec.ts › locator.count should work with deleted Map in main world [pass] +page/locator-misc-2.spec.ts › should combine visible with other selectors [fail] +page/locator-misc-2.spec.ts › should press @smoke [fail] +page/locator-misc-2.spec.ts › should pressSequentially [fail] +page/locator-misc-2.spec.ts › should return bounding box [fail] +page/locator-misc-2.spec.ts › should scroll into view [fail] +page/locator-misc-2.spec.ts › should scroll zero-sized element into view [fail] +page/locator-misc-2.spec.ts › should select textarea [fail] +page/locator-misc-2.spec.ts › should take screenshot [fail] +page/locator-misc-2.spec.ts › should type [fail] +page/locator-misc-2.spec.ts › should waitFor [fail] +page/locator-misc-2.spec.ts › should waitFor hidden [fail] +page/locator-query.spec.ts › alias methods coverage [fail] +page/locator-query.spec.ts › should allow some, but not all nested frameLocators [fail] +page/locator-query.spec.ts › should enforce same frame for has/leftOf/rightOf/above/below/near [pass] +page/locator-query.spec.ts › should filter by case-insensitive regex in a child [fail] +page/locator-query.spec.ts › should filter by case-insensitive regex in multiple children [fail] +page/locator-query.spec.ts › should filter by regex [fail] +page/locator-query.spec.ts › should filter by regex and regexp flags [fail] +page/locator-query.spec.ts › should filter by regex with a single quote [fail] +page/locator-query.spec.ts › should filter by regex with quotes [fail] +page/locator-query.spec.ts › should filter by regex with special symbols [fail] +page/locator-query.spec.ts › should filter by text [fail] +page/locator-query.spec.ts › should filter by text 2 [fail] +page/locator-query.spec.ts › should filter by text with quotes [fail] +page/locator-query.spec.ts › should respect first() and last() @smoke [fail] +page/locator-query.spec.ts › should respect nth() [fail] +page/locator-query.spec.ts › should support has:locator [fail] +page/locator-query.spec.ts › should support locator.and [fail] +page/locator-query.spec.ts › should support locator.filter [fail] +page/locator-query.spec.ts › should support locator.locator with and/or [fail] +page/locator-query.spec.ts › should support locator.or [fail] +page/locator-query.spec.ts › should throw on capture w/ nth() [fail] +page/locator-query.spec.ts › should throw on due to strictness [fail] +page/locator-query.spec.ts › should throw on due to strictness 2 [fail] +page/matchers.misc.spec.ts › should outlive frame navigation [pass] +page/matchers.misc.spec.ts › should print no-locator-resolved error when locator matcher did not resolve to any element [fail] +page/network-post-data.spec.ts › should get post data for file/blob [fail] +page/network-post-data.spec.ts › should get post data for navigator.sendBeacon api calls [fail] +page/network-post-data.spec.ts › should return correct postData buffer for utf-8 body [fail] +page/network-post-data.spec.ts › should return post data for PUT requests [fail] +page/network-post-data.spec.ts › should return post data w/o content-type @smoke [fail] +page/network-post-data.spec.ts › should throw on invalid JSON in post data [fail] +page/page-accessibility.spec.ts › autocomplete [fail] +page/page-accessibility.spec.ts › checkbox with and tabIndex and label should not have children [fail] +page/page-accessibility.spec.ts › checkbox without label should not have children [fail] +page/page-accessibility.spec.ts › keyshortcuts [fail] +page/page-accessibility.spec.ts › multiselectable [fail] +page/page-accessibility.spec.ts › non editable textbox with role and tabIndex and label should not have children [fail] +page/page-accessibility.spec.ts › orientation [fail] +page/page-accessibility.spec.ts › rich text editable fields should have children [fail] +page/page-accessibility.spec.ts › rich text editable fields with role should have children [fail] +page/page-accessibility.spec.ts › roledescription [fail] +page/page-accessibility.spec.ts › should not report text nodes inside controls [fail] +page/page-accessibility.spec.ts › should return null when the element is no longer in DOM [fail] +page/page-accessibility.spec.ts › should show uninteresting nodes [fail] +page/page-accessibility.spec.ts › should work @smoke [fail] +page/page-accessibility.spec.ts › should work a button [fail] +page/page-accessibility.spec.ts › should work an input [fail] +page/page-accessibility.spec.ts › should work on a menu [fail] +page/page-accessibility.spec.ts › should work when there is a title [fail] +page/page-accessibility.spec.ts › should work with aria-invalid accessibility tree [fail] +page/page-accessibility.spec.ts › should work with regular text [fail] +page/page-add-init-script.spec.ts › init script should run only once in iframe [pass] +page/page-add-init-script.spec.ts › init script should run only once in popup [fail] +page/page-add-init-script.spec.ts › should evaluate before anything else on the page [pass] +page/page-add-init-script.spec.ts › should support multiple scripts [pass] +page/page-add-init-script.spec.ts › should throw without path and content [pass] +page/page-add-init-script.spec.ts › should work after a cross origin navigation [pass] +page/page-add-init-script.spec.ts › should work with CSP [fail] +page/page-add-init-script.spec.ts › should work with a path [pass] +page/page-add-init-script.spec.ts › should work with content @smoke [pass] +page/page-add-init-script.spec.ts › should work with trailing comments [pass] +page/page-add-locator-handler.spec.ts › should not work with force:true [fail] +page/page-add-locator-handler.spec.ts › should removeLocatorHandler [pass] +page/page-add-locator-handler.spec.ts › should throw when handler times out [pass] +page/page-add-locator-handler.spec.ts › should throw when page closes [pass] +page/page-add-locator-handler.spec.ts › should wait for hidden by default [fail] +page/page-add-locator-handler.spec.ts › should wait for hidden by default 2 [pass] +page/page-add-locator-handler.spec.ts › should work [pass] +page/page-add-locator-handler.spec.ts › should work when owner frame detaches [pass] +page/page-add-locator-handler.spec.ts › should work with a custom check [pass] +page/page-add-locator-handler.spec.ts › should work with locator.hover() [pass] +page/page-add-locator-handler.spec.ts › should work with noWaitAfter [pass] +page/page-add-locator-handler.spec.ts › should work with times: option [fail] +page/page-add-locator-handler.spec.ts › should work with toBeVisible [pass] +page/page-add-locator-handler.spec.ts › should work with toHaveScreenshot [fail] +page/page-add-script-tag.spec.ts › should include sourceURL when path is provided [pass] +page/page-add-script-tag.spec.ts › should throw a nice error when the request fails [pass] +page/page-add-script-tag.spec.ts › should throw an error if loading from url fail [pass] +page/page-add-script-tag.spec.ts › should throw an error if no options are provided [pass] +page/page-add-script-tag.spec.ts › should throw when added with URL to the CSP page [pass] +page/page-add-script-tag.spec.ts › should throw when added with content to the CSP page [pass] +page/page-add-script-tag.spec.ts › should work with a content and type=module [pass] +page/page-add-script-tag.spec.ts › should work with a path [pass] +page/page-add-script-tag.spec.ts › should work with a path and type=module [pass] +page/page-add-script-tag.spec.ts › should work with a url [pass] +page/page-add-script-tag.spec.ts › should work with a url and type=module [fail] +page/page-add-script-tag.spec.ts › should work with content [pass] +page/page-add-style-tag.spec.ts › should include sourceURL when path is provided [pass] +page/page-add-style-tag.spec.ts › should throw an error if loading from url fail [pass] +page/page-add-style-tag.spec.ts › should throw an error if no options are provided [pass] +page/page-add-style-tag.spec.ts › should throw when added with URL to the CSP page [pass] +page/page-add-style-tag.spec.ts › should throw when added with content to the CSP page [pass] +page/page-add-style-tag.spec.ts › should work with a path [pass] +page/page-add-style-tag.spec.ts › should work with a url @smoke [pass] +page/page-add-style-tag.spec.ts › should work with content [pass] +page/page-autowaiting-basic.spec.ts › should await cross-process navigation when clicking anchor [fail] +page/page-autowaiting-basic.spec.ts › should await form-get on click [fail] +page/page-autowaiting-basic.spec.ts › should await form-post on click [fail] +page/page-autowaiting-basic.spec.ts › should await navigation when clicking anchor [fail] +page/page-autowaiting-basic.spec.ts › should not stall on JS navigation link [fail] +page/page-autowaiting-basic.spec.ts › should report navigation in the log when clicking anchor [fail] +page/page-autowaiting-basic.spec.ts › should work with dblclick without noWaitAfter when navigation is stalled [fail] +page/page-autowaiting-basic.spec.ts › should work with goto following click [fail] +page/page-autowaiting-basic.spec.ts › should work with noWaitAfter: true [fail] +page/page-autowaiting-basic.spec.ts › should work with waitForLoadState(load) [fail] +page/page-autowaiting-no-hang.spec.ts › assigning location to about:blank [pass] +page/page-autowaiting-no-hang.spec.ts › assigning location to about:blank after non-about:blank [pass] +page/page-autowaiting-no-hang.spec.ts › calling window.open and window.close [fail] +page/page-autowaiting-no-hang.spec.ts › calling window.stop async [pass] +page/page-autowaiting-no-hang.spec.ts › calling window.stop sync [pass] +page/page-autowaiting-no-hang.spec.ts › clicking on links which do not commit navigation [fail] +page/page-autowaiting-no-hang.spec.ts › opening a popup [pass] +page/page-basic.spec.ts › async stacks should work [pass] +page/page-basic.spec.ts › frame.press should work [fail] +page/page-basic.spec.ts › has navigator.webdriver set to true [pass] +page/page-basic.spec.ts › page.close should work with page.close [pass] +page/page-basic.spec.ts › page.close should work with window.close [pass] +page/page-basic.spec.ts › page.frame should respect name [fail] +page/page-basic.spec.ts › page.frame should respect url [fail] +page/page-basic.spec.ts › page.press should work [pass] +page/page-basic.spec.ts › page.press should work for Enter [fail] +page/page-basic.spec.ts › page.title should return the page title [pass] +page/page-basic.spec.ts › page.url should include hashes [pass] +page/page-basic.spec.ts › page.url should work [pass] +page/page-basic.spec.ts › should be callable twice [pass] +page/page-basic.spec.ts › should fail with error upon disconnect [pass] +page/page-basic.spec.ts › should fire domcontentloaded when expected [pass] +page/page-basic.spec.ts › should fire load when expected [pass] +page/page-basic.spec.ts › should have sane user agent [fail] +page/page-basic.spec.ts › should iterate over page properties [pass] +page/page-basic.spec.ts › should pass page to close event [pass] +page/page-basic.spec.ts › should pass self as argument to domcontentloaded event [pass] +page/page-basic.spec.ts › should pass self as argument to load event [pass] +page/page-basic.spec.ts › should provide access to the opener page [pass] +page/page-basic.spec.ts › should reject all promises when page is closed [fail] +page/page-basic.spec.ts › should return null if parent page has been closed [fail] +page/page-basic.spec.ts › should set the page close state [pass] +page/page-basic.spec.ts › should terminate network waiters [pass] +page/page-check.spec.ts › should check radio [fail] +page/page-check.spec.ts › should check radio by aria role [fail] +page/page-check.spec.ts › should check the box @smoke [fail] +page/page-check.spec.ts › should check the box by aria role [fail] +page/page-check.spec.ts › should check the box inside a button [fail] +page/page-check.spec.ts › should check the box using setChecked [fail] +page/page-check.spec.ts › should check the label with position [fail] +page/page-check.spec.ts › should not check the checked box [fail] +page/page-check.spec.ts › should not uncheck the unchecked box [fail] +page/page-check.spec.ts › should throw when not a checkbox [fail] +page/page-check.spec.ts › should throw when not a checkbox 2 [fail] +page/page-check.spec.ts › should uncheck radio by aria role [fail] +page/page-check.spec.ts › should uncheck the box [fail] +page/page-check.spec.ts › should uncheck the box by aria role [fail] +page/page-check.spec.ts › trial run should not check [fail] +page/page-check.spec.ts › trial run should not uncheck [fail] +page/page-click-during-navigation.spec.ts › should not fail with internal error upon navigation [pass] +page/page-click-react.spec.ts › should not retarget the handle when element is recycled [unknown] +page/page-click-react.spec.ts › should not retarget when element changes on hover [pass] +page/page-click-react.spec.ts › should not retarget when element is recycled on hover [pass] +page/page-click-react.spec.ts › should report that selector does not match anymore [unknown] +page/page-click-react.spec.ts › should retarget when element is recycled before enabled check [unknown] +page/page-click-react.spec.ts › should retarget when element is recycled during hit testing [unknown] +page/page-click-react.spec.ts › should timeout when click opens alert [fail] +page/page-click-scroll.spec.ts › should not crash when force-clicking hidden input [fail] +page/page-click-scroll.spec.ts › should not hit scroll bar [fail] +page/page-click-scroll.spec.ts › should scroll into view display:contents [fail] +page/page-click-scroll.spec.ts › should scroll into view display:contents with a child [fail] +page/page-click-scroll.spec.ts › should scroll into view display:contents with position [fail] +page/page-click-scroll.spec.ts › should scroll into view element in iframe [fail] +page/page-click-scroll.spec.ts › should scroll into view span element [fail] +page/page-click-timeout-1.spec.ts › should avoid side effects after timeout [pass] +page/page-click-timeout-1.spec.ts › should timeout waiting for button to be enabled [fail] +page/page-click-timeout-2.spec.ts › should timeout waiting for display:none to be gone [pass] +page/page-click-timeout-2.spec.ts › should timeout waiting for visibility:hidden to be gone [pass] +page/page-click-timeout-3.spec.ts › should fail when element jumps during hit testing [fail] +page/page-click-timeout-3.spec.ts › should report wrong hit target subtree [pass] +page/page-click-timeout-3.spec.ts › should still click when force but hit target is obscured [pass] +page/page-click-timeout-3.spec.ts › should timeout waiting for hit target [pass] +page/page-click-timeout-4.spec.ts › should click for the second time after first timeout [pass] +page/page-click-timeout-4.spec.ts › should timeout waiting for stable position [pass] +page/page-click.spec.ts › ensure events are dispatched in the individual tasks [fail] +page/page-click.spec.ts › should click a button in scrolling container with offset [pass] +page/page-click.spec.ts › should click a button that is overlaid by a permission popup [fail] +page/page-click.spec.ts › should click a partially obscured button [pass] +page/page-click.spec.ts › should click a rotated button [pass] +page/page-click.spec.ts › should click a very large button with offset [pass] +page/page-click.spec.ts › should click an offscreen element when scroll-behavior is smooth [fail] +page/page-click.spec.ts › should click button inside frameset [pass] +page/page-click.spec.ts › should click disabled div [fail] +page/page-click.spec.ts › should click if opened select covers the button [fail] +page/page-click.spec.ts › should click in a nested transformed iframe [fail] +page/page-click.spec.ts › should click in a transformed iframe [fail] +page/page-click.spec.ts › should click in a transformed iframe with force [fail] +page/page-click.spec.ts › should click in an iframe with border [fail] +page/page-click.spec.ts › should click in an iframe with border 2 [fail] +page/page-click.spec.ts › should click links which cause navigation [fail] +page/page-click.spec.ts › should click offscreen buttons [pass] +page/page-click.spec.ts › should click on a span with an inline element inside [fail] +page/page-click.spec.ts › should click on checkbox input and toggle [fail] +page/page-click.spec.ts › should click on checkbox label and toggle [pass] +page/page-click.spec.ts › should click svg [fail] +page/page-click.spec.ts › should click the 1x1 div [fail] +page/page-click.spec.ts › should click the button @smoke [pass] +page/page-click.spec.ts › should click the button after a cross origin navigation [pass] +page/page-click.spec.ts › should click the button after navigation [pass] +page/page-click.spec.ts › should click the button behind sticky header [fail] +page/page-click.spec.ts › should click the button if window.Node is removed [pass] +page/page-click.spec.ts › should click the button inside an iframe [fail] +page/page-click.spec.ts › should click the button when window.innerWidth is corrupted [pass] +page/page-click.spec.ts › should click the button with em border with offset [pass] +page/page-click.spec.ts › should click the button with fixed position inside an iframe [fail] +page/page-click.spec.ts › should click the button with px border with offset [pass] +page/page-click.spec.ts › should click when one of inline box children is outside of viewport [fail] +page/page-click.spec.ts › should click wrapped links [pass] +page/page-click.spec.ts › should click zero-sized input by label [fail] +page/page-click.spec.ts › should climb dom for inner label with pointer-events:none [fail] +page/page-click.spec.ts › should climb up to [role=button] [fail] +page/page-click.spec.ts › should climb up to a [role=link] [fail] +page/page-click.spec.ts › should climb up to a anchor [fail] +page/page-click.spec.ts › should dispatch microtasks in order [fail] +page/page-click.spec.ts › should double click the button [fail] +page/page-click.spec.ts › should fail when element detaches after animation [pass] +page/page-click.spec.ts › should fail when element is animating from outside the viewport with force [fail] +page/page-click.spec.ts › should fail when obscured and not waiting for hit target [fail] +page/page-click.spec.ts › should fire contextmenu event on right click [pass] +page/page-click.spec.ts › should fire contextmenu event on right click in correct order [fail] +page/page-click.spec.ts › should issue clicks in parallel in page and popup [pass] +page/page-click.spec.ts › should not hang when frame is detached [pass] +page/page-click.spec.ts › should not throw UnhandledPromiseRejection when page closes [pass] +page/page-click.spec.ts › should not throw protocol error when navigating during the click [pass] +page/page-click.spec.ts › should not wait with force [pass] +page/page-click.spec.ts › should report nice error when element is detached and force-clicked [pass] +page/page-click.spec.ts › should retry when element detaches after animation [pass] +page/page-click.spec.ts › should retry when element is animating from outside the viewport [fail] +page/page-click.spec.ts › should retry when navigating during the click [pass] +page/page-click.spec.ts › should scroll and click the button [pass] +page/page-click.spec.ts › should scroll and click the button with smooth scroll behavior [pass] +page/page-click.spec.ts › should select the text by triple clicking [fail] +page/page-click.spec.ts › should update modifiers correctly [pass] +page/page-click.spec.ts › should wait for BUTTON to be clickable when it has pointer-events:none [fail] +page/page-click.spec.ts › should wait for LABEL to be clickable when it has pointer-events:none [fail] +page/page-click.spec.ts › should wait for becoming hit target [pass] +page/page-click.spec.ts › should wait for becoming hit target with trial run [pass] +page/page-click.spec.ts › should wait for button to be enabled [fail] +page/page-click.spec.ts › should wait for input to be enabled [fail] +page/page-click.spec.ts › should wait for select to be enabled [fail] +page/page-click.spec.ts › should wait for stable position [pass] +page/page-click.spec.ts › should waitFor display:none to be gone [pass] +page/page-click.spec.ts › should waitFor visibility:hidden to be gone [pass] +page/page-click.spec.ts › should waitFor visible when already visible [pass] +page/page-click.spec.ts › should waitFor visible when parent is hidden [fail] +page/page-click.spec.ts › trial run should not click [pass] +page/page-click.spec.ts › trial run should not double click [pass] +page/page-click.spec.ts › trial run should work with short timeout [pass] +page/page-close.spec.ts › should close page with active dialog [fail] +page/page-close.spec.ts › should not accept dialog after close [fail] +page/page-dialog.spec.ts › should accept the confirm prompt [pass] +page/page-dialog.spec.ts › should allow accepting prompts @smoke [pass] +page/page-dialog.spec.ts › should auto-dismiss the alert without listeners [fail] +page/page-dialog.spec.ts › should auto-dismiss the prompt without listeners [pass] +page/page-dialog.spec.ts › should be able to close context with open alert [fail] +page/page-dialog.spec.ts › should dismiss the confirm prompt [pass] +page/page-dialog.spec.ts › should dismiss the prompt [pass] +page/page-dialog.spec.ts › should fire [pass] +page/page-dialog.spec.ts › should handle multiple alerts [fail] +page/page-dialog.spec.ts › should handle multiple confirms [fail] +page/page-dispatchevent.spec.ts › should be atomic [fail] +page/page-dispatchevent.spec.ts › should dispatch absolute device orientation event [pass] +page/page-dispatchevent.spec.ts › should dispatch click after a cross origin navigation [pass] +page/page-dispatchevent.spec.ts › should dispatch click after navigation [pass] +page/page-dispatchevent.spec.ts › should dispatch click event @smoke [pass] +page/page-dispatchevent.spec.ts › should dispatch click event properties [pass] +page/page-dispatchevent.spec.ts › should dispatch click event via ElementHandles [pass] +page/page-dispatchevent.spec.ts › should dispatch click on a span with an inline element inside [fail] +page/page-dispatchevent.spec.ts › should dispatch click svg [fail] +page/page-dispatchevent.spec.ts › should dispatch click when node is added in shadow dom [pass] +page/page-dispatchevent.spec.ts › should dispatch device motion event [pass] +page/page-dispatchevent.spec.ts › should dispatch device orientation event [pass] +page/page-dispatchevent.spec.ts › should dispatch drag drop events [pass] +page/page-dispatchevent.spec.ts › should dispatch drag drop events via ElementHandles [pass] +page/page-dispatchevent.spec.ts › should dispatch wheel event [pass] +page/page-dispatchevent.spec.ts › should not fail when element is blocked on hover [fail] +page/page-dispatchevent.spec.ts › should throw if argument is from different frame [pass] +page/page-drag.spec.ts › Drag and drop › iframe › should drag into an iframe [unknown] +page/page-drag.spec.ts › Drag and drop › iframe › should drag out of an iframe [unknown] +page/page-drag.spec.ts › Drag and drop › should allow specifying the position [fail] +page/page-drag.spec.ts › Drag and drop › should be able to drag the mouse in a frame [pass] +page/page-drag.spec.ts › Drag and drop › should cancel on escape [fail] +page/page-drag.spec.ts › Drag and drop › should not send dragover on the first mousemove [unknown] +page/page-drag.spec.ts › Drag and drop › should respect the drop effect [fail] +page/page-drag.spec.ts › Drag and drop › should send the right events [fail] +page/page-drag.spec.ts › Drag and drop › should work @smoke [fail] +page/page-drag.spec.ts › Drag and drop › should work if a frame is stalled [fail] +page/page-drag.spec.ts › Drag and drop › should work if the drag event is captured but not canceled [fail] +page/page-drag.spec.ts › Drag and drop › should work if the drag is canceled [pass] +page/page-drag.spec.ts › Drag and drop › should work inside iframe [fail] +page/page-drag.spec.ts › Drag and drop › should work with locators [fail] +page/page-drag.spec.ts › Drag and drop › should work with the helper method [fail] +page/page-drag.spec.ts › should handle custom dataTransfer [fail] +page/page-drag.spec.ts › should report event.buttons [pass] +page/page-drag.spec.ts › should work if not doing a drag [pass] +page/page-drag.spec.ts › what happens when dragging element is destroyed [fail] +page/page-emulate-media.spec.ts › should change the actual colors in css [fail] +page/page-emulate-media.spec.ts › should default to light [fail] +page/page-emulate-media.spec.ts › should emulate colorScheme should work @smoke [fail] +page/page-emulate-media.spec.ts › should emulate forcedColors [fail] +page/page-emulate-media.spec.ts › should emulate reduced motion [fail] +page/page-emulate-media.spec.ts › should emulate type @smoke [fail] +page/page-emulate-media.spec.ts › should keep reduced motion and color emulation after reload [fail] +page/page-emulate-media.spec.ts › should throw in case of bad colorScheme argument [pass] +page/page-emulate-media.spec.ts › should throw in case of bad media argument [pass] +page/page-emulate-media.spec.ts › should work during navigation [fail] +page/page-evaluate-handle.spec.ts › should accept multiple nested handles [pass] +page/page-evaluate-handle.spec.ts › should accept nested handle [pass] +page/page-evaluate-handle.spec.ts › should accept nested window handle [pass] +page/page-evaluate-handle.spec.ts › should accept object handle as an argument [pass] +page/page-evaluate-handle.spec.ts › should accept object handle to primitive types [pass] +page/page-evaluate-handle.spec.ts › should accept object handle to unserializable value [pass] +page/page-evaluate-handle.spec.ts › should accept same handle multiple times [pass] +page/page-evaluate-handle.spec.ts › should accept same nested object multiple times [pass] +page/page-evaluate-handle.spec.ts › should pass configurable args [pass] +page/page-evaluate-handle.spec.ts › should work [pass] +page/page-evaluate-handle.spec.ts › should work with primitives [pass] +page/page-evaluate-no-stall.spec.ts › should throw when no main execution context [fail] +page/page-evaluate-no-stall.spec.ts › should throw while pending navigation [pass] +page/page-evaluate-no-stall.spec.ts › should work [pass] +page/page-evaluate.spec.ts › should accept "undefined" as one of multiple parameters [pass] +page/page-evaluate.spec.ts › should accept a string [pass] +page/page-evaluate.spec.ts › should accept a string with comments [pass] +page/page-evaluate.spec.ts › should accept a string with semi colons [pass] +page/page-evaluate.spec.ts › should accept element handle as an argument [fail] +page/page-evaluate.spec.ts › should alias Window, Document and Node [pass] +page/page-evaluate.spec.ts › should await promise [pass] +page/page-evaluate.spec.ts › should await promise from popup [pass] +page/page-evaluate.spec.ts › should be able to throw a tricky error [pass] +page/page-evaluate.spec.ts › should evaluate date [pass] +page/page-evaluate.spec.ts › should evaluate exception [fail] +page/page-evaluate.spec.ts › should evaluate exception with a function on the stack [pass] +page/page-evaluate.spec.ts › should evaluate in the page context [pass] +page/page-evaluate.spec.ts › should evaluate url [pass] +page/page-evaluate.spec.ts › should ignore buggy toJSON [pass] +page/page-evaluate.spec.ts › should jsonValue() date [pass] +page/page-evaluate.spec.ts › should jsonValue() url [pass] +page/page-evaluate.spec.ts › should modify global environment [pass] +page/page-evaluate.spec.ts › should not add a toJSON property to newly created Arrays after evaluation [pass] +page/page-evaluate.spec.ts › should not expose the injected script export [pass] +page/page-evaluate.spec.ts › should not leak handles [fail] +page/page-evaluate.spec.ts › should not leak utility script [pass] +page/page-evaluate.spec.ts › should not throw an error when evaluation does a navigation [pass] +page/page-evaluate.spec.ts › should not throw an error when evaluation does a synchronous navigation and returns an object [pass] +page/page-evaluate.spec.ts › should not throw an error when evaluation does a synchronous navigation and returns undefined [pass] +page/page-evaluate.spec.ts › should not use Array.prototype.toJSON when evaluating [pass] +page/page-evaluate.spec.ts › should not use toJSON in jsonValue [pass] +page/page-evaluate.spec.ts › should not use toJSON when evaluating [pass] +page/page-evaluate.spec.ts › should pass exception argument [pass] +page/page-evaluate.spec.ts › should properly serialize PerformanceMeasure object [pass] +page/page-evaluate.spec.ts › should properly serialize null arguments [pass] +page/page-evaluate.spec.ts › should properly serialize null fields [pass] +page/page-evaluate.spec.ts › should properly serialize undefined arguments [pass] +page/page-evaluate.spec.ts › should properly serialize undefined fields [pass] +page/page-evaluate.spec.ts › should properly serialize window.performance object [pass] +page/page-evaluate.spec.ts › should reject promise with exception [pass] +page/page-evaluate.spec.ts › should respect use strict expression [pass] +page/page-evaluate.spec.ts › should return -0 [pass] +page/page-evaluate.spec.ts › should return -Infinity [pass] +page/page-evaluate.spec.ts › should return Infinity [pass] +page/page-evaluate.spec.ts › should return NaN [pass] +page/page-evaluate.spec.ts › should return complex objects [pass] +page/page-evaluate.spec.ts › should return undefined for non-serializable objects [pass] +page/page-evaluate.spec.ts › should return undefined for objects with symbols [pass] +page/page-evaluate.spec.ts › should return undefined properties [pass] +page/page-evaluate.spec.ts › should roundtrip date [pass] +page/page-evaluate.spec.ts › should roundtrip promise to unserializable values [pass] +page/page-evaluate.spec.ts › should roundtrip promise to value [pass] +page/page-evaluate.spec.ts › should roundtrip regex [pass] +page/page-evaluate.spec.ts › should roundtrip unserializable values [fail] +page/page-evaluate.spec.ts › should roundtrip url [pass] +page/page-evaluate.spec.ts › should simulate a user gesture [pass] +page/page-evaluate.spec.ts › should support thrown numbers as error messages [pass] +page/page-evaluate.spec.ts › should support thrown strings as error messages [pass] +page/page-evaluate.spec.ts › should throw a nice error after a navigation [pass] +page/page-evaluate.spec.ts › should throw error with detailed information on exception inside promise [pass] +page/page-evaluate.spec.ts › should throw if underlying element was disposed [fail] +page/page-evaluate.spec.ts › should throw when evaluation triggers reload [pass] +page/page-evaluate.spec.ts › should throw when frame is detached [pass] +page/page-evaluate.spec.ts › should throw when passed more than one parameter [pass] +page/page-evaluate.spec.ts › should transfer -0 [pass] +page/page-evaluate.spec.ts › should transfer -Infinity [pass] +page/page-evaluate.spec.ts › should transfer 100Mb of data from page to node.js [pass] +page/page-evaluate.spec.ts › should transfer Infinity [pass] +page/page-evaluate.spec.ts › should transfer NaN [pass] +page/page-evaluate.spec.ts › should transfer arrays [pass] +page/page-evaluate.spec.ts › should transfer arrays as arrays, not objects [pass] +page/page-evaluate.spec.ts › should transfer bigint [pass] +page/page-evaluate.spec.ts › should transfer maps as empty objects [pass] +page/page-evaluate.spec.ts › should work @smoke [pass] +page/page-evaluate.spec.ts › should work even when JSON is set to null [pass] +page/page-evaluate.spec.ts › should work for circular object [pass] +page/page-evaluate.spec.ts › should work from-inside an exposed function [fail] +page/page-evaluate.spec.ts › should work right after a cross-origin navigation [fail] +page/page-evaluate.spec.ts › should work right after framenavigated [fail] +page/page-evaluate.spec.ts › should work with Array.from/map [pass] +page/page-evaluate.spec.ts › should work with CSP [fail] +page/page-evaluate.spec.ts › should work with busted Array.prototype.map/push [pass] +page/page-evaluate.spec.ts › should work with function shorthands [pass] +page/page-evaluate.spec.ts › should work with large strings [pass] +page/page-evaluate.spec.ts › should work with large unicode strings [pass] +page/page-evaluate.spec.ts › should work with new Function() and CSP [fail] +page/page-evaluate.spec.ts › should work with non-strict expressions [pass] +page/page-evaluate.spec.ts › should work with overridden Object.defineProperty [pass] +page/page-evaluate.spec.ts › should work with overridden URL/Date/RegExp [pass] +page/page-evaluate.spec.ts › should work with overridden globalThis.Window/Document/Node [pass] +page/page-evaluate.spec.ts › should work with overwritten Promise [pass] +page/page-evaluate.spec.ts › should work with unicode chars [pass] +page/page-event-console.spec.ts › do not update console count on unhandled rejections [pass] +page/page-event-console.spec.ts › should emit same log twice [pass] +page/page-event-console.spec.ts › should format the message correctly with time/timeLog/timeEnd [fail] +page/page-event-console.spec.ts › should have location for console API calls [fail] +page/page-event-console.spec.ts › should not fail for window object [fail] +page/page-event-console.spec.ts › should not throw when there are console messages in detached iframes [pass] +page/page-event-console.spec.ts › should trigger correct Log [timeout] +page/page-event-console.spec.ts › should use object previews for arrays and objects [fail] +page/page-event-console.spec.ts › should use object previews for errors [pass] +page/page-event-console.spec.ts › should use text() for inspection [pass] +page/page-event-console.spec.ts › should work @smoke [fail] +page/page-event-console.spec.ts › should work for different console API calls [fail] +page/page-event-load.spec.ts › should fire once [pass] +page/page-event-load.spec.ts › should fire once with iframe navigation [pass] +page/page-event-network.spec.ts › Page.Events.Request @smoke [fail] +page/page-event-network.spec.ts › Page.Events.RequestFailed @smoke [fail] +page/page-event-network.spec.ts › Page.Events.RequestFinished @smoke [pass] +page/page-event-network.spec.ts › Page.Events.Response @smoke [pass] +page/page-event-network.spec.ts › interrupt request.response() and request.allHeaders() on page.close [fail] +page/page-event-network.spec.ts › should fire events in proper order [pass] +page/page-event-network.spec.ts › should resolve responses after a navigation [pass] +page/page-event-network.spec.ts › should support redirects [pass] +page/page-event-pageerror.spec.ts › should contain sourceURL [timeout] +page/page-event-pageerror.spec.ts › should contain the Error.name property [timeout] +page/page-event-pageerror.spec.ts › should emit error from unhandled rejects [fail] +page/page-event-pageerror.spec.ts › should fire [timeout] +page/page-event-pageerror.spec.ts › should handle object [timeout] +page/page-event-pageerror.spec.ts › should handle odd values [timeout] +page/page-event-pageerror.spec.ts › should handle window [timeout] +page/page-event-pageerror.spec.ts › should not receive console message for pageError [timeout] +page/page-event-pageerror.spec.ts › should remove a listener of a non-existing event handler [pass] +page/page-event-pageerror.spec.ts › should support an empty Error.name property [timeout] +page/page-event-popup.spec.ts › should be able to capture alert [pass] +page/page-event-popup.spec.ts › should emit for immediately closed popups [fail] +page/page-event-popup.spec.ts › should emit for immediately closed popups 2 [pass] +page/page-event-popup.spec.ts › should not treat navigations as new popups [fail] +page/page-event-popup.spec.ts › should report popup opened from iframes [fail] +page/page-event-popup.spec.ts › should work @smoke [pass] +page/page-event-popup.spec.ts › should work with clicking target=_blank [fail] +page/page-event-popup.spec.ts › should work with clicking target=_blank and rel=noopener [fail] +page/page-event-popup.spec.ts › should work with empty url [pass] +page/page-event-popup.spec.ts › should work with fake-clicking target=_blank and rel=noopener [fail] +page/page-event-popup.spec.ts › should work with noopener and about:blank [pass] +page/page-event-popup.spec.ts › should work with noopener and no url [fail] +page/page-event-popup.spec.ts › should work with noopener and url [pass] +page/page-event-popup.spec.ts › should work with window features [pass] +page/page-event-request.spec.ts › main resource xhr should have type xhr [fail] +page/page-event-request.spec.ts › should fire for fetches [pass] +page/page-event-request.spec.ts › should fire for iframes [pass] +page/page-event-request.spec.ts › should fire for navigation requests [pass] +page/page-event-request.spec.ts › should fire requestfailed when intercepting race [unknown] +page/page-event-request.spec.ts › should report navigation requests and responses handled by service worker [timeout] +page/page-event-request.spec.ts › should report navigation requests and responses handled by service worker with routing [timeout] +page/page-event-request.spec.ts › should report requests and responses handled by service worker [fail] +page/page-event-request.spec.ts › should report requests and responses handled by service worker with routing [fail] +page/page-event-request.spec.ts › should return response body when Cross-Origin-Opener-Policy is set [fail] +page/page-expose-function.spec.ts › exposeBinding should work @smoke [fail] +page/page-expose-function.spec.ts › exposeBinding(handle) should work with element handles [fail] +page/page-expose-function.spec.ts › exposeBindingHandle should not throw during navigation [fail] +page/page-expose-function.spec.ts › exposeBindingHandle should throw for multiple arguments [fail] +page/page-expose-function.spec.ts › exposeBindingHandle should work [fail] +page/page-expose-function.spec.ts › should alias Window, Document and Node [fail] +page/page-expose-function.spec.ts › should await returned promise [fail] +page/page-expose-function.spec.ts › should be callable from-inside addInitScript [fail] +page/page-expose-function.spec.ts › should fail with busted Array.prototype.toJSON [fail] +page/page-expose-function.spec.ts › should not result in unhandled rejection [timeout] +page/page-expose-function.spec.ts › should serialize cycles [fail] +page/page-expose-function.spec.ts › should support throwing "null" [fail] +page/page-expose-function.spec.ts › should survive navigation [fail] +page/page-expose-function.spec.ts › should throw exception in page context [fail] +page/page-expose-function.spec.ts › should throw for duplicate registrations [pass] +page/page-expose-function.spec.ts › should work [fail] +page/page-expose-function.spec.ts › should work after cross origin navigation [fail] +page/page-expose-function.spec.ts › should work on frames [fail] +page/page-expose-function.spec.ts › should work on frames before navigation [fail] +page/page-expose-function.spec.ts › should work with busted Array.prototype.map/push [fail] +page/page-expose-function.spec.ts › should work with complex objects [fail] +page/page-expose-function.spec.ts › should work with handles and complex objects [fail] +page/page-expose-function.spec.ts › should work with overridden console object [fail] +page/page-expose-function.spec.ts › should work with setContent [fail] +page/page-fill.spec.ts › fill back to back [fail] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - color [fail] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - date [fail] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - datetime-local [fail] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - month [unknown] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - range [fail] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - time [fail] +page/page-fill.spec.ts › input event.composed should be true and cross shadow dom boundary - week [unknown] +page/page-fill.spec.ts › should be able to clear using fill() [pass] +page/page-fill.spec.ts › should be able to fill exponent into the input[type=number] [fail] +page/page-fill.spec.ts › should be able to fill input[type=number] with empty string [fail] +page/page-fill.spec.ts › should be able to fill the body [fail] +page/page-fill.spec.ts › should be able to fill the input[type=number] [fail] +page/page-fill.spec.ts › should be able to fill when focus is in the wrong frame [fail] +page/page-fill.spec.ts › should fill color input [fail] +page/page-fill.spec.ts › should fill contenteditable [pass] +page/page-fill.spec.ts › should fill contenteditable with new lines [fail] +page/page-fill.spec.ts › should fill date input after clicking [fail] +page/page-fill.spec.ts › should fill datetime-local input [fail] +page/page-fill.spec.ts › should fill different input types [pass] +page/page-fill.spec.ts › should fill elements with existing value and selection [pass] +page/page-fill.spec.ts › should fill fixed position input [fail] +page/page-fill.spec.ts › should fill input [pass] +page/page-fill.spec.ts › should fill month input [fail] +page/page-fill.spec.ts › should fill range input [fail] +page/page-fill.spec.ts › should fill textarea @smoke [pass] +page/page-fill.spec.ts › should fill time input [fail] +page/page-fill.spec.ts › should fill week input [fail] +page/page-fill.spec.ts › should not be able to fill text into the input[type=number] [fail] +page/page-fill.spec.ts › should not throw when fill causes navigation [fail] +page/page-fill.spec.ts › should retry on disabled element [pass] +page/page-fill.spec.ts › should retry on invisible element [pass] +page/page-fill.spec.ts › should retry on readonly element [pass] +page/page-fill.spec.ts › should throw if passed a non-string value [pass] +page/page-fill.spec.ts › should throw nice error without injected script stack when element is not an [fail] +page/page-fill.spec.ts › should throw on incorrect color value [fail] +page/page-fill.spec.ts › should throw on incorrect date [fail] +page/page-fill.spec.ts › should throw on incorrect datetime-local [unknown] +page/page-fill.spec.ts › should throw on incorrect month [unknown] +page/page-fill.spec.ts › should throw on incorrect range value [fail] +page/page-fill.spec.ts › should throw on incorrect time [fail] +page/page-fill.spec.ts › should throw on incorrect week [unknown] +page/page-fill.spec.ts › should throw on unsupported inputs [pass] +page/page-focus.spec.ts › clicking checkbox should activate it [unknown] +page/page-focus.spec.ts › keeps focus on element when attempting to focus a non-focusable element [fail] +page/page-focus.spec.ts › should emit blur event [fail] +page/page-focus.spec.ts › should emit focus event [fail] +page/page-focus.spec.ts › should traverse focus [fail] +page/page-focus.spec.ts › should traverse focus in all directions [fail] +page/page-focus.spec.ts › should traverse only form elements [flaky] +page/page-focus.spec.ts › should work @smoke [fail] +page/page-goto.spec.ts › js redirect overrides url bar navigation [pass] +page/page-goto.spec.ts › should be able to navigate to a page controlled by service worker [pass] +page/page-goto.spec.ts › should capture cross-process iframe navigation request [pass] +page/page-goto.spec.ts › should capture iframe navigation request [pass] +page/page-goto.spec.ts › should disable timeout when its set to 0 [pass] +page/page-goto.spec.ts › should fail when canceled by another navigation [fail] +page/page-goto.spec.ts › should fail when exceeding browser context navigation timeout [pass] +page/page-goto.spec.ts › should fail when exceeding browser context timeout [fail] +page/page-goto.spec.ts › should fail when exceeding default maximum navigation timeout [pass] +page/page-goto.spec.ts › should fail when exceeding default maximum timeout [pass] +page/page-goto.spec.ts › should fail when exceeding maximum navigation timeout [pass] +page/page-goto.spec.ts › should fail when main resources failed to load [pass] +page/page-goto.spec.ts › should fail when navigating and show the url at the error message [fail] +page/page-goto.spec.ts › should fail when navigating to bad SSL [fail] +page/page-goto.spec.ts › should fail when navigating to bad SSL after redirects [fail] +page/page-goto.spec.ts › should fail when navigating to bad url [fail] +page/page-goto.spec.ts › should fail when replaced by another navigation [fail] +page/page-goto.spec.ts › should fail when server returns 204 [timeout] +page/page-goto.spec.ts › should navigate to URL with hash and fire requests without hash [pass] +page/page-goto.spec.ts › should navigate to about:blank [pass] +page/page-goto.spec.ts › should navigate to dataURL and not fire dataURL requests [pass] +page/page-goto.spec.ts › should navigate to empty page with domcontentloaded [pass] +page/page-goto.spec.ts › should not crash when RTCPeerConnection is used [pass] +page/page-goto.spec.ts › should not crash when navigating to bad SSL after a cross origin navigation [pass] +page/page-goto.spec.ts › should not leak listeners during 20 waitForNavigation [pass] +page/page-goto.spec.ts › should not leak listeners during bad navigation [pass] +page/page-goto.spec.ts › should not leak listeners during navigation [pass] +page/page-goto.spec.ts › should not resolve goto upon window.stop() [pass] +page/page-goto.spec.ts › should not throw if networkidle0 is passed as an option [pass] +page/page-goto.spec.ts › should not throw unhandled rejections on invalid url [pass] +page/page-goto.spec.ts › should override referrer-policy [fail] +page/page-goto.spec.ts › should prioritize default navigation timeout over default timeout [pass] +page/page-goto.spec.ts › should properly wait for load [pass] +page/page-goto.spec.ts › should reject referer option when setExtraHTTPHeaders provides referer [pass] +page/page-goto.spec.ts › should report raw buffer for main resource [fail] +page/page-goto.spec.ts › should return from goto if new navigation is started [fail] +page/page-goto.spec.ts › should return last response in redirect chain [pass] +page/page-goto.spec.ts › should return response when page changes its URL after load [pass] +page/page-goto.spec.ts › should return url with basic auth info [pass] +page/page-goto.spec.ts › should return when navigation is committed if commit is specified [fail] +page/page-goto.spec.ts › should send referer [fail] +page/page-goto.spec.ts › should send referer of cross-origin URL [fail] +page/page-goto.spec.ts › should succeed on url bar navigation when there is pending navigation [fail] +page/page-goto.spec.ts › should throw if networkidle2 is passed as an option [pass] +page/page-goto.spec.ts › should use http for no protocol [pass] +page/page-goto.spec.ts › should wait for load when iframe attaches and detaches [pass] +page/page-goto.spec.ts › should work @smoke [pass] +page/page-goto.spec.ts › should work cross-process [pass] +page/page-goto.spec.ts › should work when navigating to 404 [pass] +page/page-goto.spec.ts › should work when navigating to data url [pass] +page/page-goto.spec.ts › should work when navigating to valid url [pass] +page/page-goto.spec.ts › should work when page calls history API in beforeunload [fail] +page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy [pass] +page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy after redirect [pass] +page/page-goto.spec.ts › should work with Cross-Origin-Opener-Policy and interception [pass] +page/page-goto.spec.ts › should work with anchor navigation [timeout] +page/page-goto.spec.ts › should work with cross-process that fails before committing [pass] +page/page-goto.spec.ts › should work with file URL [pass] +page/page-goto.spec.ts › should work with file URL with subframes [fail] +page/page-goto.spec.ts › should work with lazy loading iframes [fail] +page/page-goto.spec.ts › should work with redirects [fail] +page/page-goto.spec.ts › should work with self requesting page [pass] +page/page-goto.spec.ts › should work with subframes return 204 [pass] +page/page-goto.spec.ts › should work with subframes return 204 with domcontentloaded [pass] +page/page-history.spec.ts › goBack/goForward should work with bfcache-able pages [fail] +page/page-history.spec.ts › page.goBack during renderer-initiated navigation [fail] +page/page-history.spec.ts › page.goBack should work @smoke [fail] +page/page-history.spec.ts › page.goBack should work for file urls [fail] +page/page-history.spec.ts › page.goBack should work with HistoryAPI [fail] +page/page-history.spec.ts › page.goForward during renderer-initiated navigation [fail] +page/page-history.spec.ts › page.reload during renderer-initiated navigation [fail] +page/page-history.spec.ts › page.reload should not resolve with same-document navigation [fail] +page/page-history.spec.ts › page.reload should work [pass] +page/page-history.spec.ts › page.reload should work on a page with a hash [pass] +page/page-history.spec.ts › page.reload should work on a page with a hash at the end [pass] +page/page-history.spec.ts › page.reload should work with cross-origin redirect [pass] +page/page-history.spec.ts › page.reload should work with data url [pass] +page/page-history.spec.ts › page.reload should work with same origin redirect [pass] +page/page-history.spec.ts › regression test for issue 20791 [pass] +page/page-history.spec.ts › should reload proper page [pass] +page/page-keyboard.spec.ts › insertText should only emit input event [fail] +page/page-keyboard.spec.ts › pressing Meta should not result in any text insertion on any platform [fail] +page/page-keyboard.spec.ts › should be able to prevent selectAll [pass] +page/page-keyboard.spec.ts › should dispatch a click event on a button when Enter gets pressed [fail] +page/page-keyboard.spec.ts › should dispatch a click event on a button when Space gets pressed [fail] +page/page-keyboard.spec.ts › should dispatch insertText after context menu was opened [pass] +page/page-keyboard.spec.ts › should expose keyIdentifier in webkit [unknown] +page/page-keyboard.spec.ts › should handle selectAll [pass] +page/page-keyboard.spec.ts › should have correct Keydown/Keyup order when pressing Escape key [pass] +page/page-keyboard.spec.ts › should move around the selection in a contenteditable [fail] +page/page-keyboard.spec.ts › should move to the start of the document [unknown] +page/page-keyboard.spec.ts › should move with the arrow keys [pass] +page/page-keyboard.spec.ts › should not type canceled events [pass] +page/page-keyboard.spec.ts › should press Enter [fail] +page/page-keyboard.spec.ts › should press plus [fail] +page/page-keyboard.spec.ts › should press shift plus [fail] +page/page-keyboard.spec.ts › should press the meta key [pass] +page/page-keyboard.spec.ts › should report multiple modifiers [fail] +page/page-keyboard.spec.ts › should report shiftKey [pass] +page/page-keyboard.spec.ts › should scroll with PageDown [pass] +page/page-keyboard.spec.ts › should send a character with ElementHandle.press [pass] +page/page-keyboard.spec.ts › should send a character with insertText [fail] +page/page-keyboard.spec.ts › should send proper codes while typing [pass] +page/page-keyboard.spec.ts › should send proper codes while typing with shift [pass] +page/page-keyboard.spec.ts › should shift raw codes [pass] +page/page-keyboard.spec.ts › should specify location [fail] +page/page-keyboard.spec.ts › should specify repeat property [pass] +page/page-keyboard.spec.ts › should support MacOS shortcuts [unknown] +page/page-keyboard.spec.ts › should support multiple plus-separated modifiers [pass] +page/page-keyboard.spec.ts › should support plus-separated modifiers [pass] +page/page-keyboard.spec.ts › should support simple copy-pasting [fail] +page/page-keyboard.spec.ts › should support simple cut-pasting [fail] +page/page-keyboard.spec.ts › should support undo-redo [fail] +page/page-keyboard.spec.ts › should throw on unknown keys [pass] +page/page-keyboard.spec.ts › should type after context menu was opened [pass] +page/page-keyboard.spec.ts › should type all kinds of characters [pass] +page/page-keyboard.spec.ts › should type emoji [pass] +page/page-keyboard.spec.ts › should type emoji into an iframe [pass] +page/page-keyboard.spec.ts › should type into a textarea @smoke [pass] +page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom [fail] +page/page-keyboard.spec.ts › should type repeatedly in contenteditable in shadow dom with nested elements [fail] +page/page-keyboard.spec.ts › should type repeatedly in input in shadow dom [fail] +page/page-keyboard.spec.ts › should work after a cross origin navigation [pass] +page/page-keyboard.spec.ts › should work with keyboard events with empty.html [pass] +page/page-keyboard.spec.ts › type to non-focusable element should maintain old focus [fail] +page/page-leaks.spec.ts › click should not leak [fail] +page/page-leaks.spec.ts › expect should not leak [fail] +page/page-leaks.spec.ts › fill should not leak [fail] +page/page-leaks.spec.ts › waitFor should not leak [fail] +page/page-listeners.spec.ts › should not throw with ignoreErrors [pass] +page/page-listeners.spec.ts › should wait [pass] +page/page-listeners.spec.ts › wait should throw [pass] +page/page-mouse.spec.ts › down and up should generate click [pass] +page/page-mouse.spec.ts › should always round down [fail] +page/page-mouse.spec.ts › should click the document @smoke [pass] +page/page-mouse.spec.ts › should dblclick the div [fail] +page/page-mouse.spec.ts › should dispatch mouse move after context menu was opened [pass] +page/page-mouse.spec.ts › should not crash on mouse drag with any button [pass] +page/page-mouse.spec.ts › should pointerdown the div with a custom button [fail] +page/page-mouse.spec.ts › should report correct buttons property [pass] +page/page-mouse.spec.ts › should select the text with mouse [pass] +page/page-mouse.spec.ts › should set modifier keys on click [pass] +page/page-mouse.spec.ts › should trigger hover state [pass] +page/page-mouse.spec.ts › should trigger hover state on disabled button [pass] +page/page-mouse.spec.ts › should trigger hover state with removed window.Node [pass] +page/page-mouse.spec.ts › should tween mouse movement [pass] +page/page-navigation.spec.ts › should work with _blank target [pass] +page/page-navigation.spec.ts › should work with _blank target in form [fail] +page/page-navigation.spec.ts › should work with cross-process _blank target [pass] +page/page-network-idle.spec.ts › should navigate to empty page with networkidle [pass] +page/page-network-idle.spec.ts › should wait for networkidle from the child frame [pass] +page/page-network-idle.spec.ts › should wait for networkidle from the popup [fail] +page/page-network-idle.spec.ts › should wait for networkidle in setContent [fail] +page/page-network-idle.spec.ts › should wait for networkidle in setContent from the child frame [fail] +page/page-network-idle.spec.ts › should wait for networkidle in setContent with request from previous navigation [fail] +page/page-network-idle.spec.ts › should wait for networkidle in waitForNavigation [pass] +page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation [pass] +page/page-network-idle.spec.ts › should wait for networkidle to succeed navigation with request from previous navigation [fail] +page/page-network-idle.spec.ts › should wait for networkidle when iframe attaches and detaches [fail] +page/page-network-idle.spec.ts › should wait for networkidle when navigating iframe [pass] +page/page-network-idle.spec.ts › should work after repeated navigations in the same page [pass] +page/page-network-request.spec.ts › page.reload return 304 status code [pass] +page/page-network-request.spec.ts › should get the same headers as the server [fail] +page/page-network-request.spec.ts › should get the same headers as the server CORS [fail] +page/page-network-request.spec.ts › should get |undefined| with postData() when there is no post data [pass] +page/page-network-request.spec.ts › should get |undefined| with postDataJSON() when there is no post data [pass] +page/page-network-request.spec.ts › should handle mixed-content blocked requests [flaky] +page/page-network-request.spec.ts › should not allow to access frame on popup main request [fail] +page/page-network-request.spec.ts › should not get preflight CORS requests when intercepting [fail] +page/page-network-request.spec.ts › should not return allHeaders() until they are available [fail] +page/page-network-request.spec.ts › should not work for a redirect and interception [pass] +page/page-network-request.spec.ts › should override post data content type [pass] +page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded [fail] +page/page-network-request.spec.ts › should parse the data if content-type is application/x-www-form-urlencoded; charset=UTF-8 [fail] +page/page-network-request.spec.ts › should parse the json post data [fail] +page/page-network-request.spec.ts › should report all cookies in one header [pass] +page/page-network-request.spec.ts › should report raw headers [fail] +page/page-network-request.spec.ts › should report raw response headers in redirects [pass] +page/page-network-request.spec.ts › should return event source [fail] +page/page-network-request.spec.ts › should return headers [pass] +page/page-network-request.spec.ts › should return multipart/form-data [fail] +page/page-network-request.spec.ts › should return navigation bit [pass] +page/page-network-request.spec.ts › should return navigation bit when navigating to image [pass] +page/page-network-request.spec.ts › should return postData [fail] +page/page-network-request.spec.ts › should work for a redirect [pass] +page/page-network-request.spec.ts › should work for fetch requests @smoke [pass] +page/page-network-request.spec.ts › should work for main frame navigation request [pass] +page/page-network-request.spec.ts › should work for subframe navigation request [pass] +page/page-network-request.spec.ts › should work with binary post data [fail] +page/page-network-request.spec.ts › should work with binary post data and interception [fail] +page/page-network-response.spec.ts › should behave the same way for headers and allHeaders [pass] +page/page-network-response.spec.ts › should bypass disk cache when context interception is enabled [fail] +page/page-network-response.spec.ts › should bypass disk cache when page interception is enabled [pass] +page/page-network-response.spec.ts › should provide a Response with a file URL [fail] +page/page-network-response.spec.ts › should reject response.finished if context closes [timeout] +page/page-network-response.spec.ts › should reject response.finished if page closes [pass] +page/page-network-response.spec.ts › should report all headers [fail] +page/page-network-response.spec.ts › should report if request was fromServiceWorker [fail] +page/page-network-response.spec.ts › should report multiple set-cookie headers [fail] +page/page-network-response.spec.ts › should return body [fail] +page/page-network-response.spec.ts › should return body for prefetch script [fail] +page/page-network-response.spec.ts › should return body with compression [fail] +page/page-network-response.spec.ts › should return headers after route.fulfill [pass] +page/page-network-response.spec.ts › should return json [fail] +page/page-network-response.spec.ts › should return multiple header value [pass] +page/page-network-response.spec.ts › should return set-cookie header after route.fulfill [pass] +page/page-network-response.spec.ts › should return status text [pass] +page/page-network-response.spec.ts › should return text [fail] +page/page-network-response.spec.ts › should return uncompressed text [fail] +page/page-network-response.spec.ts › should throw when requesting body of redirected response [pass] +page/page-network-response.spec.ts › should wait until response completes [fail] +page/page-network-response.spec.ts › should work @smoke [pass] +page/page-network-sizes.spec.ts › should handle redirects [pass] +page/page-network-sizes.spec.ts › should have correct responseBodySize for 404 with content [pass] +page/page-network-sizes.spec.ts › should have the correct responseBodySize [pass] +page/page-network-sizes.spec.ts › should have the correct responseBodySize for chunked request [fail] +page/page-network-sizes.spec.ts › should have the correct responseBodySize with gzip compression [pass] +page/page-network-sizes.spec.ts › should return sizes without hanging [pass] +page/page-network-sizes.spec.ts › should set bodySize and headersSize [fail] +page/page-network-sizes.spec.ts › should set bodySize to 0 if there was no body [pass] +page/page-network-sizes.spec.ts › should set bodySize to 0 when there was no response body [pass] +page/page-network-sizes.spec.ts › should set bodySize, headersSize, and transferSize [pass] +page/page-network-sizes.spec.ts › should throw for failed requests [pass] +page/page-network-sizes.spec.ts › should work with 200 status code [pass] +page/page-network-sizes.spec.ts › should work with 401 status code [pass] +page/page-network-sizes.spec.ts › should work with 404 status code [pass] +page/page-network-sizes.spec.ts › should work with 500 status code [fail] +page/page-object-count.spec.ts › should count objects [flaky] +page/page-request-continue.spec.ts › continue should delete headers on redirects [pass] +page/page-request-continue.spec.ts › continue should not change multipart/form-data body [fail] +page/page-request-continue.spec.ts › continue should propagate headers to redirects [pass] +page/page-request-continue.spec.ts › post data › should amend binary post data [fail] +page/page-request-continue.spec.ts › post data › should amend longer post data [pass] +page/page-request-continue.spec.ts › post data › should amend method and post data [pass] +page/page-request-continue.spec.ts › post data › should amend post data [pass] +page/page-request-continue.spec.ts › post data › should amend utf8 post data [pass] +page/page-request-continue.spec.ts › post data › should compute content-length from post data [fail] +page/page-request-continue.spec.ts › post data › should use content-type from original request [pass] +page/page-request-continue.spec.ts › redirected requests should report overridden headers [fail] +page/page-request-continue.spec.ts › should amend HTTP headers [pass] +page/page-request-continue.spec.ts › should amend method [pass] +page/page-request-continue.spec.ts › should amend method on main request [pass] +page/page-request-continue.spec.ts › should continue preload link requests [pass] +page/page-request-continue.spec.ts › should delete header with undefined value [pass] +page/page-request-continue.spec.ts › should delete the origin header [pass] +page/page-request-continue.spec.ts › should intercept css variable with background url [fail] +page/page-request-continue.spec.ts › should not allow changing protocol when overriding url [pass] +page/page-request-continue.spec.ts › should not throw if request was cancelled by the page [timeout] +page/page-request-continue.spec.ts › should not throw when continuing after page is closed [fail] +page/page-request-continue.spec.ts › should not throw when continuing while page is closing [pass] +page/page-request-continue.spec.ts › should override method along with url [fail] +page/page-request-continue.spec.ts › should override request url [timeout] +page/page-request-continue.spec.ts › should work [pass] +page/page-request-continue.spec.ts › should work with Cross-Origin-Opener-Policy [fail] +page/page-request-fallback.spec.ts › post data › should amend binary post data [fail] +page/page-request-fallback.spec.ts › post data › should amend json post data [pass] +page/page-request-fallback.spec.ts › post data › should amend post data [pass] +page/page-request-fallback.spec.ts › should amend HTTP headers [pass] +page/page-request-fallback.spec.ts › should amend method [pass] +page/page-request-fallback.spec.ts › should chain once [fail] +page/page-request-fallback.spec.ts › should delete header with undefined value [pass] +page/page-request-fallback.spec.ts › should fall back [pass] +page/page-request-fallback.spec.ts › should fall back after exception [pass] +page/page-request-fallback.spec.ts › should fall back async [fail] +page/page-request-fallback.spec.ts › should not chain abort [fail] +page/page-request-fallback.spec.ts › should not chain fulfill [fail] +page/page-request-fallback.spec.ts › should override request url [fail] +page/page-request-fallback.spec.ts › should work [pass] +page/page-request-fulfill.spec.ts › headerValue should return set-cookie from intercepted response [pass] +page/page-request-fulfill.spec.ts › should allow mocking binary responses [fail] +page/page-request-fulfill.spec.ts › should allow mocking svg with charset [fail] +page/page-request-fulfill.spec.ts › should fetch original request and fulfill [pass] +page/page-request-fulfill.spec.ts › should fulfill json [fail] +page/page-request-fulfill.spec.ts › should fulfill preload link requests [pass] +page/page-request-fulfill.spec.ts › should fulfill with fetch response that has multiple set-cookie [timeout] +page/page-request-fulfill.spec.ts › should fulfill with fetch result [fail] +page/page-request-fulfill.spec.ts › should fulfill with fetch result and overrides [fail] +page/page-request-fulfill.spec.ts › should fulfill with global fetch result [fail] +page/page-request-fulfill.spec.ts › should fulfill with gzip and readback [timeout] +page/page-request-fulfill.spec.ts › should fulfill with har response [fail] +page/page-request-fulfill.spec.ts › should fulfill with multiple set-cookie [fail] +page/page-request-fulfill.spec.ts › should fulfill with unuassigned status codes [pass] +page/page-request-fulfill.spec.ts › should include the origin header [pass] +page/page-request-fulfill.spec.ts › should not go to the network for fulfilled requests body [fail] +page/page-request-fulfill.spec.ts › should not modify the headers sent to the server [pass] +page/page-request-fulfill.spec.ts › should not throw if request was cancelled by the page [timeout] +page/page-request-fulfill.spec.ts › should stringify intercepted request response headers [pass] +page/page-request-fulfill.spec.ts › should work [pass] +page/page-request-fulfill.spec.ts › should work with buffer as body [fail] +page/page-request-fulfill.spec.ts › should work with file path [fail] +page/page-request-fulfill.spec.ts › should work with status code 422 [pass] +page/page-request-intercept.spec.ts › request.postData is not null when fetching FormData with a Blob [fail] +page/page-request-intercept.spec.ts › should fulfill intercepted response [fail] +page/page-request-intercept.spec.ts › should fulfill intercepted response using alias [pass] +page/page-request-intercept.spec.ts › should fulfill popup main request using alias [fail] +page/page-request-intercept.spec.ts › should fulfill response with empty body [fail] +page/page-request-intercept.spec.ts › should fulfill with any response [fail] +page/page-request-intercept.spec.ts › should give access to the intercepted response [fail] +page/page-request-intercept.spec.ts › should give access to the intercepted response body [pass] +page/page-request-intercept.spec.ts › should intercept multipart/form-data request body [fail] +page/page-request-intercept.spec.ts › should intercept with post data override [pass] +page/page-request-intercept.spec.ts › should intercept with url override [fail] +page/page-request-intercept.spec.ts › should not follow redirects when maxRedirects is set to 0 in route.fetch [pass] +page/page-request-intercept.spec.ts › should override with defaults when intercepted response not provided [fail] +page/page-request-intercept.spec.ts › should support fulfill after intercept [fail] +page/page-request-intercept.spec.ts › should support timeout option in route.fetch [fail] +page/page-route.spec.ts › route.abort should throw if called twice [pass] +page/page-route.spec.ts › route.continue should throw if called twice [pass] +page/page-route.spec.ts › route.fallback should throw if called twice [fail] +page/page-route.spec.ts › route.fulfill should throw if called twice [fail] +page/page-route.spec.ts › should add Access-Control-Allow-Origin by default when fulfill [fail] +page/page-route.spec.ts › should allow null origin for about:blank [fail] +page/page-route.spec.ts › should be able to fetch dataURL and not fire dataURL requests [pass] +page/page-route.spec.ts › should be able to remove headers [fail] +page/page-route.spec.ts › should be abortable [pass] +page/page-route.spec.ts › should be abortable with custom error codes [fail] +page/page-route.spec.ts › should chain fallback w/ dynamic URL [fail] +page/page-route.spec.ts › should contain raw request header [pass] +page/page-route.spec.ts › should contain raw response header [pass] +page/page-route.spec.ts › should contain raw response header after fulfill [pass] +page/page-route.spec.ts › should contain referer header [pass] +page/page-route.spec.ts › should fail navigation when aborting main resource [fail] +page/page-route.spec.ts › should fulfill with redirect status [pass] +page/page-route.spec.ts › should intercept @smoke [fail] +page/page-route.spec.ts › should intercept main resource during cross-process navigation [pass] +page/page-route.spec.ts › should intercept when postData is more than 1MB [fail] +page/page-route.spec.ts › should navigate to URL with hash and and fire requests without hash [pass] +page/page-route.spec.ts › should navigate to dataURL and not fire dataURL requests [fail] +page/page-route.spec.ts › should not auto-intercept non-preflight OPTIONS [fail] +page/page-route.spec.ts › should not fulfill with redirect status [fail] +page/page-route.spec.ts › should not throw "Invalid Interception Id" if the request was cancelled [fail] +page/page-route.spec.ts › should not throw if request was cancelled by the page [fail] +page/page-route.spec.ts › should not work with redirects [fail] +page/page-route.spec.ts › should override cookie header [fail] +page/page-route.spec.ts › should pause intercepted XHR until continue [pass] +page/page-route.spec.ts › should pause intercepted fetch request until continue [pass] +page/page-route.spec.ts › should properly return navigation response when URL has cookies [fail] +page/page-route.spec.ts › should reject cors with disallowed credentials [fail] +page/page-route.spec.ts › should respect cors overrides [fail] +page/page-route.spec.ts › should send referer [fail] +page/page-route.spec.ts › should show custom HTTP headers [fail] +page/page-route.spec.ts › should support ? in glob pattern [pass] +page/page-route.spec.ts › should support async handler w/ times [pass] +page/page-route.spec.ts › should support cors for different methods [fail] +page/page-route.spec.ts › should support cors with GET [pass] +page/page-route.spec.ts › should support cors with POST [fail] +page/page-route.spec.ts › should support cors with credentials [fail] +page/page-route.spec.ts › should support the times parameter with route matching [pass] +page/page-route.spec.ts › should unroute [fail] +page/page-route.spec.ts › should work if handler with times parameter was removed from another handler [pass] +page/page-route.spec.ts › should work when POST is redirected with 302 [fail] +page/page-route.spec.ts › should work when header manipulation headers with redirect [pass] +page/page-route.spec.ts › should work with badly encoded server [pass] +page/page-route.spec.ts › should work with custom referer headers [fail] +page/page-route.spec.ts › should work with encoded server [fail] +page/page-route.spec.ts › should work with encoded server - 2 [fail] +page/page-route.spec.ts › should work with equal requests [pass] +page/page-route.spec.ts › should work with redirect inside sync XHR [fail] +page/page-route.spec.ts › should work with redirects for subresources [fail] +page/page-screenshot.spec.ts › page screenshot animations › should capture screenshots after layoutchanges in transitionend event [fail] +page/page-screenshot.spec.ts › page screenshot animations › should fire transitionend for finite transitions [fail] +page/page-screenshot.spec.ts › page screenshot animations › should not capture css animations in shadow DOM [fail] +page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite css animation [fail] +page/page-screenshot.spec.ts › page screenshot animations › should not capture infinite web animations [fail] +page/page-screenshot.spec.ts › page screenshot animations › should not capture pseudo element css animation [fail] +page/page-screenshot.spec.ts › page screenshot animations › should not change animation with playbackRate equal to 0 [fail] +page/page-screenshot.spec.ts › page screenshot animations › should resume infinite animations [fail] +page/page-screenshot.spec.ts › page screenshot animations › should stop animations that happen right before screenshot [fail] +page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for INfinite css animation [fail] +page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for css transitions [fail] +page/page-screenshot.spec.ts › page screenshot animations › should trigger particular events for finite css animation [fail] +page/page-screenshot.spec.ts › page screenshot animations › should wait for fonts to load [fail] +page/page-screenshot.spec.ts › page screenshot should capture css transform [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should hide elements based on attr [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should mask in parallel [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should mask inside iframe [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should mask multiple elements [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should remove elements based on attr [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should remove mask after screenshot [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should work [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should work when mask color is not pink #F0F [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe has stalled navigation [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should work when subframe used document.open after a weird url [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should work with elementhandle [fail] +page/page-screenshot.spec.ts › page screenshot › mask option › should work with locator [fail] +page/page-screenshot.spec.ts › page screenshot › path option should create subdirectories [fail] +page/page-screenshot.spec.ts › page screenshot › path option should detect jpeg [fail] +page/page-screenshot.spec.ts › page screenshot › path option should throw for unsupported mime type [fail] +page/page-screenshot.spec.ts › page screenshot › path option should work [fail] +page/page-screenshot.spec.ts › page screenshot › quality option should throw for png [pass] +page/page-screenshot.spec.ts › page screenshot › should allow transparency [fail] +page/page-screenshot.spec.ts › page screenshot › should capture blinking caret if explicitly asked for [fail] +page/page-screenshot.spec.ts › page screenshot › should capture blinking caret in shadow dom [fail] +page/page-screenshot.spec.ts › page screenshot › should capture canvas changes [fail] +page/page-screenshot.spec.ts › page screenshot › should clip elements to the viewport [fail] +page/page-screenshot.spec.ts › page screenshot › should clip rect [fail] +page/page-screenshot.spec.ts › page screenshot › should clip rect with fullPage [fail] +page/page-screenshot.spec.ts › page screenshot › should not capture blinking caret by default [fail] +page/page-screenshot.spec.ts › page screenshot › should not issue resize event [fail] +page/page-screenshot.spec.ts › page screenshot › should prefer type over extension [fail] +page/page-screenshot.spec.ts › page screenshot › should render white background on jpeg file [fail] +page/page-screenshot.spec.ts › page screenshot › should restore viewport after fullPage screenshot [fail] +page/page-screenshot.spec.ts › page screenshot › should run in parallel [fail] +page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots [fail] +page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots and mask elements outside of it [fail] +page/page-screenshot.spec.ts › page screenshot › should take fullPage screenshots during navigation [fail] +page/page-screenshot.spec.ts › page screenshot › should throw on clip outside the viewport [pass] +page/page-screenshot.spec.ts › page screenshot › should work @smoke [fail] +page/page-screenshot.spec.ts › page screenshot › should work for canvas [fail] +page/page-screenshot.spec.ts › page screenshot › should work for translateZ [fail] +page/page-screenshot.spec.ts › page screenshot › should work for webgl [fail] +page/page-screenshot.spec.ts › page screenshot › should work while navigating [fail] +page/page-screenshot.spec.ts › page screenshot › should work with Array deleted [fail] +page/page-screenshot.spec.ts › page screenshot › should work with iframe in shadow [fail] +page/page-screenshot.spec.ts › page screenshot › should work with odd clip size on Retina displays [fail] +page/page-screenshot.spec.ts › page screenshot › zero quality option should throw for png [pass] +page/page-screenshot.spec.ts › should capture css box-shadow [fail] +page/page-screenshot.spec.ts › should throw if screenshot size is too large [fail] +page/page-select-option.spec.ts › input event.composed should be true and cross shadow dom boundary [fail] +page/page-select-option.spec.ts › should deselect all options when passed no values for a multiple select [pass] +page/page-select-option.spec.ts › should deselect all options when passed no values for a select without multiple [pass] +page/page-select-option.spec.ts › should fall back to selecting by label [pass] +page/page-select-option.spec.ts › should not allow null items [pass] +page/page-select-option.spec.ts › should not select single option when some attributes do not match [pass] +page/page-select-option.spec.ts › should not throw when select causes navigation [pass] +page/page-select-option.spec.ts › should respect event bubbling [pass] +page/page-select-option.spec.ts › should return [] on no matched values [pass] +page/page-select-option.spec.ts › should return [] on no values [pass] +page/page-select-option.spec.ts › should return an array of matched values [pass] +page/page-select-option.spec.ts › should return an array of one element when multiple is not set [pass] +page/page-select-option.spec.ts › should select multiple options [pass] +page/page-select-option.spec.ts › should select multiple options with attributes [pass] +page/page-select-option.spec.ts › should select only first option [pass] +page/page-select-option.spec.ts › should select single option @smoke [pass] +page/page-select-option.spec.ts › should select single option by handle [pass] +page/page-select-option.spec.ts › should select single option by index [pass] +page/page-select-option.spec.ts › should select single option by label [pass] +page/page-select-option.spec.ts › should select single option by multiple attributes [pass] +page/page-select-option.spec.ts › should select single option by value [pass] +page/page-select-option.spec.ts › should throw if passed wrong types [fail] +page/page-select-option.spec.ts › should throw when element is not a `); const locator = await recorder.focusElement('input'); @@ -295,8 +295,8 @@ await page.Locator("#input").FillAsync(\"John\");`); expect(message.text()).toBe('John'); }); - test('should fill japanese text', async ({ page, openRecorder }) => { - const recorder = await openRecorder(); + test('should fill japanese text', async ({ openRecorder }) => { + const { page, recorder } = await openRecorder(); // In Japanese, "てすと" or "テスト" means "test". await recorder.setContentAndWait(``); @@ -329,8 +329,8 @@ await page.Locator("#input").FillAsync(\"てすと\");`); expect(message.text()).toBe('てすと'); }); - test('should fill textarea', async ({ page, openRecorder }) => { - const recorder = await openRecorder(); + test('should fill textarea', async ({ openRecorder }) => { + const { page, recorder } = await openRecorder(); await recorder.setContentAndWait(``); const locator = await recorder.focusElement('textarea'); @@ -346,9 +346,9 @@ await page.Locator("#input").FillAsync(\"てすと\");`); expect(message.text()).toBe('John'); }); - test('should fill textarea with new lines at the end', async ({ page, openRecorder }) => { + test('should fill textarea with new lines at the end', async ({ openRecorder }) => { test.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/23774' }); - const recorder = await openRecorder(); + const { page, recorder } = await openRecorder(); await recorder.setContentAndWait(``); const textarea = page.locator('textarea'); await textarea.evaluate(e => e.addEventListener('input', () => (window as any).lastInputValue = e.value)); @@ -361,8 +361,8 @@ await page.Locator("#input").FillAsync(\"てすと\");`); expect(sources.get('JavaScript')!.text).not.toContain(`Enter`); }); - test('should fill [contentEditable]', async ({ page, openRecorder }) => { - const recorder = await openRecorder(); + test('should fill [contentEditable]', async ({ openRecorder }) => { + const { page, recorder } = await openRecorder(); await recorder.setContentAndWait(`
`); const locator = await recorder.focusElement('div'); @@ -378,8 +378,8 @@ await page.Locator("#input").FillAsync(\"てすと\");`); expect(message.text()).toBe('John Doe'); }); - test('should press', async ({ page, openRecorder }) => { - const recorder = await openRecorder(); + test('should press', async ({ openRecorder }) => { + const { page, recorder } = await openRecorder(); await recorder.setContentAndWait(``); @@ -412,8 +412,8 @@ await page.GetByRole(AriaRole.Textbox).PressAsync("Shift+Enter");`); expect(messages[0].text()).toBe('press'); }); - test('should update selected element after pressing Tab', async ({ page, openRecorder }) => { - const recorder = await openRecorder(); + test('should update selected element after pressing Tab', async ({ openRecorder }) => { + const { page, recorder } = await openRecorder(); await recorder.setContentAndWait(` @@ -441,8 +441,8 @@ await page.GetByRole(AriaRole.Textbox).PressAsync("Shift+Enter");`); await page.locator('input[name="two"]').fill('barfoo321');`); }); - test('should record ArrowDown', async ({ page, openRecorder }) => { - const recorder = await openRecorder(); + test('should record ArrowDown', async ({ openRecorder }) => { + const { page, recorder } = await openRecorder(); await recorder.setContentAndWait(``); @@ -463,8 +463,8 @@ await page.GetByRole(AriaRole.Textbox).PressAsync("Shift+Enter");`); expect(messages[0].text()).toBe('press:ArrowDown'); }); - test('should emit single keyup on ArrowDown', async ({ page, openRecorder }) => { - const recorder = await openRecorder(); + test('should emit single keyup on ArrowDown', async ({ openRecorder }) => { + const { page, recorder } = await openRecorder(); await recorder.setContentAndWait(``); @@ -488,8 +488,8 @@ await page.GetByRole(AriaRole.Textbox).PressAsync("Shift+Enter");`); expect(messages[1].text()).toBe('up:ArrowDown'); }); - test('should check', async ({ page, openRecorder }) => { - const recorder = await openRecorder(); + test('should check', async ({ openRecorder }) => { + const { page, recorder } = await openRecorder(); await recorder.setContentAndWait(``); @@ -520,8 +520,8 @@ await page.Locator("#checkbox").CheckAsync();`); expect(message.text()).toBe('true'); }); - test('should check a radio button', async ({ page, openRecorder }) => { - const recorder = await openRecorder(); + test('should check a radio button', async ({ openRecorder }) => { + const { page, recorder } = await openRecorder(); await recorder.setContentAndWait(``); @@ -539,8 +539,8 @@ await page.Locator("#checkbox").CheckAsync();`); expect(message.text()).toBe('true'); }); - test('should check with keyboard', async ({ page, openRecorder }) => { - const recorder = await openRecorder(); + test('should check with keyboard', async ({ openRecorder }) => { + const { page, recorder } = await openRecorder(); await recorder.setContentAndWait(``); @@ -558,8 +558,8 @@ await page.Locator("#checkbox").CheckAsync();`); expect(message.text()).toBe('true'); }); - test('should uncheck', async ({ page, openRecorder }) => { - const recorder = await openRecorder(); + test('should uncheck', async ({ openRecorder }) => { + const { page, recorder } = await openRecorder(); await recorder.setContentAndWait(``); @@ -590,8 +590,8 @@ await page.Locator("#checkbox").UncheckAsync();`); expect(message.text()).toBe('false'); }); - test('should select', async ({ page, openRecorder }) => { - const recorder = await openRecorder(); + test('should select', async ({ openRecorder }) => { + const { page, recorder } = await openRecorder(); await recorder.setContentAndWait(''); @@ -623,8 +623,8 @@ await page.Locator("#age").SelectOptionAsync(new[] { "2" });`); expect(message.text()).toBe('2'); }); - test('should select with size attribute', async ({ page, openRecorder }) => { - const recorder = await openRecorder(); + test('should select with size attribute', async ({ openRecorder }) => { + const { page, recorder } = await openRecorder(); await recorder.setContentAndWait(`