Summary: Choice/Reference List editor wasn't clearing itself when it received an empty string. It led to a bug on the Card widget where pressing those keys resulted in the same behavior as pressing Enter - it just opened the editor. Grid view has it's own implementation for those keys, so it wasn't affected. Test Plan: Added new test. Reviewers: paulfitz Reviewed By: paulfitz Differential Revision: https://phab.getgrist.com/D3908pull/526/head
parent
dad41b2567
commit
c592691e31
@ -0,0 +1,123 @@
|
||||
import {assert, Key} from 'mocha-webdriver';
|
||||
import * as gu from 'test/nbrowser/gristUtils';
|
||||
import {setupTestSuite} from 'test/nbrowser/testUtils';
|
||||
|
||||
describe('TokenField', function() {
|
||||
this.timeout(20000);
|
||||
const cleanup = setupTestSuite();
|
||||
let session: gu.Session;
|
||||
|
||||
before(async function() {
|
||||
session = await gu.session().login();
|
||||
await session.tempDoc(cleanup, "Favorite_Films.grist");
|
||||
await gu.toggleSidePanel('right', 'open');
|
||||
|
||||
// Prepare test table, as a base for following tests.
|
||||
await gu.addNewPage('Table', 'New Table');
|
||||
await gu.sendKeys('one', Key.ENTER);
|
||||
await gu.waitForServer();
|
||||
await gu.sendKeys('two', Key.ENTER);
|
||||
await gu.waitForServer();
|
||||
await gu.sendKeys('three', Key.ENTER);
|
||||
await gu.waitForServer();
|
||||
});
|
||||
|
||||
it('should clear choice list on card view', async function() {
|
||||
// Test for a bug. In Card or Card List widgets, if the cursor is on a Ref List or Choice List field and you
|
||||
// hit Backspace or Delete , the behavior is the same as hitting enter (pulls up list of references/choices to add
|
||||
// one more, does not clear cell).
|
||||
|
||||
// The bug was there because choice list editor and ref list editor didn't handle empty string as an edit value,
|
||||
// which is a signal to clear the value. In a grid view, DELETE and BACKSPACE were handled by the grid itself.
|
||||
|
||||
const revert = await gu.begin();
|
||||
await gu.getCell('A', 1).click();
|
||||
|
||||
// Convert A column to Choice List.
|
||||
await gu.openColumnPanel();
|
||||
await gu.setType('Choice List', {apply: true});
|
||||
|
||||
// Add a second value to the first row.
|
||||
await gu.getCell('A', 1).click();
|
||||
await gu.sendKeys(Key.ENTER);
|
||||
await gu.sendKeys('two', Key.ENTER);
|
||||
await gu.sendKeys(Key.ENTER);
|
||||
await gu.waitForServer();
|
||||
await gu.getCell('A', 1).click();
|
||||
assert.equal(await gu.getCell('A', 1).getText(), 'one\ntwo');
|
||||
|
||||
// Change it to card view.
|
||||
await gu.changeWidget('Card');
|
||||
|
||||
// Test that DELETE opens the editor and clears the value.
|
||||
// Clicking on the cell twice will put it in edit mode, so we will first click other cell.
|
||||
await gu.getDetailCell('B', 1).click();
|
||||
await gu.getDetailCell('A', 1).click();
|
||||
await gu.sendKeys(Key.DELETE);
|
||||
await gu.checkTokenEditor('');
|
||||
await gu.sendKeys(Key.ESCAPE);
|
||||
|
||||
// Now test BACKSPACE.
|
||||
await gu.getDetailCell('B', 1).click();
|
||||
await gu.getDetailCell('A', 1).click();
|
||||
await gu.sendKeys(Key.BACK_SPACE);
|
||||
await gu.checkTokenEditor('');
|
||||
await gu.sendKeys(Key.ESCAPE);
|
||||
|
||||
// Value should still be there.
|
||||
assert.equal(await gu.getDetailCell('A', 1).getText(), 'one\ntwo');
|
||||
// But ENTER works fine, it just opens the editor.
|
||||
await gu.sendKeys(Key.ENTER);
|
||||
await gu.checkTokenEditor('one\ntwo');
|
||||
await gu.sendKeys(Key.ESCAPE);
|
||||
// Any other key also works
|
||||
await gu.sendKeys('a');
|
||||
await gu.checkTokenEditor('a');
|
||||
await gu.sendKeys(Key.ESCAPE);
|
||||
await revert();
|
||||
});
|
||||
|
||||
it('should clear ref list on card view', async function() {
|
||||
await gu.getCell(0, 1).click();
|
||||
await gu.changeBehavior('Clear and reset');
|
||||
// This is an empty column, so no transformation is needed.
|
||||
await gu.setType('Reference List', {apply: false});
|
||||
await gu.waitForServer();
|
||||
await gu.setRefTable('Films');
|
||||
await gu.waitForServer();
|
||||
await gu.setRefShowColumn('Title');
|
||||
await gu.waitForServer();
|
||||
|
||||
// Add two films.
|
||||
await gu.sendKeys(Key.ENTER);
|
||||
await gu.sendKeys('Toy', Key.ENTER);
|
||||
await gu.sendKeys('Alien', Key.ENTER);
|
||||
// Save.
|
||||
await gu.sendKeys(Key.ENTER);
|
||||
await gu.waitForServer();
|
||||
|
||||
// Make sure it works in Grid view.
|
||||
await gu.getCell(0, 1).click();
|
||||
await gu.sendKeys(Key.DELETE);
|
||||
await gu.waitForServer();
|
||||
assert.equal(await gu.getCell(0, 1).getText(), '');
|
||||
await gu.undo();
|
||||
await gu.sendKeys(Key.BACK_SPACE);
|
||||
await gu.waitForServer();
|
||||
assert.equal(await gu.getCell(0, 1).getText(), '');
|
||||
await gu.undo();
|
||||
|
||||
// Now make sure it works in Card view.
|
||||
await gu.changeWidget('Card');
|
||||
assert.equal(await gu.getDetailCell('A', 1).getText(), 'Toy Story\nAlien');
|
||||
await gu.sendKeys(Key.DELETE);
|
||||
await gu.checkTokenEditor('');
|
||||
await gu.sendKeys(Key.ESCAPE);
|
||||
await gu.sendKeys(Key.BACK_SPACE);
|
||||
await gu.checkTokenEditor('');
|
||||
await gu.sendKeys(Key.ESCAPE);
|
||||
await gu.waitForServer();
|
||||
// Nothing should have changed.
|
||||
assert.equal(await gu.getDetailCell('A', 1).getText(), 'Toy Story\nAlien');
|
||||
});
|
||||
});
|
Loading…
Reference in new issue