[Libreoffice-commits] online.git: common/Util.cpp common/Util.hpp test/WhiteBoxTests.cpp

Ashod Nakashian ashod.nakashian at collabora.co.uk
Mon May 15 03:13:40 UTC 2017


 common/Util.cpp        |   16 +++++++++++-----
 common/Util.hpp        |    2 +-
 test/WhiteBoxTests.cpp |   12 ++++++++++++
 3 files changed, 24 insertions(+), 6 deletions(-)

New commits:
commit 484fcd63a52807637c3c34ee877801fab11c8505
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date:   Sun May 14 21:44:16 2017 -0400

    wsd: corrections to replace and unittests
    
    Change-Id: I0e03deaa710ba722a97c9f857b514f8ecb0e1682
    Reviewed-on: https://gerrit.libreoffice.org/37609
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
    Tested-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/common/Util.cpp b/common/Util.cpp
index 612f971e..803ebfb0 100644
--- a/common/Util.cpp
+++ b/common/Util.cpp
@@ -242,14 +242,20 @@ namespace Util
         return 0;
     }
 
-    std::string replace(const std::string& s, const std::string& a, const std::string& b)
+    std::string replace(std::string result, const std::string& a, const std::string& b)
     {
-        std::string result = s;
-        std::string::size_type pos;
-        while ((pos = result.find(a)) != std::string::npos)
+        const size_t aSize = a.size();
+        if (aSize > 0)
         {
-            result = result.replace(pos, a.size(), b);
+            const size_t bSize = b.size();
+            std::string::size_type pos = 0;
+            while ((pos = result.find(a, pos)) != std::string::npos)
+            {
+                result = result.replace(pos, aSize, b);
+                pos += bSize; // Skip the replacee to avoid endless recursion.
+            }
         }
+
         return result;
     }
 
diff --git a/common/Util.hpp b/common/Util.hpp
index 63bffc97..d2803a42 100644
--- a/common/Util.hpp
+++ b/common/Util.hpp
@@ -103,7 +103,7 @@ namespace Util
     /// Example: "procmemstats: pid=123 rss=12400 pss=566"
     std::string getMemoryStats(FILE* file);
 
-    std::string replace(const std::string& s, const std::string& a, const std::string& b);
+    std::string replace(std::string s, const std::string& a, const std::string& b);
 
     std::string formatLinesForLog(const std::string& s);
 
diff --git a/test/WhiteBoxTests.cpp b/test/WhiteBoxTests.cpp
index 7ddba7d2..effb7659 100644
--- a/test/WhiteBoxTests.cpp
+++ b/test/WhiteBoxTests.cpp
@@ -27,6 +27,7 @@ class WhiteBoxTests : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testLOOLProtocolFunctions);
     CPPUNIT_TEST(testMessageAbbreviation);
     CPPUNIT_TEST(testTokenizer);
+    CPPUNIT_TEST(testReplace);
     CPPUNIT_TEST(testRegexListMatcher);
     CPPUNIT_TEST(testRegexListMatcher_Init);
     CPPUNIT_TEST(testEmptyCellCursor);
@@ -37,6 +38,7 @@ class WhiteBoxTests : public CPPUNIT_NS::TestFixture
     void testLOOLProtocolFunctions();
     void testMessageAbbreviation();
     void testTokenizer();
+    void testReplace();
     void testRegexListMatcher();
     void testRegexListMatcher_Init();
     void testEmptyCellCursor();
@@ -218,6 +220,16 @@ void WhiteBoxTests::testTokenizer()
     CPPUNIT_ASSERT_EQUAL(std::string("ver=-1"), tokens[8]);
 }
 
+void WhiteBoxTests::testReplace()
+{
+    CPPUNIT_ASSERT_EQUAL(std::string("zesz one zwo flee"), Util::replace("test one two flee", "t", "z"));
+    CPPUNIT_ASSERT_EQUAL(std::string("testt one two flee"), Util::replace("test one two flee", "tes", "test"));
+    CPPUNIT_ASSERT_EQUAL(std::string("testest one two flee"), Util::replace("test one two flee", "tes", "testes"));
+    CPPUNIT_ASSERT_EQUAL(std::string("tete one two flee"), Util::replace("tettet one two flee", "tet", "te"));
+    CPPUNIT_ASSERT_EQUAL(std::string("t one two flee"), Util::replace("test one two flee", "tes", ""));
+    CPPUNIT_ASSERT_EQUAL(std::string("test one two flee"), Util::replace("test one two flee", "", "X"));
+}
+
 void WhiteBoxTests::testRegexListMatcher()
 {
     Util::RegexListMatcher matcher;


More information about the Libreoffice-commits mailing list