blob: 27053409f9a4e5aff141cdb05eea5b9812e32687 [file] [log] [blame]
Wolfgang Beyerceebc652022-08-22 11:24:581// Copyright 2022 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5import {assert} from 'chai';
6
7import {
8 $$,
9 click,
Wolfgang Beyer9d9affb2024-05-08 10:14:4410 goTo,
Wolfgang Beyerceebc652022-08-22 11:24:5811 goToResource,
Wolfgang Beyer733ddfa2024-01-16 11:53:5712 hasClass,
13 pressKey,
Jecelyn Yeen67b8ebb2023-07-31 11:22:1914 step,
Wolfgang Beyerceebc652022-08-22 11:24:5815 typeText,
16 waitFor,
Jecelyn Yeen67b8ebb2023-07-31 11:22:1917 waitForAria,
Wolfgang Beyer733ddfa2024-01-16 11:53:5718 waitForFunction,
Jecelyn Yeenfca70182023-08-18 10:14:4119 waitForNone,
Wolfgang Beyerceebc652022-08-22 11:24:5820} from '../../shared/helper.js';
21import {describe, it} from '../../shared/mocha-extensions.js';
Benedikt Meurer5a9f6992023-12-14 14:25:2422import {openSoftContextMenuAndClickOnItem} from '../helpers/context-menu-helpers.js';
Wolfgang Beyerceebc652022-08-22 11:24:5823import {
Jecelyn Yeen67b8ebb2023-07-31 11:22:1924 openNetworkTab,
25 selectRequestByName,
Wolfgang Beyerfe7f1142023-12-11 14:22:5626 setCacheDisabled,
Jecelyn Yeen2dec31e2023-08-23 12:13:0727 waitForSomeRequestsToAppear,
Jecelyn Yeen67b8ebb2023-07-31 11:22:1928} from '../helpers/network-helpers.js';
29import {
30 readQuickOpenResults,
31 typeIntoQuickOpen,
32} from '../helpers/quick_open-helpers.js';
33import {
Wolfgang Beyerceebc652022-08-22 11:24:5834 ENABLE_OVERRIDES_SELECTOR,
35 enableLocalOverrides,
36 openSourcesPanel,
37} from '../helpers/sources-helpers.js';
38
39const OVERRIDES_FILESYSTEM_SELECTOR = '[aria-label="overrides, fs"]';
40
Wolfgang Beyer733ddfa2024-01-16 11:53:5741async function waitForOverrideContentMenuItemIsEnabled(requestName: string) {
42 await waitForFunction(async () => {
43 await selectRequestByName(requestName, {button: 'right'});
44 const menuItem = await waitForAria('Override content');
45 const isDisabled = await hasClass(menuItem, 'soft-context-menu-disabled');
46 if (!isDisabled) {
47 return true;
48 }
49 await pressKey('Escape');
50 return false;
51 });
52}
53
Benedikt Meurercb7952f2024-02-21 13:32:2354describe('Overrides panel', function() {
Wolfgang Beyerceebc652022-08-22 11:24:5855 afterEach(async () => {
56 await openSourcesPanel();
Jecelyn Yeen67b8ebb2023-07-31 11:22:1957 await click('[aria-label="Overrides"]');
Wolfgang Beyerceebc652022-08-22 11:24:5858 await click('[aria-label="Clear configuration"]');
59 await waitFor(ENABLE_OVERRIDES_SELECTOR);
60 });
61
62 it('can create multiple new files', async () => {
63 await goToResource('empty.html');
64 await openSourcesPanel();
65 await enableLocalOverrides();
Benedikt Meurer5a9f6992023-12-14 14:25:2466 await openSoftContextMenuAndClickOnItem(OVERRIDES_FILESYSTEM_SELECTOR, 'New file');
Wolfgang Beyerceebc652022-08-22 11:24:5867 await waitFor('[aria-label="NewFile, file"]');
68 await typeText('foo\n');
69
Benedikt Meurer5a9f6992023-12-14 14:25:2470 await openSoftContextMenuAndClickOnItem(OVERRIDES_FILESYSTEM_SELECTOR, 'New file');
Wolfgang Beyerceebc652022-08-22 11:24:5871 await waitFor('[aria-label="NewFile, file"]');
72 await typeText('bar\n');
Wolfgang Beyer94f99c32022-08-24 08:22:0873 await waitFor('[aria-label="bar, file"]');
Wolfgang Beyerceebc652022-08-22 11:24:5874
75 const treeItems = await $$('.navigator-file-tree-item');
76 const treeItemNames = await Promise.all(treeItems.map(x => x.evaluate(y => y.textContent)));
77 assert.deepEqual(treeItemNames, ['bar', 'foo']);
78 });
Jecelyn Yeen67b8ebb2023-07-31 11:22:1979
80 it('can save fetch request for overrides via network panel', async () => {
81 await step('enable overrides', async () => {
82 await goToResource('network/fetch-json.html');
83 await openSourcesPanel();
84 await enableLocalOverrides();
85 });
86
87 await step('can create content overrides via request\'s context menu', async () => {
88 await openNetworkTab();
Wolfgang Beyer733ddfa2024-01-16 11:53:5789 await waitForOverrideContentMenuItemIsEnabled('coffees.json');
Jecelyn Yeen5cc23742023-08-01 13:12:4190 await click('aria/Override content');
Jecelyn Yeen67b8ebb2023-07-31 11:22:1991 await waitFor('[aria-label="coffees.json, file"]');
92 });
93
94 await step('should not show fetch request in the Sources > Page Tree', async () => {
95 const pageTree = await waitForAria('Page');
96 await pageTree.click();
97
98 const treeItems = await $$('.navigator-file-tree-item');
99 const treeItemNames = (await Promise.all(treeItems.map(x => x.evaluate(y => y.textContent))));
100 assert.isFalse(treeItemNames?.includes('coffees.json'));
101 });
102
103 await step('should show overidden fetch request in Quick Open', async () => {
104 await typeIntoQuickOpen('coffees.json');
105 const list = await readQuickOpenResults();
106 assert.deepEqual(list, ['coffees.json']);
107 });
108 });
109
110 it('can save XHR request for overrides via network panel', async () => {
111 await step('enable overrides', async () => {
112 await goToResource('network/xhr-json.html');
113 await openSourcesPanel();
114 await enableLocalOverrides();
115 });
116
117 await step('can create content overrides via request\'s context menu', async () => {
118 await openNetworkTab();
Wolfgang Beyer733ddfa2024-01-16 11:53:57119 await waitForOverrideContentMenuItemIsEnabled('coffees.json');
Jecelyn Yeen5cc23742023-08-01 13:12:41120 await click('aria/Override content');
Jecelyn Yeen67b8ebb2023-07-31 11:22:19121 await waitFor('[aria-label="coffees.json, file"]');
122 });
123
124 await step('should not show xhr request in the Sources > Page Tree', async () => {
125 const pageTree = await waitForAria('Page');
126 await pageTree.click();
127
128 const treeItems = await $$('.navigator-file-tree-item');
129 const treeItemNames = (await Promise.all(treeItems.map(x => x.evaluate(y => y.textContent))));
130 assert.isFalse(treeItemNames?.includes('coffees.json'));
131 });
132
133 await step('should show overidden xhr request in Quick Open', async () => {
134 await typeIntoQuickOpen('coffees.json');
135 const list = await readQuickOpenResults();
136 assert.deepEqual(list, ['coffees.json']);
137 });
138 });
Jecelyn Yeen5cc23742023-08-01 13:12:41139
Wolfgang Beyerfe7f1142023-12-11 14:22:56140 it('can always override content via the Network panel', async () => {
Jecelyn Yeen5cc23742023-08-01 13:12:41141 await step('can override without local overrides folder set up', async () => {
142 await goToResource('network/fetch-json.html');
143 await openNetworkTab();
Wolfgang Beyer733ddfa2024-01-16 11:53:57144 await waitForOverrideContentMenuItemIsEnabled('coffees.json');
Jecelyn Yeen5cc23742023-08-01 13:12:41145 await click('aria/Override content');
146
147 // File permission pop up
148 const infoBar = await waitForAria('Select a folder to store override files in.');
149 await click('.infobar-main-row .infobar-button', {root: infoBar});
150
Jecelyn Yeen69e61432023-08-08 08:59:53151 // Open & close the file in the Sources panel
Jecelyn Yeen5cc23742023-08-01 13:12:41152 const fileTab = await waitFor('[aria-label="coffees.json, file"]');
153 assert.isNotNull(fileTab);
154
155 await click('aria/Close coffees.json');
156 });
157
158 await step('can open the overridden file in the Sources panel if it exists', async () => {
159 await openNetworkTab();
Wolfgang Beyer733ddfa2024-01-16 11:53:57160 await waitForOverrideContentMenuItemIsEnabled('coffees.json');
Jecelyn Yeen5cc23742023-08-01 13:12:41161 await click('aria/Override content');
162
163 // No file permission pop up
164 const popups = await $$('aria/Select a folder to store override files in.', undefined, 'aria');
165 assert.strictEqual(popups.length, 0);
166
167 // Open & close the file in the Sources panel
168 const fileTab = await waitFor('[aria-label="coffees.json, file"]');
169 assert.isNotNull(fileTab);
170
171 await click('aria/Close coffees.json');
172 });
173
174 await step('can enable the local overrides setting and override content', async () => {
175 // Disable Local overrides
176 await click('aria/Enable Local Overrides');
177
178 // Navigate to files
179 await openNetworkTab();
Wolfgang Beyer733ddfa2024-01-16 11:53:57180 await waitForOverrideContentMenuItemIsEnabled('coffees.json');
Jecelyn Yeen5cc23742023-08-01 13:12:41181 await click('aria/Override content');
182
183 // No file permission pop up
184 const popups = await $$('aria/Select a folder to store override files in.', undefined, 'aria');
185 assert.strictEqual(popups.length, 0);
186
187 // Open & close the file in the Sources panel
188 const fileTab = await waitFor('[aria-label="coffees.json, file"]');
189 assert.isNotNull(fileTab);
190
191 await click('aria/Close coffees.json');
192 });
193 });
Jecelyn Yeen57fdda42023-08-06 23:33:15194
Wolfgang Beyerfe7f1142023-12-11 14:22:56195 it('overrides indicator on the Network panel title', async () => {
Jecelyn Yeen57fdda42023-08-06 23:33:15196 await step('no indicator when overrides setting is disabled', async () => {
197 await goToResource('network/fetch-json.html');
198
199 await openNetworkTab();
200 const networkPanel = await waitFor('.tabbed-pane-header-tab.selected');
201 const icons = await networkPanel.$$('.tabbed-pane-header-tab-icon');
202
203 assert.strictEqual(icons.length, 0);
204 });
205
206 await step('shows indicator when overrides setting is enabled', async () => {
207 // Set up & enable overrides
Wolfgang Beyer733ddfa2024-01-16 11:53:57208 await waitForOverrideContentMenuItemIsEnabled('coffees.json');
Jecelyn Yeen57fdda42023-08-06 23:33:15209 await click('aria/Override content');
210
211 // File permission pop up
212 const infoBar = await waitForAria('Select a folder to store override files in.');
213 await click('.infobar-main-row .infobar-button', {root: infoBar});
214 await waitFor('[aria-label="coffees.json, file"]');
215
216 await openNetworkTab();
Wolfgang Beyerfe7f1142023-12-11 14:22:56217 await setCacheDisabled(false);
Jecelyn Yeen57fdda42023-08-06 23:33:15218 const networkPanel = await waitFor('.tabbed-pane-header-tab.selected');
219 const icons = await networkPanel.$$('.tabbed-pane-header-tab-icon');
Alex Rudenko5fda6462024-04-17 12:18:03220 const iconTitleElement = await icons[0].$('[title="Requests may be overridden locally, see the Sources panel"]');
Jecelyn Yeen57fdda42023-08-06 23:33:15221
222 assert.strictEqual(icons.length, 1);
Wolfgang Beyerfe7f1142023-12-11 14:22:56223 assert.isNotNull(iconTitleElement);
Jecelyn Yeen57fdda42023-08-06 23:33:15224 });
225
226 await step('no indicator after clearing overrides configuration', async () => {
Wolfgang Beyer733ddfa2024-01-16 11:53:57227 await waitForOverrideContentMenuItemIsEnabled('coffees.json');
Jecelyn Yeen57fdda42023-08-06 23:33:15228 await click('aria/Override content');
229 await click('aria/Clear configuration');
230
231 await openNetworkTab();
Wolfgang Beyerfe7f1142023-12-11 14:22:56232 await setCacheDisabled(false);
Jecelyn Yeen57fdda42023-08-06 23:33:15233 const networkPanel = await waitFor('.tabbed-pane-header-tab.selected');
234 const icons = await networkPanel.$$('.tabbed-pane-header-tab-icon');
235
236 assert.strictEqual(icons.length, 0);
237 });
238
239 await step('shows indicator after enabling override in Overrides tab', async () => {
240 await click('aria/Sources');
241 await click('aria/Select folder for overrides');
Benedikt Meurer5a9f6992023-12-14 14:25:24242 await openSoftContextMenuAndClickOnItem(OVERRIDES_FILESYSTEM_SELECTOR, 'New file');
Jecelyn Yeen57fdda42023-08-06 23:33:15243 await waitFor('[aria-label="NewFile, file"]');
244
245 await openNetworkTab();
Wolfgang Beyerfe7f1142023-12-11 14:22:56246 await setCacheDisabled(false);
Jecelyn Yeen57fdda42023-08-06 23:33:15247 const networkPanel = await waitFor('.tabbed-pane-header-tab.selected');
248 const icons = await networkPanel.$$('.tabbed-pane-header-tab-icon');
Alex Rudenko5fda6462024-04-17 12:18:03249 const iconTitleElement = await icons[0].$('[title="Requests may be overridden locally, see the Sources panel"]');
Jecelyn Yeen57fdda42023-08-06 23:33:15250
251 assert.strictEqual(icons.length, 1);
Wolfgang Beyerfe7f1142023-12-11 14:22:56252 assert.isNotNull(iconTitleElement);
Jecelyn Yeen57fdda42023-08-06 23:33:15253 });
254 });
Jecelyn Yeen3755eef2023-08-07 10:04:02255
256 it('can show all overrides in the Sources panel', async () => {
257 await step('when overrides setting is disabled', async () => {
258 await goToResource('network/fetch-json.html');
259
260 await openNetworkTab();
Wolfgang Beyer733ddfa2024-01-16 11:53:57261 await waitForOverrideContentMenuItemIsEnabled('coffees.json');
Jecelyn Yeen3755eef2023-08-07 10:04:02262 await click('aria/Show all overrides');
263
264 // In the Sources panel
265 await waitForAria('Select folder for overrides');
266
267 const assertElements = await $$('Select folder for overrides', undefined, 'aria');
268 assert.strictEqual(assertElements.length, 1);
269 });
270
271 await step('when overrides setting is enabled', async () => {
272 // Set up & enable overrides in the Sources panel
273 await click('aria/Select folder for overrides');
Benedikt Meurer5a9f6992023-12-14 14:25:24274 await openSoftContextMenuAndClickOnItem(OVERRIDES_FILESYSTEM_SELECTOR, 'New file');
Jecelyn Yeen3755eef2023-08-07 10:04:02275
276 await openNetworkTab();
277 await selectRequestByName('coffees.json', {button: 'right'});
278 await click('aria/Show all overrides');
279
280 // In the Sources panel
281 await waitForAria('Enable Local Overrides');
282
283 const assertElements = await $$('Enable Local Overrides', undefined, 'aria');
284 assert.strictEqual(assertElements.length, 1);
285 });
286 });
Jecelyn Yeen69e61432023-08-08 08:59:53287
Wolfgang Beyerfe7f1142023-12-11 14:22:56288 it('has correct context menu for overrides files', async () => {
Jecelyn Yeen69e61432023-08-08 08:59:53289 await goToResource('network/fetch-json.html');
290 await openNetworkTab();
Wolfgang Beyer733ddfa2024-01-16 11:53:57291 await waitForOverrideContentMenuItemIsEnabled('coffees.json');
Jecelyn Yeen69e61432023-08-08 08:59:53292 await click('aria/Override content');
293
294 // File permission pop up
295 const infoBar = await waitForAria('Select a folder to store override files in.');
296 await click('.infobar-main-row .infobar-button', {root: infoBar});
297
298 // Open the file in the Sources panel
299 const fileTab = await waitFor('[aria-label="coffees.json, file"]');
300 await fileTab.click({button: 'right'});
301
302 const assertShowAllElements = await $$('Show all overrides', undefined, 'aria');
303 const assertAddFolderElements = await $$('Add folder to workspace', undefined, 'aria');
304 const assertOverrideContentElements = await $$('Override content', undefined, 'aria');
305 const assertOpenInElements = await $$('Open in containing folder', undefined, 'aria');
306
307 assert.strictEqual(assertShowAllElements.length, 0);
308 assert.strictEqual(assertAddFolderElements.length, 0);
309 assert.strictEqual(assertOverrideContentElements.length, 0);
310 assert.strictEqual(assertOpenInElements.length, 1);
311 });
312
Wolfgang Beyerfe7f1142023-12-11 14:22:56313 it('has correct context menu for main overrides folder', async () => {
Jecelyn Yeen69e61432023-08-08 08:59:53314 await goToResource('network/fetch-json.html');
315 await openNetworkTab();
Wolfgang Beyer733ddfa2024-01-16 11:53:57316 await waitForOverrideContentMenuItemIsEnabled('coffees.json');
Jecelyn Yeen69e61432023-08-08 08:59:53317 await click('aria/Override content');
318
319 // File permission pop up
320 const infoBar = await waitForAria('Select a folder to store override files in.');
321 await click('.infobar-main-row .infobar-button', {root: infoBar});
322
323 // Open the main folder in the Sources panel
324 await waitFor('[aria-label="coffees.json, file"]');
325 const folderTab = await waitFor('.navigator-folder-tree-item');
326 await folderTab.click({button: 'right'});
327
328 const assertAddFolderElements = await $$('Add folder to workspace', undefined, 'aria');
329 const assertRemoveFolderElements = await $$('Remove folder from workspace', undefined, 'aria');
Jecelyn Yeenfca70182023-08-18 10:14:41330 const assertDeleteElements = await $$('Delete', undefined, 'aria');
Jecelyn Yeen69e61432023-08-08 08:59:53331
332 assert.strictEqual(assertAddFolderElements.length, 0);
333 assert.strictEqual(assertRemoveFolderElements.length, 0);
Jecelyn Yeenfca70182023-08-18 10:14:41334 assert.strictEqual(assertDeleteElements.length, 0);
Jecelyn Yeen69e61432023-08-08 08:59:53335 });
336
Wolfgang Beyerfe7f1142023-12-11 14:22:56337 it('has correct context menu for sub overrides folder', async () => {
Jecelyn Yeen69e61432023-08-08 08:59:53338 await goToResource('network/fetch-json.html');
339 await openNetworkTab();
Wolfgang Beyer733ddfa2024-01-16 11:53:57340 await waitForOverrideContentMenuItemIsEnabled('coffees.json');
Jecelyn Yeen69e61432023-08-08 08:59:53341 await click('aria/Override content');
342
343 // File permission pop up
344 const infoBar = await waitForAria('Select a folder to store override files in.');
345 await click('.infobar-main-row .infobar-button', {root: infoBar});
346
347 // Open the sub folder in the Sources panel
348 await waitFor('[aria-label="coffees.json, file"]');
349 const subfolderTab = await waitFor('[role="group"] > .navigator-folder-tree-item');
350 await subfolderTab.click({button: 'right'});
351
352 const assertAddFolderElements = await $$('Add folder to workspace', undefined, 'aria');
353 const assertRemoveFolderElements = await $$('Remove folder from workspace', undefined, 'aria');
Jecelyn Yeenfca70182023-08-18 10:14:41354 const assertDeleteElements = await $$('Delete', undefined, 'aria');
Jecelyn Yeen69e61432023-08-08 08:59:53355
356 assert.strictEqual(assertAddFolderElements.length, 0);
357 assert.strictEqual(assertRemoveFolderElements.length, 0);
Jecelyn Yeenfca70182023-08-18 10:14:41358 assert.strictEqual(assertDeleteElements.length, 1);
Jecelyn Yeen69e61432023-08-08 08:59:53359 });
Jecelyn Yeen2b9c9f92023-08-25 08:15:47360
Wolfgang Beyer733ddfa2024-01-16 11:53:57361 it('show redirect dialog when override content of source mapped js file', async () => {
Jecelyn Yeen2b9c9f92023-08-25 08:15:47362 await goToResource('sources/sourcemap-origin.html');
363 await openSourcesPanel();
364 await enableLocalOverrides();
365
366 await openNetworkTab();
367 await waitForSomeRequestsToAppear(4);
Wolfgang Beyer733ddfa2024-01-16 11:53:57368 await waitForOverrideContentMenuItemIsEnabled('sourcemap-origin.min.js');
Jecelyn Yeen2b9c9f92023-08-25 08:15:47369 await click('aria/Open in Sources panel');
370
371 // Actual file > Has override content
372 const file = await waitFor('[aria-label="sourcemap-origin.min.js"]');
373 await file.click({button: 'right'});
374 await click('aria/Close');
375
376 // Source mapped file > Show redirect confirmation dialog
377 const mappedfile = await waitFor('[aria-label="sourcemap-origin.js, file"]');
378 await mappedfile.click({button: 'right'});
379 await click('aria/Override content');
380 const p = await waitFor('.dimmed-pane');
381 const dialog = await p.waitForSelector('>>>> [role="dialog"]');
Kateryna Prokopenko16493fe2024-05-03 13:13:14382 const okButton = await dialog?.waitForSelector('>>> devtools-button');
383 const okButtonTextContent = await okButton?.evaluate(e => e.textContent);
384 assert.deepEqual(okButtonTextContent, 'OK');
Jecelyn Yeen2b9c9f92023-08-25 08:15:47385 await okButton?.click();
386 await waitFor('[aria-label="Close sourcemap-origin.min.js"]');
387 });
388
Alex Rudenko57746912024-07-02 05:20:09389 // crbug.com/350617272
390 it.skipOnPlatforms(
391 ['mac'], '[crbug.com/350617272]: show redirect dialog when override content of source mapped css file',
392 async () => {
393 await goToResource('sources/sourcemap-origin.html');
394 await openSourcesPanel();
395 await enableLocalOverrides();
Jecelyn Yeen2b9c9f92023-08-25 08:15:47396
Alex Rudenko57746912024-07-02 05:20:09397 await openNetworkTab();
398 await waitForSomeRequestsToAppear(4);
399 await waitForOverrideContentMenuItemIsEnabled('sourcemap-origin.css');
400 await click('aria/Open in Sources panel');
Jecelyn Yeen2b9c9f92023-08-25 08:15:47401
Alex Rudenko57746912024-07-02 05:20:09402 // Actual file > Has override content
403 const file = await waitFor('[aria-label="sourcemap-origin.css"]');
404 await file.click({button: 'right'});
405 await click('aria/Close');
Jecelyn Yeen2b9c9f92023-08-25 08:15:47406
Alex Rudenko57746912024-07-02 05:20:09407 // Source mapped file > Show redirect confirmation dialog
408 const mappedfile = await waitFor('[aria-label="sourcemap-origin.scss, file"]');
409 await mappedfile.click({button: 'right'});
410 await click('aria/Override content');
411 const p = await waitFor('.dimmed-pane');
412 const dialog = await p.waitForSelector('>>>> [role="dialog"]');
413 const okButton = await dialog?.waitForSelector('>>> devtools-button');
414 const okButtonTextContent = await okButton?.evaluate(e => e.textContent);
415 assert.deepEqual(okButtonTextContent, 'OK');
416 await okButton?.click();
417 await waitFor('[aria-label="Close sourcemap-origin.css"]');
418 });
Jecelyn Yeen69e61432023-08-08 08:59:53419});
420
421describe('Overrides panel', () => {
Wolfgang Beyer733ddfa2024-01-16 11:53:57422 it('appends correct overrides context menu for Sources > Page file', async () => {
Jecelyn Yeen2dec31e2023-08-23 12:13:07423 await goToResource('elements/elements-panel-styles.html');
424 await openNetworkTab();
425 await waitForSomeRequestsToAppear(2);
Wolfgang Beyer733ddfa2024-01-16 11:53:57426 await waitForOverrideContentMenuItemIsEnabled('elements-panel-styles.css');
Jecelyn Yeen2dec31e2023-08-23 12:13:07427 await click('aria/Open in Sources panel');
Jecelyn Yeen69e61432023-08-08 08:59:53428
Jecelyn Yeen2dec31e2023-08-23 12:13:07429 // Open the file in the Sources panel
430 const file = await waitFor('[aria-label="elements-panel-styles.css, file"]');
431 await file.click({button: 'right'});
Jecelyn Yeen69e61432023-08-08 08:59:53432
Jecelyn Yeen2dec31e2023-08-23 12:13:07433 const assertShowAllElements = await $$('Show all overrides', undefined, 'aria');
434 const assertOverridesContentElements = await $$('Override content', undefined, 'aria');
Jecelyn Yeen69e61432023-08-08 08:59:53435
Jecelyn Yeen2dec31e2023-08-23 12:13:07436 assert.strictEqual(assertShowAllElements.length, 0);
437 assert.strictEqual(assertOverridesContentElements.length, 1);
438 });
Wolfgang Beyerceebc652022-08-22 11:24:58439});
Jecelyn Yeenfca70182023-08-18 10:14:41440
Wolfgang Beyer9d9affb2024-05-08 10:14:44441describe('Network panel', () => {
442 it('context menu "override" items are disabled for forbidden URLs', async () => {
443 await goTo('chrome://terms');
444 await openNetworkTab();
445 await selectRequestByName('terms', {button: 'right'});
446
447 const menuItem1 = await waitForAria('Override content');
448 const isDisabled1 = await menuItem1.evaluate(el => el.classList.contains('soft-context-menu-disabled'));
449 assert.isTrue(isDisabled1, '"Override content" menu item is enabled');
450
451 const menuItem2 = await waitForAria('Override headers');
452 const isDisabled2 = await menuItem2.evaluate(el => el.classList.contains('soft-context-menu-disabled'));
453 assert.isTrue(isDisabled2, '"Override headers" menu item is enabled');
454 });
455});
456
Jecelyn Yeenfca70182023-08-18 10:14:41457describe('Overrides panel > Delete context menus', () => {
458 beforeEach(async () => {
459 // set up 3 overriden files - .header, json, custom js
Jecelyn Yeenfca70182023-08-18 10:14:41460 await goToResource('network/fetch-json.html');
461 await openSourcesPanel();
462 await enableLocalOverrides();
463
464 await step('add a content override file', async () => {
465 await openNetworkTab();
Wolfgang Beyer733ddfa2024-01-16 11:53:57466 await waitForOverrideContentMenuItemIsEnabled('coffees.json');
Jecelyn Yeenfca70182023-08-18 10:14:41467 await click('aria/Override content');
468 });
469
470 await step('add a custom override file', async () => {
471 const subfolderTab = await waitFor('[role="group"] > .navigator-folder-tree-item');
472 await subfolderTab.click({button: 'right'});
473 await click('aria/New file');
474 await waitFor('[aria-label="NewFile, file"]');
475 await typeText('foo.js\n');
476 });
477
478 await step('add a header override file', async () => {
479 await openNetworkTab();
480 await selectRequestByName('coffees.json', {button: 'right'});
481 await click('aria/Override headers');
482 await waitFor('[title="Reveal header override definitions"]');
483 });
484 });
485
486 afterEach(async () => {
487 await click('[aria-label="Clear configuration"]');
488 await waitFor(ENABLE_OVERRIDES_SELECTOR);
489 });
490
Jecelyn Yeenfca70182023-08-18 10:14:41491 it('delete all files from sub folder', async () => {
492 await step('files exist in Sources panel', async () => {
493 await selectRequestByName('coffees.json', {button: 'right'});
494 await click('aria/Show all overrides');
495
496 await waitFor('[aria-label=".headers, file"]');
497 await waitFor('[aria-label="coffees.json, file"]');
498 await waitFor('[aria-label="foo.js, file"]');
499 });
500
501 await step('delete all files', async () => {
502 const subfolderTab = await waitFor('[role="group"] > .navigator-folder-tree-item');
503 await subfolderTab.click({button: 'right'});
504
505 await click('aria/Delete');
506 await waitFor('[role="dialog"]');
507 await click('aria/OK');
508 await waitForNone('[role="dialog"]');
509
510 const treeItems = await $$('.navigator-file-tree-item');
511 assert.strictEqual(treeItems.length, 0);
512 });
513 });
514});