blob: bde4df49f7256e59aacd515c09b2ae640c8bca81 [file]
// 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 {
assertSubMenuItemsText,
assertTopLevelContextMenuItemsText,
findSubMenuEntryItem,
} from '../../e2e/helpers/context-menu-helpers.js';
import {getDataGrid, getDataGridController, getInnerTextOfDataGridCells} from '../../e2e/helpers/datagrid-helpers.js';
import {$, $$, click, waitFor, waitForFunction} from '../../shared/helper.js';
import {describe, it} from '../../shared/mocha-extensions.js';
import {loadComponentDocExample, preloadForCodeCoverage} from '../helpers/shared.js';
async function activateContextMenuOnColumnHeader(headerText: string) {
const dataGridController = await getDataGridController();
const dataGrid = await getDataGrid(dataGridController);
return await click(`pierceShadowText/${headerText}`, {
root: dataGrid,
clickOptions: {
button: 'right',
},
});
}
async function activateContextMenuOnBodyCell(cellText: string) {
const dataGridController = await getDataGridController();
const dataGrid = await getDataGrid(dataGridController);
return await click(`pierceShadowText/${cellText}`, {
root: dataGrid,
clickOptions: {
button: 'right',
},
});
}
describe('data grid controller', () => {
preloadForCodeCoverage('data_grid_controller/basic.html');
// Flaky
it.skip('[crbug.com/1502498] lets the user right click on a header to show the context menu', async () => {
await loadComponentDocExample('data_grid_controller/basic.html');
await activateContextMenuOnColumnHeader('Key');
const contextMenu = await $('.soft-context-menu');
assert.isNotNull(contextMenu);
await assertTopLevelContextMenuItemsText(['Value', 'Sort By', 'Reset Columns']);
});
it('lists the hideable columns in the context menu and lets the user click to toggle the visibility', async () => {
await loadComponentDocExample('data_grid_controller/basic.html');
await activateContextMenuOnColumnHeader('Key');
const contextMenu = await $('.soft-context-menu');
assert.isNotNull(contextMenu);
await click('[aria-label="Value, checked"]');
const dataGrid = await getDataGrid();
await waitForFunction(async () => {
const hiddenCells = await $$('tbody td.hidden', dataGrid);
return hiddenCells.length === 3;
}, undefined, '3 hidden cells in the data-grid');
await waitForFunction(async () => {
const renderedText = await getInnerTextOfDataGridCells(dataGrid, 3);
return JSON.stringify([
['Bravo'],
['Alpha'],
['Charlie'],
]) === JSON.stringify(renderedText);
});
});
it('lists sortable columns in a sub-menu and lets the user click to sort', async () => {
await loadComponentDocExample('data_grid_controller/basic.html');
await activateContextMenuOnColumnHeader('Key');
const contextMenu = await $('.soft-context-menu');
if (!contextMenu) {
assert.fail('Could not find context menu.');
}
const sortBy = await findSubMenuEntryItem('Sort By');
await sortBy.hover();
const keyColumnSort = await waitFor('[aria-label="Key"]');
await keyColumnSort.click();
const dataGrid = await getDataGrid();
await waitForFunction(async () => {
const renderedText = await getInnerTextOfDataGridCells(dataGrid, 3);
return JSON.stringify([
['Alpha', 'Letter A'],
['Bravo', 'Letter B'],
['Charlie', 'Letter C'],
]) === JSON.stringify(renderedText);
});
});
it('lets the user click on a column header to sort it', async () => {
await loadComponentDocExample('data_grid_controller/basic.html');
const dataGrid = await getDataGrid();
// Wait until 3 rows have appeared.
await getInnerTextOfDataGridCells(dataGrid, 3);
// Sort and wait for the first row to be as expected.
await click('th[data-grid-header-cell="key"]');
await waitForFunction(async () => {
const renderedText = await getInnerTextOfDataGridCells(dataGrid, 3);
return JSON.stringify([
['Alpha', 'Letter A'],
['Bravo', 'Letter B'],
['Charlie', 'Letter C'],
]) === JSON.stringify(renderedText);
});
});
it('lists sort by and header options when right clicking on a body row', async () => {
await loadComponentDocExample('data_grid_controller/basic.html');
await activateContextMenuOnBodyCell('Bravo');
await assertTopLevelContextMenuItemsText(['Sort By', 'Header Options']);
await assertSubMenuItemsText('Header Options', ['Value', 'Reset Columns']);
await assertSubMenuItemsText('Sort By', ['Key', 'Value']);
});
it('allows the parent to add custom context menu items', async () => {
await loadComponentDocExample('data_grid_controller/custom-context-menu-items.html');
await activateContextMenuOnBodyCell('Bravo');
await assertTopLevelContextMenuItemsText(['Sort By', 'Header Options', 'Hello World']);
});
});