1- // Copyright 2023 The Chromium Authors
1+ // Copyright 2025 The Chromium Authors
22// Use of this source code is governed by a BSD-style license that can be
33// found in the LICENSE file.
44
@@ -7,8 +7,11 @@ import type * as puppeteer from 'puppeteer-core';
77
88import type * as Root from '../../../front_end/core/root/root.js' ;
99import type * as Console from '../../../front_end/panels/console/console.js' ;
10- import { click , getBrowserAndPages , hover , setDevToolsSettings , waitFor , waitForNone } from '../../shared/helper.js' ;
11- import { clickOnContextMenu , CONSOLE_TAB_SELECTOR } from '../helpers/console-helpers.js' ;
10+ import {
11+ clickOnContextMenu ,
12+ CONSOLE_TAB_SELECTOR ,
13+ } from '../../e2e/helpers/console-helpers.js' ;
14+ import type { DevToolsPage } from '../shared/frontend-helper.js' ;
1215
1316describe ( 'ConsoleInsight' , function ( ) {
1417 const CLICK_TARGET_SELECTOR = '.console-message-text' ;
@@ -17,108 +20,135 @@ describe('ConsoleInsight', function() {
1720
1821 async function setupMocks (
1922 aidaAvailability : Partial < Root . Runtime . AidaAvailability > ,
20- devToolsConsoleInsights : Partial < Root . Runtime . HostConfigConsoleInsights > ) {
21- const { frontend} = getBrowserAndPages ( ) ;
22- await frontend . bringToFront ( ) ;
23- await frontend . evaluateOnNewDocument (
24- `globalThis.hostConfigForTesting = {...globalThis.hostConfigForTesting, devToolsConsoleInsights: ${
25- JSON . stringify ( devToolsConsoleInsights ) } , aidaAvailability: ${ JSON . stringify ( aidaAvailability ) }
26- };` ) ;
27- await frontend . reload ( {
23+ devToolsConsoleInsights : Partial < Root . Runtime . HostConfigConsoleInsights > ,
24+ devToolsPage : DevToolsPage ,
25+ ) {
26+ const syncInformation = {
27+ accountEmail : 'some-email' ,
28+ isSyncActive : true ,
29+ arePreferencesSynced : false ,
30+ } ;
31+ const hostConfig = {
32+ devToolsConsoleInsights : { ...devToolsConsoleInsights } ,
33+ aidaAvailability : { ...aidaAvailability } ,
34+ } ;
35+ await devToolsPage . evaluateOnNewDocument ( `
36+ Object.defineProperty(window, 'InspectorFrontendHost', {
37+ configurable: true,
38+ enumerable: true,
39+ get() {
40+ return this._InspectorFrontendHost;
41+ },
42+ set(value) {
43+ value.getHostConfig = (cb) => {
44+ cb({
45+ ...globalThis.hostConfigForTesting ?? {},
46+ ...JSON.parse('${ JSON . stringify ( hostConfig ) } '),
47+ });
48+ }
49+
50+ value.getSyncInformation = (cb) => {
51+ cb(JSON.parse('${ JSON . stringify ( syncInformation ) } '));
52+ };
53+
54+ this._InspectorFrontendHost = value;
55+ }
56+ });
57+ ` ) ;
58+
59+ await devToolsPage . reload ( {
2860 waitUntil : 'networkidle0' ,
2961 } ) ;
62+ await devToolsPage . useSoftMenu ( ) ;
3063 }
31- it ( 'shows an insight for a console message via the context menu' , async ( ) => {
32- const { target } = getBrowserAndPages ( ) ;
33- await setupMocks ( { enabled : true } , { enabled : true } ) ;
34- await click ( CONSOLE_TAB_SELECTOR ) ;
35- await target . evaluate ( ( ) => {
64+
65+ it ( 'shows an insight for a console message via the context menu' , async ( { devToolsPage , inspectedPage } ) => {
66+ await setupMocks ( { enabled : true } , { enabled : true } , devToolsPage ) ;
67+ await devToolsPage . click ( CONSOLE_TAB_SELECTOR ) ;
68+ await inspectedPage . evaluate ( ( ) => {
3669 console . error ( new Error ( 'Unexpected error' ) ) ;
3770 } ) ;
38- await clickOnContextMenu ( CLICK_TARGET_SELECTOR , EXPLAIN_ACTION_ID ) ;
39- await waitFor ( 'devtools-console-insight' , undefined , undefined , 'pierce' ) ;
71+ await clickOnContextMenu ( CLICK_TARGET_SELECTOR , EXPLAIN_ACTION_ID , devToolsPage ) ;
72+
73+ await devToolsPage . waitFor ( 'devtools-console-insight' ) ;
4074 } ) ;
4175
42- it ( 'shows an insight for a console message via the hover button' , async ( ) => {
43- const { target} = getBrowserAndPages ( ) ;
44- await setupMocks ( { enabled : true } , { enabled : true } ) ;
45- await click ( CONSOLE_TAB_SELECTOR ) ;
46- await target . evaluate ( ( ) => {
76+ it ( 'shows an insight for a console message via the hover button' , async ( { devToolsPage, inspectedPage} ) => {
77+ await setupMocks ( { enabled : true } , { enabled : true } , devToolsPage ) ;
78+ await devToolsPage . click ( CONSOLE_TAB_SELECTOR ) ;
79+ await inspectedPage . evaluate ( ( ) => {
4780 console . error ( new Error ( 'Unexpected error' ) ) ;
4881 } ) ;
49- await waitFor ( '.console-message' , undefined , undefined , 'pierce ') ;
50- await waitFor ( '.hover-button' , undefined , undefined , 'pierce ') ;
51- await hover ( '.console-message' ) ;
52- await click ( '.hover-button' ) ;
53- await waitFor ( 'devtools-console-insight' , undefined , undefined , 'pierce ') ;
82+ await devToolsPage . waitFor ( '.console-message' ) ;
83+ await devToolsPage . waitFor ( '.hover-button' ) ;
84+ await devToolsPage . hover ( '.console-message' ) ;
85+ await devToolsPage . click ( '.hover-button' ) ;
86+ await devToolsPage . waitFor ( 'devtools-console-insight' ) ;
5487 } ) ;
5588
56- it ( 'does not show context menu if AIDA is not available' , async ( ) => {
57- const { target} = getBrowserAndPages ( ) ;
58- await setupMocks ( { enabled : false } , { enabled : true } ) ;
59- await click ( CONSOLE_TAB_SELECTOR ) ;
60- await target . evaluate ( ( ) => {
89+ it ( 'does not show context menu if AIDA is not available' , async ( { devToolsPage, inspectedPage} ) => {
90+ await setupMocks ( { enabled : false } , { enabled : true } , devToolsPage ) ;
91+ await devToolsPage . click ( CONSOLE_TAB_SELECTOR ) ;
92+ await inspectedPage . evaluate ( ( ) => {
6193 console . error ( new Error ( 'Unexpected error' ) ) ;
6294 } ) ;
63- await click ( CLICK_TARGET_SELECTOR , { clickOptions : { button : 'right' } } ) ;
64- const menu = await waitFor ( '.soft-context-menu' , undefined , undefined , 'pierce ') ;
95+ await devToolsPage . click ( CLICK_TARGET_SELECTOR , { clickOptions : { button : 'right' } } ) ;
96+ const menu = await devToolsPage . waitFor ( '.soft-context-menu' ) ;
6597 const items = await menu . $$ ( '.soft-context-menu-item' ) ;
6698 const texts = await Promise . all ( items . map ( item => item . evaluate ( e => ( e as HTMLElement ) . innerText ) ) ) ;
6799 assert . isNotOk (
68- texts . some ( item => item . toLowerCase ( ) . startsWith ( EXPLAIN_LABEL . toLowerCase ( ) ) ) ,
100+ texts . some ( item => ( item as string ) . toLowerCase ( ) . startsWith ( EXPLAIN_LABEL . toLowerCase ( ) ) ) ,
69101 'Context menu shows the explain option' ) ;
70- await waitFor ( '.console-message' , undefined , undefined , 'pierce ') ;
71- await waitForNone ( '.hover-button' ) ;
102+ await devToolsPage . waitFor ( '.console-message' ) ;
103+ await devToolsPage . waitForNone ( '.hover-button' ) ;
72104 } ) ;
73105
74- it ( 'shows the hover button even if locale is not supported' , async ( ) => {
75- const { target} = getBrowserAndPages ( ) ;
76- await setDevToolsSettings ( { language : 'zh' } ) ;
77- await setupMocks ( { enabled : true } , { enabled : true } ) ;
78- await click ( CONSOLE_TAB_SELECTOR ) ;
79- await target . evaluate ( ( ) => {
80- console . error ( new Error ( 'Unexpected error' ) ) ;
106+ describe ( 'if locale is not supported' , ( ) => {
107+ setup ( { devToolsSettings : { language : 'zh' } } ) ;
108+
109+ it ( 'still shows the hover button' , async ( { devToolsPage, inspectedPage} ) => {
110+ await setupMocks ( { enabled : true } , { enabled : true } , devToolsPage ) ;
111+ await devToolsPage . click ( CONSOLE_TAB_SELECTOR ) ;
112+ await inspectedPage . evaluate ( ( ) => {
113+ console . error ( new Error ( 'Unexpected error' ) ) ;
114+ } ) ;
115+ await devToolsPage . waitFor ( '.console-message' ) ;
116+ await devToolsPage . waitFor ( '.hover-button' ) ;
81117 } ) ;
82- await waitFor ( '.console-message' , undefined , undefined , 'pierce' ) ;
83- await waitFor ( '.hover-button' , undefined , undefined , 'pierce' ) ;
84118 } ) ;
85119
86- it ( 'shows the hover button even if age check is not passing' , async ( ) => {
87- const { target} = getBrowserAndPages ( ) ;
88- await setupMocks ( { blockedByAge : true , enabled : true } , { enabled : true } ) ;
89- await click ( CONSOLE_TAB_SELECTOR ) ;
90- await target . evaluate ( ( ) => {
120+ it ( 'shows the hover button even if age check is not passing' , async ( { devToolsPage, inspectedPage} ) => {
121+ await setupMocks ( { blockedByAge : true , enabled : true } , { enabled : true } , devToolsPage ) ;
122+ await devToolsPage . click ( CONSOLE_TAB_SELECTOR ) ;
123+ await inspectedPage . evaluate ( ( ) => {
91124 console . error ( new Error ( 'Unexpected error' ) ) ;
92125 } ) ;
93- await waitFor ( '.console-message' , undefined , undefined , 'pierce ') ;
94- await waitFor ( '.hover-button' , undefined , undefined , 'pierce ') ;
126+ await devToolsPage . waitFor ( '.console-message' ) ;
127+ await devToolsPage . waitFor ( '.hover-button' ) ;
95128 } ) ;
96129
97- it ( 'does not show the hover button if policy does not allow it' , async ( ) => {
98- const { target} = getBrowserAndPages ( ) ;
99- await setupMocks ( { blockedByEnterprisePolicy : true , enabled : true } , { enabled : true } ) ;
100- await click ( CONSOLE_TAB_SELECTOR ) ;
101- await target . evaluate ( ( ) => {
130+ it ( 'does not show the hover button if policy does not allow it' , async ( { devToolsPage, inspectedPage} ) => {
131+ await setupMocks ( { blockedByEnterprisePolicy : true , enabled : true } , { enabled : true } , devToolsPage ) ;
132+ await devToolsPage . click ( CONSOLE_TAB_SELECTOR ) ;
133+ await inspectedPage . evaluate ( ( ) => {
102134 console . error ( new Error ( 'Unexpected error' ) ) ;
103135 } ) ;
104- await waitFor ( '.console-message' , undefined , undefined , 'pierce ') ;
105- await waitForNone ( '.hover-button' , undefined , undefined , 'pierce ') ;
136+ await devToolsPage . waitFor ( '.console-message' ) ;
137+ await devToolsPage . waitForNone ( '.hover-button' ) ;
106138 } ) ;
107139
108- it ( 'does not show the hover button if it is restriced by geography' , async ( ) => {
109- const { target} = getBrowserAndPages ( ) ;
110- await setupMocks ( { blockedByGeo : true , enabled : true } , { enabled : true } ) ;
111- await click ( CONSOLE_TAB_SELECTOR ) ;
112- await target . evaluate ( ( ) => {
140+ it ( 'does not show the hover button if it is restriced by geography' , async ( { devToolsPage, inspectedPage} ) => {
141+ await setupMocks ( { blockedByGeo : true , enabled : true } , { enabled : true } , devToolsPage ) ;
142+ await devToolsPage . click ( CONSOLE_TAB_SELECTOR ) ;
143+ await inspectedPage . evaluate ( ( ) => {
113144 console . error ( new Error ( 'Unexpected error' ) ) ;
114145 } ) ;
115- await waitFor ( '.console-message' , undefined , undefined , 'pierce ') ;
116- await waitForNone ( '.hover-button' , undefined , undefined , 'pierce ') ;
146+ await devToolsPage . waitFor ( '.console-message' ) ;
147+ await devToolsPage . waitForNone ( '.hover-button' ) ;
117148 } ) ;
118149
119- it ( 'gets console message texts' , async ( ) => {
120- const { frontend, target} = getBrowserAndPages ( ) ;
121- await click ( CONSOLE_TAB_SELECTOR ) ;
150+ it ( 'gets console message texts' , async ( { devToolsPage, inspectedPage} ) => {
151+ await devToolsPage . click ( CONSOLE_TAB_SELECTOR ) ;
122152 const tests = [
123153 {
124154 script : 'console.warn(\'Text warning\');' ,
@@ -150,7 +180,7 @@ describe('ConsoleInsight', function() {
150180 expectedWithStackTrace : 'Warning with style' ,
151181 } ,
152182 {
153- script : 'console.warn(\'\x1B[41;93;4mHello ANSI escape seq\x1B[m\');' ,
183+ script : 'console.warn(\'\\ x1B[41;93;4mHello ANSI escape seq\ \x1B[m\');' ,
154184 expectedWithStackTrace : 'Hello ANSI escape seq' ,
155185 } ,
156186 {
@@ -187,7 +217,7 @@ describe('ConsoleInsight', function() {
187217 expectedWithStackTrace : 'Error with style' ,
188218 } ,
189219 {
190- script : 'console.error(\'\x1B[41;93;4mHello ANSI escape seq\x1B[m\');' ,
220+ script : 'console.error(\'\\ x1B[41;93;4mHello ANSI escape seq\ \x1B[m\');' ,
191221 expectedWithStackTrace : 'Hello ANSI escape seq' ,
192222 } ,
193223 {
@@ -200,17 +230,18 @@ describe('ConsoleInsight', function() {
200230 } ,
201231 ] ;
202232
203- await target . setContent ( `
233+ await inspectedPage . page . setContent ( `
204234 <script>
205235 ${ tests . map ( test => test . script ) . join ( '\n' ) }
206236 </script>
207237 ` ) ;
208238
209239 let messages : puppeteer . ElementHandle [ ] = [ ] ;
210240
211- while ( messages . length !== tests . length ) {
212- messages = await frontend . $$ ( 'pierce/.console-message-wrapper' ) ;
213- }
241+ await devToolsPage . waitForFunction ( async ( ) => {
242+ messages = await devToolsPage . $$ ( '.console-message-wrapper' ) ;
243+ return messages . length === tests . length ;
244+ } ) ;
214245
215246 const messageGetter = async ( consoleModule : typeof Console , consoleElement : Element ) => {
216247 const consoleViewMessage = consoleModule . ConsoleViewMessage . getMessageForElement ( consoleElement ) ;
@@ -220,11 +251,11 @@ describe('ConsoleInsight', function() {
220251 return message . replace ( / : \d + : \d + / gi, ':1:1' )
221252 . replaceAll ( / \n a t p p t r : ; C d p F r a m e \. % 3 C a n … j s % 3 A \d + % 3 A \d + \) : 1 : 1 / gi, '' ) ;
222253 } ;
223- const consoleModule = ( await frontend . evaluateHandle ( 'import(\'./panels/console/console.js\')' ) ) as
254+ const consoleModule = ( await devToolsPage . page . evaluateHandle ( 'import(\'./panels/console/console.js\')' ) ) as
224255 puppeteer . JSHandle < typeof Console > ;
225256
226257 for ( let testIdx = 0 ; testIdx < messages . length ; testIdx ++ ) {
227- const messageWithStacktrace = await frontend . evaluate ( messageGetter , consoleModule , messages [ testIdx ] , true ) ;
258+ const messageWithStacktrace = await devToolsPage . evaluate ( messageGetter , consoleModule , messages [ testIdx ] , true ) ;
228259 assert . deepEqual ( messageWithStacktrace , tests [ testIdx ] . expectedWithStackTrace ) ;
229260 }
230261 } ) ;
0 commit comments