Skip to content

Commit 35f3849

Browse files
Lightning00BladeDevtools-frontend LUCI CQ
authored andcommitted
[e2e] Dedupe types
Also improves some names, comments and IDE error fixes. Bug: none Change-Id: I7bad9d6f85555a9e17d140c2987e8ee06090ec95 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6366899 Reviewed-by: Simon Zünd <[email protected]> Commit-Queue: Nikolay Vitkov <[email protected]> Auto-Submit: Nikolay Vitkov <[email protected]>
1 parent 498015f commit 35f3849

File tree

11 files changed

+62
-66
lines changed

11 files changed

+62
-66
lines changed

test/e2e/helpers/console-helpers.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import {assert} from 'chai';
66

77
import {AsyncScope} from '../../conductor/async-scope.js';
8-
import type {DevToolsFronendPage} from '../../e2e_non_hosted/shared/frontend-helper.js';
8+
import type {DevToolsPage} from '../../e2e_non_hosted/shared/frontend-helper.js';
99
import {
1010
$,
1111
$$,
@@ -189,7 +189,7 @@ export async function maybeGetCurrentConsoleMessages(withAnchor = false, callbac
189189
return result;
190190
}
191191

192-
export async function getStructuredConsoleMessages(devToolsPage?: DevToolsFronendPage) {
192+
export async function getStructuredConsoleMessages(devToolsPage?: DevToolsPage) {
193193
devToolsPage = devToolsPage || getBrowserAndPagesWrappers().devToolsPage;
194194
const asyncScope = new AsyncScope();
195195

@@ -307,7 +307,7 @@ export async function unifyLogVM(actualLog: string, expectedLog: string) {
307307
return expectedLogArray.join('\n');
308308
}
309309

310-
export async function navigateToConsoleTab(devToolsPage?: DevToolsFronendPage) {
310+
export async function navigateToConsoleTab(devToolsPage?: DevToolsPage) {
311311
devToolsPage = devToolsPage || getBrowserAndPagesWrappers().devToolsPage;
312312
// Locate the button for switching to the console tab.
313313
if ((await devToolsPage.$$(CONSOLE_VIEW_SELECTOR)).length) {
@@ -462,7 +462,7 @@ function veImpressionForConsoleMessageContextMenu(expectedItem: string) {
462462
return veImpression('Menu', undefined, [...menuItems].map(i => veImpression('Action', i)));
463463
}
464464

465-
async function veRoot(devToolsPage?: DevToolsFronendPage): Promise<string> {
465+
async function veRoot(devToolsPage?: DevToolsPage): Promise<string> {
466466
devToolsPage = devToolsPage || getBrowserAndPagesWrappers().devToolsPage;
467467
return (await devToolsPage.$$(CONSOLE_VIEW_IN_DRAWER_SELECTOR)).length ? 'Drawer > Panel: console' : 'Panel: console';
468468
}

test/e2e/helpers/settings-helpers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import type {DevToolsFronendPage} from '../../e2e_non_hosted/shared/frontend-helper.js';
5+
import type {DevToolsPage} from '../../e2e_non_hosted/shared/frontend-helper.js';
66
import {
77
click,
88
clickElement,
@@ -12,7 +12,7 @@ import {
1212
} from '../../shared/helper.js';
1313
import {getBrowserAndPagesWrappers} from '../../shared/non_hosted_wrappers.js';
1414

15-
export async function openPanelViaMoreTools(panelTitle: string, frontend?: DevToolsFronendPage) {
15+
export async function openPanelViaMoreTools(panelTitle: string, frontend?: DevToolsPage) {
1616
frontend = frontend || getBrowserAndPagesWrappers().devToolsPage;
1717
await frontend.bringToFront();
1818

test/e2e/helpers/visual-logging-helpers.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// found in the LICENSE file.
44

55
import {getBrowserAndPages} from '../../conductor/puppeteer-state.js';
6-
import type {DevToolsFronendPage} from '../../e2e_non_hosted/shared/frontend-helper.js';
6+
import type {DevToolsPage} from '../../e2e_non_hosted/shared/frontend-helper.js';
77
import {getBrowserAndPagesWrappers} from '../../shared/non_hosted_wrappers.js';
88

99
// Corresponds to the type in front_end/ui/visual_logging/Debugging.ts
@@ -156,8 +156,7 @@ export async function dumpVeEvents(label: string) {
156156

157157
// Verifies that VE events contains all the expected events in given order.
158158
// Unexpected VE events are ignored.
159-
export async function expectVeEvents(
160-
expectedEvents: TestLogEntry[], root?: string, devToolsPage?: DevToolsFronendPage) {
159+
export async function expectVeEvents(expectedEvents: TestLogEntry[], root?: string, devToolsPage?: DevToolsPage) {
161160
collapseConsecutiveImpressions(expectedEvents);
162161
prependRoot(expectedEvents, root);
163162
devToolsPage = devToolsPage || getBrowserAndPagesWrappers().devToolsPage;

test/e2e_non_hosted/conductor/mocha-interface-helpers.ts

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,8 @@ import type * as Mocha from 'mocha';
77
import {AsyncScope} from '../../conductor/async-scope.js';
88
import {ScreenshotError} from '../../conductor/screenshot-error.js';
99
import {TestConfig} from '../../conductor/test_config.js';
10-
import type {BrowserWrapper} from '../shared/browser-helper.js';
11-
import type {DevToolsFronendPage} from '../shared/frontend-helper.js';
12-
import type {InspectedPage} from '../shared/target-helper.js';
1310

14-
export interface State {
15-
devToolsPage: DevToolsFronendPage;
16-
inspectedPage: InspectedPage;
17-
browser: BrowserWrapper;
18-
}
19-
20-
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
21-
export type TestCallbackWithState = (this: Mocha.Context, state: State) => PromiseLike<any>;
22-
23-
async function takeScreenshots(state: State): Promise<{target?: string, frontend?: string}> {
11+
async function takeScreenshots(state: E2E.State): Promise<{target?: string, frontend?: string}> {
2412
try {
2513
const {devToolsPage, inspectedPage} = state;
2614
const targetScreenshot = await inspectedPage.screenshot();
@@ -42,7 +30,7 @@ async function createScreenshotError(test: Mocha.Runnable|undefined, error: Erro
4230
if (!TestConfig.debug) {
4331
try {
4432
const screenshotTimeout = 5_000;
45-
let timer: NodeJS.Timeout;
33+
let timer: ReturnType<typeof setTimeout>;
4634
const {target, frontend} = await Promise.race([
4735
takeScreenshots(sate).then(result => {
4836
clearTimeout(timer);

test/e2e_non_hosted/conductor/mocha-interface.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import * as Path from 'path';
1111
import {platform, type Platform} from '../../conductor/platform.js';
1212
import {TestConfig} from '../../conductor/test_config.js';
1313

14-
import {makeInstrumentedTestFunction, type TestCallbackWithState} from './mocha-interface-helpers.js';
14+
import {makeInstrumentedTestFunction} from './mocha-interface-helpers.js';
1515
import {StateProvider} from './state-provider.js';
1616

1717
type SuiteFunction = ((this: Mocha.Suite) => void)|undefined;
@@ -106,7 +106,7 @@ function iterationSuffix(iteration: number): string {
106106
return ` (#${iteration})`;
107107
}
108108
function customIt(testImplementation: TestFunctions, suite: Mocha.Suite, file: string) {
109-
function instrumentWithState(fn: TestCallbackWithState) {
109+
function instrumentWithState(fn: E2E.TestAsyncCallbackWithState) {
110110
const fnWithState = async function(this: Mocha.Context) {
111111
return await StateProvider.instance.callWithState(this, suite, fn);
112112
};

test/e2e_non_hosted/conductor/state-provider.ts

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ import {type BrowserWrapper, DEFAULT_BROWSER_SETTINGS, Launcher} from '../shared
1313
import {DEFAULT_DEVTOOLS_SETTINGS, setupDevToolsPage} from '../shared/frontend-helper.js';
1414
import {setupInspectedPage} from '../shared/target-helper.js';
1515

16-
import type {TestCallbackWithState} from './mocha-interface-helpers.js';
17-
1816
const DEFAULT_SETTINGS = {
1917
...DEFAULT_BROWSER_SETTINGS,
2018
...DEFAULT_DEVTOOLS_SETTINGS
@@ -23,23 +21,21 @@ const DEFAULT_SETTINGS = {
2321
export class StateProvider {
2422
static instance = new StateProvider();
2523

26-
settingsCallbackMap: Map<Mocha.Suite, E2E.SuiteSettings>;
27-
browserMap: Map<string, BrowserWrapper>;
24+
#settingsCallbackMap = new Map<Mocha.Suite, E2E.SuiteSettings>();
25+
#browserMap = new Map<string, BrowserWrapper>();
2826
static serverPort: number;
2927

3028
private constructor() {
31-
this.settingsCallbackMap = new Map();
32-
this.browserMap = new Map();
3329
}
3430

3531
registerSettingsCallback(suite: Mocha.Suite, suiteSettings: E2E.SuiteSettings) {
36-
this.settingsCallbackMap.set(suite, suiteSettings);
32+
this.#settingsCallbackMap.set(suite, suiteSettings);
3733
}
3834

39-
async callWithState(context: Mocha.Context, suite: Mocha.Suite, testFn: TestCallbackWithState) {
40-
const {state, browsingContext} = await this.getState(suite);
35+
async callWithState(context: Mocha.Context, suite: Mocha.Suite, testFn: E2E.TestAsyncCallbackWithState) {
36+
const {state, browsingContext} = await this.#getState(suite);
4137
try {
42-
/* eslint-disable-next-line no-debugger */
38+
// eslint-disable-next-line no-debugger
4339
debugger; // If you're paused here while debugging, stepping into the next line will step into your test.
4440
return await testFn.call(context, state);
4541
} finally {
@@ -50,26 +46,26 @@ export class StateProvider {
5046

5147
async resolveBrowser(suite: Mocha.Suite) {
5248
if (!StateProvider.serverPort) {
53-
StateProvider.serverPort = await StateProvider.globalSetup();
49+
StateProvider.serverPort = await StateProvider.#globalSetup();
5450
}
55-
const settings = await this.getSettings(suite);
51+
const settings = await this.#getSettings(suite);
5652
const browserSettings = {
5753
enabledBlinkFeatures: (settings.enabledBlinkFeatures ?? []).toSorted(),
5854
disabledFeatures: (settings.disabledFeatures ?? []).toSorted(),
5955
};
6056
const browserKey = JSON.stringify(browserSettings);
61-
let browser = this.browserMap.get(browserKey);
57+
let browser = this.#browserMap.get(browserKey);
6258
if (!browser) {
6359
browser = await Launcher.browserSetup(browserSettings);
64-
this.browserMap.set(browserKey, browser);
60+
this.#browserMap.set(browserKey, browser);
6561
}
6662
// Suite needs to be aware of the browser instance to be able to create the
6763
// full state for the tests
6864
suite.browser = browser;
6965
}
7066

71-
private async getState(suite: Mocha.Suite) {
72-
const settings = await this.getSettings(suite);
67+
async #getState(suite: Mocha.Suite) {
68+
const settings = await this.#getSettings(suite);
7369
const browser = suite.browser;
7470
const browsingContext = await browser.createBrowserContext();
7571
const inspectedPage = await setupInspectedPage(browsingContext, StateProvider.serverPort);
@@ -85,17 +81,17 @@ export class StateProvider {
8581
return {state, browsingContext};
8682
}
8783

88-
private async getSettings(suite: Mocha.Suite): Promise<E2E.HarnessSettings> {
89-
const settings = this.settingsCallbackMap.get(suite);
84+
async #getSettings(suite: Mocha.Suite): Promise<E2E.HarnessSettings> {
85+
const settings = this.#settingsCallbackMap.get(suite);
9086
if (settings) {
9187
return mergeSettings(settings, DEFAULT_SETTINGS);
9288
}
9389
return DEFAULT_SETTINGS;
9490
}
9591

96-
/* eslint-disable no-console */
97-
private static async globalSetup() {
92+
static async #globalSetup() {
9893
const serverPort = Number(await startServer(TestConfig.serverType, []));
94+
// eslint-disable-next-line no-console
9995
console.log(`Started ${TestConfig.serverType} server on port ${serverPort}`);
10096
puppeteer.Puppeteer.registerCustomQueryHandler('pierceShadowText', {
10197
queryOne: querySelectorShadowTextOne as ((node: Node, selector: string) => Node | null),
@@ -105,7 +101,7 @@ export class StateProvider {
105101
}
106102

107103
async closeBrowsers() {
108-
await this.browserMap.forEach(async (browser: BrowserWrapper) => {
104+
await this.#browserMap.forEach(async (browser: BrowserWrapper) => {
109105
await browser.browser.close();
110106
});
111107
}

test/e2e_non_hosted/shared/frontend-helper.ts

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const envLatePromises = process.env['LATE_PROMISES'] !== undefined ?
2525
type DeducedElementType<ElementType extends Element|null, Selector extends string> =
2626
ElementType extends null ? puppeteer.NodeFor<Selector>: ElementType;
2727

28-
export class DevToolsFronendPage extends PageWrapper {
28+
export class DevToolsPage extends PageWrapper {
2929
async setExperimentEnabled(experiment: string, enabled: boolean) {
3030
await this.evaluate(`(async () => {
3131
const Root = await import('./core/root/root.js');
@@ -62,7 +62,7 @@ export class DevToolsFronendPage extends PageWrapper {
6262
}
6363
/* eslint-disable-next-line no-console */
6464
console.log(`Throttling CPU: ${envThrottleRate}x slowdown`);
65-
const client = await this.page.target().createCDPSession();
65+
const client = await this.page.createCDPSession();
6666
await client.send('Emulation.setCPUThrottlingRate', {
6767
rate: envThrottleRate,
6868
});
@@ -104,7 +104,9 @@ export class DevToolsFronendPage extends PageWrapper {
104104
`);
105105
}
106106

107-
// Get a single element handle. Uses `pierce` handler per default for piercing Shadow DOM.
107+
/**
108+
* Get a single element handle. Uses `pierce` handler per default for piercing Shadow DOM.
109+
*/
108110
async $<ElementType extends Element|null = null, Selector extends string = string>(
109111
selector: Selector, root?: puppeteer.ElementHandle, handler = 'pierce') {
110112
const rootElement = root ? root : this.page;
@@ -184,11 +186,18 @@ export class DevToolsFronendPage extends PageWrapper {
184186

185187
async click(selector: string, options?: ClickOptions) {
186188
return await this.performActionOnSelector(
187-
selector, {root: options?.root}, element => element.click(options?.clickOptions));
189+
selector,
190+
{root: options?.root},
191+
element => element.click(options?.clickOptions),
192+
);
188193
}
189194

190195
async hover(selector: string, options?: {root?: puppeteer.ElementHandle}) {
191-
return await this.performActionOnSelector(selector, {root: options?.root}, element => element.hover());
196+
return await this.performActionOnSelector(
197+
selector,
198+
{root: options?.root},
199+
element => element.hover(),
200+
);
192201
}
193202

194203
waitForAria<ElementType extends Element = Element>(
@@ -206,7 +215,9 @@ export class DevToolsFronendPage extends PageWrapper {
206215
}, asyncScope), `Waiting for no elements to match selector '${selector}'`);
207216
}
208217

209-
// Get multiple element handles. Uses `pierce` handler per default for piercing Shadow DOM.
218+
/**
219+
* Get multiple element handles. Uses `pierce` handler per default for piercing Shadow DOM.
220+
*/
210221
async $$<ElementType extends Element|null = null, Selector extends string = string>(
211222
selector: Selector, root?: puppeteer.JSHandle, handler = 'pierce') {
212223
const rootElement = root ? root.asElement() || this.page : this.page;
@@ -237,7 +248,7 @@ export async function setupDevToolsPage(context: puppeteer.BrowserContext, setti
237248
throw new Error('Unable to find frontend target!');
238249
}
239250
installPageErrorHandlers(frontend);
240-
const devToolsPage = new DevToolsFronendPage(frontend);
251+
const devToolsPage = new DevToolsPage(frontend);
241252
await devToolsPage.ensureReadyForTesting();
242253
for (const key in settings.devToolsSettings) {
243254
await devToolsPage.setDevToolsSetting(key, settings.devToolsSettings[key]);

test/e2e_non_hosted/shared/page-wrapper.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,16 @@ export class PageWrapper {
99
evaluate: puppeteer.Page['evaluate'];
1010
bringToFront: puppeteer.Page['bringToFront'];
1111

12-
constructor(p: puppeteer.Page) {
13-
this.page = p;
14-
this.evaluate = p.evaluate.bind(p);
15-
this.bringToFront = p.bringToFront.bind(p);
12+
constructor(page: puppeteer.Page) {
13+
this.page = page;
14+
this.evaluate = page.evaluate.bind(page);
15+
this.bringToFront = page.bringToFront.bind(page);
1616
}
1717

18-
async screenshot() {
19-
const opts = {
20-
encoding: 'base64' as 'base64',
21-
};
18+
async screenshot(): Promise<string> {
2219
await this.bringToFront();
23-
return await this.page.screenshot(opts);
20+
return await this.page.screenshot({
21+
encoding: 'base64',
22+
});
2423
}
2524
}

test/e2e_non_hosted/types.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import type {Platform} from '../conductor/platform.js';
55

66
import type {BrowserSettings, BrowserWrapper} from './shared/browser-helper.js';
7-
import type {DevToolsFronendPage, DevtoolsSettings} from './shared/frontend-helper.js';
7+
import type {DevToolsPage, DevtoolsSettings} from './shared/frontend-helper.js';
88
import type {InspectedPage} from './shared/target-helper.js';
99

1010
declare global {
@@ -34,7 +34,7 @@ declare global {
3434
export type SuiteSettings = Partial<HarnessSettings>;
3535

3636
export interface State {
37-
devToolsPage: DevToolsFronendPage;
37+
devToolsPage: DevToolsPage;
3838
inspectedPage: InspectedPage;
3939
browser: BrowserWrapper;
4040
}

test/shared/non_hosted_wrappers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
import {getBrowserAndPages} from '../conductor/puppeteer-state.js';
66
import {getTestServerPort} from '../conductor/server_port.js';
77
import {BrowserWrapper} from '../e2e_non_hosted/shared/browser-helper.js';
8-
import {DevToolsFronendPage} from '../e2e_non_hosted/shared/frontend-helper.js';
8+
import {DevToolsPage} from '../e2e_non_hosted/shared/frontend-helper.js';
99
import {InspectedPage} from '../e2e_non_hosted/shared/target-helper.js';
1010

1111
export function getBrowserAndPagesWrappers() {
1212
const {frontend, target, browser} = getBrowserAndPages();
1313
return {
14-
devToolsPage: new DevToolsFronendPage(frontend),
14+
devToolsPage: new DevToolsPage(frontend),
1515
inspectedPage: new InspectedPage(target, getTestServerPort()),
1616
browserWrapper: new BrowserWrapper(browser),
1717
};

0 commit comments

Comments
 (0)