common/Protocol.hpp | 33 ++++++++++++++++++++++++++------- test/WhiteBoxTests.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 7 deletions(-)
New commits: commit 2428a4e3a107feb94128c88e1420eb86a670c6ff Author: Ashod Nakashian <[email protected]> Date: Sun Dec 18 13:09:13 2016 -0500 wsd: more Protocol unittests Change-Id: I72742f767d9dcfcf1edbfaed4fada628ebef156f Reviewed-on: https://gerrit.libreoffice.org/32159 Reviewed-by: Ashod Nakashian <[email protected]> Tested-by: Ashod Nakashian <[email protected]> diff --git a/common/Protocol.hpp b/common/Protocol.hpp index 31cb16e..fa7ba7a 100644 --- a/common/Protocol.hpp +++ b/common/Protocol.hpp @@ -120,16 +120,22 @@ namespace LOOLProtocol return tokenize(s.data(), s.size()); } - inline - std::string getDelimitedInitialSubstring(const char *message, const int length, const char delim) + inline size_t getDelimiterPosition(const char* message, const int length, const char delim) { - if (message == nullptr || length <= 0) + if (message && length > 0) { - return ""; + const char *founddelim = static_cast<const char *>(std::memchr(message, delim, length)); + const auto size = (founddelim == nullptr ? length : founddelim - message); + return size; } - const char *founddelim = static_cast<const char *>(std::memchr(message, delim, length)); - const auto size = (founddelim == nullptr ? length : founddelim - message); + return 0; + } + + inline + std::string getDelimitedInitialSubstring(const char *message, const int length, const char delim) + { + const auto size = getDelimiterPosition(message, length, delim); return std::string(message, size); } @@ -221,7 +227,7 @@ namespace LOOLProtocol { if (message == nullptr || length <= 0) { - return ""; + return std::string(); } const auto firstLine = getFirstLine(message, std::min(length, 120)); @@ -235,6 +241,19 @@ namespace LOOLProtocol return firstLine; } + inline std::string getAbbreviatedMessage(const std::string& message) + { + const auto pos = getDelimiterPosition(message.data(), std::min(message.size(), 120UL), '\n'); + + // If first line is less than the length (minus newline), add ellipsis. + if (pos < static_cast<std::string::size_type>(message.size()) - 1) + { + return message.substr(0, pos) + "..."; + } + + return message; + } + template <typename T> std::string getAbbreviatedMessage(const T& message) { diff --git a/test/WhiteBoxTests.cpp b/test/WhiteBoxTests.cpp index 03cf59b..fae37b6 100644 --- a/test/WhiteBoxTests.cpp +++ b/test/WhiteBoxTests.cpp @@ -24,6 +24,7 @@ class WhiteBoxTests : public CPPUNIT_NS::TestFixture CPPUNIT_TEST_SUITE(WhiteBoxTests); CPPUNIT_TEST(testLOOLProtocolFunctions); + CPPUNIT_TEST(testMessageAbbreviation); CPPUNIT_TEST(testTokenizer); CPPUNIT_TEST(testRegexListMatcher); CPPUNIT_TEST(testRegexListMatcher_Init); @@ -32,6 +33,7 @@ class WhiteBoxTests : public CPPUNIT_NS::TestFixture CPPUNIT_TEST_SUITE_END(); void testLOOLProtocolFunctions(); + void testMessageAbbreviation(); void testTokenizer(); void testRegexListMatcher(); void testRegexListMatcher_Init(); @@ -126,6 +128,42 @@ void WhiteBoxTests::testLOOLProtocolFunctions() CPPUNIT_ASSERT_EQUAL(std::string(""), Util::trim(s)); } +void WhiteBoxTests::testMessageAbbreviation() +{ + CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getDelimitedInitialSubstring(nullptr, 5, '\n')); + CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getDelimitedInitialSubstring(nullptr, -1, '\n')); + CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getDelimitedInitialSubstring("abc", 0, '\n')); + CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getDelimitedInitialSubstring("abc", -1, '\n')); + CPPUNIT_ASSERT_EQUAL(std::string("ab"), LOOLProtocol::getDelimitedInitialSubstring("abc", 2, '\n')); + + CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getAbbreviatedMessage(nullptr, 5)); + CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getAbbreviatedMessage(nullptr, -1)); + CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getAbbreviatedMessage("abc", 0)); + CPPUNIT_ASSERT_EQUAL(std::string(), LOOLProtocol::getAbbreviatedMessage("abc", -1)); + CPPUNIT_ASSERT_EQUAL(std::string("ab"), LOOLProtocol::getAbbreviatedMessage("abc", 2)); + + std::string s; + std::string abbr; + + s = "abcdefg"; + CPPUNIT_ASSERT_EQUAL(s, LOOLProtocol::getAbbreviatedMessage(s)); + + s = "1234567890123\n45678901234567890123456789012345678901234567890123"; + abbr = "1234567890123..."; + CPPUNIT_ASSERT_EQUAL(abbr, LOOLProtocol::getAbbreviatedMessage(s.data(), s.size())); + CPPUNIT_ASSERT_EQUAL(abbr, LOOLProtocol::getAbbreviatedMessage(s)); + + // 120 characters. Change when the abbreviation max-length changes. + s = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"; + CPPUNIT_ASSERT_EQUAL(s, LOOLProtocol::getAbbreviatedMessage(s.data(), s.size())); + CPPUNIT_ASSERT_EQUAL(s, LOOLProtocol::getAbbreviatedMessage(s)); + + abbr = s + "..."; + s += "more data"; + CPPUNIT_ASSERT_EQUAL(abbr, LOOLProtocol::getAbbreviatedMessage(s.data(), s.size())); + CPPUNIT_ASSERT_EQUAL(abbr, LOOLProtocol::getAbbreviatedMessage(s)); +} + void WhiteBoxTests::testTokenizer() { std::vector<std::string> tokens; _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
