2023-06-27 06:11:08 +00:00
|
|
|
import { assert } from 'mocha-webdriver';
|
|
|
|
import { $, gu, test } from 'test/nbrowser/gristUtil-nbrowser';
|
|
|
|
|
|
|
|
describe('SavePosition.ntest', function() {
|
|
|
|
const cleanup = test.setupTestSuite(this);
|
2023-10-11 21:03:02 +00:00
|
|
|
const clipboard = gu.getLockableClipboard();
|
2023-06-27 06:11:08 +00:00
|
|
|
|
|
|
|
before(async function() {
|
|
|
|
this.timeout(Math.max(this.timeout(), 20000)); // Long-running test, unfortunately
|
|
|
|
await gu.supportOldTimeyTestCode();
|
|
|
|
await gu.useFixtureDoc(cleanup, "World.grist", true);
|
|
|
|
});
|
|
|
|
|
|
|
|
afterEach(function() {
|
|
|
|
return gu.checkForErrors();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should maintain cursor and scroll positions when switching between views', async function() {
|
|
|
|
var recordSection = await gu.actions.viewSection('City');
|
|
|
|
var cardSection = await gu.actions.viewSection('City Card List');
|
|
|
|
var cardScrollPane = $('.detailview_scroll_pane');
|
|
|
|
|
|
|
|
// Set up scroll linking between the two sections.
|
|
|
|
await gu.openSidePane('view');
|
|
|
|
await $('.test-config-data').click();
|
|
|
|
|
|
|
|
// Connect CITY -> CITY Card List
|
2023-11-27 12:45:38 +00:00
|
|
|
await gu.actions.viewSection('CITY Card List').selectSection();
|
2023-06-27 06:11:08 +00:00
|
|
|
await $('.test-right-select-by').click();
|
|
|
|
await $('.test-select-row:contains(CITY)').click();
|
|
|
|
await gu.waitForServer();
|
|
|
|
await gu.closeSidePane();
|
|
|
|
|
|
|
|
await recordSection.selectSection();
|
|
|
|
|
|
|
|
// Click on the District cell with row number 8.
|
|
|
|
await gu.clickCellRC(7, 2);
|
|
|
|
// Scroll to the Population cell with row number 22.
|
|
|
|
await gu.getCellRC(21, 3).scrollIntoView();
|
|
|
|
|
|
|
|
// Switch to card section, make a cursor selection and scroll selection.
|
|
|
|
await cardSection.selectSection();
|
|
|
|
|
|
|
|
var desiredCard = await cardScrollPane.findOldTimey('.g_record_detail .detail_row_num:contains(3150)').parent().elem();
|
|
|
|
var desiredField = await desiredCard.findOldTimey('.g_record_detail_label:contains(Country)').parent().parent();
|
|
|
|
await desiredField.click();
|
|
|
|
await cardScrollPane.findOldTimey('.g_record_detail .detail_row_num:contains(3142)').scrollIntoView();
|
|
|
|
|
|
|
|
// Switch tabs back and forth.
|
|
|
|
await gu.actions.selectTabView('Country');
|
|
|
|
await gu.actions.selectTabView('City');
|
|
|
|
|
|
|
|
// Assert that the cursor position in the card section is the same.
|
|
|
|
desiredCard = await cardScrollPane.findOldTimey('.g_record_detail .detail_row_num:contains(3150)').parent().elem();
|
|
|
|
desiredField = await desiredCard.findOldTimey('.g_record_detail_label:contains(Country)').parent().parent();
|
|
|
|
await assert.hasClass(desiredField.find('.selected_cursor'), 'active_cursor');
|
|
|
|
|
|
|
|
// Assert that the element that was scrolled into view is still displayed.
|
|
|
|
await assert.isDisplayed(cardScrollPane.findOldTimey('.g_record_detail .detail_row_num:contains(3142)'));
|
|
|
|
|
|
|
|
await recordSection.selectSection();
|
|
|
|
|
|
|
|
// Assert that the scroll position in the grid section is unchanged.
|
|
|
|
await assert.isDisplayed(gu.getCellRC(21, 3));
|
|
|
|
|
|
|
|
// Assert that the cursor position in the grid section is the same.
|
|
|
|
await gu.scrollActiveViewTop();
|
|
|
|
await gu.getCellRC(0, 0).wait(assert.isDisplayed);
|
|
|
|
assert.deepEqual(await gu.getCursorPosition(), { rowNum: 8, col: 2 });
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should maintain cursor with linked sections', async function() {
|
|
|
|
// Switch to view 'Country' (which has several linked sections).
|
|
|
|
await gu.actions.selectTabView('Country');
|
|
|
|
|
|
|
|
// Select a position to the cursor in each section.
|
|
|
|
await gu.getCell({col: 1, rowNum: 9, section: 'Country'}).click();
|
|
|
|
await gu.getCell({col: 0, rowNum: 6, section: 'City'}).click();
|
|
|
|
await gu.getCell({col: 2, rowNum: 2, section: 'CountryLanguage'}).click();
|
|
|
|
await gu.getDetailCell({col: 'IndepYear', rowNum: 1, section: 'Country Card List'}).click();
|
|
|
|
|
|
|
|
// Switch tabs back and forth.
|
|
|
|
await gu.actions.selectTabView('City');
|
|
|
|
await gu.actions.selectTabView('Country');
|
|
|
|
|
|
|
|
// Verify the cursor positions.
|
|
|
|
assert.deepEqual(await gu.getCursorPosition('Country'),
|
|
|
|
{rowNum: 9, col: 1});
|
|
|
|
assert.deepEqual(await gu.getCursorPosition('City'),
|
|
|
|
{rowNum: 6, col: 0});
|
|
|
|
assert.deepEqual(await gu.getCursorPosition('CountryLanguage'),
|
|
|
|
{rowNum: 2, col: 2});
|
|
|
|
assert.deepEqual(await gu.getCursorPosition('Country Card List'),
|
|
|
|
{rowNum: 1, col: 'IndepYear'});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should paste into saved position', async function() {
|
|
|
|
await gu.getCell({col: 1, rowNum: 9, section: 'Country'}).click();
|
|
|
|
await gu.actions.selectTabView('City');
|
2023-10-11 21:03:02 +00:00
|
|
|
await clipboard.lockAndPerform(async (cb) => {
|
|
|
|
await cb.copy();
|
|
|
|
await gu.actions.selectTabView('Country');
|
|
|
|
await cb.paste();
|
|
|
|
});
|
2023-06-27 06:11:08 +00:00
|
|
|
await gu.waitForServer();
|
|
|
|
assert.deepEqual(await gu.getVisibleGridCells(1, [8, 9, 10]),
|
|
|
|
['United Arab Emirates', 'Pará', 'Armenia']);
|
|
|
|
});
|
|
|
|
});
|