Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 1 | // 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 | |
| 5 | import {assert} from 'chai'; |
| 6 | |
| 7 | import { |
| 8 | $$, |
| 9 | click, |
Wolfgang Beyer | 9d9affb | 2024-05-08 10:14:44 | [diff] [blame] | 10 | goTo, |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 11 | goToResource, |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 12 | hasClass, |
| 13 | pressKey, |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 14 | step, |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 15 | typeText, |
| 16 | waitFor, |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 17 | waitForAria, |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 18 | waitForFunction, |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 19 | waitForNone, |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 20 | } from '../../shared/helper.js'; |
| 21 | import {describe, it} from '../../shared/mocha-extensions.js'; |
Benedikt Meurer | 5a9f699 | 2023-12-14 14:25:24 | [diff] [blame] | 22 | import {openSoftContextMenuAndClickOnItem} from '../helpers/context-menu-helpers.js'; |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 23 | import { |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 24 | openNetworkTab, |
| 25 | selectRequestByName, |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 26 | setCacheDisabled, |
Jecelyn Yeen | 2dec31e | 2023-08-23 12:13:07 | [diff] [blame] | 27 | waitForSomeRequestsToAppear, |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 28 | } from '../helpers/network-helpers.js'; |
| 29 | import { |
| 30 | readQuickOpenResults, |
| 31 | typeIntoQuickOpen, |
| 32 | } from '../helpers/quick_open-helpers.js'; |
| 33 | import { |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 34 | ENABLE_OVERRIDES_SELECTOR, |
| 35 | enableLocalOverrides, |
| 36 | openSourcesPanel, |
| 37 | } from '../helpers/sources-helpers.js'; |
| 38 | |
| 39 | const OVERRIDES_FILESYSTEM_SELECTOR = '[aria-label="overrides, fs"]'; |
| 40 | |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 41 | async 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 Meurer | cb7952f | 2024-02-21 13:32:23 | [diff] [blame] | 54 | describe('Overrides panel', function() { |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 55 | afterEach(async () => { |
| 56 | await openSourcesPanel(); |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 57 | await click('[aria-label="Overrides"]'); |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 58 | 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 Meurer | 5a9f699 | 2023-12-14 14:25:24 | [diff] [blame] | 66 | await openSoftContextMenuAndClickOnItem(OVERRIDES_FILESYSTEM_SELECTOR, 'New file'); |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 67 | await waitFor('[aria-label="NewFile, file"]'); |
| 68 | await typeText('foo\n'); |
| 69 | |
Benedikt Meurer | 5a9f699 | 2023-12-14 14:25:24 | [diff] [blame] | 70 | await openSoftContextMenuAndClickOnItem(OVERRIDES_FILESYSTEM_SELECTOR, 'New file'); |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 71 | await waitFor('[aria-label="NewFile, file"]'); |
| 72 | await typeText('bar\n'); |
Wolfgang Beyer | 94f99c3 | 2022-08-24 08:22:08 | [diff] [blame] | 73 | await waitFor('[aria-label="bar, file"]'); |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 74 | |
| 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 Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 79 | |
| 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 Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 89 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 90 | await click('aria/Override content'); |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 91 | 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 Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 119 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 120 | await click('aria/Override content'); |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 121 | 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 Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 139 | |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 140 | it('can always override content via the Network panel', async () => { |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 141 | await step('can override without local overrides folder set up', async () => { |
| 142 | await goToResource('network/fetch-json.html'); |
| 143 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 144 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 145 | 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 Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 151 | // Open & close the file in the Sources panel |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 152 | 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 Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 160 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 161 | 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 Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 180 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 181 | 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 Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 194 | |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 195 | it('overrides indicator on the Network panel title', async () => { |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 196 | 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 Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 208 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 209 | 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 Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 217 | await setCacheDisabled(false); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 218 | const networkPanel = await waitFor('.tabbed-pane-header-tab.selected'); |
| 219 | const icons = await networkPanel.$$('.tabbed-pane-header-tab-icon'); |
Alex Rudenko | 5fda646 | 2024-04-17 12:18:03 | [diff] [blame] | 220 | const iconTitleElement = await icons[0].$('[title="Requests may be overridden locally, see the Sources panel"]'); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 221 | |
| 222 | assert.strictEqual(icons.length, 1); |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 223 | assert.isNotNull(iconTitleElement); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 224 | }); |
| 225 | |
| 226 | await step('no indicator after clearing overrides configuration', async () => { |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 227 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 228 | await click('aria/Override content'); |
| 229 | await click('aria/Clear configuration'); |
| 230 | |
| 231 | await openNetworkTab(); |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 232 | await setCacheDisabled(false); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 233 | 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 Meurer | 5a9f699 | 2023-12-14 14:25:24 | [diff] [blame] | 242 | await openSoftContextMenuAndClickOnItem(OVERRIDES_FILESYSTEM_SELECTOR, 'New file'); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 243 | await waitFor('[aria-label="NewFile, file"]'); |
| 244 | |
| 245 | await openNetworkTab(); |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 246 | await setCacheDisabled(false); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 247 | const networkPanel = await waitFor('.tabbed-pane-header-tab.selected'); |
| 248 | const icons = await networkPanel.$$('.tabbed-pane-header-tab-icon'); |
Alex Rudenko | 5fda646 | 2024-04-17 12:18:03 | [diff] [blame] | 249 | const iconTitleElement = await icons[0].$('[title="Requests may be overridden locally, see the Sources panel"]'); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 250 | |
| 251 | assert.strictEqual(icons.length, 1); |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 252 | assert.isNotNull(iconTitleElement); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 253 | }); |
| 254 | }); |
Jecelyn Yeen | 3755eef | 2023-08-07 10:04:02 | [diff] [blame] | 255 | |
| 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 Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 261 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 3755eef | 2023-08-07 10:04:02 | [diff] [blame] | 262 | 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 Meurer | 5a9f699 | 2023-12-14 14:25:24 | [diff] [blame] | 274 | await openSoftContextMenuAndClickOnItem(OVERRIDES_FILESYSTEM_SELECTOR, 'New file'); |
Jecelyn Yeen | 3755eef | 2023-08-07 10:04:02 | [diff] [blame] | 275 | |
| 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 Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 287 | |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 288 | it('has correct context menu for overrides files', async () => { |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 289 | await goToResource('network/fetch-json.html'); |
| 290 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 291 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 292 | 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 Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 313 | it('has correct context menu for main overrides folder', async () => { |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 314 | await goToResource('network/fetch-json.html'); |
| 315 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 316 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 317 | 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 Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 330 | const assertDeleteElements = await $$('Delete', undefined, 'aria'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 331 | |
| 332 | assert.strictEqual(assertAddFolderElements.length, 0); |
| 333 | assert.strictEqual(assertRemoveFolderElements.length, 0); |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 334 | assert.strictEqual(assertDeleteElements.length, 0); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 335 | }); |
| 336 | |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 337 | it('has correct context menu for sub overrides folder', async () => { |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 338 | await goToResource('network/fetch-json.html'); |
| 339 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 340 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 341 | 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 Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 354 | const assertDeleteElements = await $$('Delete', undefined, 'aria'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 355 | |
| 356 | assert.strictEqual(assertAddFolderElements.length, 0); |
| 357 | assert.strictEqual(assertRemoveFolderElements.length, 0); |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 358 | assert.strictEqual(assertDeleteElements.length, 1); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 359 | }); |
Jecelyn Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 360 | |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 361 | it('show redirect dialog when override content of source mapped js file', async () => { |
Jecelyn Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 362 | await goToResource('sources/sourcemap-origin.html'); |
| 363 | await openSourcesPanel(); |
| 364 | await enableLocalOverrides(); |
| 365 | |
| 366 | await openNetworkTab(); |
| 367 | await waitForSomeRequestsToAppear(4); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 368 | await waitForOverrideContentMenuItemIsEnabled('sourcemap-origin.min.js'); |
Jecelyn Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 369 | 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 Prokopenko | 16493fe | 2024-05-03 13:13:14 | [diff] [blame] | 382 | const okButton = await dialog?.waitForSelector('>>> devtools-button'); |
| 383 | const okButtonTextContent = await okButton?.evaluate(e => e.textContent); |
| 384 | assert.deepEqual(okButtonTextContent, 'OK'); |
Jecelyn Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 385 | await okButton?.click(); |
| 386 | await waitFor('[aria-label="Close sourcemap-origin.min.js"]'); |
| 387 | }); |
| 388 | |
Alex Rudenko | 5774691 | 2024-07-02 05:20:09 | [diff] [blame] | 389 | // 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 Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 396 | |
Alex Rudenko | 5774691 | 2024-07-02 05:20:09 | [diff] [blame] | 397 | await openNetworkTab(); |
| 398 | await waitForSomeRequestsToAppear(4); |
| 399 | await waitForOverrideContentMenuItemIsEnabled('sourcemap-origin.css'); |
| 400 | await click('aria/Open in Sources panel'); |
Jecelyn Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 401 | |
Alex Rudenko | 5774691 | 2024-07-02 05:20:09 | [diff] [blame] | 402 | // 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 Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 406 | |
Alex Rudenko | 5774691 | 2024-07-02 05:20:09 | [diff] [blame] | 407 | // 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 Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 419 | }); |
| 420 | |
| 421 | describe('Overrides panel', () => { |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 422 | it('appends correct overrides context menu for Sources > Page file', async () => { |
Jecelyn Yeen | 2dec31e | 2023-08-23 12:13:07 | [diff] [blame] | 423 | await goToResource('elements/elements-panel-styles.html'); |
| 424 | await openNetworkTab(); |
| 425 | await waitForSomeRequestsToAppear(2); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 426 | await waitForOverrideContentMenuItemIsEnabled('elements-panel-styles.css'); |
Jecelyn Yeen | 2dec31e | 2023-08-23 12:13:07 | [diff] [blame] | 427 | await click('aria/Open in Sources panel'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 428 | |
Jecelyn Yeen | 2dec31e | 2023-08-23 12:13:07 | [diff] [blame] | 429 | // 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 Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 432 | |
Jecelyn Yeen | 2dec31e | 2023-08-23 12:13:07 | [diff] [blame] | 433 | const assertShowAllElements = await $$('Show all overrides', undefined, 'aria'); |
| 434 | const assertOverridesContentElements = await $$('Override content', undefined, 'aria'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 435 | |
Jecelyn Yeen | 2dec31e | 2023-08-23 12:13:07 | [diff] [blame] | 436 | assert.strictEqual(assertShowAllElements.length, 0); |
| 437 | assert.strictEqual(assertOverridesContentElements.length, 1); |
| 438 | }); |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 439 | }); |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 440 | |
Wolfgang Beyer | 9d9affb | 2024-05-08 10:14:44 | [diff] [blame] | 441 | describe('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 Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 457 | describe('Overrides panel > Delete context menus', () => { |
| 458 | beforeEach(async () => { |
| 459 | // set up 3 overriden files - .header, json, custom js |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 460 | 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 Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 466 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 467 | 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 Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 491 | 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 | }); |