You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gristlabs_grist-core/test/nbrowser/Properties.ntest.js

152 lines
5.7 KiB

import { assert } from 'mocha-webdriver';
import { $, gu, test } from 'test/nbrowser/gristUtil-nbrowser';
describe('Properties.ntest', function() {
const cleanup = test.setupTestSuite(this);
before(async function() {
await gu.supportOldTimeyTestCode();
await gu.useFixtureDoc(cleanup, "Hello.grist", true);
});
afterEach(function() {
return gu.checkForErrors();
});
it("webdriver should handle parens and other keys", async function() {
// This isn't a test of properties really, but a test of Selenium: speficically that the
// workaround for Selenium bugs in gu.sendKeys actually works.
await $("$GridView_columnLabel").first().click();
// We'll undo afterwards, and verify that we got the same text back.
var text = await gu.getCellRC(0, 0).text();
var specialChars = "()[]{}~!@#$%^&*-_=+/?><.,'\";:";
await gu.sendKeys(specialChars + specialChars, $.ENTER);
await gu.waitForServer();
assert.equal(await gu.getCellRC(0, 0).text(), specialChars + specialChars);
// Undo and compare to previous value.
await gu.sendKeys([$.MOD, 'z']);
await gu.waitForServer();
assert.equal(await gu.getCellRC(0, 0).text(), text);
});
it("cells should indicate when conversion fails for a value", async function() {
await $("$GridView_columnLabel:nth-child(2)").click();
// Fill in a column of values, some numeric, some not.
await gu.enterGridValues(0, 1, [["17", "foo", "", "-100"]]);
await gu.waitForServer();
assert.deepEqual(await gu.getVisibleGridCells(1, [1, 2, 3, 4]),
["17", "foo", "", "-100"]);
await $("$GridView_columnLabel:nth-child(2)").click();
// Convert the column to Numeric.
await gu.openSidePane('field');
assert.equal(await $(".test-field-label").val(), 'B');
await gu.setType('Numeric');
await $('.test-type-transform-apply').wait().click();
assert.deepEqual(await gu.getVisibleGridCells(1, [1, 2, 3, 4]),
["17", "foo", "", "-100"]);
// Undo of conversion should restore old values.
await gu.undo();
await $(".test-fbuilder-type-select .test-select-row:contains(Text)").wait();
assert.deepEqual(await gu.getVisibleGridCells(1, [1, 2, 3, 4]),
["17", "foo", "", "-100"]);
// Redo should work too.
await $(".test-redo").click();
await $(".test-fbuilder-type-select .test-select-row:contains(Numeric)").wait();
await gu.waitForServer();
assert.deepEqual(await gu.getVisibleGridCells(1, [1, 2, 3, 4]),
["17", "foo", "", "-100"]);
});
it("cells should indicate when new value is wrong type", async function() {
// Go to column "c", and change type to Numeric.
await $("$GridView_columnLabel:nth-child(3)").click();
assert.equal(await $(".test-field-label").val(), 'C');
await gu.setType('Numeric');
await $('.test-type-transform-apply').wait().click();
await gu.waitForServer();
// Remove focus from FieldBuilder type dropdown, so that sentKeys go to the main app.
await $("body").click();
// Fill in a column of values, some numeric, some not.
await gu.enterGridValues(0, 2, [["25", "", "bar", "-123"]]);
await gu.waitForServer();
// TODO: The 0.00 might be wrong behavior: we probably want an empty cell here, although when
// converting an empty text cell to numeric, we want it to become 0. In other words, not all
// conversions are the same.
assert.deepEqual(await gu.getVisibleGridCells(2, [1, 2, 3, 4]),
["25", "", "bar", "-123"]);
assert.deepEqual(await gu.getVisibleGridCells({
col: 2,
rowNums: [1, 2, 3, 4],
mapper: e => e.find('.field_clip').hasClass('invalid'),
}), [false, false, true, false]);
// Select the column again, and type in values in a different order. Ensure the cells change
// appropriately.
await $("$GridView_columnLabel:nth-child(3)").click();
await gu.enterGridValues(0, 2, [["", "bar", "-123", "25"]]);
await gu.waitForServer();
// TODO: The first cell might be wrong behavior; we probably want an empty cell after DELETE.
assert.deepEqual(await gu.getVisibleGridCells(2, [1, 2, 3, 4]),
["", "bar", "-123", "25"]);
assert.deepEqual(await gu.getVisibleGridCells({
col: 2,
rowNums: [1, 2, 3, 4],
mapper: e => e.find('.field_clip').hasClass('invalid')
}), [false, true, false, false]);
});
it("formula errors should be indicated", async function() {
// Go to column "E", and change formula to eval column "D".
await $("$GridView_columnLabel:nth-child(5)").click();
await gu.sendKeys("eval($D)", $.ENTER);
// Fill in a bunch of formula text for the "eval" formula to try. This is a way to get a whole
// bunch of different errors in one columns.
await $("$GridView_columnLabel:nth-child(4)").click();
assert.equal(await $(".test-field-label").val(), 'D');
await gu.setType('Text');
await gu.enterGridValues(0, 3, [[
"25",
"",
"asdf",
"ValueError()",
"__import__('sys').exit(3)",
'u"résumé 三"',
"12/(2-1-1)",
"[1,2,3]"]]);
await gu.waitForServer();
assert.deepEqual(await gu.getVisibleGridCells(4, [1, 2, 3, 4, 5, 6, 7, 8]), [
"25",
"#SyntaxError",
"#NameError",
"ValueError()",
"#SystemExit",
'résumé 三',
"#DIV/0!",
"1, 2, 3",
]);
assert.deepEqual(
await gu.getVisibleGridCells({
col: 4,
rowNums: [1, 2, 3, 4, 5, 6, 7, 8],
mapper: e => e.find('.field_clip').hasClass("invalid")
}),
// Last one (list) is valid because lists are a supported type of value.
[false, true, true, true, true, false, true, false]);
});
});