From adf436923719972b0c2a6d5b473b86071a7ade26 Mon Sep 17 00:00:00 2001 From: Henry Castro Date: Sun, 10 Jul 2016 14:28:28 -0400 Subject: [PATCH] loolwsd: test: state changed UNO commands --- loolwsd/test/httpwstest.cpp | 216 +++++++++++++++++++++++++++++++++++- 1 file changed, 215 insertions(+), 1 deletion(-) diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp index 43f7ca300..ed7c37a7f 100644 --- a/loolwsd/test/httpwstest.cpp +++ b/loolwsd/test/httpwstest.cpp @@ -84,6 +84,7 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture CPPUNIT_TEST(testInsertAnnotationCalc); CPPUNIT_TEST(testCalcEditRendering); CPPUNIT_TEST(testFontList); + CPPUNIT_TEST(testStateUnoCommand); CPPUNIT_TEST_SUITE_END(); @@ -116,6 +117,7 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture void testInsertAnnotationCalc(); void testCalcEditRendering(); void testFontList(); + void testStateUnoCommand(); void loadDoc(const std::string& documentURL); @@ -136,6 +138,7 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture int newWidth, int newHeight)> checkhandler); std::string getFontList(const std::string& message); + void testStateChanged(const std::string& filename, std::vector& vecComands); public: HTTPWSTest() @@ -1611,7 +1614,218 @@ void HTTPWSTest::testFontList() std::copy(response.begin() + std::string("commandvalues:").length() + 1, response.end(), std::ostream_iterator(streamResponse)); text = getFontList(streamResponse.str()); CPPUNIT_ASSERT(!text.empty()); - std::cerr << "testFontNames : " << text << std::endl; + } + catch (const Poco::Exception& exc) + { + CPPUNIT_FAIL(exc.displayText()); + } +} + +void HTTPWSTest::testStateChanged(const std::string& filename, std::vector& vecCommands) +{ + std::string docPath; + std::string docURL; + std::string response; + std::string text; + + getDocumentPathAndURL(filename.c_str(), docPath, docURL); + Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, docURL); + + auto socket = loadDocAndGetSocket(_uri, docURL, "testCommands "); + SocketProcessor("", socket, + [&](const std::string& msg) + { + Poco::RegularExpression::MatchVec matches; + Poco::RegularExpression reUno("\\.[a-zA-Z]*\\:[a-zA-Z]*\\="); + + if (reUno.match(msg, 0, matches) > 0 && matches.size() == 1) + { + const auto str = msg.substr(matches[0].offset, matches[0].length); + auto result = std::find(std::begin(vecCommands), std::end(vecCommands), str); + + if (result != std::end(vecCommands)) + { + vecCommands.erase(result); + } + } + + if (vecCommands.size() == 0) + return false; + + return true; + }); + + if (vecCommands.size() > 0 ) + { + std::ostringstream ostr; + + ostr << filename << " : Missing Uno Commands: " << std::endl; + for (auto itUno : vecCommands) + ostr << itUno << std::endl; + + CPPUNIT_FAIL(ostr.str()); + } +} + +void HTTPWSTest::testStateUnoCommand() +{ + std::vector calcCommands + { + ".uno:BackgroundColor=", + ".uno:Bold=", + ".uno:CenterPara=", + ".uno:CharBackColor=", + ".uno:CharFontName=", + ".uno:Color=", + ".uno:FontHeight=", + ".uno:Italic=", + ".uno:JustifyPara=", + ".uno:OutlineFont=", + ".uno:LeftPara=", + ".uno:RightPara=", + ".uno:Shadowed=", + ".uno:SubScript=", + ".uno:SuperScript=", + ".uno:Strikeout=", + ".uno:StyleApply=", + ".uno:Underline=", + ".uno:ModifiedStatus=", + ".uno:Undo=", + ".uno:Redo=", + ".uno:Cut=", + ".uno:Copy=", + ".uno:Paste=", + ".uno:SelectAll=", + ".uno:InsertAnnotation=", + ".uno:InsertRowsBefore=", + ".uno:InsertRowsAfter=", + ".uno:InsertColumnsBefore=", + ".uno:InsertColumnsAfter=", + ".uno:DeleteRows=", + ".uno:DeleteColumns=", + ".uno:MergeCells=", + ".uno:StatusDocPos=", + ".uno:RowColSelCount=", + ".uno:StatusPageStyle=", + ".uno:InsertMode=", + ".uno:StatusSelectionMode=", + ".uno:StateTableCell=", + ".uno:StatusBarFunc=", + ".uno:WrapText=", + ".uno:ToggleMergeCells=", + ".uno:NumberFormatCurrency=", + ".uno:NumberFormatPercent=", + ".uno:NumberFormatDate=" + }; + + std::vector writerCommands + { + ".uno:BackColor=", + ".uno:BackgroundColor=", + ".uno:Bold=", + ".uno:CenterPara=", + ".uno:CharBackColor=", + ".uno:CharBackgroundExt=", + ".uno:CharFontName=", + ".uno:Color=", + ".uno:DefaultBullet=", + ".uno:DefaultNumbering=", + ".uno:FontColor=", + ".uno:FontHeight=", + ".uno:Italic=", + ".uno:JustifyPara=", + ".uno:OutlineFont=", + ".uno:LeftPara=", + ".uno:RightPara=", + ".uno:Shadowed=", + ".uno:SubScript=", + ".uno:SuperScript=", + ".uno:Strikeout=", + ".uno:StyleApply=", + ".uno:Underline=", + ".uno:ModifiedStatus=", + ".uno:Undo=", + ".uno:Redo=", + ".uno:Cut=", + ".uno:Copy=", + ".uno:Paste=", + ".uno:SelectAll=", + ".uno:InsertAnnotation=", + ".uno:InsertRowsBefore=", + ".uno:InsertRowsAfter=", + ".uno:InsertColumnsBefore=", + ".uno:InsertColumnsAfter=", + ".uno:DeleteRows=", + ".uno:DeleteColumns=", + ".uno:DeleteTable=", + ".uno:SelectTable=", + ".uno:EntireRow=", + ".uno:EntireColumn=", + ".uno:EntireCell=", + ".uno:MergeCells=", + ".uno:InsertMode=", + ".uno:StateTableCell=", + ".uno:StatePageNumber=", + ".uno:StateWordCount=", + ".uno:SelectionMode=", + ".uno:NumberFormatCurrency=", + ".uno:NumberFormatPercent=", + ".uno:NumberFormatDate=" + }; + + std::vector impressCommands + { + ".uno:Bold=", + ".uno:CenterPara=", + ".uno:CharBackColor=", + ".uno:CharFontName=", + ".uno:Color=", + ".uno:DefaultBullet=", + ".uno:DefaultNumbering=", + ".uno:FontHeight=", + ".uno:Italic=", + ".uno:JustifyPara=", + ".uno:OutlineFont=", + ".uno:LeftPara=", + ".uno:RightPara=", + ".uno:Shadowed=", + ".uno:SubScript=", + ".uno:SuperScript=", + ".uno:Strikeout=", + ".uno:StyleApply=", + ".uno:Underline=", + ".uno:ModifiedStatus=", + ".uno:Undo=", + ".uno:Redo=", + ".uno:InsertPage=", + ".uno:DeletePage=", + ".uno:DuplicatePage=", + ".uno:Cut=", + ".uno:Copy=", + ".uno:Paste=", + ".uno:SelectAll=", + ".uno:InsertAnnotation=", + ".uno:InsertRowsBefore=", + ".uno:InsertRowsAfter=", + ".uno:InsertColumnsBefore=", + ".uno:InsertColumnsAfter=", + ".uno:DeleteRows=", + ".uno:DeleteColumns=", + ".uno:SelectTable=", + ".uno:EntireRow=", + ".uno:EntireColumn=", + ".uno:MergeCells=", + ".uno:AssignLayout=", + ".uno:PageStatus=", + ".uno:LayoutStatus=", + ".uno:Context=", + }; + + try + { + testStateChanged(std::string("setclientpart.ods"), calcCommands); + testStateChanged(std::string("hello.odt"), writerCommands); + testStateChanged(std::string("setclientpart.odp"), impressCommands); } catch (const Poco::Exception& exc) {