[Libreoffice-commits] online.git: cypress_test/data cypress_test/integration_tests
Ashod Nakashian (via logerrit)
logerrit at kemper.freedesktop.org
Mon Apr 27 08:54:02 UTC 2020
cypress_test/data/desktop/calc/focus.ods |binary
cypress_test/integration_tests/common/calc.js | 47 +++++++++
cypress_test/integration_tests/common/helper.js | 22 ++++
cypress_test/integration_tests/desktop/calc/focus_spec.js | 71 ++++++++++++++
cypress_test/integration_tests/mobile/calc/focus_spec.js | 70 +++++++++++--
5 files changed, 200 insertions(+), 10 deletions(-)
New commits:
commit b6c9b3e20db14e0cd23a333c23fe6c8adafadf9f
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
AuthorDate: Sat Mar 28 14:28:05 2020 -0400
Commit: Tamás Zolnai <tamas.zolnai at collabora.com>
CommitDate: Mon Apr 27 10:53:44 2020 +0200
cypress: Calc Formula-Bar tests
New tests to exercise the Formula-Bar in
both desktop and mobile modes.
Change-Id: Ibc174232f7b614132913c1d66af0051b51151a29
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/91537
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Tamás Zolnai <tamas.zolnai at collabora.com>
diff --git a/cypress_test/data/desktop/calc/focus.ods b/cypress_test/data/desktop/calc/focus.ods
new file mode 100644
index 000000000..ab2f20975
Binary files /dev/null and b/cypress_test/data/desktop/calc/focus.ods differ
diff --git a/cypress_test/integration_tests/common/calc.js b/cypress_test/integration_tests/common/calc.js
new file mode 100644
index 000000000..1ed2ef289
--- /dev/null
+++ b/cypress_test/integration_tests/common/calc.js
@@ -0,0 +1,47 @@
+/* global cy expect */
+
+// Click on the formula bar.
+// moveMouse is set to avoid leaving the mouse on the Formula-Bar,
+// which shows the tooltip and messes up tests.
+function clickFormulaBar(XPos = -1, moveMouse = true) {
+
+ // The inputbar_container is 100% width, which
+ // can extend behind the sidebar. So we can't
+ // rely on its width. Instead, we rely on the
+ // canvas, which is accurately sized.
+ // N.B. Setting the width of the inputbar_container
+ // is futile because it messes the size of the canvas.
+ cy.get('.inputbar_canvas')
+ .then(function(items) {
+ expect(items).to.have.lengthOf(1);
+ if (XPos < 0) // Click in the center if undefined.
+ XPos = items[0].getBoundingClientRect().width / 2;
+ var YPos = items[0].getBoundingClientRect().height / 2;
+ cy.get('.inputbar_container')
+ .click(XPos, YPos);
+ });
+
+ if (moveMouse)
+ cy.get('body').trigger('mouseover');
+}
+
+// Click on the first cell.
+function clickOnFirstCell() {
+ cy.get('.leaflet-container')
+ .then(function(items) {
+ expect(items).to.have.lengthOf(1);
+ var XPos = items[0].getBoundingClientRect().left + 10;
+ var YPos = items[0].getBoundingClientRect().top + 10;
+ cy.get('body')
+ .click(XPos, YPos);
+ });
+
+ cy.wait(500);
+
+ cy.get('.leaflet-marker-icon')
+ .should('be.visible');
+
+}
+
+module.exports.clickOnFirstCell = clickOnFirstCell;
+module.exports.clickFormulaBar = clickFormulaBar;
diff --git a/cypress_test/integration_tests/common/helper.js b/cypress_test/integration_tests/common/helper.js
index 6ebfcaccf..7a8c6d38c 100644
--- a/cypress_test/integration_tests/common/helper.js
+++ b/cypress_test/integration_tests/common/helper.js
@@ -43,6 +43,7 @@ function loadTestDoc(fileName, subFolder, mobile) {
Cypress.env('WORKDIR') + subFolder + '/' + fileName;
}
+ cy.log('Loading: ' + URI);
cy.visit(URI, {
onLoad: function(win) {
win.onerror = cy.onUncaughtException;
@@ -132,6 +133,13 @@ function expectTextForClipboard(expectedPlainText) {
}
}
+function beforeAllDesktop(fileName, subFolder) {
+ var mobile = false;
+ loadTestDoc(fileName, subFolder, mobile);
+
+ // detectLOCoreVersion(); //TODO: implement Core version check.
+}
+
function afterAll(fileName) {
cy.log('Waiting for closing the document - start.');
cy.log('Param - fileName: ' + fileName);
@@ -184,6 +192,18 @@ function isWriter() {
return !isCalc() && !isImpress();
}
+// Types text into elem with a delay in between characters.
+// Sometimes cy.type results in random character insertion,
+// this avoids that, which is not clear why it happens.
+function typeText(selector, text, delayMs=0) {
+ var elem= cy.get(selector);
+ for (var i = 0; i < text.length; i++) {
+ elem.type(text.charAt(i));
+ if (delayMs > 0)
+ cy.wait(delayMs);
+ }
+}
+
module.exports.loadTestDoc = loadTestDoc;
module.exports.assertCursorAndFocus = assertCursorAndFocus;
module.exports.assertNoKeyboardInput = assertNoKeyboardInput;
@@ -196,3 +216,5 @@ module.exports.initAliasToNegative = initAliasToNegative;
module.exports.isCalc = isCalc;
module.exports.isImpress = isImpress;
module.exports.isWriter = isWriter;
+module.exports.beforeAllDesktop = beforeAllDesktop;
+module.exports.typeText = typeText;
diff --git a/cypress_test/integration_tests/desktop/calc/focus_spec.js b/cypress_test/integration_tests/desktop/calc/focus_spec.js
new file mode 100644
index 000000000..aebef57f8
--- /dev/null
+++ b/cypress_test/integration_tests/desktop/calc/focus_spec.js
@@ -0,0 +1,71 @@
+/* global describe it cy beforeEach require afterEach */
+
+var helper = require('../../common/helper');
+var calc = require('../../common/calc');
+
+var delayForEventsMs = 300; // The maximum roundrip time for an event to fire based on some action.
+
+describe('Calc focus tests', function() {
+ beforeEach(function() {
+ helper.beforeAllDesktop('focus.ods', 'calc');
+
+ // Wait until the Formula-Bar is loaded.
+ cy.get('.inputbar_container', {timeout : 10000});
+ });
+
+ afterEach(function() {
+ helper.afterAll('focus.ods');
+ });
+
+ it('Formula-bar focus', function() {
+
+ // Select the first cell to edit the same one.
+ // Use the tile's edge to find the first cell's position
+ calc.clickOnFirstCell();
+
+ // Click in the formula-bar.
+ calc.clickFormulaBar();
+ helper.assertCursorAndFocus();
+
+ // Type some text.
+ var text1 = 'Hello from Calc';
+ helper.typeText('textarea.clipboard', text1);
+ cy.get('textarea.clipboard').type('{enter}').wait(delayForEventsMs);
+
+ // Select the first cell to edit the same one.
+ calc.clickOnFirstCell();
+ calc.clickFormulaBar();
+ helper.assertCursorAndFocus();
+ // Validate.
+ cy.get('textarea.clipboard').type('{ctrl}a');
+ helper.expectTextForClipboard(text1);
+ // End editing.
+ cy.get('textarea.clipboard').type('{enter}').wait(delayForEventsMs);
+
+ // Type some more text, at the end.
+ cy.log('Appending text at the end.');
+ calc.clickOnFirstCell();
+ calc.clickFormulaBar();
+ helper.assertCursorAndFocus();
+ var text2 = ', this is a test.';
+ helper.typeText('textarea.clipboard', text2);
+ // Validate.
+ cy.get('textarea.clipboard').type('{ctrl}a').wait(delayForEventsMs);
+ helper.expectTextForClipboard(text1 + text2);
+ // End editing.
+ cy.get('textarea.clipboard').type('{enter}').wait(delayForEventsMs);
+
+ // Type some more text, in the middle.
+ cy.log('Inserting text in the middle.');
+ calc.clickOnFirstCell();
+ calc.clickFormulaBar();
+ helper.assertCursorAndFocus();
+ var text3 = ' BAZINGA';
+ helper.typeText('textarea.clipboard', text3);
+ // Validate.
+ cy.get('textarea.clipboard').type('{ctrl}a').wait(delayForEventsMs);
+ //NOTE: If this fails, it's probably because we clicked
+ // at a different point in the text.
+ helper.expectTextForClipboard(text1 + ', this is a' + text3 + ' test.');
+ });
+});
diff --git a/cypress_test/integration_tests/mobile/calc/focus_spec.js b/cypress_test/integration_tests/mobile/calc/focus_spec.js
index 04c53d868..1836fb1b2 100644
--- a/cypress_test/integration_tests/mobile/calc/focus_spec.js
+++ b/cypress_test/integration_tests/mobile/calc/focus_spec.js
@@ -2,11 +2,17 @@
var helper = require('../../common/helper');
var mobileHelper = require('../../common/mobile_helper');
+var calc = require('../../common/calc');
var calcHelper = require('./calc_helper');
+var delayForEventsMs = 300; // The maximum roundrip time for an event to fire based on some action.
+
describe('Calc focus tests', function() {
beforeEach(function() {
mobileHelper.beforeAllMobile('focus.ods', 'calc');
+
+ // Wait until the Formula-Bar is loaded.
+ cy.get('.inputbar_container', {timeout : 10000});
});
afterEach(function() {
@@ -82,24 +88,68 @@ describe('Calc focus tests', function() {
helper.assertNoKeyboardInput();
- // One tap on a cell -> no document focus
- calcHelper.clickOnFirstCell();
-
- cy.get('.leaflet-marker-icon')
- .should('be.visible');
+ // Select the first cell to edit the same one.
+ calc.clickOnFirstCell();
// No focus
cy.document().its('activeElement.tagName')
.should('be.eq', 'BODY');
// Click in the formula-bar.
- cy.get('.inputbar_container')
- .click();
-
+ calc.clickFormulaBar();
+ cy.get('body').trigger('mouseover');
helper.assertCursorAndFocus();
// Type some text.
- cy.get('textarea.clipboard')
- .type('blah');
+ var text1 = 'Hello from Calc';
+ cy.get('textarea.clipboard').type(text1);
+ cy.get('textarea.clipboard').type('{enter}').wait(delayForEventsMs);
+
+ helper.assertNoKeyboardInput();
+
+ // Select the first cell to edit the same one.
+ calc.clickOnFirstCell();
+
+ // Check the text we typed.
+ calc.clickFormulaBar();
+ cy.get('body').trigger('mouseover');
+ helper.assertCursorAndFocus();
+ cy.get('textarea.clipboard').type('{ctrl}a');
+ helper.expectTextForClipboard(text1);
+
+ // Accept changes.
+ cy.get('textarea.clipboard').type('{enter}').wait(delayForEventsMs);
+
+ // Type some more text, at the end.
+ cy.log('Appending text at the end.');
+ calc.clickOnFirstCell();
+ calc.clickFormulaBar();
+ cy.get('body').trigger('mouseover');
+ helper.assertCursorAndFocus();
+ var text2 = ', this is a test.';
+ cy.get('textarea.clipboard').type(text2);
+ // Validate.
+ cy.get('textarea.clipboard').type('{ctrl}a').wait(delayForEventsMs);
+ helper.expectTextForClipboard(text1 + text2);
+ // End editing.
+ cy.get('textarea.clipboard').type('{enter}').wait(delayForEventsMs);
+ helper.assertNoKeyboardInput();
+
+ // Type some more text, in the middle.
+ cy.log('Inserting text in the middle.');
+ calc.clickOnFirstCell();
+ calc.clickFormulaBar();
+ cy.get('body').trigger('mouseover');
+ helper.assertCursorAndFocus();
+ var text3 = ', BAZINGA';
+ helper.typeText('textarea.clipboard', text3);
+ // Validate.
+ cy.get('textarea.clipboard').type('{ctrl}a').wait(delayForEventsMs);
+ //NOTE: If this fails, it's probably because we clicked
+ // at a different point in the text.
+ helper.expectTextForClipboard(text1 + text3 + text2);
+ // End editing.
+ cy.get('textarea.clipboard').type('{enter}').wait(delayForEventsMs);
+ helper.assertNoKeyboardInput();
});
});
More information about the Libreoffice-commits
mailing list