[Libreoffice-commits] online.git: test/httpwstest.cpp test/Makefile.am test/UnitCursor.cpp
Miklos Vajna (via logerrit)
logerrit at kemper.freedesktop.org
Mon Dec 2 08:12:00 UTC 2019
test/Makefile.am | 4
test/UnitCursor.cpp | 410 ++++++++++++++++++++++++++++++++++++++++++++++++++++
test/httpwstest.cpp | 326 -----------------------------------------
3 files changed, 414 insertions(+), 326 deletions(-)
New commits:
commit fe04d685dbed3048c74a7ffdc0cb84d6e6824162
Author: Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Mon Dec 2 09:11:32 2019 +0100
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Mon Dec 2 09:11:39 2019 +0100
Convert cursor tests to a new-style one
So that they are in-process, which means it's easier to debug when they
fail.
Change-Id: I0fb1e798875c479e0aeb5f709ef630def5349126
diff --git a/test/Makefile.am b/test/Makefile.am
index 48da1f182..61fd8a142 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -32,6 +32,7 @@ noinst_LTLIBRARIES = \
unit-session.la \
unit-uno-command.la \
unit-load.la \
+ unit-cursor.la \
unit-wopi-loadencoded.la unit-wopi-temp.la
MAGIC_TO_FORCE_SHLIB_CREATION = -rpath /dummy
@@ -155,6 +156,8 @@ unit_uno_command_la_SOURCES = UnitUNOCommand.cpp
unit_uno_command_la_LIBADD = $(CPPUNIT_LIBS)
unit_load_la_SOURCES = UnitLoad.cpp
unit_load_la_LIBADD = $(CPPUNIT_LIBS)
+unit_cursor_la_SOURCES = UnitCursor.cpp
+unit_cursor_la_LIBADD = $(CPPUNIT_LIBS)
if HAVE_LO_PATH
SYSTEM_STAMP = @SYSTEMPLATE_PATH@/system_stamp
@@ -185,6 +188,7 @@ TESTS = unit-copy-paste.la unit-typing.la unit-convert.la unit-prefork.la unit-t
unit-session.la \
unit-uno-command.la \
unit-load.la \
+ unit-cursor.la \
unit-wopi-loadencoded.la unit-wopi-temp.la
# TESTS = unit-client.la
# TESTS += unit-admin.la
diff --git a/test/UnitCursor.cpp b/test/UnitCursor.cpp
new file mode 100644
index 000000000..a70ef749e
--- /dev/null
+++ b/test/UnitCursor.cpp
@@ -0,0 +1,410 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <memory>
+#include <ostream>
+#include <set>
+#include <string>
+
+#include <Poco/Exception.h>
+#include <Poco/RegularExpression.h>
+#include <Poco/URI.h>
+#include <cppunit/TestAssert.h>
+
+#include <Unit.hpp>
+#include <helpers.hpp>
+
+class LOOLWebSocket;
+
+namespace
+{
+void getCursor(const std::string& message, int& cursorX, int& cursorY, int& cursorWidth,
+ int& cursorHeight)
+{
+ Poco::JSON::Parser parser;
+ const Poco::Dynamic::Var result = parser.parse(message);
+ const auto& command = result.extract<Poco::JSON::Object::Ptr>();
+ std::string text = command->get("commandName").toString();
+ CPPUNIT_ASSERT_EQUAL(std::string(".uno:CellCursor"), text);
+ text = command->get("commandValues").toString();
+ CPPUNIT_ASSERT(!text.empty());
+ std::vector<std::string> position(LOOLProtocol::tokenize(text, ','));
+ cursorX = std::stoi(position[0]);
+ cursorY = std::stoi(position[1]);
+ cursorWidth = std::stoi(position[2]);
+ cursorHeight = std::stoi(position[3]);
+ CPPUNIT_ASSERT(cursorX >= 0);
+ CPPUNIT_ASSERT(cursorY >= 0);
+ CPPUNIT_ASSERT(cursorWidth >= 0);
+ CPPUNIT_ASSERT(cursorHeight >= 0);
+}
+
+void limitCursor(const std::function<void(const std::shared_ptr<LOOLWebSocket>& socket, int cursorX,
+ int cursorY, int cursorWidth, int cursorHeight,
+ int docWidth, int docHeight)>& keyhandler,
+ const std::function<void(int docWidth, int docHeight, int newWidth,
+ int newHeight)>& checkhandler,
+ const std::string& testname)
+{
+ int docSheet = -1;
+ int docSheets = 0;
+ int docHeight = 0;
+ int docWidth = 0;
+ int docViewId = -1;
+ int newSheet = -1;
+ int newSheets = 0;
+ int newHeight = 0;
+ int newWidth = 0;
+ int cursorX = 0;
+ int cursorY = 0;
+ int cursorWidth = 0;
+ int cursorHeight = 0;
+
+ std::string response;
+
+ Poco::URI uri(helpers::getTestServerURI());
+ std::shared_ptr<LOOLWebSocket> socket
+ = helpers::loadDocAndGetSocket("empty.ods", uri, testname);
+
+ // check document size
+ helpers::sendTextFrame(socket, "status", testname);
+ response = helpers::assertResponseString(socket, "status:", testname);
+ helpers::parseDocSize(response.substr(7), "spreadsheet", docSheet, docSheets, docWidth,
+ docHeight, docViewId);
+
+ // Send an arrow key to initialize the CellCursor, otherwise we get "EMPTY".
+ helpers::sendTextFrame(socket, "key type=input char=0 key=1027", testname);
+
+ std::string text;
+ Poco::format(text,
+ "commandvalues "
+ "command=.uno:CellCursor?outputHeight=%d&outputWidth=%d&tileHeight=%d&tileWidth=%"
+ "d",
+ 256, 256, 3840, 3840);
+ helpers::sendTextFrame(socket, text, testname);
+ const auto cursor = helpers::getResponseString(socket, "commandvalues:", testname);
+ getCursor(cursor.substr(14), cursorX, cursorY, cursorWidth, cursorHeight);
+
+ // move cursor
+ keyhandler(socket, cursorX, cursorY, cursorWidth, cursorHeight, docWidth, docHeight);
+
+ // filter messages, and expect to receive new document size
+ response = helpers::assertResponseString(socket, "status:", testname);
+ helpers::parseDocSize(response.substr(7), "spreadsheet", newSheet, newSheets, newWidth,
+ newHeight, docViewId);
+
+ CPPUNIT_ASSERT_EQUAL(docSheets, newSheets);
+ CPPUNIT_ASSERT_EQUAL(docSheet, newSheet);
+
+ // check new document size
+ checkhandler(docWidth, docHeight, newWidth, newHeight);
+}
+}
+
+/// Test suite for cursor handling.
+class UnitCursor : public UnitWSD
+{
+ TestResult testMaxColumn();
+ TestResult testMaxRow();
+ TestResult testInsertAnnotationWriter();
+ TestResult testEditAnnotationWriter();
+ TestResult testInsertAnnotationCalc();
+
+public:
+ void invokeTest() override;
+};
+
+UnitBase::TestResult UnitCursor::testMaxColumn()
+{
+ try
+ {
+ limitCursor(
+ // move cursor to last column
+ [](const std::shared_ptr<LOOLWebSocket>& socket, int cursorX, int cursorY,
+ int cursorWidth, int cursorHeight, int docWidth, int docHeight) {
+ CPPUNIT_ASSERT(cursorX >= 0);
+ CPPUNIT_ASSERT(cursorY >= 0);
+ CPPUNIT_ASSERT(cursorWidth >= 0);
+ CPPUNIT_ASSERT(cursorHeight >= 0);
+ CPPUNIT_ASSERT(docWidth >= 0);
+ CPPUNIT_ASSERT(docHeight >= 0);
+
+ const std::string text = "key type=input char=0 key=1027";
+ while (cursorX <= docWidth)
+ {
+ helpers::sendTextFrame(socket, text);
+ cursorX += cursorWidth;
+ }
+ },
+ // check new document width
+ [](int docWidth, int docHeight, int newWidth, int newHeight) {
+ CPPUNIT_ASSERT_EQUAL(docHeight, newHeight);
+ CPPUNIT_ASSERT(newWidth > docWidth);
+ },
+ "maxColumn");
+ }
+ catch (const Poco::Exception& exc)
+ {
+ CPPUNIT_FAIL(exc.displayText());
+ }
+ return TestResult::Ok;
+}
+
+UnitBase::TestResult UnitCursor::testMaxRow()
+{
+ try
+ {
+ limitCursor(
+ // move cursor to last row
+ [](const std::shared_ptr<LOOLWebSocket>& socket, int cursorX, int cursorY,
+ int cursorWidth, int cursorHeight, int docWidth, int docHeight) {
+ CPPUNIT_ASSERT(cursorX >= 0);
+ CPPUNIT_ASSERT(cursorY >= 0);
+ CPPUNIT_ASSERT(cursorWidth >= 0);
+ CPPUNIT_ASSERT(cursorHeight >= 0);
+ CPPUNIT_ASSERT(docWidth >= 0);
+ CPPUNIT_ASSERT(docHeight >= 0);
+
+ const std::string text = "key type=input char=0 key=1024";
+ while (cursorY <= docHeight)
+ {
+ helpers::sendTextFrame(socket, text);
+ cursorY += cursorHeight;
+ }
+ },
+ // check new document height
+ [](int docWidth, int docHeight, int newWidth, int newHeight) {
+ CPPUNIT_ASSERT_EQUAL(docWidth, newWidth);
+ CPPUNIT_ASSERT(newHeight > docHeight);
+ },
+ "maxRow");
+ }
+ catch (const Poco::Exception& exc)
+ {
+ CPPUNIT_FAIL(exc.displayText());
+ }
+ return TestResult::Ok;
+}
+
+UnitBase::TestResult UnitCursor::testInsertAnnotationWriter()
+{
+ const char* testname = "insertAnnotationWriter ";
+
+ std::string documentPath, documentURL;
+ helpers::getDocumentPathAndURL("hello.odt", documentPath, documentURL, testname);
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL);
+
+ Poco::URI uri(helpers::getTestServerURI());
+ std::shared_ptr<LOOLWebSocket> socket
+ = helpers::loadDocAndGetSocket(uri, documentURL, testname);
+
+ // Insert comment.
+ helpers::sendTextFrame(socket, "uno .uno:InsertAnnotation", testname);
+ helpers::assertResponseString(socket, "invalidatetiles:", testname);
+
+ // Paste some text.
+ helpers::sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\nxxx yyy zzzz",
+ testname);
+
+ // Read it back.
+ std::string res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: xxx yyy zzzz"), res);
+ // Can we edit the comment?
+ helpers::sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\naaa bbb ccc",
+ testname);
+ res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: aaa bbb ccc"), res);
+
+ // Confirm that the text is in the comment and not doc body.
+ // Click in the body.
+ helpers::sendTextFrame(
+ socket, "mouse type=buttondown x=1600 y=1600 count=1 buttons=1 modifier=0", testname);
+ helpers::sendTextFrame(socket, "mouse type=buttonup x=1600 y=1600 count=1 buttons=1 modifier=0",
+ testname);
+ // Read body text.
+ res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: Hello world"), res);
+
+ // Confirm that the comment is still intact.
+ helpers::sendTextFrame(
+ socket, "mouse type=buttondown x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
+ helpers::sendTextFrame(
+ socket, "mouse type=buttonup x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
+ res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: aaa bbb ccc"), res);
+
+ // Can we still edit the comment?
+ helpers::sendTextFrame(
+ socket,
+ "paste mimetype=text/plain;charset=utf-8\nand now for something completely different",
+ testname);
+ res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(
+ std::string("textselectioncontent: and now for something completely different"), res);
+
+ // Close and reopen the same document and test again.
+ socket->shutdown();
+
+ // Make sure the document is fully unloaded.
+ // testNoExtraLoolKitsLeft();
+
+ TST_LOG("Reloading ");
+ socket = helpers::loadDocAndGetSocket(uri, documentURL, testname);
+
+ // Confirm that the text is in the comment and not doc body.
+ // Click in the body.
+ helpers::sendTextFrame(
+ socket, "mouse type=buttondown x=1600 y=1600 count=1 buttons=1 modifier=0", testname);
+ helpers::sendTextFrame(socket, "mouse type=buttonup x=1600 y=1600 count=1 buttons=1 modifier=0",
+ testname);
+ // Read body text.
+ res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: Hello world"), res);
+
+ // Confirm that the comment is still intact.
+ helpers::sendTextFrame(
+ socket, "mouse type=buttondown x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
+ helpers::sendTextFrame(
+ socket, "mouse type=buttonup x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
+ res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(
+ std::string("textselectioncontent: and now for something completely different"), res);
+
+ // Can we still edit the comment?
+ helpers::sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\nblah blah xyz",
+ testname);
+ res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: blah blah xyz"), res);
+ return TestResult::Ok;
+}
+
+UnitBase::TestResult UnitCursor::testEditAnnotationWriter()
+{
+ const char* testname = "editAnnotationWriter ";
+
+ std::string documentPath, documentURL;
+ helpers::getDocumentPathAndURL("with_comment.odt", documentPath, documentURL, testname);
+
+ Poco::URI uri(helpers::getTestServerURI());
+ std::shared_ptr<LOOLWebSocket> socket
+ = helpers::loadDocAndGetSocket(uri, documentURL, testname);
+
+ // Click in the body.
+ helpers::sendTextFrame(
+ socket, "mouse type=buttondown x=1600 y=1600 count=1 buttons=1 modifier=0", testname);
+ helpers::sendTextFrame(socket, "mouse type=buttonup x=1600 y=1600 count=1 buttons=1 modifier=0",
+ testname);
+ // Read body text.
+ std::string res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: Hello world"), res);
+
+ // Confirm that the comment is intact.
+ helpers::sendTextFrame(
+ socket, "mouse type=buttondown x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
+ helpers::sendTextFrame(
+ socket, "mouse type=buttonup x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
+ res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: blah blah xyz"), res);
+
+ // Can we still edit the comment?
+ helpers::sendTextFrame(
+ socket,
+ "paste mimetype=text/plain;charset=utf-8\nand now for something completely different",
+ testname);
+ res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(
+ std::string("textselectioncontent: and now for something completely different"), res);
+
+ // const int kitcount = getLoolKitProcessCount();
+
+ // Close and reopen the same document and test again.
+ TST_LOG("Closing connection after pasting.");
+ socket->shutdown();
+
+ TST_LOG("Reloading ");
+ socket = helpers::loadDocAndGetSocket(uri, documentURL, testname);
+
+ // Should have no new instances.
+ // CPPUNIT_ASSERT_EQUAL(kitcount, countLoolKitProcesses(kitcount));
+
+ // Confirm that the text is in the comment and not doc body.
+ // Click in the body.
+ helpers::sendTextFrame(
+ socket, "mouse type=buttondown x=1600 y=1600 count=1 buttons=1 modifier=0", testname);
+ helpers::sendTextFrame(socket, "mouse type=buttonup x=1600 y=1600 count=1 buttons=1 modifier=0",
+ testname);
+ // Read body text.
+ res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: Hello world"), res);
+
+ // Confirm that the comment is still intact.
+ helpers::sendTextFrame(
+ socket, "mouse type=buttondown x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
+ helpers::sendTextFrame(
+ socket, "mouse type=buttonup x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
+ res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(
+ std::string("textselectioncontent: and now for something completely different"), res);
+
+ // Can we still edit the comment?
+ helpers::sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\nnew text different",
+ testname);
+ res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: new text different"), res);
+ return TestResult::Ok;
+}
+
+UnitBase::TestResult UnitCursor::testInsertAnnotationCalc()
+{
+ const char* testname = "insertAnnotationCalc ";
+ Poco::URI uri(helpers::getTestServerURI());
+ std::shared_ptr<LOOLWebSocket> socket
+ = helpers::loadDocAndGetSocket("setclientpart.ods", uri, testname);
+
+ // Insert comment.
+ helpers::sendTextFrame(socket, "uno .uno:InsertAnnotation", testname);
+
+ // Paste some text.
+ helpers::sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\naaa bbb ccc",
+ testname);
+
+ // Read it back.
+ std::string res = helpers::getAllText(socket, testname);
+ CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: aaa bbb ccc"), res);
+ return TestResult::Ok;
+}
+
+void UnitCursor::invokeTest()
+{
+ UnitBase::TestResult result = testMaxColumn();
+ if (result != TestResult::Ok)
+ exitTest(result);
+
+ result = testMaxRow();
+ if (result != TestResult::Ok)
+ exitTest(result);
+
+ // result = testInsertAnnotationWriter();
+ // if (result != TestResult::Ok)
+ // exitTest(result);
+
+ // result = testEditAnnotationWriter();
+ // if (result != TestResult::Ok)
+ // exitTest(result);
+
+ // FIXME result = testInsertAnnotationCalc();
+ // if (result != TestResult::Ok)
+ // exitTest(result);
+
+ exitTest(TestResult::Ok);
+}
+
+UnitBase* unit_create_wsd(void) { return new UnitCursor(); }
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/test/httpwstest.cpp b/test/httpwstest.cpp
index 5410c3b50..ef6ddc73c 100644
--- a/test/httpwstest.cpp
+++ b/test/httpwstest.cpp
@@ -48,11 +48,6 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture
CPPUNIT_TEST(testPasteBlank);
CPPUNIT_TEST(testInsertDelete);
CPPUNIT_TEST(testInactiveClient);
- CPPUNIT_TEST(testMaxColumn);
- CPPUNIT_TEST(testMaxRow);
-// CPPUNIT_TEST(testInsertAnnotationWriter);
-// CPPUNIT_TEST(testEditAnnotationWriter);
- // FIXME CPPUNIT_TEST(testInsertAnnotationCalc);
CPPUNIT_TEST(testCalcEditRendering);
CPPUNIT_TEST(testCalcRenderAfterNewView51);
CPPUNIT_TEST(testCalcRenderAfterNewView53);
@@ -75,11 +70,6 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture
void testPasteBlank();
void testInsertDelete();
void testInactiveClient();
- void testMaxColumn();
- void testMaxRow();
- void testInsertAnnotationWriter();
- void testEditAnnotationWriter();
- void testInsertAnnotationCalc();
void testCalcEditRendering();
void testCalcRenderAfterNewView51();
void testCalcRenderAfterNewView53();
@@ -96,20 +86,6 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture
const std::string& response,
std::vector<std::string>& parts);
- void getCursor(const std::string& message,
- int& cursorX,
- int& cursorY,
- int& cursorWidth,
- int& cursorHeight);
-
- void limitCursor(const std::function<void(const std::shared_ptr<LOOLWebSocket>& socket,
- int cursorX, int cursorY,
- int cursorWidth, int cursorHeight,
- int docWidth, int docHeight)>& keyhandler,
- const std::function<void(int docWidth, int docHeight,
- int newWidth, int newHeight)>& checkhandler,
- const std::string& testname);
-
std::string getFontList(const std::string& message);
double getColRowSize(const std::string& property, const std::string& message, int index);
double getColRowSize(const std::shared_ptr<LOOLWebSocket>& socket, const std::string& item, int index, const std::string& testname);
@@ -578,84 +554,6 @@ void HTTPWSTest::testInactiveClient()
}
}
-void HTTPWSTest::testMaxColumn()
-{
- try
- {
- limitCursor(
- // move cursor to last column
- [](const std::shared_ptr<LOOLWebSocket>& socket,
- int cursorX, int cursorY, int cursorWidth, int cursorHeight,
- int docWidth, int docHeight)
- {
- CPPUNIT_ASSERT(cursorX >= 0);
- CPPUNIT_ASSERT(cursorY >= 0);
- CPPUNIT_ASSERT(cursorWidth >= 0);
- CPPUNIT_ASSERT(cursorHeight >= 0);
- CPPUNIT_ASSERT(docWidth >= 0);
- CPPUNIT_ASSERT(docHeight >= 0);
-
- const std::string text = "key type=input char=0 key=1027";
- while (cursorX <= docWidth)
- {
- sendTextFrame(socket, text);
- cursorX += cursorWidth;
- }
- },
- // check new document width
- [](int docWidth, int docHeight, int newWidth, int newHeight)
- {
- CPPUNIT_ASSERT_EQUAL(docHeight, newHeight);
- CPPUNIT_ASSERT(newWidth > docWidth);
- },
- "maxColumn"
- );
- }
- catch (const Poco::Exception& exc)
- {
- CPPUNIT_FAIL(exc.displayText());
- }
-}
-
-void HTTPWSTest::testMaxRow()
-{
- try
- {
- limitCursor(
- // move cursor to last row
- [](const std::shared_ptr<LOOLWebSocket>& socket,
- int cursorX, int cursorY, int cursorWidth, int cursorHeight,
- int docWidth, int docHeight)
- {
- CPPUNIT_ASSERT(cursorX >= 0);
- CPPUNIT_ASSERT(cursorY >= 0);
- CPPUNIT_ASSERT(cursorWidth >= 0);
- CPPUNIT_ASSERT(cursorHeight >= 0);
- CPPUNIT_ASSERT(docWidth >= 0);
- CPPUNIT_ASSERT(docHeight >= 0);
-
- const std::string text = "key type=input char=0 key=1024";
- while (cursorY <= docHeight)
- {
- sendTextFrame(socket, text);
- cursorY += cursorHeight;
- }
- },
- // check new document height
- [](int docWidth, int docHeight, int newWidth, int newHeight)
- {
- CPPUNIT_ASSERT_EQUAL(docWidth, newWidth);
- CPPUNIT_ASSERT(newHeight > docHeight);
- },
- "maxRow"
- );
- }
- catch (const Poco::Exception& exc)
- {
- CPPUNIT_FAIL(exc.displayText());
- }
-}
-
void HTTPWSTest::getPartHashCodes(const std::string& testname,
const std::string& response,
std::vector<std::string>& parts)
@@ -705,230 +603,6 @@ void HTTPWSTest::getPartHashCodes(const std::string& testname,
CPPUNIT_ASSERT_EQUAL(totalParts, (int)parts.size());
}
-void HTTPWSTest::getCursor(const std::string& message,
- int& cursorX, int& cursorY, int& cursorWidth, int& cursorHeight)
-{
- Poco::JSON::Parser parser;
- const Poco::Dynamic::Var result = parser.parse(message);
- const auto& command = result.extract<Poco::JSON::Object::Ptr>();
- std::string text = command->get("commandName").toString();
- CPPUNIT_ASSERT_EQUAL(std::string(".uno:CellCursor"), text);
- text = command->get("commandValues").toString();
- CPPUNIT_ASSERT(!text.empty());
- std::vector<std::string> position(LOOLProtocol::tokenize(text, ','));
- cursorX = std::stoi(position[0]);
- cursorY = std::stoi(position[1]);
- cursorWidth = std::stoi(position[2]);
- cursorHeight = std::stoi(position[3]);
- CPPUNIT_ASSERT(cursorX >= 0);
- CPPUNIT_ASSERT(cursorY >= 0);
- CPPUNIT_ASSERT(cursorWidth >= 0);
- CPPUNIT_ASSERT(cursorHeight >= 0);
-}
-
-void HTTPWSTest::limitCursor(const std::function<void(const std::shared_ptr<LOOLWebSocket>& socket,
- int cursorX, int cursorY,
- int cursorWidth, int cursorHeight,
- int docWidth, int docHeight)>& keyhandler,
- const std::function<void(int docWidth, int docHeight,
- int newWidth, int newHeight)>& checkhandler,
- const std::string& testname)
-{
- int docSheet = -1;
- int docSheets = 0;
- int docHeight = 0;
- int docWidth = 0;
- int docViewId = -1;
- int newSheet = -1;
- int newSheets = 0;
- int newHeight = 0;
- int newWidth = 0;
- int cursorX = 0;
- int cursorY = 0;
- int cursorWidth = 0;
- int cursorHeight = 0;
-
- std::string response;
-
- std::shared_ptr<LOOLWebSocket> socket = loadDocAndGetSocket("empty.ods", _uri, testname);
-
- // check document size
- sendTextFrame(socket, "status", testname);
- response = assertResponseString(socket, "status:", testname);
- parseDocSize(response.substr(7), "spreadsheet", docSheet, docSheets, docWidth, docHeight, docViewId);
-
- // Send an arrow key to initialize the CellCursor, otherwise we get "EMPTY".
- sendTextFrame(socket, "key type=input char=0 key=1027", testname);
-
- std::string text;
- Poco::format(text, "commandvalues command=.uno:CellCursor?outputHeight=%d&outputWidth=%d&tileHeight=%d&tileWidth=%d",
- 256, 256, 3840, 3840);
- sendTextFrame(socket, text, testname);
- const auto cursor = getResponseString(socket, "commandvalues:", testname);
- getCursor(cursor.substr(14), cursorX, cursorY, cursorWidth, cursorHeight);
-
- // move cursor
- keyhandler(socket, cursorX, cursorY, cursorWidth, cursorHeight, docWidth, docHeight);
-
- // filter messages, and expect to receive new document size
- response = assertResponseString(socket, "status:", testname);
- parseDocSize(response.substr(7), "spreadsheet", newSheet, newSheets, newWidth, newHeight, docViewId);
-
- CPPUNIT_ASSERT_EQUAL(docSheets, newSheets);
- CPPUNIT_ASSERT_EQUAL(docSheet, newSheet);
-
- // check new document size
- checkhandler(docWidth, docHeight, newWidth, newHeight);
-}
-
-void HTTPWSTest::testInsertAnnotationWriter()
-{
- const char* testname = "insertAnnotationWriter ";
-
- std::string documentPath, documentURL;
- getDocumentPathAndURL("hello.odt", documentPath, documentURL, testname);
- Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL);
-
- std::shared_ptr<LOOLWebSocket> socket = loadDocAndGetSocket(_uri, documentURL, testname);
-
- // Insert comment.
- sendTextFrame(socket, "uno .uno:InsertAnnotation", testname);
- assertResponseString(socket, "invalidatetiles:", testname);
-
- // Paste some text.
- sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\nxxx yyy zzzz", testname);
-
- // Read it back.
- std::string res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: xxx yyy zzzz"), res);
- // Can we edit the comment?
- sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\naaa bbb ccc", testname);
- res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: aaa bbb ccc"), res);
-
- // Confirm that the text is in the comment and not doc body.
- // Click in the body.
- sendTextFrame(socket, "mouse type=buttondown x=1600 y=1600 count=1 buttons=1 modifier=0", testname);
- sendTextFrame(socket, "mouse type=buttonup x=1600 y=1600 count=1 buttons=1 modifier=0", testname);
- // Read body text.
- res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: Hello world"), res);
-
- // Confirm that the comment is still intact.
- sendTextFrame(socket, "mouse type=buttondown x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
- sendTextFrame(socket, "mouse type=buttonup x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
- res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: aaa bbb ccc"), res);
-
- // Can we still edit the comment?
- sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\nand now for something completely different", testname);
- res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: and now for something completely different"), res);
-
- // Close and reopen the same document and test again.
- socket->shutdown();
-
- // Make sure the document is fully unloaded.
- testNoExtraLoolKitsLeft();
-
- TST_LOG("Reloading ");
- socket = loadDocAndGetSocket(_uri, documentURL, testname);
-
- // Confirm that the text is in the comment and not doc body.
- // Click in the body.
- sendTextFrame(socket, "mouse type=buttondown x=1600 y=1600 count=1 buttons=1 modifier=0", testname);
- sendTextFrame(socket, "mouse type=buttonup x=1600 y=1600 count=1 buttons=1 modifier=0", testname);
- // Read body text.
- res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: Hello world"), res);
-
- // Confirm that the comment is still intact.
- sendTextFrame(socket, "mouse type=buttondown x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
- sendTextFrame(socket, "mouse type=buttonup x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
- res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: and now for something completely different"), res);
-
- // Can we still edit the comment?
- sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\nblah blah xyz", testname);
- res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: blah blah xyz"), res);
-}
-
-void HTTPWSTest::testEditAnnotationWriter()
-{
- const char* testname = "editAnnotationWriter ";
-
- std::string documentPath, documentURL;
- getDocumentPathAndURL("with_comment.odt", documentPath, documentURL, testname);
-
- std::shared_ptr<LOOLWebSocket> socket = loadDocAndGetSocket(_uri, documentURL, testname);
-
- // Click in the body.
- sendTextFrame(socket, "mouse type=buttondown x=1600 y=1600 count=1 buttons=1 modifier=0", testname);
- sendTextFrame(socket, "mouse type=buttonup x=1600 y=1600 count=1 buttons=1 modifier=0", testname);
- // Read body text.
- std::string res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: Hello world"), res);
-
- // Confirm that the comment is intact.
- sendTextFrame(socket, "mouse type=buttondown x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
- sendTextFrame(socket, "mouse type=buttonup x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
- res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: blah blah xyz"), res);
-
- // Can we still edit the comment?
- sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\nand now for something completely different", testname);
- res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: and now for something completely different"), res);
-
- const int kitcount = getLoolKitProcessCount();
-
- // Close and reopen the same document and test again.
- TST_LOG("Closing connection after pasting.");
- socket->shutdown();
-
- TST_LOG("Reloading ");
- socket = loadDocAndGetSocket(_uri, documentURL, testname);
-
- // Should have no new instances.
- CPPUNIT_ASSERT_EQUAL(kitcount, countLoolKitProcesses(kitcount));
-
- // Confirm that the text is in the comment and not doc body.
- // Click in the body.
- sendTextFrame(socket, "mouse type=buttondown x=1600 y=1600 count=1 buttons=1 modifier=0", testname);
- sendTextFrame(socket, "mouse type=buttonup x=1600 y=1600 count=1 buttons=1 modifier=0", testname);
- // Read body text.
- res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: Hello world"), res);
-
- // Confirm that the comment is still intact.
- sendTextFrame(socket, "mouse type=buttondown x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
- sendTextFrame(socket, "mouse type=buttonup x=13855 y=1893 count=1 buttons=1 modifier=0", testname);
- res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: and now for something completely different"), res);
-
- // Can we still edit the comment?
- sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\nnew text different", testname);
- res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: new text different"), res);
-}
-
-void HTTPWSTest::testInsertAnnotationCalc()
-{
- const char* testname = "insertAnnotationCalc ";
- std::shared_ptr<LOOLWebSocket> socket = loadDocAndGetSocket("setclientpart.ods", _uri, testname);
-
- // Insert comment.
- sendTextFrame(socket, "uno .uno:InsertAnnotation", testname);
-
- // Paste some text.
- sendTextFrame(socket, "paste mimetype=text/plain;charset=utf-8\naaa bbb ccc", testname);
-
- // Read it back.
- std::string res = getAllText(socket, testname);
- CPPUNIT_ASSERT_EQUAL(std::string("textselectioncontent: aaa bbb ccc"), res);
-}
-
void HTTPWSTest::testCalcEditRendering()
{
const char* testname = "calcEditRendering ";
More information about the Libreoffice-commits
mailing list