blob: ddcd506a254549797b22d4d118e8b060eea40847 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {
CONSOLE_TAB_SELECTOR,
CONSOLE_TOOLTIP_SELECTOR,
focusConsolePrompt,
} from '../helpers/console-helpers.js';
import {openSourcesPanel} from '../helpers/sources-helpers.js';
import type {DevToolsPage} from '../shared/frontend-helper.js';
/** See the comments in console-repl-mode_test to see why this is necessary. **/
async function autocompleteTest(prefix: string, suffix: string, devToolsPage: DevToolsPage) {
await devToolsPage.typeText(
'let object = {aaa:1, bbb:2}; let map = new Map([["somekey", 5], ["some other key", 42]])');
await devToolsPage.page.keyboard.press('Enter');
// Wait for the console to be usable again.
await devToolsPage.waitForFunction(() => {
return devToolsPage.evaluate(() => document.querySelectorAll('.console-user-command-result').length === 1);
});
const appearPromise = devToolsPage.waitFor(CONSOLE_TOOLTIP_SELECTOR);
await devToolsPage.typeText(prefix);
await appearPromise;
const disappearPromise = devToolsPage.waitForNone(CONSOLE_TOOLTIP_SELECTOR);
await devToolsPage.page.keyboard.press('Escape');
await disappearPromise;
const appearPromise2 = devToolsPage.waitFor(CONSOLE_TOOLTIP_SELECTOR);
await devToolsPage.typeText(suffix);
await appearPromise2;
// The first auto-suggest result is evaluated and generates a preview, which
// we wait for so that we don't end the test/navigate with an open
// Runtime.evaluate CDP request, which causes an error. crbug.com/1134579.
await devToolsPage.waitFor('.console-eager-inner-preview > span');
}
describe('The Console Tab', () => {
async function beforeEach(devToolsPage: DevToolsPage) {
await devToolsPage.click(CONSOLE_TAB_SELECTOR);
await focusConsolePrompt(devToolsPage);
}
async function afterEach(devToolsPage: DevToolsPage) {
// Make sure we don't close DevTools while there is an outstanding
// Runtime.evaluate CDP request, which causes an error. crbug.com/1134579.
await openSourcesPanel(devToolsPage);
}
it('triggers autocompletion for `object.`', async ({devToolsPage}) => {
await beforeEach(devToolsPage);
await autocompleteTest('object', '.', devToolsPage);
await afterEach(devToolsPage);
});
it('triggers autocompletion for `object?.`', async ({devToolsPage}) => {
await beforeEach(devToolsPage);
await autocompleteTest('object', '?.', devToolsPage);
await afterEach(devToolsPage);
});
it('triggers autocompletion for `object[`', async ({devToolsPage}) => {
await beforeEach(devToolsPage);
await autocompleteTest('object', '[', devToolsPage);
await afterEach(devToolsPage);
});
it('triggers autocompletion for `map.get(`', async ({devToolsPage}) => {
await beforeEach(devToolsPage);
await autocompleteTest('map.get', '(', devToolsPage);
await afterEach(devToolsPage);
});
it('triggers autocompletion for `foo.#my`', async ({devToolsPage}) => {
await beforeEach(devToolsPage);
await devToolsPage.typeText('class Foo {#myPrivateField = 1}; let foo = new Foo');
await devToolsPage.page.keyboard.press('Enter');
// Wait for the console to be usable again.
await devToolsPage.waitForFunction(() => {
return devToolsPage.evaluate(() => document.querySelectorAll('.console-user-command-result').length === 1);
});
const appearPromise = devToolsPage.waitFor(CONSOLE_TOOLTIP_SELECTOR);
await devToolsPage.typeText('foo');
await appearPromise;
const disappearPromise = devToolsPage.waitForNone(CONSOLE_TOOLTIP_SELECTOR);
await devToolsPage.page.keyboard.press('Escape');
await disappearPromise;
const appearPromise2 = devToolsPage.waitFor(CONSOLE_TOOLTIP_SELECTOR);
await devToolsPage.typeText('.#my');
await appearPromise2;
await afterEach(devToolsPage);
});
});