Improve tests for {Byte,Wide}String::Replace()

Add some empty string cases, some multiple replacement cases, and some
self-intersecting cases.

Change-Id: Iac51fab43d24f5a3ec7832f97d73b2b6b32122af
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/67770
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/bytestring_unittest.cpp b/core/fxcrt/bytestring_unittest.cpp
index e2e87f0..3452a1e 100644
--- a/core/fxcrt/bytestring_unittest.cpp
+++ b/core/fxcrt/bytestring_unittest.cpp
@@ -506,7 +506,16 @@
 }
 
 TEST(ByteString, Replace) {
+  ByteString empty;
+  empty.Replace("", "CLAMS");
+  empty.Replace("xx", "CLAMS");
+  EXPECT_EQ("", empty);
+
   ByteString fred("FRED");
+  fred.Replace("", "");
+  EXPECT_EQ("FRED", fred);
+  fred.Replace("", "CLAMS");
+  EXPECT_EQ("FRED", fred);
   fred.Replace("FR", "BL");
   EXPECT_EQ("BLED", fred);
   fred.Replace("D", "DDY");
@@ -517,10 +526,20 @@
   EXPECT_EQ("BY", fred);
   fred.Replace("BY", "HI");
   EXPECT_EQ("HI", fred);
-  fred.Replace("", "CLAMS");
-  EXPECT_EQ("HI", fred);
-  fred.Replace("HI", "");
+  fred.Replace("I", "IHIHI");
+  EXPECT_EQ("HIHIHI", fred);
+  fred.Replace("HI", "HO");
+  EXPECT_EQ("HOHOHO", fred);
+  fred.Replace("HO", "");
   EXPECT_EQ("", fred);
+
+  ByteString five_xs("xxxxx");
+  five_xs.Replace("xx", "xxx");
+  EXPECT_EQ("xxxxxxx", five_xs);
+
+  ByteString five_ys("yyyyy");
+  five_ys.Replace("yy", "y");
+  EXPECT_EQ("yyy", five_ys);
 }
 
 TEST(ByteString, Insert) {
diff --git a/core/fxcrt/widestring_unittest.cpp b/core/fxcrt/widestring_unittest.cpp
index 2445a47..1043b5d 100644
--- a/core/fxcrt/widestring_unittest.cpp
+++ b/core/fxcrt/widestring_unittest.cpp
@@ -514,7 +514,16 @@
 }
 
 TEST(WideString, Replace) {
+  WideString empty;
+  empty.Replace(L"", L"CLAMS");
+  empty.Replace(L"xx", L"CLAMS");
+  EXPECT_EQ(L"", empty);
+
   WideString fred(L"FRED");
+  fred.Replace(L"", L"");
+  EXPECT_EQ(L"FRED", fred);
+  fred.Replace(L"", L"CLAMS");
+  EXPECT_EQ(L"FRED", fred);
   fred.Replace(L"FR", L"BL");
   EXPECT_EQ(L"BLED", fred);
   fred.Replace(L"D", L"DDY");
@@ -525,10 +534,20 @@
   EXPECT_EQ(L"BY", fred);
   fred.Replace(L"BY", L"HI");
   EXPECT_EQ(L"HI", fred);
-  fred.Replace(L"", L"CLAMS");
-  EXPECT_EQ(L"HI", fred);
-  fred.Replace(L"HI", L"");
+  fred.Replace(L"I", L"IHIHI");
+  EXPECT_EQ(L"HIHIHI", fred);
+  fred.Replace(L"HI", L"HO");
+  EXPECT_EQ(L"HOHOHO", fred);
+  fred.Replace(L"HO", L"");
   EXPECT_EQ(L"", fred);
+
+  WideString five_xs(L"xxxxx");
+  five_xs.Replace(L"xx", L"xxx");
+  EXPECT_EQ(L"xxxxxxx", five_xs);
+
+  WideString five_ys(L"yyyyy");
+  five_ys.Replace(L"yy", L"y");
+  EXPECT_EQ(L"yyy", five_ys);
 }
 
 TEST(WideString, Insert) {