[Libreoffice-commits] online.git: loolwsd/test

Henry Castro hcastro at collabora.com
Wed May 11 22:47:45 UTC 2016


 loolwsd/test/httpwstest.cpp |  204 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 204 insertions(+)

New commits:
commit f1c56d198a90df2d7f05462fbb1c272c90abdae7
Author: Henry Castro <hcastro at collabora.com>
Date:   Wed May 11 18:47:48 2016 -0400

    loolwsd: test: add test max col and row

diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp
index de19f21..0099ded 100644
--- a/loolwsd/test/httpwstest.cpp
+++ b/loolwsd/test/httpwstest.cpp
@@ -76,6 +76,8 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testEditLock);
     CPPUNIT_TEST(testSlideShow);
     CPPUNIT_TEST(testInactiveClient);
+    CPPUNIT_TEST(testMaxColumn);
+    CPPUNIT_TEST(testMaxRow);
 
     CPPUNIT_TEST_SUITE_END();
 
@@ -101,12 +103,33 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture
     void testEditLock();
     void testSlideShow();
     void testInactiveClient();
+    void testMaxColumn();
+    void testMaxRow();
 
     void loadDoc(const std::string& documentURL);
 
     void getPartHashCodes(const std::string response,
                           std::vector<std::string>& parts);
 
+    void getDocSize(const std::string& message,
+                    const std::string& type,
+                    int& part,
+                    int& parts,
+                    int& width,
+                    int& height);
+
+    void getCursor(const std::string& message,
+                   int& cursorX,
+                   int& cursorY,
+                   int& cursorWidth,
+                   int& cursorHeight);
+
+    void testLimitCursor( std::function<void(const std::shared_ptr<Poco::Net::WebSocket>& socket,
+                                             int cursorX, int cursorY,
+                                             int cursorWidth, int cursorHeight,
+                                             int docWidth, int docHeight)> keyhandler,
+                          std::function<void(int docWidth, int docHeight,
+                                             int newWidth, int newHeight)> checkhandler);
 public:
     HTTPWSTest()
         : _uri(helpers::getTestServerURI())
@@ -1206,6 +1229,84 @@ void HTTPWSTest::testInactiveClient()
     }
 }
 
