[e2e] Migrate the shortcut settings test
Migrates the test and helpers to the new test runner.
Fixed: 416404619
Change-Id: I9803586659e6ec7ffe143f5b0648a671e63149d6
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6732391
Auto-Submit: Nikolay Vitkov <[email protected]>
Reviewed-by: Alex Rudenko <[email protected]>
Commit-Queue: Alex Rudenko <[email protected]>
diff --git a/test/e2e/BUILD.gn b/test/e2e/BUILD.gn
index a53522d..c8ceed5 100644
--- a/test/e2e/BUILD.gn
+++ b/test/e2e/BUILD.gn
@@ -29,7 +29,6 @@
"panels",
"performance",
"security",
- "settings",
"sources",
]
sources = [ "mocharc.ts" ]
diff --git a/test/e2e/helpers/quick_open-helpers.ts b/test/e2e/helpers/quick_open-helpers.ts
index acf3cd5..bcd2272 100644
--- a/test/e2e/helpers/quick_open-helpers.ts
+++ b/test/e2e/helpers/quick_open-helpers.ts
@@ -2,12 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import {
- drainFrontendTaskQueue,
- getBrowserAndPages,
- platform,
- waitFor
-} from '../../shared/helper.js';
+import {platform} from '../../shared/helper.js';
import {getBrowserAndPagesWrappers} from '../../shared/non_hosted_wrappers.js';
import {SourceFileEvents, waitForSourceFiles} from './sources-helpers.js';
@@ -82,13 +77,13 @@
);
};
-export async function runCommandWithQuickOpen(command: string): Promise<void> {
- const {frontend} = getBrowserAndPages();
- await openCommandMenu();
- await frontend.keyboard.type(command);
+export async function runCommandWithQuickOpen(
+ command: string, devtoolsPage = getBrowserAndPagesWrappers().devToolsPage): Promise<void> {
+ await openCommandMenu(devtoolsPage);
+ await devtoolsPage.page.keyboard.type(command);
// TODO: it should actually wait for rendering to finish.
- await drainFrontendTaskQueue();
- await frontend.keyboard.press('Enter');
+ await devtoolsPage.drainTaskQueue();
+ await devtoolsPage.page.keyboard.press('Enter');
}
export const openGoToLineQuickOpen = async (devtoolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
@@ -141,9 +136,9 @@
await devToolsPage.click('[aria-label="Close drawer"]');
};
-export const getSelectedItemText = async () => {
- const quickOpenElement = await waitFor(QUICK_OPEN_SELECTOR);
- const selectedRow = await waitFor(QUICK_OPEN_SELECTED_ITEM_SELECTOR, quickOpenElement);
+export const getSelectedItemText = async (devToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
+ const quickOpenElement = await devToolsPage.waitFor(QUICK_OPEN_SELECTOR);
+ const selectedRow = await devToolsPage.waitFor(QUICK_OPEN_SELECTED_ITEM_SELECTOR, quickOpenElement);
const textContent = await selectedRow.getProperty('textContent');
if (!textContent) {
assert.fail('Quick open: could not get selected item textContent');
diff --git a/test/e2e/helpers/settings-shortcuts-helpers.ts b/test/e2e/helpers/settings-shortcuts-helpers.ts
index 196bc40..8836017 100644
--- a/test/e2e/helpers/settings-shortcuts-helpers.ts
+++ b/test/e2e/helpers/settings-shortcuts-helpers.ts
@@ -5,17 +5,10 @@
import type {ElementHandle} from 'puppeteer-core';
import {
- $$,
- $$textContent,
- click,
- clickElement,
platform,
selectOption,
- waitFor,
- waitForElementsWithTextContent,
- waitForElementWithTextContent,
- waitForFunction,
} from '../../shared/helper.js';
+import {getBrowserAndPagesWrappers} from '../../shared/non_hosted_wrappers.js';
const CANCEL_BUTTON_SELECTOR = '[aria-label="Discard changes"]';
const CONFIRM_BUTTON_SELECTOR = '[aria-label="Confirm changes"]';
@@ -59,13 +52,15 @@
CONTROL_ALT_C_SHORTCUT_INPUT_TEXT = ['Ctrl ⌥ C'];
}
-export const selectKeyboardShortcutPreset = async (option: string) => {
- const presetSelectElement = await waitForElementWithTextContent(SHORTCUT_SELECT_TEXT);
+export const selectKeyboardShortcutPreset =
+ async (option: string, devToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
+ const presetSelectElement = await devToolsPage.waitForElementWithTextContent(SHORTCUT_SELECT_TEXT);
await selectOption(await presetSelectElement.toElement('select'), option);
};
-export const getShortcutListItemElement = async (shortcutText: string) => {
- const textMatches = await $$textContent(shortcutText);
+export const getShortcutListItemElement =
+ async (shortcutText: string, devToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
+ const textMatches = await devToolsPage.$$textContent(shortcutText);
let titleElement;
for (const matchingElement of textMatches) {
// some actions have the same name as categories, so we have to make sure we've got the right one
@@ -78,20 +73,22 @@
assert.fail('shortcut element not found');
}
const listItemElement = await titleElement.getProperty('parentElement');
- return (listItemElement as ElementHandle).asElement();
+ return listItemElement.asElement();
};
-export const editShortcutListItem = async (shortcutText: string) => {
- const listItemElement = await getShortcutListItemElement(shortcutText) as ElementHandle;
+export const editShortcutListItem =
+ async (shortcutText: string, devToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
+ const listItemElement = await getShortcutListItemElement(shortcutText, devToolsPage) as ElementHandle;
- await clickElement(listItemElement);
- await click(EDIT_BUTTON_SELECTOR, {root: listItemElement});
+ await devToolsPage.clickElement(listItemElement);
+ await devToolsPage.click(EDIT_BUTTON_SELECTOR, {root: listItemElement});
- await waitFor(RESET_BUTTON_SELECTOR);
+ await devToolsPage.waitFor(RESET_BUTTON_SELECTOR);
};
-export const shortcutsForAction = async (shortcutText: string) => {
- const listItemElement = await getShortcutListItemElement(shortcutText);
+export const shortcutsForAction =
+ async (shortcutText: string, devToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
+ const listItemElement = await getShortcutListItemElement(shortcutText, devToolsPage);
if (!listItemElement) {
assert.fail(`Could not find shortcut item with text ${shortcutText}`);
}
@@ -102,8 +99,8 @@
shortcutElementsTextContent.map(async textContent => textContent ? await textContent.jsonValue() : []));
};
-export const shortcutInputValues = async () => {
- const shortcutInputs = await $$(SHORTCUT_INPUT_SELECTOR);
+export const shortcutInputValues = async (devToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
+ const shortcutInputs = await devToolsPage.$$(SHORTCUT_INPUT_SELECTOR);
if (!shortcutInputs.length) {
assert.fail('shortcut input not found');
}
@@ -111,8 +108,8 @@
return await Promise.all(shortcutValues.map(async value => value ? await value.jsonValue() : []));
};
-export const clickAddShortcutLink = async () => {
- const addShortcutLinkTextMatches = await waitForElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
+export const clickAddShortcutLink = async (devToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
+ const addShortcutLinkTextMatches = await devToolsPage.waitForElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
let addShortcutLinkElement;
// the link container and the link have the same textContent, but only the latter has a click handler
for (const matchingElement of addShortcutLinkTextMatches) {
@@ -125,32 +122,33 @@
assert.fail('could not find add shortcut link');
}
- await clickElement(addShortcutLinkElement);
+ await devToolsPage.clickElement(addShortcutLinkElement);
};
-export const clickShortcutConfirmButton = async () => {
- await click(CONFIRM_BUTTON_SELECTOR);
+export const clickShortcutConfirmButton = async (devToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
+ await devToolsPage.click(CONFIRM_BUTTON_SELECTOR);
};
-export const clickShortcutCancelButton = async () => {
- await click(CANCEL_BUTTON_SELECTOR);
+export const clickShortcutCancelButton = async (devToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
+ await devToolsPage.click(CANCEL_BUTTON_SELECTOR);
};
-export const clickShortcutResetButton = async () => {
- await click(RESET_BUTTON_SELECTOR);
+export const clickShortcutResetButton = async (devToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
+ await devToolsPage.click(RESET_BUTTON_SELECTOR);
};
-export const clickShortcutDeleteButton = async (index: number) => {
- const deleteButtons = await $$(DELETE_BUTTON_SELECTOR);
+export const clickShortcutDeleteButton =
+ async (index: number, devToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
+ const deleteButtons = await devToolsPage.$$(DELETE_BUTTON_SELECTOR);
if (deleteButtons.length <= index) {
assert.fail(`shortcut delete button #${index} not found`);
}
- await clickElement(deleteButtons[index]);
+ await devToolsPage.clickElement(deleteButtons[index]);
};
-export const waitForEmptyShortcutInput = async () => {
- await waitForFunction(async () => {
- const shortcutInputs = await $$(SHORTCUT_INPUT_SELECTOR);
+export const waitForEmptyShortcutInput = async (devToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
+ await devToolsPage.waitForFunction(async () => {
+ const shortcutInputs = await devToolsPage.$$(SHORTCUT_INPUT_SELECTOR);
const shortcutInputValues = await Promise.all(shortcutInputs.map(input => input.getProperty('value')));
const shortcutInputValueStrings =
await Promise.all(shortcutInputValues.map(value => value ? value.jsonValue() : {}));
@@ -158,7 +156,7 @@
});
};
-export const waitForVSCodeShortcutPreset = async () => {
+export const waitForVSCodeShortcutPreset = async (devToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
// wait for a shortcut that vsCode has but the default preset does not
- await waitForElementWithTextContent(VS_CODE_SHORTCUTS_SHORTCUTS.join(''));
+ await devToolsPage.waitForElementWithTextContent(VS_CODE_SHORTCUTS_SHORTCUTS.join(''));
};
diff --git a/test/e2e/lighthouse/navigation_test.ts b/test/e2e/lighthouse/navigation_test.ts
index 7872fc7..b41c93e 100644
--- a/test/e2e/lighthouse/navigation_test.ts
+++ b/test/e2e/lighthouse/navigation_test.ts
@@ -171,7 +171,7 @@
const waitForHtml = await interceptNextFileSave();
// For some reason the CDP click command doesn't work here even if the tools menu is open.
- await reportEl.$eval('a[data-action="save-html"]:not(.hidden)', saveHtmlEl => (saveHtmlEl as HTMLElement).click());
+ await reportEl.$eval('a[data-action="save-html"]:not(.hidden)', saveHtmlEl => saveHtmlEl.click());
const htmlContent = await waitForHtml();
const iframeHandle = await renderHtmlInIframe(htmlContent);
diff --git a/test/e2e/settings/shortcut_settings_test.ts b/test/e2e/settings/shortcut_settings_test.ts
deleted file mode 100644
index 0f81db6..0000000
--- a/test/e2e/settings/shortcut_settings_test.ts
+++ /dev/null
@@ -1,273 +0,0 @@
-// Copyright 2020 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import {assert} from 'chai';
-
-import {
- drainFrontendTaskQueue,
- getBrowserAndPages,
- timeout,
- waitFor,
- waitForFunction,
- waitForNoElementsWithTextContent,
-} from '../../shared/helper.js';
-import {getSelectedItemText, QUICK_OPEN_SELECTOR} from '../helpers/quick_open-helpers.js';
-import {openSettingsTab} from '../helpers/settings-helpers.js';
-import {
- ADD_SHORTCUT_LINK_TEXT,
- clickAddShortcutLink,
- clickShortcutCancelButton,
- clickShortcutConfirmButton,
- clickShortcutDeleteButton,
- clickShortcutResetButton,
- CONSOLE_SHORTCUT_DISPLAY_TEXT,
- CONSOLE_SHORTCUT_INPUT_TEXT,
- CONTROL_1_CONTROL_2_CHORD_DISPLAY_TEXT,
- CONTROL_1_CONTROL_2_CHORD_INPUT_TEXT,
- CONTROL_1_CONTROL_2_SHORTCUT_DISPLAY_TEXT,
- CONTROL_1_CONTROL_2_SHORTCUT_INPUTS_TEXT,
- CONTROL_2_SHORTCUT_DISPLAY_TEXT,
- CONTROL_2_SHORTCUT_INPUT_TEXT,
- CONTROL_ALT_C_SHORTCUT_INPUT_TEXT,
- editShortcutListItem,
- selectKeyboardShortcutPreset,
- SHORTCUT_CHORD_TIMEOUT,
- shortcutInputValues,
- shortcutsForAction,
- VS_CODE_PAUSE_SHORTCUTS,
- VS_CODE_SETTINGS_SHORTCUTS,
- VS_CODE_SHORTCUTS_QUICK_OPEN_TEXT,
- VS_CODE_SHORTCUTS_SHORTCUTS,
- waitForEmptyShortcutInput,
- waitForVSCodeShortcutPreset,
-} from '../helpers/settings-shortcuts-helpers.js';
-
-describe('Shortcuts Settings tab', () => {
- it('should update when the shortcuts preset is changed ', async () => {
- await openSettingsTab('Shortcuts');
- await selectKeyboardShortcutPreset('vsCode');
-
- await waitForVSCodeShortcutPreset();
-
- const shortcutsShortcuts = await shortcutsForAction('Show Shortcuts');
- const settingsShortcuts = await shortcutsForAction('Settings');
- const pauseShortcuts = await shortcutsForAction('Pause script execution');
- assert.deepEqual(shortcutsShortcuts, VS_CODE_SHORTCUTS_SHORTCUTS);
- assert.deepEqual(settingsShortcuts, VS_CODE_SETTINGS_SHORTCUTS);
- assert.deepEqual(pauseShortcuts, VS_CODE_PAUSE_SHORTCUTS);
- });
-
- it('should apply new shortcuts when the preset is changed', async () => {
- const {frontend} = getBrowserAndPages();
- await openSettingsTab('Shortcuts');
- await selectKeyboardShortcutPreset('vsCode');
-
- await waitForVSCodeShortcutPreset();
-
- // close the settings dialog
- await frontend.keyboard.press('Escape');
-
- // use a newly-enabled shortcut to open the command menu
- await frontend.keyboard.press('F1');
- await waitFor(QUICK_OPEN_SELECTOR);
-
- // make sure the command menu reflects the new shortcuts
- await frontend.keyboard.type('Show Shortcuts');
- await drainFrontendTaskQueue();
- const shortcutsItemText = await getSelectedItemText();
-
- assert.strictEqual(shortcutsItemText, VS_CODE_SHORTCUTS_QUICK_OPEN_TEXT);
- });
-
- it('should allow users to open the shortcut editor and view the current shortcut', async () => {
- await openSettingsTab('Shortcuts');
- await editShortcutListItem('Toggle Console');
-
- const shortcutInputsText = await shortcutInputValues();
- assert.deepEqual(shortcutInputsText, CONSOLE_SHORTCUT_INPUT_TEXT);
- });
-
- it('should allow users to open the shortcut editor and change and add shortcuts', async () => {
- const {frontend} = getBrowserAndPages();
-
- await openSettingsTab('Shortcuts');
- await editShortcutListItem('Toggle Console');
-
- await frontend.keyboard.down('Control');
- await frontend.keyboard.press('1');
- await frontend.keyboard.up('Control');
-
- await clickAddShortcutLink();
- await waitForEmptyShortcutInput();
- await frontend.keyboard.down('Control');
- await frontend.keyboard.press('2');
- await frontend.keyboard.up('Control');
-
- const shortcutInputsText = await shortcutInputValues();
- assert.deepEqual(shortcutInputsText, CONTROL_1_CONTROL_2_SHORTCUT_INPUTS_TEXT);
- await clickShortcutConfirmButton();
- await waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
-
- const shortcuts = await shortcutsForAction('Toggle Console');
- assert.deepEqual(shortcuts, CONTROL_1_CONTROL_2_SHORTCUT_DISPLAY_TEXT);
- });
-
- it('should allow users to open shortcut editor and change and reset shortcuts', async () => {
- const {frontend} = getBrowserAndPages();
-
- await openSettingsTab('Shortcuts');
- const defaultShortcuts = await shortcutsForAction('Start recording events');
-
- await editShortcutListItem('Start recording events');
-
- await frontend.keyboard.down('Control');
- await frontend.keyboard.press('1');
- await frontend.keyboard.up('Control');
-
- await clickAddShortcutLink();
- await waitForEmptyShortcutInput();
- await frontend.keyboard.down('Control');
- await frontend.keyboard.press('2');
- await frontend.keyboard.up('Control');
-
- await clickShortcutConfirmButton();
- await waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
-
- const modifiedShortcuts = await shortcutsForAction('Start recording events');
- assert.deepEqual(modifiedShortcuts, CONTROL_1_CONTROL_2_SHORTCUT_DISPLAY_TEXT);
-
- await editShortcutListItem('Start recording events');
- await clickShortcutResetButton();
-
- await clickShortcutConfirmButton();
- await waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
-
- const shortcuts = await shortcutsForAction('Start recording events');
- assert.deepEqual(shortcuts, defaultShortcuts, 'Default shortcuts weren\'t restored correctly');
- });
-
- it('should allow users to open the shortcut editor and delete and reset shortcuts', async () => {
- const {frontend} = getBrowserAndPages();
-
- await openSettingsTab('Shortcuts');
- await editShortcutListItem('Toggle Console');
-
- await frontend.keyboard.down('Control');
- await frontend.keyboard.press('1');
- await frontend.keyboard.up('Control');
-
- await clickAddShortcutLink();
- await waitForEmptyShortcutInput();
- await frontend.keyboard.down('Control');
- await frontend.keyboard.press('2');
- await frontend.keyboard.up('Control');
-
- const shortcutInputsText = await shortcutInputValues();
- assert.deepEqual(shortcutInputsText, CONTROL_1_CONTROL_2_SHORTCUT_INPUTS_TEXT);
-
- await clickShortcutDeleteButton(0);
- let shortcutInputTextAfterDeletion;
- await waitForFunction(async () => {
- shortcutInputTextAfterDeletion = await shortcutInputValues();
- return shortcutInputTextAfterDeletion.length === 1;
- });
- assert.deepEqual(shortcutInputTextAfterDeletion, CONTROL_2_SHORTCUT_INPUT_TEXT);
-
- await clickShortcutResetButton();
- const shortcutInputTextAfterReset = await shortcutInputValues();
- assert.deepEqual(shortcutInputTextAfterReset, CONSOLE_SHORTCUT_INPUT_TEXT);
-
- await clickShortcutConfirmButton();
- await waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
-
- const shortcuts = await shortcutsForAction('Toggle Console');
- assert.deepEqual(shortcuts, CONSOLE_SHORTCUT_DISPLAY_TEXT);
- });
-
- it('should allow users to cancel an edit and discard their changes to shortcuts', async () => {
- const {frontend} = getBrowserAndPages();
-
- await openSettingsTab('Shortcuts');
- await editShortcutListItem('Toggle Console');
-
- await frontend.keyboard.down('Control');
- await frontend.keyboard.press('1');
- await frontend.keyboard.up('Control');
-
- await clickAddShortcutLink();
- await waitForEmptyShortcutInput();
- await frontend.keyboard.down('Control');
- await frontend.keyboard.press('2');
- await frontend.keyboard.up('Control');
-
- const shortcutInputsText = await shortcutInputValues();
- assert.deepEqual(shortcutInputsText, CONTROL_1_CONTROL_2_SHORTCUT_INPUTS_TEXT);
- await clickShortcutCancelButton();
- await waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
-
- const shortcuts = await shortcutsForAction('Toggle Console');
- assert.deepEqual(shortcuts, CONSOLE_SHORTCUT_DISPLAY_TEXT);
- });
-
- it('should allow users to set a multi-keypress shortcut (chord)', async () => {
- const {frontend} = getBrowserAndPages();
-
- await openSettingsTab('Shortcuts');
- await editShortcutListItem('Toggle Console');
-
- await frontend.keyboard.down('Control');
- await frontend.keyboard.press('1');
- await frontend.keyboard.up('Control');
- await frontend.keyboard.down('Control');
- await frontend.keyboard.press('2');
- await frontend.keyboard.up('Control');
-
- const shortcutInputsText = await shortcutInputValues();
- assert.deepEqual(shortcutInputsText, CONTROL_1_CONTROL_2_CHORD_INPUT_TEXT);
- await clickShortcutConfirmButton();
- await waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
-
- const shortcuts = await shortcutsForAction('Toggle Console');
- assert.deepEqual(shortcuts, CONTROL_1_CONTROL_2_CHORD_DISPLAY_TEXT);
- });
-
- it('should display the physical key that is pressed rather than special characters', async () => {
- const {frontend} = getBrowserAndPages();
-
- await openSettingsTab('Shortcuts');
- await editShortcutListItem('Toggle Console');
-
- await frontend.keyboard.down('Control');
- await frontend.keyboard.down('Alt');
- await frontend.keyboard.press('c');
- await frontend.keyboard.up('Alt');
- await frontend.keyboard.up('Control');
-
- const shortcutInputsText = await shortcutInputValues();
- assert.deepEqual(shortcutInputsText, CONTROL_ALT_C_SHORTCUT_INPUT_TEXT);
- });
-
- it('should allow users to set a new shortcut after the chord timeout', async function() {
- const {frontend} = getBrowserAndPages();
-
- await openSettingsTab('Shortcuts');
- await editShortcutListItem('Toggle Console');
-
- await frontend.keyboard.down('Control');
- await frontend.keyboard.press('1');
- await frontend.keyboard.up('Control');
- await timeout(SHORTCUT_CHORD_TIMEOUT * 1.2);
- await frontend.keyboard.down('Control');
- await frontend.keyboard.press('2');
- await frontend.keyboard.up('Control');
-
- const shortcutInputsText = await shortcutInputValues();
- assert.deepEqual(shortcutInputsText, CONTROL_2_SHORTCUT_INPUT_TEXT);
- await clickShortcutConfirmButton();
- await waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
-
- const shortcuts = await shortcutsForAction('Toggle Console');
- assert.deepEqual(shortcuts, CONTROL_2_SHORTCUT_DISPLAY_TEXT);
- });
-});
diff --git a/test/e2e_non_hosted/BUILD.gn b/test/e2e_non_hosted/BUILD.gn
index 3725bf0..97ff69c 100644
--- a/test/e2e_non_hosted/BUILD.gn
+++ b/test/e2e_non_hosted/BUILD.gn
@@ -39,6 +39,7 @@
"search",
"security",
"sensors",
+ "settings",
"snippets",
"sources",
"targets",
diff --git a/test/e2e/settings/BUILD.gn b/test/e2e_non_hosted/settings/BUILD.gn
similarity index 84%
rename from test/e2e/settings/BUILD.gn
rename to test/e2e_non_hosted/settings/BUILD.gn
index e71eafb..aa2a8b9 100644
--- a/test/e2e/settings/BUILD.gn
+++ b/test/e2e_non_hosted/settings/BUILD.gn
@@ -4,11 +4,11 @@
import("../../../scripts/build/typescript/typescript.gni")
-node_ts_library("settings") {
+ts_e2e_library("settings") {
sources = [ "shortcut_settings_test.ts" ]
deps = [
+ "../../e2e/helpers",
"../../shared",
- "../helpers",
]
}
diff --git a/test/e2e_non_hosted/settings/shortcut_settings_test.ts b/test/e2e_non_hosted/settings/shortcut_settings_test.ts
new file mode 100644
index 0000000..df0f345
--- /dev/null
+++ b/test/e2e_non_hosted/settings/shortcut_settings_test.ts
@@ -0,0 +1,250 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import {assert} from 'chai';
+
+import {getSelectedItemText, QUICK_OPEN_SELECTOR} from '../../e2e/helpers/quick_open-helpers.js';
+import {openSettingsTab} from '../../e2e/helpers/settings-helpers.js';
+import {
+ ADD_SHORTCUT_LINK_TEXT,
+ clickAddShortcutLink,
+ clickShortcutCancelButton,
+ clickShortcutConfirmButton,
+ clickShortcutDeleteButton,
+ clickShortcutResetButton,
+ CONSOLE_SHORTCUT_DISPLAY_TEXT,
+ CONSOLE_SHORTCUT_INPUT_TEXT,
+ CONTROL_1_CONTROL_2_CHORD_DISPLAY_TEXT,
+ CONTROL_1_CONTROL_2_CHORD_INPUT_TEXT,
+ CONTROL_1_CONTROL_2_SHORTCUT_DISPLAY_TEXT,
+ CONTROL_1_CONTROL_2_SHORTCUT_INPUTS_TEXT,
+ CONTROL_2_SHORTCUT_DISPLAY_TEXT,
+ CONTROL_2_SHORTCUT_INPUT_TEXT,
+ CONTROL_ALT_C_SHORTCUT_INPUT_TEXT,
+ editShortcutListItem,
+ selectKeyboardShortcutPreset,
+ SHORTCUT_CHORD_TIMEOUT,
+ shortcutInputValues,
+ shortcutsForAction,
+ VS_CODE_PAUSE_SHORTCUTS,
+ VS_CODE_SETTINGS_SHORTCUTS,
+ VS_CODE_SHORTCUTS_QUICK_OPEN_TEXT,
+ VS_CODE_SHORTCUTS_SHORTCUTS,
+ waitForEmptyShortcutInput,
+ waitForVSCodeShortcutPreset,
+} from '../../e2e/helpers/settings-shortcuts-helpers.js';
+
+describe('Shortcuts Settings tab', () => {
+ it('should update when the shortcuts preset is changed ', async ({devToolsPage}) => {
+ await openSettingsTab('Shortcuts', devToolsPage);
+ await selectKeyboardShortcutPreset('vsCode', devToolsPage);
+
+ await waitForVSCodeShortcutPreset(devToolsPage);
+
+ const shortcutsShortcuts = await shortcutsForAction('Show Shortcuts', devToolsPage);
+ const settingsShortcuts = await shortcutsForAction('Settings', devToolsPage);
+ const pauseShortcuts = await shortcutsForAction('Pause script execution', devToolsPage);
+ assert.deepEqual(shortcutsShortcuts, VS_CODE_SHORTCUTS_SHORTCUTS);
+ assert.deepEqual(settingsShortcuts, VS_CODE_SETTINGS_SHORTCUTS);
+ assert.deepEqual(pauseShortcuts, VS_CODE_PAUSE_SHORTCUTS);
+ });
+
+ it('should apply new shortcuts when the preset is changed', async ({devToolsPage}) => {
+ await openSettingsTab('Shortcuts', devToolsPage);
+ await selectKeyboardShortcutPreset('vsCode', devToolsPage);
+
+ await waitForVSCodeShortcutPreset(devToolsPage);
+
+ // close the settings dialog
+ await devToolsPage.page.keyboard.press('Escape');
+
+ // use a newly-enabled shortcut to open the command menu
+ await devToolsPage.page.keyboard.press('F1');
+ await devToolsPage.waitFor(QUICK_OPEN_SELECTOR);
+
+ // make sure the command menu reflects the new shortcuts
+ await devToolsPage.page.keyboard.type('Show Shortcuts');
+ await devToolsPage.drainTaskQueue();
+ const shortcutsItemText = await getSelectedItemText(devToolsPage);
+
+ assert.strictEqual(shortcutsItemText, VS_CODE_SHORTCUTS_QUICK_OPEN_TEXT);
+ });
+
+ it('should allow users to open the shortcut editor and view the current shortcut', async ({devToolsPage}) => {
+ await openSettingsTab('Shortcuts', devToolsPage);
+ await editShortcutListItem('Toggle Console', devToolsPage);
+
+ const shortcutInputsText = await shortcutInputValues(devToolsPage);
+ assert.deepEqual(shortcutInputsText, CONSOLE_SHORTCUT_INPUT_TEXT);
+ });
+
+ it('should allow users to open the shortcut editor and change and add shortcuts', async ({devToolsPage}) => {
+ await openSettingsTab('Shortcuts', devToolsPage);
+ await editShortcutListItem('Toggle Console', devToolsPage);
+
+ await devToolsPage.page.keyboard.down('Control');
+ await devToolsPage.page.keyboard.press('1');
+ await devToolsPage.page.keyboard.up('Control');
+
+ await clickAddShortcutLink(devToolsPage);
+ await waitForEmptyShortcutInput(devToolsPage);
+ await devToolsPage.page.keyboard.down('Control');
+ await devToolsPage.page.keyboard.press('2');
+ await devToolsPage.page.keyboard.up('Control');
+
+ const shortcutInputsText = await shortcutInputValues(devToolsPage);
+ assert.deepEqual(shortcutInputsText, CONTROL_1_CONTROL_2_SHORTCUT_INPUTS_TEXT);
+ await clickShortcutConfirmButton(devToolsPage);
+ await devToolsPage.waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
+
+ const shortcuts = await shortcutsForAction('Toggle Console', devToolsPage);
+ assert.deepEqual(shortcuts, CONTROL_1_CONTROL_2_SHORTCUT_DISPLAY_TEXT);
+ });
+
+ it('should allow users to open shortcut editor and change and reset shortcuts', async ({devToolsPage}) => {
+ await openSettingsTab('Shortcuts', devToolsPage);
+ const defaultShortcuts = await shortcutsForAction('Start recording events', devToolsPage);
+
+ await editShortcutListItem('Start recording events', devToolsPage);
+
+ await devToolsPage.page.keyboard.down('Control');
+ await devToolsPage.page.keyboard.press('1');
+ await devToolsPage.page.keyboard.up('Control');
+
+ await clickAddShortcutLink(devToolsPage);
+ await waitForEmptyShortcutInput(devToolsPage);
+ await devToolsPage.page.keyboard.down('Control');
+ await devToolsPage.page.keyboard.press('2');
+ await devToolsPage.page.keyboard.up('Control');
+
+ await clickShortcutConfirmButton(devToolsPage);
+ await devToolsPage.waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
+
+ const modifiedShortcuts = await shortcutsForAction('Start recording events', devToolsPage);
+ assert.deepEqual(modifiedShortcuts, CONTROL_1_CONTROL_2_SHORTCUT_DISPLAY_TEXT);
+
+ await editShortcutListItem('Start recording events', devToolsPage);
+ await clickShortcutResetButton(devToolsPage);
+
+ await clickShortcutConfirmButton(devToolsPage);
+ await devToolsPage.waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
+
+ const shortcuts = await shortcutsForAction('Start recording events', devToolsPage);
+ assert.deepEqual(shortcuts, defaultShortcuts, 'Default shortcuts weren\'t restored correctly');
+ });
+
+ it('should allow users to open the shortcut editor and delete and reset shortcuts', async ({devToolsPage}) => {
+ await openSettingsTab('Shortcuts', devToolsPage);
+ await editShortcutListItem('Toggle Console', devToolsPage);
+
+ await devToolsPage.page.keyboard.down('Control');
+ await devToolsPage.page.keyboard.press('1');
+ await devToolsPage.page.keyboard.up('Control');
+
+ await clickAddShortcutLink(devToolsPage);
+ await waitForEmptyShortcutInput(devToolsPage);
+ await devToolsPage.page.keyboard.down('Control');
+ await devToolsPage.page.keyboard.press('2');
+ await devToolsPage.page.keyboard.up('Control');
+
+ const shortcutInputsText = await shortcutInputValues(devToolsPage);
+ assert.deepEqual(shortcutInputsText, CONTROL_1_CONTROL_2_SHORTCUT_INPUTS_TEXT);
+
+ await clickShortcutDeleteButton(0, devToolsPage);
+ let shortcutInputTextAfterDeletion;
+ await devToolsPage.waitForFunction(async () => {
+ shortcutInputTextAfterDeletion = await shortcutInputValues(devToolsPage);
+ return shortcutInputTextAfterDeletion.length === 1;
+ });
+ assert.deepEqual(shortcutInputTextAfterDeletion, CONTROL_2_SHORTCUT_INPUT_TEXT);
+
+ await clickShortcutResetButton(devToolsPage);
+ const shortcutInputTextAfterReset = await shortcutInputValues(devToolsPage);
+ assert.deepEqual(shortcutInputTextAfterReset, CONSOLE_SHORTCUT_INPUT_TEXT);
+
+ await clickShortcutConfirmButton(devToolsPage);
+ await devToolsPage.waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
+
+ const shortcuts = await shortcutsForAction('Toggle Console', devToolsPage);
+ assert.deepEqual(shortcuts, CONSOLE_SHORTCUT_DISPLAY_TEXT);
+ });
+
+ it('should allow users to cancel an edit and discard their changes to shortcuts', async ({devToolsPage}) => {
+ await openSettingsTab('Shortcuts', devToolsPage);
+ await editShortcutListItem('Toggle Console', devToolsPage);
+
+ await devToolsPage.page.keyboard.down('Control');
+ await devToolsPage.page.keyboard.press('1');
+ await devToolsPage.page.keyboard.up('Control');
+
+ await clickAddShortcutLink(devToolsPage);
+ await waitForEmptyShortcutInput(devToolsPage);
+ await devToolsPage.page.keyboard.down('Control');
+ await devToolsPage.page.keyboard.press('2');
+ await devToolsPage.page.keyboard.up('Control');
+
+ const shortcutInputsText = await shortcutInputValues(devToolsPage);
+ assert.deepEqual(shortcutInputsText, CONTROL_1_CONTROL_2_SHORTCUT_INPUTS_TEXT);
+ await clickShortcutCancelButton(devToolsPage);
+ await devToolsPage.waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
+
+ const shortcuts = await shortcutsForAction('Toggle Console', devToolsPage);
+ assert.deepEqual(shortcuts, CONSOLE_SHORTCUT_DISPLAY_TEXT);
+ });
+
+ it('should allow users to set a multi-keypress shortcut (chord)', async ({devToolsPage}) => {
+ await openSettingsTab('Shortcuts', devToolsPage);
+ await editShortcutListItem('Toggle Console', devToolsPage);
+
+ await devToolsPage.page.keyboard.down('Control');
+ await devToolsPage.page.keyboard.press('1');
+ await devToolsPage.page.keyboard.up('Control');
+ await devToolsPage.page.keyboard.down('Control');
+ await devToolsPage.page.keyboard.press('2');
+ await devToolsPage.page.keyboard.up('Control');
+
+ const shortcutInputsText = await shortcutInputValues(devToolsPage);
+ assert.deepEqual(shortcutInputsText, CONTROL_1_CONTROL_2_CHORD_INPUT_TEXT);
+ await clickShortcutConfirmButton(devToolsPage);
+ await devToolsPage.waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
+
+ const shortcuts = await shortcutsForAction('Toggle Console', devToolsPage);
+ assert.deepEqual(shortcuts, CONTROL_1_CONTROL_2_CHORD_DISPLAY_TEXT);
+ });
+
+ it('should display the physical key that is pressed rather than special characters', async ({devToolsPage}) => {
+ await openSettingsTab('Shortcuts', devToolsPage);
+ await editShortcutListItem('Toggle Console', devToolsPage);
+
+ await devToolsPage.page.keyboard.down('Control');
+ await devToolsPage.page.keyboard.down('Alt');
+ await devToolsPage.page.keyboard.press('c');
+ await devToolsPage.page.keyboard.up('Alt');
+ await devToolsPage.page.keyboard.up('Control');
+
+ const shortcutInputsText = await shortcutInputValues(devToolsPage);
+ assert.deepEqual(shortcutInputsText, CONTROL_ALT_C_SHORTCUT_INPUT_TEXT);
+ });
+
+ it('should allow users to set a new shortcut after the chord timeout', async ({devToolsPage}) => {
+ await openSettingsTab('Shortcuts', devToolsPage);
+ await editShortcutListItem('Toggle Console', devToolsPage);
+
+ await devToolsPage.page.keyboard.down('Control');
+ await devToolsPage.page.keyboard.press('1');
+ await devToolsPage.page.keyboard.up('Control');
+ await devToolsPage.timeout(SHORTCUT_CHORD_TIMEOUT * 1.2);
+ await devToolsPage.page.keyboard.down('Control');
+ await devToolsPage.page.keyboard.press('2');
+ await devToolsPage.page.keyboard.up('Control');
+
+ const shortcutInputsText = await shortcutInputValues(devToolsPage);
+ assert.deepEqual(shortcutInputsText, CONTROL_2_SHORTCUT_INPUT_TEXT);
+ await clickShortcutConfirmButton(devToolsPage);
+ await devToolsPage.waitForNoElementsWithTextContent(ADD_SHORTCUT_LINK_TEXT);
+
+ const shortcuts = await shortcutsForAction('Toggle Console', devToolsPage);
+ assert.deepEqual(shortcuts, CONTROL_2_SHORTCUT_DISPLAY_TEXT);
+ });
+});