[Libreoffice-commits] online.git: loolwsd/test
Henry Castro
hcastro at collabora.com
Wed Apr 27 20:47:13 UTC 2016
loolwsd/test/data/setclientpart.ods |binary
loolwsd/test/httpwstest.cpp | 174 +++++++++++++++++++++---------------
2 files changed, 105 insertions(+), 69 deletions(-)
New commits:
commit 63780165860a82e2fbb49251798d8b3c83454767
Author: Henry Castro <hcastro at collabora.com>
Date: Wed Apr 27 16:47:28 2016 -0400
loolwsd: test: add testClientPartCalc
diff --git a/loolwsd/test/data/setclientpart.ods b/loolwsd/test/data/setclientpart.ods
new file mode 100644
index 0000000..8309df0
Binary files /dev/null and b/loolwsd/test/data/setclientpart.ods differ
diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp
index a22a052..04093c2 100644
--- a/loolwsd/test/httpwstest.cpp
+++ b/loolwsd/test/httpwstest.cpp
@@ -72,6 +72,7 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture
CPPUNIT_TEST(testPasswordProtectedDocumentWithCorrectPasswordAgain);
CPPUNIT_TEST(testInsertDelete);
CPPUNIT_TEST(testClientPartImpress);
+ CPPUNIT_TEST(testClientPartCalc);
#if ENABLE_DEBUG
CPPUNIT_TEST(testSimultaneousTilesRenderedJustOnce);
#endif
@@ -100,6 +101,7 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture
void testPasswordProtectedDocumentWithCorrectPasswordAgain();
void testInsertDelete();
void testClientPartImpress();
+ void testClientPartCalc();
void testSimultaneousTilesRenderedJustOnce();
void testNoExtraLoolKitsLeft();
@@ -117,6 +119,9 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture
std::string& response,
const bool isLine);
+ void checkTiles(Poco::Net::WebSocket& socket,
+ const std::string& type);
+
void requestTiles(Poco::Net::WebSocket& socket,
const int part,
const int docWidth,
@@ -1029,22 +1034,6 @@ void HTTPWSTest::testClientPartImpress()
{
try
{
- const std::string current = "current=";
- const std::string height = "height=";
- const std::string parts = "parts=";
- const std::string type = "type=";
- const std::string width = "width=";
-
- int currentPart = -1;
- int totalParts = 0;
- int docHeight = 0;
- int docWidth = 0;
-
- std::string response;
- std::string text;
-
- std::vector<std::string> partHashs;
-
// Load a document
const std::string documentPath = Util::getTempFilePath(TDOC, "setclientpart.odp");
const std::string documentURL = "file://" + Poco::Path(documentPath).makeAbsolute().toString();
@@ -1055,62 +1044,32 @@ void HTTPWSTest::testClientPartImpress()
sendTextFrame(socket, "load url=" + documentURL);
CPPUNIT_ASSERT_MESSAGE("cannot load the document " + documentURL, isDocumentLoaded(socket));
- // check total slides 10
- getResponseMessage(socket, "status:", response, false);
- CPPUNIT_ASSERT_MESSAGE("did not receive a status: message as expected", !response.empty());
- {
- std::cout << "status: " << response << std::endl;
- Poco::StringTokenizer tokens(response, " ", Poco::StringTokenizer::TOK_IGNORE_EMPTY | Poco::StringTokenizer::TOK_TRIM);
- CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(5), tokens.count());
+ checkTiles(socket, "presentation");
- // Expected format is something like 'type= parts= current= width= height='.
- text = tokens[0].substr(type.size());
- totalParts = std::stoi(tokens[1].substr(parts.size()));
- currentPart = std::stoi(tokens[2].substr(current.size()));
- docWidth = std::stoi(tokens[3].substr(width.size()));
- docHeight = std::stoi(tokens[4].substr(height.size()));
- CPPUNIT_ASSERT_EQUAL(std::string("presentation"), text);
- CPPUNIT_ASSERT_EQUAL(10, totalParts);
- CPPUNIT_ASSERT(currentPart > -1);
- CPPUNIT_ASSERT(docWidth > 0);
- CPPUNIT_ASSERT(docHeight > 0);
- }
+ socket.shutdown();
+ Util::removeFile(documentPath);
+ }
+ catch (const Poco::Exception& exc)
+ {
+ CPPUNIT_FAIL(exc.displayText());
+ }
+}
- // first full invalidation
- getResponseMessage(socket, "invalidatetiles:", response, true);
- CPPUNIT_ASSERT_MESSAGE("did not receive a invalidatetiles: message as expected", !response.empty());
- {
- Poco::StringTokenizer tokens(response, ":", Poco::StringTokenizer::TOK_IGNORE_EMPTY | Poco::StringTokenizer::TOK_TRIM);
- CPPUNIT_ASSERT_EQUAL(std::string("EMPTY"), tokens[0]);
- }
+void HTTPWSTest::testClientPartCalc()
+{
+ try
+ {
+ // Load a document
+ const std::string documentPath = Util::getTempFilePath(TDOC, "setclientpart.ods");
+ const std::string documentURL = "file://" + Poco::Path(documentPath).makeAbsolute().toString();
- // request tiles
- requestTiles(socket, currentPart, docWidth, docHeight);
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL);
+ Poco::Net::WebSocket socket = *connectLOKit(request, _response);
- // random setclientpart
- std::srand(std::time(0));
- std::vector<int> vParts = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
- std::random_shuffle (vParts.begin(), vParts.end());
- for (auto it : vParts)
- {
- if (currentPart != it)
- {
- // change part
- text = Poco::format("setclientpart part=%d", it);
- std::cout << text << std::endl;
- sendTextFrame(socket, text);
-
- // get full invalidation
- getResponseMessage(socket, "invalidatetiles:", response, true);
- CPPUNIT_ASSERT_MESSAGE("did not receive a invalidatetiles: message as expected", !response.empty());
- {
- Poco::StringTokenizer tokens(response, ":", Poco::StringTokenizer::TOK_IGNORE_EMPTY | Poco::StringTokenizer::TOK_TRIM);
- CPPUNIT_ASSERT_EQUAL(std::string("EMPTY"), tokens[0]);
- }
- requestTiles(socket, it, docWidth, docHeight);
- }
- currentPart = it;
- }
+ sendTextFrame(socket, "load url=" + documentURL);
+ CPPUNIT_ASSERT_MESSAGE("cannot load the document " + documentURL, isDocumentLoaded(socket));
+
+ checkTiles(socket, "spreadsheet");
socket.shutdown();
Util::removeFile(documentPath);
@@ -1121,7 +1080,6 @@ void HTTPWSTest::testClientPartImpress()
}
}
-
void HTTPWSTest::testSimultaneousTilesRenderedJustOnce()
{
const std::string documentPath = Util::getTempFilePath(TDOC, "hello.odt");
@@ -1274,6 +1232,84 @@ void HTTPWSTest::getResponseMessage(Poco::Net::WebSocket& ws, const std::string&
}
}
+void HTTPWSTest::checkTiles(Poco::Net::WebSocket& socket, const std::string& docType)
+{
+ const std::string current = "current=";
+ const std::string height = "height=";
+ const std::string parts = "parts=";
+ const std::string type = "type=";
+ const std::string width = "width=";
+
+ int currentPart = -1;
+ int totalParts = 0;
+ int docHeight = 0;
+ int docWidth = 0;
+
+ std::string response;
+ std::string text;
+
+ // check total slides 10
+ getResponseMessage(socket, "status:", response, false);
+ CPPUNIT_ASSERT_MESSAGE("did not receive a status: message as expected", !response.empty());
+ {
+ std::cout << "status: " << response << std::endl;
+ Poco::StringTokenizer tokens(response, " ", 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='.
+ text = tokens[0].substr(type.size());
+ totalParts = std::stoi(tokens[1].substr(parts.size()));
+ currentPart = std::stoi(tokens[2].substr(current.size()));
+ docWidth = std::stoi(tokens[3].substr(width.size()));
+ docHeight = std::stoi(tokens[4].substr(height.size()));
+ CPPUNIT_ASSERT_EQUAL(docType, text);
+ CPPUNIT_ASSERT_EQUAL(10, totalParts);
+ CPPUNIT_ASSERT(currentPart > -1);
+ CPPUNIT_ASSERT(docWidth > 0);
+ CPPUNIT_ASSERT(docHeight > 0);
+ }
+
+ if (docType == "presentation")
+ {
+ // first full invalidation
+ getResponseMessage(socket, "invalidatetiles:", response, true);
+ CPPUNIT_ASSERT_MESSAGE("did not receive a invalidatetiles: message as expected", !response.empty());
+ {
+ Poco::StringTokenizer tokens(response, ":", Poco::StringTokenizer::TOK_IGNORE_EMPTY | Poco::StringTokenizer::TOK_TRIM);
+ CPPUNIT_ASSERT_EQUAL(std::string("EMPTY"), tokens[0]);
+ }
+
+ // request tiles
+ requestTiles(socket, currentPart, docWidth, docHeight);
+ }
+
+ // random setclientpart
+ std::srand(std::time(0));
+ std::vector<int> vParts = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+ std::random_shuffle (vParts.begin(), vParts.end());
+ for (auto it : vParts)
+ {
+ if (currentPart != it)
+ {
+ // change part
+ text = Poco::format("setclientpart part=%d", it);
+ std::cout << text << std::endl;
+ sendTextFrame(socket, text);
+
+ // get full invalidation
+ getResponseMessage(socket, "invalidatetiles:", response, true);
+ CPPUNIT_ASSERT_MESSAGE("did not receive a invalidatetiles: message as expected", !response.empty());
+ {
+ Poco::StringTokenizer tokens(response, ":", Poco::StringTokenizer::TOK_IGNORE_EMPTY | Poco::StringTokenizer::TOK_TRIM);
+ CPPUNIT_ASSERT_EQUAL(std::string("EMPTY"), tokens[0]);
+ }
+ requestTiles(socket, it, docWidth, docHeight);
+ }
+ currentPart = it;
+ }
+}
+
+
void HTTPWSTest::requestTiles(Poco::Net::WebSocket& socket, const int part, const int docWidth, const int docHeight)
{
// twips
More information about the Libreoffice-commits
mailing list