+void HTTPWSTest::testMaxColumn()
+{
+    try
+    {
+        testLimitCursor(
+            // move cursor to last column
+            [](const std::shared_ptr<Poco::Net::WebSocket>& 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);
+            }
+
+        );
+    }
+    catch (const Poco::Exception& exc)
+    {
+        CPPUNIT_FAIL(exc.displayText());
+    }
+}
+
+void HTTPWSTest::testMaxRow()
+{
+    try
+    {
+        testLimitCursor(
+            // move cursor to last row
+            [](const std::shared_ptr<Poco::Net::WebSocket>& 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);
+            }
+
+        );
+    }
+    catch (const Poco::Exception& exc)
+    {
+        CPPUNIT_FAIL(exc.displayText());
+    }
+}
+
 void HTTPWSTest::testNoExtraLoolKitsLeft()
 {
     const auto countNow = countLoolKitProcesses(_initialLoolKitCount);
@@ -1253,6 +1354,109 @@ void HTTPWSTest::getPartHashCodes(const std::string status,
     CPPUNIT_ASSERT_EQUAL(totalParts, (int)parts.size());
 }
 
+void HTTPWSTest::getDocSize(const std::string& message, const std::string& type,
+                            int& part, int& parts, int& width, int& height)
+{
+    Poco::StringTokenizer tokens(message, " ", Poco::StringTokenizer::TOK_IGNORE_EMPTY | Poco::StringTokenizer::TOK_TRIM);
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(5), tokens.count());
+
+    // Expected format is something like 'type= parts= current= width= height='.
+    const std::string text = tokens[0].substr(std::string("type=").size());
+    parts = std::stoi(tokens[1].substr(std::string("parts=").size()));
+    part = std::stoi(tokens[2].substr(std::string("current=").size()));
+    width = std::stoi(tokens[3].substr(std::string("width=").size()));
+    height = std::stoi(tokens[4].substr(std::string("height=").size()));
+    CPPUNIT_ASSERT_EQUAL(type, text);
+    CPPUNIT_ASSERT(parts > 0);
+    CPPUNIT_ASSERT(part >= 0);
+    CPPUNIT_ASSERT(width > 0);
+    CPPUNIT_ASSERT(height > 0);
+}
+
+void HTTPWSTest::getCursor(const std::string& message,
+                           int& cursorX, int& cursorY, int& cursorWidth, int& cursorHeight)
+{
+    Poco::JSON::Parser parser;
+    const auto result = parser.parse(message);
+    const auto& command = result.extract<Poco::JSON::Object::Ptr>();
+    auto text = command->get("commandName").toString();
+    CPPUNIT_ASSERT_EQUAL(std::string(".uno:CellCursor"), text);
+    text = command->get("commandValues").toString();
+    CPPUNIT_ASSERT(!text.empty());
+    Poco::StringTokenizer position(text, ",", Poco::StringTokenizer::TOK_IGNORE_EMPTY | Poco::StringTokenizer::TOK_TRIM);
+    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::testLimitCursor( std::function<void(const std::shared_ptr<Poco::Net::WebSocket>& socket,
+                                                     int cursorX, int cursorY,
+                                                     int cursorWidth, int cursorHeight,
+                                                     int docWidth, int docHeight)> keyhandler,
+                                  std::function<void(int docWidth, int docHeight,
+                                                     int newWidth, int newHeight)> checkhandler)
+
+{
+    int docSheet = -1;
+    int docSheets = 0;
+    int docHeight = 0;
+    int docWidth = 0;
+    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 docPath;
+    std::string docURL;
+    std::string response;
+    std::string text;
+
+    getDocumentPathAndURL("setclientpart.ods", docPath, docURL);
+    Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, docURL);
+
+    auto socket = loadDocAndGetSocket(_uri, docURL);
+    // check document size
+    sendTextFrame(socket, "status");
+    getResponseMessage(socket, "status:", response, false);
+    CPPUNIT_ASSERT_MESSAGE("did not receive a status: message as expected", !response.empty());
+    getDocSize(response, "spreadsheet", docSheet, docSheets, docWidth, docHeight);
+
+    text.clear();
+    Poco::format(text, "commandvalues command=.uno:CellCursor?outputHeight=%d&outputWidth=%d&tileHeight=%d&tileWidth=%d",
+        256, 256, 3840, 3840);
+    sendTextFrame(socket, text);
+    getResponseMessage(socket, "commandvalues:", response, false);
+    CPPUNIT_ASSERT_MESSAGE("did not receive a commandvalues: message as expected", !response.empty());
+    getCursor(response, cursorX, cursorY, cursorWidth, cursorHeight);
+
+    // move cursor
+    keyhandler(socket, cursorX, cursorY, cursorWidth, cursorHeight, docWidth, docHeight);
+
+    // filter messages, and expect to receive new document size
+    getResponseMessage(socket, "status:", response, false);
+    CPPUNIT_ASSERT_MESSAGE("did not receive a status: message as expected", !response.empty());
+    getDocSize(response, "spreadsheet", newSheet, newSheets, newWidth, newHeight);
+
+    CPPUNIT_ASSERT_EQUAL(docSheets, newSheets);
+    CPPUNIT_ASSERT_EQUAL(docSheet, newSheet);
+
+    // check new document size
+    checkhandler(docWidth, docHeight, newWidth, newHeight);
+
+    socket->shutdown();
+    Util::removeFile(docPath);
+}
+
+
 CPPUNIT_TEST_SUITE_REGISTRATION(HTTPWSTest);
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list