diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
index 4e2d915..c168528 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
@@ -421,8 +421,8 @@
   CPDF_PageContentGenerator generator(pTestForm.get());
   fxcrt::ostringstream process_buf;
   generator.ProcessPageObjects(&process_buf);
-  EXPECT_STREQ(
+  EXPECT_EQ(
       "q 1 0 0 1 0 0 cm 3.102 4.6700001 m 5.4500012 .28999999 l 4.2399998 3.14"
       "99999 4.6500001 2.98 3.4560001 .24000001 c 3.102 4.6700001 l h f Q\n",
-      ByteString(process_buf).c_str());
+      ByteString(process_buf));
 }
diff --git a/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp b/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
index fdc35f1..7d7400c 100644
--- a/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
+++ b/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
@@ -67,21 +67,21 @@
         "beginbfrange<FFFFFFFF><FFFFFFFF>[<0041>]endbfrange";
     auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput1));
     CPDF_ToUnicodeMap map(stream);
-    EXPECT_STREQ(L"A", map.Lookup(0xffffffff).c_str());
+    EXPECT_EQ(L"A", map.Lookup(0xffffffff));
   }
   {
     static constexpr uint8_t kInput2[] =
         "beginbfrange<FFFFFFFF><FFFFFFFF><0042>endbfrange";
     auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput2));
     CPDF_ToUnicodeMap map(stream);
-    EXPECT_STREQ(L"B", map.Lookup(0xffffffff).c_str());
+    EXPECT_EQ(L"B", map.Lookup(0xffffffff));
   }
   {
     static constexpr uint8_t kInput3[] =
         "beginbfrange<FFFFFFFF><FFFFFFFF><00410042>endbfrange";
     auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput3));
     CPDF_ToUnicodeMap map(stream);
-    EXPECT_STREQ(L"AB", map.Lookup(0xffffffff).c_str());
+    EXPECT_EQ(L"AB", map.Lookup(0xffffffff));
   }
 }
 
diff --git a/core/fpdfapi/parser/cpdf_object_unittest.cpp b/core/fpdfapi/parser/cpdf_object_unittest.cpp
index 2d1ea04..2f65f21 100644
--- a/core/fpdfapi/parser/cpdf_object_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_object_unittest.cpp
@@ -38,7 +38,7 @@
                         CPDF_Array* arr_val,
                         CPDF_Dictionary* dict_val,
                         CPDF_Stream* stream_val) {
-  EXPECT_STREQ(str_val, arr->GetByteStringAt(index).c_str());
+  EXPECT_EQ(str_val, arr->GetByteStringAt(index));
   EXPECT_EQ(int_val, arr->GetIntegerAt(index));
   EXPECT_EQ(float_val, arr->GetFloatAt(index));
   EXPECT_EQ(arr_val, arr->GetArrayAt(index));
@@ -79,7 +79,7 @@
     m_StreamDictObj->SetNewFor<CPDF_String>("key1", L" test dict");
     m_StreamDictObj->SetNewFor<CPDF_Number>("key2", -1);
     auto stream_obj = pdfium::MakeRetain<CPDF_Stream>(
-        DataVector<uint8_t>(std::begin(kContents), std::end(kContents)),
+        DataVector<uint8_t>(std::begin(kContents), std::end(kContents) - 1),
         std::move(pNewDict));
     // Null Object.
     auto null_obj = pdfium::MakeRetain<CPDF_Null>();
@@ -202,13 +202,13 @@
       "",      "",     "",     ""};
   // Check for direct objects.
   for (size_t i = 0; i < m_DirectObjs.size(); ++i)
-    EXPECT_STREQ(direct_obj_results[i], m_DirectObjs[i]->GetString().c_str());
+    EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->GetString());
 
   // Check indirect references.
   const char* const indirect_obj_results[] = {"true", "1245", "\t\n", "space",
                                               "",     "",     ""};
   for (size_t i = 0; i < m_RefObjs.size(); ++i) {
-    EXPECT_STREQ(indirect_obj_results[i], m_RefObjs[i]->GetString().c_str());
+    EXPECT_EQ(indirect_obj_results[i], m_RefObjs[i]->GetString());
   }
 }
 
@@ -219,13 +219,12 @@
       L""};
   // Check for direct objects.
   for (size_t i = 0; i < m_DirectObjs.size(); ++i) {
-    EXPECT_STREQ(direct_obj_results[i],
-                 m_DirectObjs[i]->GetUnicodeText().c_str());
+    EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->GetUnicodeText());
   }
 
   // Check indirect references.
   for (const auto& it : m_RefObjs)
-    EXPECT_STREQ(L"", it->GetUnicodeText().c_str());
+    EXPECT_EQ(L"", it->GetUnicodeText());
 }
 
 TEST_F(PDFObjectsTest, GetNumber) {
@@ -278,17 +277,17 @@
   m_DictObj->SetNewFor<CPDF_String>("string", "ium", false);
   m_DictObj->SetNewFor<CPDF_Name>("name", "Pdf");
 
-  EXPECT_STREQ("", m_DictObj->GetNameFor("invalid").c_str());
-  EXPECT_STREQ("", m_DictObj->GetNameFor("bool").c_str());
-  EXPECT_STREQ("", m_DictObj->GetNameFor("num").c_str());
-  EXPECT_STREQ("", m_DictObj->GetNameFor("string").c_str());
-  EXPECT_STREQ("Pdf", m_DictObj->GetNameFor("name").c_str());
+  EXPECT_EQ("", m_DictObj->GetNameFor("invalid"));
+  EXPECT_EQ("", m_DictObj->GetNameFor("bool"));
+  EXPECT_EQ("", m_DictObj->GetNameFor("num"));
+  EXPECT_EQ("", m_DictObj->GetNameFor("string"));
+  EXPECT_EQ("Pdf", m_DictObj->GetNameFor("name"));
 
-  EXPECT_STREQ("", m_DictObj->GetByteStringFor("invalid").c_str());
-  EXPECT_STREQ("false", m_DictObj->GetByteStringFor("bool").c_str());
-  EXPECT_STREQ("0.23", m_DictObj->GetByteStringFor("num").c_str());
-  EXPECT_STREQ("ium", m_DictObj->GetByteStringFor("string").c_str());
-  EXPECT_STREQ("Pdf", m_DictObj->GetByteStringFor("name").c_str());
+  EXPECT_EQ("", m_DictObj->GetByteStringFor("invalid"));
+  EXPECT_EQ("false", m_DictObj->GetByteStringFor("bool"));
+  EXPECT_EQ("0.23", m_DictObj->GetByteStringFor("num"));
+  EXPECT_EQ("ium", m_DictObj->GetByteStringFor("string"));
+  EXPECT_EQ("Pdf", m_DictObj->GetByteStringFor("name"));
 }
 
 TEST_F(PDFObjectsTest, GetArray) {
@@ -346,7 +345,7 @@
                                   "changed", "",      "NewName"};
   for (size_t i = 0; i < std::size(set_values); ++i) {
     m_DirectObjs[i]->SetString(set_values[i]);
-    EXPECT_STREQ(expected[i], m_DirectObjs[i]->GetString().c_str());
+    EXPECT_EQ(expected[i], m_DirectObjs[i]->GetString());
   }
 }
 
@@ -711,7 +710,7 @@
     const float expected_float[] = {0, 0, 0, -1234, 2345, 0.05f, 0,
                                     0, 0, 0, 0,     0,    0,     0};
     for (size_t i = 0; i < arr->size(); ++i) {
-      EXPECT_STREQ(expected_str[i], arr->GetByteStringAt(i).c_str());
+      EXPECT_EQ(expected_str[i], arr->GetByteStringAt(i));
       EXPECT_EQ(expected_int[i], arr->GetIntegerAt(i));
       EXPECT_EQ(expected_float[i], arr->GetFloatAt(i));
       if (i == 11)
@@ -767,9 +766,9 @@
   }
   for (size_t i = 0; i < std::size(kVals); ++i) {
     EXPECT_EQ(CPDF_Object::kString, string_array->GetObjectAt(i)->GetType());
-    EXPECT_STREQ(kVals[i], string_array->GetObjectAt(i)->GetString().c_str());
+    EXPECT_EQ(kVals[i], string_array->GetObjectAt(i)->GetString());
     EXPECT_EQ(CPDF_Object::kName, name_array->GetObjectAt(i)->GetType());
-    EXPECT_STREQ(kVals[i], name_array->GetObjectAt(i)->GetString().c_str());
+    EXPECT_EQ(kVals[i], name_array->GetObjectAt(i)->GetString());
   }
 }
 
diff --git a/core/fpdfdoc/cpdf_filespec_unittest.cpp b/core/fpdfdoc/cpdf_filespec_unittest.cpp
index 48eaa8a..adb1f3f 100644
--- a/core/fpdfdoc/cpdf_filespec_unittest.cpp
+++ b/core/fpdfdoc/cpdf_filespec_unittest.cpp
@@ -51,11 +51,9 @@
 #endif
   };
   for (const auto& data : test_data) {
-    EXPECT_STREQ(data.expected,
-                 CPDF_FileSpec::EncodeFileName(data.input).c_str());
+    EXPECT_EQ(data.expected, CPDF_FileSpec::EncodeFileName(data.input));
     // DecodeFileName is the reverse procedure of EncodeFileName.
-    EXPECT_STREQ(data.input,
-                 CPDF_FileSpec::DecodeFileName(data.expected).c_str());
+    EXPECT_EQ(data.input, CPDF_FileSpec::DecodeFileName(data.expected));
   }
 }
 
@@ -76,7 +74,7 @@
     };
     auto str_obj = pdfium::MakeRetain<CPDF_String>(nullptr, test_data.input);
     CPDF_FileSpec file_spec(str_obj);
-    EXPECT_STREQ(test_data.expected, file_spec.GetFileName().c_str());
+    EXPECT_EQ(test_data.expected, file_spec.GetFileName());
   }
   {
     // Dictionary object.
@@ -109,13 +107,13 @@
     EXPECT_TRUE(file_spec.GetFileName().IsEmpty());
     for (size_t i = 0; i < std::size(keywords); ++i) {
       dict_obj->SetNewFor<CPDF_String>(keywords[i], test_data[i].input);
-      EXPECT_STREQ(test_data[i].expected, file_spec.GetFileName().c_str());
+      EXPECT_EQ(test_data[i].expected, file_spec.GetFileName());
     }
 
     // With all the former fields and 'FS' field suggests 'URL' type.
     dict_obj->SetNewFor<CPDF_String>("FS", "URL", false);
     // Url string is not decoded.
-    EXPECT_STREQ(test_data[4].input, file_spec.GetFileName().c_str());
+    EXPECT_EQ(test_data[4].input, file_spec.GetFileName());
   }
   {
     // Invalid object.
@@ -175,9 +173,8 @@
       dict_obj->SetNewFor<CPDF_String>(keys[i], file_name);
 
       // Set the file stream.
-      auto stream_object =
-          object_holder.NewIndirect<CPDF_Stream>(pdfium::as_bytes(
-              pdfium::make_span(streams[i], strlen(streams[i]) + 1)));
+      auto stream_object = object_holder.NewIndirect<CPDF_Stream>(
+          pdfium::as_bytes(pdfium::make_span(streams[i], strlen(streams[i]))));
       ASSERT_TRUE(stream_object);
       const uint32_t stream_object_number = stream_object->GetObjNum();
       ASSERT_GT(stream_object_number, 0u);
@@ -185,9 +182,8 @@
                                            stream_object_number);
 
       // Check that the file content stream is as expected.
-      EXPECT_STREQ(
-          streams[i],
-          file_spec.GetFileStream()->GetUnicodeText().ToUTF8().c_str());
+      EXPECT_EQ(streams[i],
+                file_spec.GetFileStream()->GetUnicodeText().ToUTF8());
 
       if (i == 2) {
         dict_obj->SetNewFor<CPDF_String>("FS", "URL", false);
diff --git a/core/fpdfdoc/cpdf_formfield_unittest.cpp b/core/fpdfdoc/cpdf_formfield_unittest.cpp
index d1609c5..0e4b3e9 100644
--- a/core/fpdfdoc/cpdf_formfield_unittest.cpp
+++ b/core/fpdfdoc/cpdf_formfield_unittest.cpp
@@ -75,34 +75,34 @@
   auto root = obj_holder.NewIndirect<CPDF_Dictionary>();
   root->SetNewFor<CPDF_Name>("T", "foo");
   name = CPDF_FormField::GetFullNameForDict(root.Get());
-  EXPECT_STREQ("foo", name.ToUTF8().c_str());
+  EXPECT_EQ("foo", name.ToUTF8());
 
   auto dict1 = obj_holder.NewIndirect<CPDF_Dictionary>();
   root->SetNewFor<CPDF_Reference>("Parent", &obj_holder, dict1->GetObjNum());
   dict1->SetNewFor<CPDF_Name>("T", "bar");
   name = CPDF_FormField::GetFullNameForDict(root.Get());
-  EXPECT_STREQ("bar.foo", name.ToUTF8().c_str());
+  EXPECT_EQ("bar.foo", name.ToUTF8());
 
   auto dict2 = dict1->SetNewFor<CPDF_Dictionary>("Parent");
   name = CPDF_FormField::GetFullNameForDict(root.Get());
-  EXPECT_STREQ("bar.foo", name.ToUTF8().c_str());
+  EXPECT_EQ("bar.foo", name.ToUTF8());
 
   auto dict3 = obj_holder.NewIndirect<CPDF_Dictionary>();
   dict2->SetNewFor<CPDF_Reference>("Parent", &obj_holder, dict3->GetObjNum());
 
   dict3->SetNewFor<CPDF_Name>("T", "qux");
   name = CPDF_FormField::GetFullNameForDict(root.Get());
-  EXPECT_STREQ("qux.bar.foo", name.ToUTF8().c_str());
+  EXPECT_EQ("qux.bar.foo", name.ToUTF8());
 
   dict3->SetNewFor<CPDF_Reference>("Parent", &obj_holder, root->GetObjNum());
   name = CPDF_FormField::GetFullNameForDict(root.Get());
-  EXPECT_STREQ("qux.bar.foo", name.ToUTF8().c_str());
+  EXPECT_EQ("qux.bar.foo", name.ToUTF8());
   name = CPDF_FormField::GetFullNameForDict(dict1.Get());
-  EXPECT_STREQ("foo.qux.bar", name.ToUTF8().c_str());
+  EXPECT_EQ("foo.qux.bar", name.ToUTF8());
   name = CPDF_FormField::GetFullNameForDict(dict2.Get());
-  EXPECT_STREQ("bar.foo.qux", name.ToUTF8().c_str());
+  EXPECT_EQ("bar.foo.qux", name.ToUTF8());
   name = CPDF_FormField::GetFullNameForDict(dict3.Get());
-  EXPECT_STREQ("bar.foo.qux", name.ToUTF8().c_str());
+  EXPECT_EQ("bar.foo.qux", name.ToUTF8());
 }
 
 TEST(CPDF_FormFieldTest, IsItemSelected) {
diff --git a/core/fpdfdoc/cpdf_nametree_unittest.cpp b/core/fpdfdoc/cpdf_nametree_unittest.cpp
index a70359c..8ee494d 100644
--- a/core/fpdfdoc/cpdf_nametree_unittest.cpp
+++ b/core/fpdfdoc/cpdf_nametree_unittest.cpp
@@ -22,7 +22,7 @@
                        const char* key,
                        int value) {
   ASSERT_TRUE(names);
-  EXPECT_STREQ(key, names->GetByteStringAt(pair_index * 2).c_str());
+  EXPECT_EQ(key, names->GetByteStringAt(pair_index * 2));
   EXPECT_EQ(value, names->GetIntegerAt(pair_index * 2 + 1));
 }
 
@@ -45,8 +45,8 @@
   ASSERT_TRUE(left);
   RetainPtr<const CPDF_String> right = limits->GetStringAt(1);
   ASSERT_TRUE(right);
-  EXPECT_STREQ(least, left->GetString().c_str());
-  EXPECT_STREQ(greatest, right->GetString().c_str());
+  EXPECT_EQ(least, left->GetString());
+  EXPECT_EQ(greatest, right->GetString());
 }
 
 // Set up a name tree with 3 levels and 5 nodes, per diagram:
@@ -116,7 +116,7 @@
       CPDF_NameTree::CreateForTesting(pRootDict.Get());
   WideString stored_name;
   name_tree->LookupValueAndName(0, &stored_name);
-  EXPECT_STREQ(L"1", stored_name.c_str());
+  EXPECT_EQ(L"1", stored_name);
 
   // Check that the correct value object can be obtained by looking up "1".
   RetainPtr<const CPDF_Number> pNumber = ToNumber(name_tree->LookupValue(L"1"));
@@ -325,7 +325,7 @@
   ASSERT_TRUE(name_tree->LookupValue(L"9.txt"));
   EXPECT_EQ(999, name_tree->LookupValue(L"9.txt")->GetInteger());
   EXPECT_TRUE(name_tree->LookupValueAndName(4, &csName));
-  EXPECT_STREQ(L"9.txt", csName.c_str());
+  EXPECT_EQ(L"9.txt", csName);
   EXPECT_EQ(2u, pKid1->GetArrayFor("Kids")->size());
   EXPECT_TRUE(name_tree->DeleteValueAndName(4));
   EXPECT_EQ(1u, pKid1->GetArrayFor("Kids")->size());
@@ -336,7 +336,7 @@
   ASSERT_TRUE(name_tree->LookupValue(L"2.txt"));
   EXPECT_EQ(222, name_tree->LookupValue(L"2.txt")->GetInteger());
   EXPECT_TRUE(name_tree->LookupValueAndName(1, &csName));
-  EXPECT_STREQ(L"2.txt", csName.c_str());
+  EXPECT_EQ(L"2.txt", csName);
   EXPECT_EQ(4u, pGreatGrandKid4->GetArrayFor("Names")->size());
   EXPECT_TRUE(name_tree->DeleteValueAndName(1));
   EXPECT_EQ(2u, pGreatGrandKid4->GetArrayFor("Names")->size());
@@ -349,7 +349,7 @@
   ASSERT_TRUE(name_tree->LookupValue(L"1.txt"));
   EXPECT_EQ(111, name_tree->LookupValue(L"1.txt")->GetInteger());
   EXPECT_TRUE(name_tree->LookupValueAndName(0, &csName));
-  EXPECT_STREQ(L"1.txt", csName.c_str());
+  EXPECT_EQ(L"1.txt", csName);
   EXPECT_EQ(2u, pGrandKid2->GetArrayFor("Kids")->size());
   EXPECT_TRUE(name_tree->DeleteValueAndName(0));
   EXPECT_EQ(1u, pGrandKid2->GetArrayFor("Kids")->size());
@@ -361,7 +361,7 @@
   ASSERT_TRUE(name_tree->LookupValue(L"3.txt"));
   EXPECT_EQ(333, name_tree->LookupValue(L"3.txt")->GetInteger());
   EXPECT_TRUE(name_tree->LookupValueAndName(0, &csName));
-  EXPECT_STREQ(L"3.txt", csName.c_str());
+  EXPECT_EQ(L"3.txt", csName);
   EXPECT_EQ(4u, pGreatGrandKid5->GetArrayFor("Names")->size());
   EXPECT_TRUE(name_tree->DeleteValueAndName(0));
   EXPECT_EQ(2u, pGreatGrandKid5->GetArrayFor("Names")->size());
@@ -374,7 +374,7 @@
   ASSERT_TRUE(name_tree->LookupValue(L"5.txt"));
   EXPECT_EQ(555, name_tree->LookupValue(L"5.txt")->GetInteger());
   EXPECT_TRUE(name_tree->LookupValueAndName(0, &csName));
-  EXPECT_STREQ(L"5.txt", csName.c_str());
+  EXPECT_EQ(L"5.txt", csName);
   EXPECT_EQ(1u, name_tree->GetRootForTesting()->GetArrayFor("Kids")->size());
   EXPECT_TRUE(name_tree->DeleteValueAndName(0));
   EXPECT_EQ(0u, name_tree->GetRootForTesting()->GetArrayFor("Kids")->size());
diff --git a/core/fpdftext/cpdf_linkextract_unittest.cpp b/core/fpdftext/cpdf_linkextract_unittest.cpp
index a0c69d6..02be241 100644
--- a/core/fpdftext/cpdf_linkextract_unittest.cpp
+++ b/core/fpdftext/cpdf_linkextract_unittest.cpp
@@ -56,7 +56,7 @@
     WideString expected_str(L"mailto:");
     expected_str += it[1];
     EXPECT_TRUE(extractor.CheckMailLink(&text_str)) << input;
-    EXPECT_STREQ(expected_str.c_str(), text_str.c_str());
+    EXPECT_EQ(expected_str.c_str(), text_str);
   }
 }
 
@@ -170,7 +170,7 @@
   for (const auto& it : kValidCases) {
     auto maybe_link = extractor.CheckWebLink(it.input_string);
     ASSERT_TRUE(maybe_link.has_value()) << it.input_string;
-    EXPECT_STREQ(it.url_extracted, maybe_link.value().m_strUrl.c_str());
+    EXPECT_EQ(it.url_extracted, maybe_link.value().m_strUrl);
     EXPECT_EQ(it.start_offset, maybe_link.value().m_Start) << it.input_string;
     EXPECT_EQ(it.count, maybe_link.value().m_Count) << it.input_string;
   }
diff --git a/core/fxcrt/fx_coordinates_unittest.cpp b/core/fxcrt/fx_coordinates_unittest.cpp
index fd5b32d..3b05eab 100644
--- a/core/fxcrt/fx_coordinates_unittest.cpp
+++ b/core/fxcrt/fx_coordinates_unittest.cpp
@@ -324,34 +324,34 @@
   std::ostringstream os;
   CFX_FloatRect rect;
   os << rect;
-  EXPECT_STREQ("rect[w 0 x h 0 (left 0, bot 0)]", os.str().c_str());
+  EXPECT_EQ("rect[w 0 x h 0 (left 0, bot 0)]", os.str());
 
   os.str("");
   rect = CFX_FloatRect(10, 20, 14, 23);
   os << rect;
-  EXPECT_STREQ("rect[w 4 x h 3 (left 10, bot 20)]", os.str().c_str());
+  EXPECT_EQ("rect[w 4 x h 3 (left 10, bot 20)]", os.str());
 
   os.str("");
   rect = CFX_FloatRect(10.5, 20.5, 14.75, 23.75);
   os << rect;
-  EXPECT_STREQ("rect[w 4.25 x h 3.25 (left 10.5, bot 20.5)]", os.str().c_str());
+  EXPECT_EQ("rect[w 4.25 x h 3.25 (left 10.5, bot 20.5)]", os.str());
 }
 
 TEST(CFX_RectF, Print) {
   std::ostringstream os;
   CFX_RectF rect;
   os << rect;
-  EXPECT_STREQ("rect[w 0 x h 0 (left 0, top 0)]", os.str().c_str());
+  EXPECT_EQ("rect[w 0 x h 0 (left 0, top 0)]", os.str());
 
   os.str("");
   rect = CFX_RectF(10, 20, 4, 3);
   os << rect;
-  EXPECT_STREQ("rect[w 4 x h 3 (left 10, top 20)]", os.str().c_str());
+  EXPECT_EQ("rect[w 4 x h 3 (left 10, top 20)]", os.str());
 
   os.str("");
   rect = CFX_RectF(10.5, 20.5, 4.25, 3.25);
   os << rect;
-  EXPECT_STREQ("rect[w 4.25 x h 3.25 (left 10.5, top 20.5)]", os.str().c_str());
+  EXPECT_EQ("rect[w 4.25 x h 3.25 (left 10.5, top 20.5)]", os.str());
 }
 #endif  // NDEBUG
 
diff --git a/core/fxcrt/fx_string_wrappers_unittest.cpp b/core/fxcrt/fx_string_wrappers_unittest.cpp
index a7854e9..e05d927 100644
--- a/core/fxcrt/fx_string_wrappers_unittest.cpp
+++ b/core/fxcrt/fx_string_wrappers_unittest.cpp
@@ -16,11 +16,11 @@
   str += '.';
   str += '6';
   str += "F";
-  EXPECT_STREQ("22C is 71.6F", str.c_str());
+  EXPECT_EQ("22C is 71.6F", str);
 }
 
 TEST(STLUtil, OStringStream) {
   fxcrt::ostringstream str;
   str << 22 << "C is " << 71.6f << "F";
-  EXPECT_STREQ("22C is 71.6F", str.str().c_str());
+  EXPECT_EQ("22C is 71.6F", str.str());
 }
diff --git a/core/fxge/fx_font_unittest.cpp b/core/fxge/fx_font_unittest.cpp
index b655c83..7e8b564 100644
--- a/core/fxge/fx_font_unittest.cpp
+++ b/core/fxge/fx_font_unittest.cpp
@@ -23,13 +23,13 @@
 }
 
 TEST(FXFontTest, AdobeNameFromUnicode) {
-  EXPECT_STREQ("", AdobeNameFromUnicode(0x0000).c_str());
-  EXPECT_STREQ("divide", AdobeNameFromUnicode(0x00f7).c_str());
-  EXPECT_STREQ("Lslash", AdobeNameFromUnicode(0x0141).c_str());
-  EXPECT_STREQ("tonos", AdobeNameFromUnicode(0x0384).c_str());
-  EXPECT_STREQ("afii57513", AdobeNameFromUnicode(0x0691).c_str());
-  EXPECT_STREQ("angkhankhuthai", AdobeNameFromUnicode(0x0e5a).c_str());
-  EXPECT_STREQ("Euro", AdobeNameFromUnicode(0x20ac).c_str());
+  EXPECT_EQ("", AdobeNameFromUnicode(0x0000));
+  EXPECT_EQ("divide", AdobeNameFromUnicode(0x00f7));
+  EXPECT_EQ("Lslash", AdobeNameFromUnicode(0x0141));
+  EXPECT_EQ("tonos", AdobeNameFromUnicode(0x0384));
+  EXPECT_EQ("afii57513", AdobeNameFromUnicode(0x0691));
+  EXPECT_EQ("angkhankhuthai", AdobeNameFromUnicode(0x0e5a));
+  EXPECT_EQ("Euro", AdobeNameFromUnicode(0x20ac));
 }
 
 TEST(FXFontTest, ReadFontNameFromMicrosoftEntries) {
diff --git a/core/fxge/win32/cfx_psrenderer_unittest.cpp b/core/fxge/win32/cfx_psrenderer_unittest.cpp
index 38d8e72..ec8ec26 100644
--- a/core/fxge/win32/cfx_psrenderer_unittest.cpp
+++ b/core/fxge/win32/cfx_psrenderer_unittest.cpp
@@ -58,7 +58,7 @@
   result = CFX_PSRenderer::GenerateType42SfntDataForTesting(
       "odd", kOddByteCountTestData);
   ASSERT_TRUE(result.has_value());
-  EXPECT_STREQ(kExpectedOddByteCountResult, result.value().c_str());
+  EXPECT_EQ(kExpectedOddByteCountResult, result.value());
 
   // Requires padding.
   constexpr uint8_t kEvenByteCountTestData[] = {0, 32, 66, 77};
@@ -71,7 +71,7 @@
   result = CFX_PSRenderer::GenerateType42SfntDataForTesting(
       "even", kEvenByteCountTestData);
   ASSERT_TRUE(result.has_value());
-  EXPECT_STREQ(kExpectedEvenByteCountResult, result.value().c_str());
+  EXPECT_EQ(kExpectedEvenByteCountResult, result.value());
 }
 
 TEST(PSRendererTest, GenerateType42FontDictionary) {
@@ -113,7 +113,7 @@
   result = CFX_PSRenderer::GenerateType42FontDictionaryForTesting(
       "1descendant", FX_RECT(1, 2, 3, 4), /*num_glyphs=*/3,
       /*glyphs_per_descendant_font=*/3);
-  EXPECT_STREQ(kExpected1DescendantFontResult, result.c_str());
+  EXPECT_EQ(kExpected1DescendantFontResult, result);
 
   static constexpr char kExpected2DescendantFontResult[] = R"(8 dict begin
 /FontType 42 def
@@ -170,7 +170,7 @@
   result = CFX_PSRenderer::GenerateType42FontDictionaryForTesting(
       "2descendant", FX_RECT(12, -5, 34, 199), /*num_glyphs=*/5,
       /*glyphs_per_descendant_font=*/3);
-  EXPECT_STREQ(kExpected2DescendantFontResult, result.c_str());
+  EXPECT_EQ(kExpected2DescendantFontResult, result);
 }
 
 TEST(PSRendererTest, DrawDIBits) {
@@ -211,5 +211,5 @@
   }
 
   ByteString output(output_stream->GetSpan());
-  EXPECT_STREQ(output.c_str(), kExpectedOutput);
+  EXPECT_EQ(output, kExpectedOutput);
 }
diff --git a/fpdfsdk/fpdf_annot_embeddertest.cpp b/fpdfsdk/fpdf_annot_embeddertest.cpp
index 4823411..2983a7d 100644
--- a/fpdfsdk/fpdf_annot_embeddertest.cpp
+++ b/fpdfsdk/fpdf_annot_embeddertest.cpp
@@ -103,7 +103,7 @@
   std::vector<char> buffer(bufsize);
   EXPECT_EQ(bufsize,
             FPDFAction_GetURIPath(doc, action, buffer.data(), bufsize));
-  EXPECT_STREQ(expected_uri.c_str(), buffer.data());
+  EXPECT_EQ(expected_uri, buffer.data());
 }
 
 }  // namespace
diff --git a/fpdfsdk/fpdf_formfill_embeddertest.cpp b/fpdfsdk/fpdf_formfill_embeddertest.cpp
index 99567bc..061024b 100644
--- a/fpdfsdk/fpdf_formfill_embeddertest.cpp
+++ b/fpdfsdk/fpdf_formfill_embeddertest.cpp
@@ -1129,10 +1129,10 @@
   UnloadPage(page);
 
   ASSERT_EQ(4U, alerts.size());
-  EXPECT_STREQ(L"Will Save", alerts[0].message.c_str());
-  EXPECT_STREQ(L"Did Save", alerts[1].message.c_str());
-  EXPECT_STREQ(L"Will Print", alerts[2].message.c_str());
-  EXPECT_STREQ(L"Did Print", alerts[3].message.c_str());
+  EXPECT_EQ(L"Will Save", alerts[0].message);
+  EXPECT_EQ(L"Did Save", alerts[1].message);
+  EXPECT_EQ(L"Will Print", alerts[2].message);
+  EXPECT_EQ(L"Did Print", alerts[3].message);
 }
 
 TEST_F(FPDFFormFillEmbedderTest, DocumentAActionsDisableJavaScript) {
@@ -1186,23 +1186,23 @@
 
   ASSERT_EQ(4U, alerts.size());  // nothing else fired.
 
-  EXPECT_STREQ(L"interval fired", alerts[0].message.c_str());
-  EXPECT_STREQ(L"Alert", alerts[0].title.c_str());
+  EXPECT_EQ(L"interval fired", alerts[0].message);
+  EXPECT_EQ(L"Alert", alerts[0].title);
   EXPECT_EQ(0, alerts[0].type);
   EXPECT_EQ(0, alerts[0].icon);
 
-  EXPECT_STREQ(L"timer fired", alerts[1].message.c_str());
-  EXPECT_STREQ(L"Alert", alerts[1].title.c_str());
+  EXPECT_EQ(L"timer fired", alerts[1].message);
+  EXPECT_EQ(L"Alert", alerts[1].title);
   EXPECT_EQ(0, alerts[1].type);
   EXPECT_EQ(0, alerts[1].icon);
 
-  EXPECT_STREQ(L"interval fired", alerts[2].message.c_str());
-  EXPECT_STREQ(L"Alert", alerts[2].title.c_str());
+  EXPECT_EQ(L"interval fired", alerts[2].message);
+  EXPECT_EQ(L"Alert", alerts[2].title);
   EXPECT_EQ(0, alerts[2].type);
   EXPECT_EQ(0, alerts[2].icon);
 
-  EXPECT_STREQ(L"interval fired", alerts[3].message.c_str());
-  EXPECT_STREQ(L"Alert", alerts[3].title.c_str());
+  EXPECT_EQ(L"interval fired", alerts[3].message);
+  EXPECT_EQ(L"Alert", alerts[3].title);
   EXPECT_EQ(0, alerts[3].type);
   EXPECT_EQ(0, alerts[3].icon);
 }
@@ -1221,7 +1221,7 @@
 
   const auto& alerts = delegate.GetAlerts();
   ASSERT_EQ(1U, alerts.size());
-  EXPECT_STREQ(L"done", alerts[0].message.c_str());
+  EXPECT_EQ(L"done", alerts[0].message);
 }
 
 TEST_F(FPDFFormFillEmbedderTest, BUG_634394) {
diff --git a/fpdfsdk/fpdf_view_embeddertest.cpp b/fpdfsdk/fpdf_view_embeddertest.cpp
index 4795c5a..38900f5 100644
--- a/fpdfsdk/fpdf_view_embeddertest.cpp
+++ b/fpdfsdk/fpdf_view_embeddertest.cpp
@@ -1309,8 +1309,8 @@
     EXPECT_TRUE(FPDF_GetXFAPacketContent(document(), i, data_buffer.data(),
                                          data_buffer.size(), &buflen));
     EXPECT_EQ(kExpectedResults[i].content_length, buflen);
-    EXPECT_STREQ(kExpectedResults[i].content_checksum,
-                 GenerateMD5Base16(data_buffer).c_str());
+    EXPECT_EQ(kExpectedResults[i].content_checksum,
+              GenerateMD5Base16(data_buffer));
   }
 
   // Test bad parameters.
@@ -1350,8 +1350,7 @@
   EXPECT_TRUE(FPDF_GetXFAPacketContent(document(), 0, data_buffer.data(),
                                        data_buffer.size(), &buflen));
   EXPECT_EQ(121u, buflen);
-  EXPECT_STREQ("8f912eaa1e66c9341cb3032ede71e147",
-               GenerateMD5Base16(data_buffer).c_str());
+  EXPECT_EQ("8f912eaa1e66c9341cb3032ede71e147", GenerateMD5Base16(data_buffer));
 }
 
 TEST_F(FPDFViewEmbedderTest, GetXFADataForNoForm) {
@@ -1790,7 +1789,7 @@
 
   std::vector<uint8_t> emf_normal = RenderPageWithFlagsToEmf(page, 0);
   std::string ps_data = GetPostScriptFromEmf(emf_normal);
-  EXPECT_STREQ(kExpectedRectanglePostScript, ps_data.c_str());
+  EXPECT_EQ(kExpectedRectanglePostScript, ps_data);
 
   // FPDF_REVERSE_BYTE_ORDER is ignored since PostScript is not bitmap-based.
   std::vector<uint8_t> emf_reverse_byte_order =
@@ -1807,7 +1806,7 @@
 
   std::vector<uint8_t> emf_normal = RenderPageWithFlagsToEmf(page, 0);
   std::string ps_data = GetPostScriptFromEmf(emf_normal);
-  EXPECT_STREQ(kExpectedRectanglePostScript, ps_data.c_str());
+  EXPECT_EQ(kExpectedRectanglePostScript, ps_data);
 
   // FPDF_REVERSE_BYTE_ORDER is ignored since PostScript is not bitmap-based.
   std::vector<uint8_t> emf_reverse_byte_order =
@@ -1885,7 +1884,7 @@
 
   std::vector<uint8_t> emf = RenderPageWithFlagsToEmf(page, 0);
   std::string ps_data = GetPostScriptFromEmf(emf);
-  EXPECT_STREQ(kExpected, ps_data.c_str());
+  EXPECT_EQ(kExpected, ps_data);
 
   UnloadPage(page);
 }
@@ -1929,7 +1928,7 @@
 
   std::vector<uint8_t> emf = RenderPageWithFlagsToEmf(page, 0);
   std::string ps_data = GetPostScriptFromEmf(emf);
-  EXPECT_STREQ(kExpected, ps_data.c_str());
+  EXPECT_EQ(kExpected, ps_data);
 
   UnloadPage(page);
 }
diff --git a/fpdfsdk/pwl/cpwl_combo_box_edit_embeddertest.cpp b/fpdfsdk/pwl/cpwl_combo_box_edit_embeddertest.cpp
index 3a9d8ef..0c2c334 100644
--- a/fpdfsdk/pwl/cpwl_combo_box_edit_embeddertest.cpp
+++ b/fpdfsdk/pwl/cpwl_combo_box_edit_embeddertest.cpp
@@ -22,18 +22,18 @@
 
   // Automatically pre-filled with "Banana".
   EXPECT_FALSE(GetCPWLComboBox()->GetText().IsEmpty());
-  EXPECT_STREQ(L"Banana", GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"Banana", GetCPWLComboBox()->GetText());
 
   // Check that selection is initially empty, then select entire word.
   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
   GetCPWLComboBox()->SetSelectText();
-  EXPECT_STREQ(L"Banana", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Banana", GetCPWLComboBox()->GetSelectedText());
 
   // Select other options.
   GetCPWLComboBox()->SetSelect(0);
-  EXPECT_STREQ(L"Apple", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Apple", GetCPWLComboBox()->GetSelectedText());
   GetCPWLComboBox()->SetSelect(2);
-  EXPECT_STREQ(L"Cherry", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Cherry", GetCPWLComboBox()->GetSelectedText());
 
   // Verify that combobox text cannot be edited.
   EXPECT_FALSE(GetCFFLFormField()->OnChar(GetCPDFSDKAnnotNormal(), 'a', {}));
@@ -41,28 +41,28 @@
 
 TEST_F(CPWLComboBoxEditEmbedderTest, GetSelectedTextFragmentsNormal) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnotNormal());
-  EXPECT_STREQ(L"Banana", GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"Banana", GetCPWLComboBox()->GetText());
 
   GetCPWLComboBox()->SetEditSelection(0, 0);
   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
 
   GetCPWLComboBox()->SetEditSelection(0, 1);
-  EXPECT_STREQ(L"B", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"B", GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->SetEditSelection(0, -1);
-  EXPECT_STREQ(L"Banana", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Banana", GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->SetEditSelection(-8, -1);
   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
 
   GetCPWLComboBox()->SetEditSelection(4, 1);
-  EXPECT_STREQ(L"ana", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ana", GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->SetEditSelection(1, 4);
-  EXPECT_STREQ(L"ana", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ana", GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->SetEditSelection(5, 6);
-  EXPECT_STREQ(L"a", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"a", GetCPWLComboBox()->GetSelectedText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest, GetSelectedTextEmptyAndBasicEditable) {
@@ -73,13 +73,13 @@
   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
   GetCPWLComboBox()->SetSelect(0);
   GetCPWLComboBox()->SetSelectText();
-  EXPECT_STREQ(L"Foo", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Foo", GetCPWLComboBox()->GetSelectedText());
 
   // Select another option and then select last char of that option.
   GetCPWLComboBox()->SetSelect(1);
-  EXPECT_STREQ(L"Bar", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Bar", GetCPWLComboBox()->GetSelectedText());
   GetCPWLComboBox()->SetEditSelection(2, 3);
-  EXPECT_STREQ(L"r", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"r", GetCPWLComboBox()->GetSelectedText());
 
   // Type into editable combobox text field and select new text.
   EXPECT_TRUE(
@@ -91,7 +91,7 @@
 
   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
   GetCPWLComboBox()->SetEditSelection(0, 5);
-  EXPECT_STREQ(L"Baabc", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Baabc", GetCPWLComboBox()->GetSelectedText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest, GetSelectedTextFragmentsEditable) {
@@ -102,26 +102,26 @@
   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
 
   GetCPWLComboBox()->SetEditSelection(0, 1);
-  EXPECT_STREQ(L"A", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"A", GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->SetEditSelection(0, -1);
-  EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
-               GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
+            GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->SetEditSelection(-8, -1);
   EXPECT_TRUE(GetCPWLComboBox()->GetSelectedText().IsEmpty());
 
   GetCPWLComboBox()->SetEditSelection(23, 12);
-  EXPECT_STREQ(L"MNOPQRSTUVW", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"MNOPQRSTUVW", GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->SetEditSelection(12, 23);
-  EXPECT_STREQ(L"MNOPQRSTUVW", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"MNOPQRSTUVW", GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->SetEditSelection(49, 50);
-  EXPECT_STREQ(L"r", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"r", GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->SetEditSelection(49, 55);
-  EXPECT_STREQ(L"r", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"r", GetCPWLComboBox()->GetSelectedText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest, DeleteEntireTextSelection) {
@@ -129,8 +129,8 @@
   TypeTextIntoTextField(50);
 
   GetCPWLComboBox()->SetEditSelection(0, -1);
-  EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
-               GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
+            GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->ReplaceSelection(L"");
   EXPECT_TRUE(GetCPWLComboBox()->GetText().IsEmpty());
@@ -141,11 +141,11 @@
   TypeTextIntoTextField(50);
 
   GetCPWLComboBox()->SetEditSelection(12, 23);
-  EXPECT_STREQ(L"MNOPQRSTUVW", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"MNOPQRSTUVW", GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->ReplaceSelection(L"");
-  EXPECT_STREQ(L"ABCDEFGHIJKLXYZ[\\]^_`abcdefghijklmnopqr",
-               GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJKLXYZ[\\]^_`abcdefghijklmnopqr",
+            GetCPWLComboBox()->GetText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest, DeleteTextSelectionLeft) {
@@ -153,11 +153,11 @@
   TypeTextIntoTextField(50);
 
   GetCPWLComboBox()->SetEditSelection(0, 5);
-  EXPECT_STREQ(L"ABCDE", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ABCDE", GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->ReplaceSelection(L"");
-  EXPECT_STREQ(L"FGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
-               GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"FGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
+            GetCPWLComboBox()->GetText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest, DeleteTextSelectionRight) {
@@ -165,11 +165,11 @@
   TypeTextIntoTextField(50);
 
   GetCPWLComboBox()->SetEditSelection(45, 50);
-  EXPECT_STREQ(L"nopqr", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"nopqr", GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->ReplaceSelection(L"");
-  EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklm",
-               GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklm",
+            GetCPWLComboBox()->GetText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest, DeleteEmptyTextSelection) {
@@ -177,14 +177,14 @@
   TypeTextIntoTextField(50);
 
   GetCPWLComboBox()->ReplaceSelection(L"");
-  EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
-               GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
+            GetCPWLComboBox()->GetText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest, InsertTextInEmptyEditableComboBox) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnotUserEditable());
   GetCPWLComboBox()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"Hello", GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"Hello", GetCPWLComboBox()->GetText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest,
@@ -196,7 +196,7 @@
   EXPECT_TRUE(GetCFFLFormField()->OnKeyDown(FWL_VKEY_Home, {}));
 
   GetCPWLComboBox()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"HelloABCDEFGHIJ", GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"HelloABCDEFGHIJ", GetCPWLComboBox()->GetText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest,
@@ -210,7 +210,7 @@
   }
 
   GetCPWLComboBox()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"ABCDEHelloFGHIJ", GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEHelloFGHIJ", GetCPWLComboBox()->GetText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest,
@@ -219,7 +219,7 @@
   TypeTextIntoTextField(10);
 
   GetCPWLComboBox()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"ABCDEFGHIJHello", GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJHello", GetCPWLComboBox()->GetText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest,
@@ -228,9 +228,9 @@
   TypeTextIntoTextField(10);
 
   GetCPWLComboBox()->SetEditSelection(0, -1);
-  EXPECT_STREQ(L"ABCDEFGHIJ", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJ", GetCPWLComboBox()->GetSelectedText());
   GetCPWLComboBox()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"Hello", GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"Hello", GetCPWLComboBox()->GetText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest,
@@ -239,9 +239,9 @@
   TypeTextIntoTextField(10);
 
   GetCPWLComboBox()->SetEditSelection(0, 5);
-  EXPECT_STREQ(L"ABCDE", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ABCDE", GetCPWLComboBox()->GetSelectedText());
   GetCPWLComboBox()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"HelloFGHIJ", GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"HelloFGHIJ", GetCPWLComboBox()->GetText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest,
@@ -250,9 +250,9 @@
   TypeTextIntoTextField(10);
 
   GetCPWLComboBox()->SetEditSelection(2, 7);
-  EXPECT_STREQ(L"CDEFG", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"CDEFG", GetCPWLComboBox()->GetSelectedText());
   GetCPWLComboBox()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"ABHelloHIJ", GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"ABHelloHIJ", GetCPWLComboBox()->GetText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest,
@@ -261,9 +261,9 @@
   TypeTextIntoTextField(10);
 
   GetCPWLComboBox()->SetEditSelection(5, 10);
-  EXPECT_STREQ(L"FGHIJ", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"FGHIJ", GetCPWLComboBox()->GetSelectedText());
   GetCPWLComboBox()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"ABCDEHello", GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEHello", GetCPWLComboBox()->GetText());
 }
 
 TEST_F(CPWLComboBoxEditEmbedderTest, ReplaceAndKeepSelection) {
@@ -271,13 +271,13 @@
   TypeTextIntoTextField(10);
 
   GetCPWLComboBox()->SetEditSelection(1, 3);
-  EXPECT_STREQ(L"ABCDEFGHIJ", GetCPWLComboBox()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJ", GetCPWLComboBox()->GetText());
   GetCPWLComboBox()->ReplaceAndKeepSelection(L"xyz");
-  EXPECT_STREQ(L"AxyzDEFGHIJ", GetCPWLComboBox()->GetText().c_str());
-  EXPECT_STREQ(L"xyz", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"AxyzDEFGHIJ", GetCPWLComboBox()->GetText());
+  EXPECT_EQ(L"xyz", GetCPWLComboBox()->GetSelectedText());
 
   GetCPWLComboBox()->SetEditSelection(4, 1);
   GetCPWLComboBox()->ReplaceAndKeepSelection(L"12");
-  EXPECT_STREQ(L"A12DEFGHIJ", GetCPWLComboBox()->GetText().c_str());
-  EXPECT_STREQ(L"12", GetCPWLComboBox()->GetSelectedText().c_str());
+  EXPECT_EQ(L"A12DEFGHIJ", GetCPWLComboBox()->GetText());
+  EXPECT_EQ(L"12", GetCPWLComboBox()->GetSelectedText());
 }
diff --git a/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp b/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
index f0e13d2..0aaa0d4 100644
--- a/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
+++ b/fpdfsdk/pwl/cpwl_edit_embeddertest.cpp
@@ -104,7 +104,7 @@
   EXPECT_TRUE(GetCFFLFormFiller()->OnChar(GetCPDFSDKAnnot(), 'b', {}));
   EXPECT_TRUE(GetCFFLFormFiller()->OnChar(GetCPDFSDKAnnot(), 'c', {}));
 
-  EXPECT_STREQ(L"abc", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"abc", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, GetSelectedTextEmptyAndBasic) {
@@ -121,7 +121,7 @@
   EXPECT_TRUE(GetCFFLFormFiller()->OnChar(GetCPDFSDKAnnot(), 'c', {}));
   GetCPWLEdit()->SetSelection(0, 2);
 
-  EXPECT_STREQ(L"ab", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ab", GetCPWLEdit()->GetSelectedText());
 }
 
 TEST_F(CPWLEditEmbedderTest, GetSelectedTextFragments) {
@@ -132,26 +132,26 @@
   EXPECT_TRUE(GetCPWLEdit()->GetSelectedText().IsEmpty());
 
   GetCPWLEdit()->SetSelection(0, 1);
-  EXPECT_STREQ(L"A", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"A", GetCPWLEdit()->GetSelectedText());
 
   GetCPWLEdit()->SetSelection(0, -1);
-  EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
-               GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
+            GetCPWLEdit()->GetSelectedText());
 
   GetCPWLEdit()->SetSelection(-8, -1);
   EXPECT_TRUE(GetCPWLEdit()->GetSelectedText().IsEmpty());
 
   GetCPWLEdit()->SetSelection(23, 12);
-  EXPECT_STREQ(L"MNOPQRSTUVW", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"MNOPQRSTUVW", GetCPWLEdit()->GetSelectedText());
 
   GetCPWLEdit()->SetSelection(12, 23);
-  EXPECT_STREQ(L"MNOPQRSTUVW", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"MNOPQRSTUVW", GetCPWLEdit()->GetSelectedText());
 
   GetCPWLEdit()->SetSelection(49, 50);
-  EXPECT_STREQ(L"r", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"r", GetCPWLEdit()->GetSelectedText());
 
   GetCPWLEdit()->SetSelection(49, 55);
-  EXPECT_STREQ(L"r", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"r", GetCPWLEdit()->GetSelectedText());
 }
 
 TEST_F(CPWLEditEmbedderTest, DeleteEntireTextSelection) {
@@ -159,8 +159,8 @@
   TypeTextIntoTextField(50);
 
   GetCPWLEdit()->SetSelection(0, -1);
-  EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
-               GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
+            GetCPWLEdit()->GetSelectedText());
 
   GetCPWLEdit()->ReplaceSelection(L"");
   EXPECT_TRUE(GetCPWLEdit()->GetText().IsEmpty());
@@ -171,11 +171,11 @@
   TypeTextIntoTextField(50);
 
   GetCPWLEdit()->SetSelection(12, 23);
-  EXPECT_STREQ(L"MNOPQRSTUVW", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"MNOPQRSTUVW", GetCPWLEdit()->GetSelectedText());
 
   GetCPWLEdit()->ReplaceSelection(L"");
-  EXPECT_STREQ(L"ABCDEFGHIJKLXYZ[\\]^_`abcdefghijklmnopqr",
-               GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJKLXYZ[\\]^_`abcdefghijklmnopqr",
+            GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, DeleteTextSelectionLeft) {
@@ -183,11 +183,11 @@
   TypeTextIntoTextField(50);
 
   GetCPWLEdit()->SetSelection(0, 5);
-  EXPECT_STREQ(L"ABCDE", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ABCDE", GetCPWLEdit()->GetSelectedText());
 
   GetCPWLEdit()->ReplaceSelection(L"");
-  EXPECT_STREQ(L"FGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
-               GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"FGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
+            GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, DeleteTextSelectionRight) {
@@ -195,11 +195,11 @@
   TypeTextIntoTextField(50);
 
   GetCPWLEdit()->SetSelection(45, 50);
-  EXPECT_STREQ(L"nopqr", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"nopqr", GetCPWLEdit()->GetSelectedText());
 
   GetCPWLEdit()->ReplaceSelection(L"");
-  EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklm",
-               GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklm",
+            GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, DeleteEmptyTextSelection) {
@@ -207,14 +207,14 @@
   TypeTextIntoTextField(50);
 
   GetCPWLEdit()->ReplaceSelection(L"");
-  EXPECT_STREQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
-               GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqr",
+            GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, InsertTextInEmptyTextField) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnot());
   GetCPWLEdit()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"Hello", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"Hello", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, InsertTextInPopulatedTextFieldLeft) {
@@ -225,7 +225,7 @@
   EXPECT_TRUE(GetCFFLFormFiller()->OnKeyDown(FWL_VKEY_Home, {}));
 
   GetCPWLEdit()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"HelloABCDEFGHIJ", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"HelloABCDEFGHIJ", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, InsertTextInPopulatedTextFieldMiddle) {
@@ -238,7 +238,7 @@
   }
 
   GetCPWLEdit()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"ABCDEHelloFGHIJ", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEHelloFGHIJ", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, InsertTextInPopulatedTextFieldRight) {
@@ -246,7 +246,7 @@
   TypeTextIntoTextField(10);
 
   GetCPWLEdit()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"ABCDEFGHIJHello", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJHello", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest,
@@ -255,9 +255,9 @@
   TypeTextIntoTextField(10);
 
   GetCPWLEdit()->SetSelection(0, -1);
-  EXPECT_STREQ(L"ABCDEFGHIJ", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJ", GetCPWLEdit()->GetSelectedText());
   GetCPWLEdit()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"Hello", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"Hello", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest,
@@ -266,9 +266,9 @@
   TypeTextIntoTextField(10);
 
   GetCPWLEdit()->SetSelection(0, 5);
-  EXPECT_STREQ(L"ABCDE", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ABCDE", GetCPWLEdit()->GetSelectedText());
   GetCPWLEdit()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"HelloFGHIJ", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"HelloFGHIJ", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest,
@@ -277,9 +277,9 @@
   TypeTextIntoTextField(10);
 
   GetCPWLEdit()->SetSelection(2, 7);
-  EXPECT_STREQ(L"CDEFG", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"CDEFG", GetCPWLEdit()->GetSelectedText());
   GetCPWLEdit()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"ABHelloHIJ", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"ABHelloHIJ", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest,
@@ -288,35 +288,35 @@
   TypeTextIntoTextField(10);
 
   GetCPWLEdit()->SetSelection(5, 10);
-  EXPECT_STREQ(L"FGHIJ", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"FGHIJ", GetCPWLEdit()->GetSelectedText());
   GetCPWLEdit()->ReplaceSelection(L"Hello");
-  EXPECT_STREQ(L"ABCDEHello", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEHello", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, InsertTextInEmptyCharLimitTextFieldOverflow) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
   GetCPWLEdit()->SetSelection(0, -1);
-  EXPECT_STREQ(L"Elephant", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Elephant", GetCPWLEdit()->GetSelectedText());
   GetCPWLEdit()->ReplaceSelection(L"");
 
   GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
-  EXPECT_STREQ(L"Hippopotam", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"Hippopotam", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, InsertTextInEmptyCharLimitTextFieldFit) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
   GetCPWLEdit()->SetSelection(0, -1);
-  EXPECT_STREQ(L"Elephant", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Elephant", GetCPWLEdit()->GetSelectedText());
   GetCPWLEdit()->ReplaceSelection(L"");
 
   GetCPWLEdit()->ReplaceSelection(L"Zebra");
-  EXPECT_STREQ(L"Zebra", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"Zebra", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, InsertTextInPopulatedCharLimitTextFieldLeft) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
   GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
-  EXPECT_STREQ(L"HiElephant", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"HiElephant", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, InsertTextInPopulatedCharLimitTextFieldMiddle) {
@@ -327,7 +327,7 @@
   }
 
   GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
-  EXPECT_STREQ(L"ElephHiant", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"ElephHiant", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, InsertTextInPopulatedCharLimitTextFieldRight) {
@@ -336,91 +336,91 @@
   EXPECT_TRUE(GetCFFLFormFiller()->OnKeyDown(FWL_VKEY_End, {}));
 
   GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
-  EXPECT_STREQ(L"ElephantHi", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"ElephantHi", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest,
        InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldWhole) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
   GetCPWLEdit()->SetSelection(0, -1);
-  EXPECT_STREQ(L"Elephant", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Elephant", GetCPWLEdit()->GetSelectedText());
   GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
-  EXPECT_STREQ(L"Hippopotam", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"Hippopotam", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest,
        InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldLeft) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
   GetCPWLEdit()->SetSelection(0, 4);
-  EXPECT_STREQ(L"Elep", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Elep", GetCPWLEdit()->GetSelectedText());
   GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
-  EXPECT_STREQ(L"Hippophant", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"Hippophant", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest,
        InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldMiddle) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
   GetCPWLEdit()->SetSelection(2, 6);
-  EXPECT_STREQ(L"epha", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"epha", GetCPWLEdit()->GetSelectedText());
   GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
-  EXPECT_STREQ(L"ElHippopnt", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"ElHippopnt", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest,
        InsertTextAndReplaceSelectionInPopulatedCharLimitTextFieldRight) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnotCharLimit());
   GetCPWLEdit()->SetSelection(4, 8);
-  EXPECT_STREQ(L"hant", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"hant", GetCPWLEdit()->GetSelectedText());
   GetCPWLEdit()->ReplaceSelection(L"Hippopotamus");
-  EXPECT_STREQ(L"ElepHippop", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"ElepHippop", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, SetTextWithEndCarriageFeed) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnot());
   GetCPWLEdit()->SetText(L"Foo\r");
-  EXPECT_STREQ(L"Foo", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"Foo", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, SetTextWithEndNewline) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnot());
   GetCPWLEdit()->SetText(L"Foo\n");
-  EXPECT_STREQ(L"Foo", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"Foo", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, SetTextWithEndCarriageFeedAndNewLine) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnot());
   GetCPWLEdit()->SetText(L"Foo\r\n");
-  EXPECT_STREQ(L"Foo", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"Foo", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, SetTextWithEndNewLineAndCarriageFeed) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnot());
   GetCPWLEdit()->SetText(L"Foo\n\r");
-  EXPECT_STREQ(L"Foo", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"Foo", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, SetTextWithBodyCarriageFeed) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnot());
   GetCPWLEdit()->SetText(L"Foo\rBar");
-  EXPECT_STREQ(L"FooBar", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"FooBar", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, SetTextWithBodyNewline) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnot());
   GetCPWLEdit()->SetText(L"Foo\nBar");
-  EXPECT_STREQ(L"FooBar", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"FooBar", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, SetTextWithBodyCarriageFeedAndNewLine) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnot());
   GetCPWLEdit()->SetText(L"Foo\r\nBar");
-  EXPECT_STREQ(L"FooBar", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"FooBar", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, SetTextWithBodyNewLineAndCarriageFeed) {
   FormFillerAndWindowSetup(GetCPDFSDKAnnot());
   GetCPWLEdit()->SetText(L"Foo\n\rBar");
-  EXPECT_STREQ(L"FooBar", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"FooBar", GetCPWLEdit()->GetText());
 }
 
 TEST_F(CPWLEditEmbedderTest, ReplaceAndKeepSelection) {
@@ -428,15 +428,15 @@
   TypeTextIntoTextField(10);
 
   GetCPWLEdit()->SetSelection(1, 3);
-  EXPECT_STREQ(L"ABCDEFGHIJ", GetCPWLEdit()->GetText().c_str());
+  EXPECT_EQ(L"ABCDEFGHIJ", GetCPWLEdit()->GetText());
   GetCPWLEdit()->ReplaceAndKeepSelection(L"xyz");
-  EXPECT_STREQ(L"AxyzDEFGHIJ", GetCPWLEdit()->GetText().c_str());
-  EXPECT_STREQ(L"xyz", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"AxyzDEFGHIJ", GetCPWLEdit()->GetText());
+  EXPECT_EQ(L"xyz", GetCPWLEdit()->GetSelectedText());
   EXPECT_EQ(GetCPWLEdit()->GetSelection(), std::make_pair(1, 4));
 
   GetCPWLEdit()->SetSelection(4, 1);
   GetCPWLEdit()->ReplaceAndKeepSelection(L"12");
-  EXPECT_STREQ(L"A12DEFGHIJ", GetCPWLEdit()->GetText().c_str());
-  EXPECT_STREQ(L"12", GetCPWLEdit()->GetSelectedText().c_str());
+  EXPECT_EQ(L"A12DEFGHIJ", GetCPWLEdit()->GetText());
+  EXPECT_EQ(L"12", GetCPWLEdit()->GetSelectedText());
   EXPECT_EQ(GetCPWLEdit()->GetSelection(), std::make_pair(1, 3));
 }
diff --git a/fxbarcode/oned/BC_OnedCode128Writer_unittest.cpp b/fxbarcode/oned/BC_OnedCode128Writer_unittest.cpp
index ee1d9b1..c6bcc0e 100644
--- a/fxbarcode/oned/BC_OnedCode128Writer_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedCode128Writer_unittest.cpp
@@ -109,21 +109,21 @@
 TEST(OnedCode128WriterTest, FilterContents) {
   {
     CBC_OnedCode128Writer writer(BC_TYPE::kCode128B);
-    EXPECT_STREQ(L"", writer.FilterContents(L"").c_str());
-    EXPECT_STREQ(L"foo", writer.FilterContents(L"foo\x10").c_str());
-    EXPECT_STREQ(L"fool", writer.FilterContents(L"foo\x10l").c_str());
-    EXPECT_STREQ(L"foo", writer.FilterContents(L"foo\x10\x7F").c_str());
-    EXPECT_STREQ(L"foo", writer.FilterContents(L"foo\x10\x7F\x88").c_str());
-    EXPECT_STREQ(L"bar", writer.FilterContents(L"bar\x10\x7F\x88").c_str());
+    EXPECT_EQ(L"", writer.FilterContents(L""));
+    EXPECT_EQ(L"foo", writer.FilterContents(L"foo\x10"));
+    EXPECT_EQ(L"fool", writer.FilterContents(L"foo\x10l"));
+    EXPECT_EQ(L"foo", writer.FilterContents(L"foo\x10\x7F"));
+    EXPECT_EQ(L"foo", writer.FilterContents(L"foo\x10\x7F\x88"));
+    EXPECT_EQ(L"bar", writer.FilterContents(L"bar\x10\x7F\x88"));
   }
   {
     CBC_OnedCode128Writer writer(BC_TYPE::kCode128C);
-    EXPECT_STREQ(L"", writer.FilterContents(L"").c_str());
-    EXPECT_STREQ(L"f", writer.FilterContents(L"foo\x10").c_str());
-    EXPECT_STREQ(L"f", writer.FilterContents(L"foo\x10l").c_str());
-    EXPECT_STREQ(L"f", writer.FilterContents(L"foo\x10\x7F").c_str());
-    EXPECT_STREQ(L"f", writer.FilterContents(L"foo\x10\x7F\x88").c_str());
-    EXPECT_STREQ(L"ba", writer.FilterContents(L"bar\x10\x7F\x88").c_str());
+    EXPECT_EQ(L"", writer.FilterContents(L""));
+    EXPECT_EQ(L"f", writer.FilterContents(L"foo\x10"));
+    EXPECT_EQ(L"f", writer.FilterContents(L"foo\x10l"));
+    EXPECT_EQ(L"f", writer.FilterContents(L"foo\x10\x7F"));
+    EXPECT_EQ(L"f", writer.FilterContents(L"foo\x10\x7F\x88"));
+    EXPECT_EQ(L"ba", writer.FilterContents(L"bar\x10\x7F\x88"));
   }
 }
 
diff --git a/fxjs/cfxjs_engine_embeddertest.cpp b/fxjs/cfxjs_engine_embeddertest.cpp
index f8952af..32188e6 100644
--- a/fxjs/cfxjs_engine_embeddertest.cpp
+++ b/fxjs/cfxjs_engine_embeddertest.cpp
@@ -94,7 +94,7 @@
   std::optional<IJS_Runtime::JS_Error> err =
       engine()->Execute(L"functoon(x) { return x+1; }");
   EXPECT_TRUE(err);
-  EXPECT_STREQ(L"SyntaxError: Unexpected token '{'", err->exception.c_str());
+  EXPECT_EQ(L"SyntaxError: Unexpected token '{'", err->exception);
   EXPECT_EQ(1, err->line);
   EXPECT_EQ(12, err->column);
 }
diff --git a/fxjs/cjs_publicmethods_embeddertest.cpp b/fxjs/cjs_publicmethods_embeddertest.cpp
index 3184a56..b23fada 100644
--- a/fxjs/cjs_publicmethods_embeddertest.cpp
+++ b/fxjs/cjs_publicmethods_embeddertest.cpp
@@ -125,62 +125,62 @@
   // 1968-06-25
   formatted_date =
       CJS_PublicMethods::PrintDateUsingFormat(-47952000000, L"ddmmyy");
-  EXPECT_STREQ(L"250668", formatted_date.c_str());
+  EXPECT_EQ(L"250668", formatted_date);
   formatted_date =
       CJS_PublicMethods::PrintDateUsingFormat(-47952000000, L"yy/mm/dd");
-  EXPECT_STREQ(L"68/06/25", formatted_date.c_str());
+  EXPECT_EQ(L"68/06/25", formatted_date);
 
   // 1969-12-31
   formatted_date = CJS_PublicMethods::PrintDateUsingFormat(-0.0001, L"ddmmyy");
-  EXPECT_STREQ(L"311269", formatted_date.c_str());
+  EXPECT_EQ(L"311269", formatted_date);
   formatted_date = CJS_PublicMethods::PrintDateUsingFormat(-0.0001, L"yy!mmdd");
-  EXPECT_STREQ(L"69!1231", formatted_date.c_str());
+  EXPECT_EQ(L"69!1231", formatted_date);
 
   // 1970-01-01
   formatted_date = CJS_PublicMethods::PrintDateUsingFormat(0, L"ddmmyy");
-  EXPECT_STREQ(L"010170", formatted_date.c_str());
+  EXPECT_EQ(L"010170", formatted_date);
   formatted_date = CJS_PublicMethods::PrintDateUsingFormat(0, L"mm-yyyy-dd");
-  EXPECT_STREQ(L"01-1970-01", formatted_date.c_str());
+  EXPECT_EQ(L"01-1970-01", formatted_date);
 
   // 1985-12-31
   formatted_date =
       CJS_PublicMethods::PrintDateUsingFormat(504835200000.0, L"ddmmyy");
-  EXPECT_STREQ(L"311285", formatted_date.c_str());
+  EXPECT_EQ(L"311285", formatted_date);
   formatted_date =
       CJS_PublicMethods::PrintDateUsingFormat(504835200000.0, L"yymmdd");
-  EXPECT_STREQ(L"851231", formatted_date.c_str());
+  EXPECT_EQ(L"851231", formatted_date);
 
   // 1995-02-01
   formatted_date =
       CJS_PublicMethods::PrintDateUsingFormat(791596800000.0, L"ddmmyy");
-  EXPECT_STREQ(L"010295", formatted_date.c_str());
+  EXPECT_EQ(L"010295", formatted_date);
   formatted_date =
       CJS_PublicMethods::PrintDateUsingFormat(791596800000.0, L"yyyymmdd");
-  EXPECT_STREQ(L"19950201", formatted_date.c_str());
+  EXPECT_EQ(L"19950201", formatted_date);
 
   // 2005-02-01
   formatted_date =
       CJS_PublicMethods::PrintDateUsingFormat(1107216000000.0, L"ddmmyy");
-  EXPECT_STREQ(L"010205", formatted_date.c_str());
+  EXPECT_EQ(L"010205", formatted_date);
   formatted_date =
       CJS_PublicMethods::PrintDateUsingFormat(1107216000000.0, L"yyyyddmm");
-  EXPECT_STREQ(L"20050102", formatted_date.c_str());
+  EXPECT_EQ(L"20050102", formatted_date);
 
   // 2085-12-31
   formatted_date =
       CJS_PublicMethods::PrintDateUsingFormat(3660595200000.0, L"ddmmyy");
-  EXPECT_STREQ(L"311285", formatted_date.c_str());
+  EXPECT_EQ(L"311285", formatted_date);
   formatted_date =
       CJS_PublicMethods::PrintDateUsingFormat(3660595200000.0, L"yyyydd");
-  EXPECT_STREQ(L"208531", formatted_date.c_str());
+  EXPECT_EQ(L"208531", formatted_date);
 
   // 2095-02-01
   formatted_date =
       CJS_PublicMethods::PrintDateUsingFormat(3947356800000.0, L"ddmmyy");
-  EXPECT_STREQ(L"010295", formatted_date.c_str());
+  EXPECT_EQ(L"010295", formatted_date);
   formatted_date =
       CJS_PublicMethods::PrintDateUsingFormat(3947356800000.0, L"mmddyyyy");
-  EXPECT_STREQ(L"02012095", formatted_date.c_str());
+  EXPECT_EQ(L"02012095", formatted_date);
 }
 
 TEST_F(CJS_PublicMethodsEmbedderTest, AFSimple_CalculateSum) {
diff --git a/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp b/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp
index 724251c..4f5f174 100644
--- a/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp
+++ b/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp
@@ -98,8 +98,7 @@
     CFXJSE_ScopeUtil_IsolateHandleContext scope(GetJseContext());
     v8::Local<v8::Value> value = GetValue();
     EXPECT_TRUE(fxv8::IsString(value));
-    EXPECT_STREQ(expected,
-                 fxv8::ReentrantToByteStringHelper(isolate(), value).c_str())
+    EXPECT_EQ(expected, fxv8::ReentrantToByteStringHelper(isolate(), value))
         << "Program: " << input;
   }
 };
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp
index 6d8e52c..c436565 100644
--- a/testing/embedder_test.cpp
+++ b/testing/embedder_test.cpp
@@ -227,9 +227,9 @@
   static FPDF_FILEHANDLER kFakeFileHandler = {
       nullptr,
       [](void*) -> void {},
-      [](void*) -> FPDF_DWORD { return sizeof(kString); },
+      [](void*) -> FPDF_DWORD { return sizeof(kString) - 1; },
       [](void*, FPDF_DWORD off, void* buffer, FPDF_DWORD size) -> FPDF_RESULT {
-        memcpy(buffer, kString, std::min<size_t>(size, sizeof(kString)));
+        memcpy(buffer, kString, std::min<size_t>(size, sizeof(kString) - 1));
         return 0;
       },
       [](void*, FPDF_DWORD, const void*, FPDF_DWORD) -> FPDF_RESULT {
diff --git a/xfa/fde/cfde_texteditengine_unittest.cpp b/xfa/fde/cfde_texteditengine_unittest.cpp
index a580717..67b516e 100644
--- a/xfa/fde/cfde_texteditengine_unittest.cpp
+++ b/xfa/fde/cfde_texteditengine_unittest.cpp
@@ -61,25 +61,25 @@
 };
 
 TEST_F(CFDE_TextEditEngineTest, Insert) {
-  EXPECT_STREQ(L"", engine()->GetText().c_str());
+  EXPECT_EQ(L"", engine()->GetText());
 
   engine()->Insert(0, L"");
-  EXPECT_STREQ(L"", engine()->GetText().c_str());
+  EXPECT_EQ(L"", engine()->GetText());
   EXPECT_EQ(0U, engine()->GetLength());
 
   engine()->Insert(0, L"Hello");
-  EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello", engine()->GetText());
   EXPECT_EQ(5U, engine()->GetLength());
 
   engine()->Insert(5, L" World");
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
   EXPECT_EQ(11U, engine()->GetLength());
 
   engine()->Insert(5, L" New");
-  EXPECT_STREQ(L"Hello New World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello New World", engine()->GetText());
 
   engine()->Insert(100, L" Cat");
-  EXPECT_STREQ(L"Hello New World Cat", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello New World Cat", engine()->GetText());
 
   engine()->Clear();
 
@@ -89,11 +89,11 @@
 
   // No delegate
   engine()->Insert(5, L" World");
-  EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello", engine()->GetText());
 
   engine()->SetCharacterLimit(8);
   engine()->Insert(5, L" World");
-  EXPECT_STREQ(L"Hello Wo", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello Wo", engine()->GetText());
 
   engine()->Clear();
 
@@ -107,13 +107,13 @@
   // Insert when full.
   engine()->Insert(5, L" World");
   EXPECT_TRUE(delegate->text_is_full);
-  EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello", engine()->GetText());
   delegate->Reset();
 
   engine()->SetCharacterLimit(8);
   engine()->Insert(5, L" World");
   EXPECT_TRUE(delegate->text_is_full);
-  EXPECT_STREQ(L"Hello Wo", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello Wo", engine()->GetText());
   delegate->Reset();
   engine()->SetHasCharacterLimit(false);
 
@@ -124,18 +124,18 @@
   delegate->fail_validation = true;
   engine()->EnableValidation(true);
   engine()->Insert(5, L" World");
-  EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello", engine()->GetText());
 
   delegate->fail_validation = false;
   engine()->Insert(5, L" World");
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
   engine()->EnableValidation(false);
 
   engine()->Clear();
 
   engine()->Insert(0, L"Hello\nWorld");
   EXPECT_FALSE(delegate->text_is_full);
-  EXPECT_STREQ(L"Hello\nWorld", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello\nWorld", engine()->GetText());
   delegate->Reset();
   engine()->Clear();
 
@@ -146,7 +146,7 @@
   EXPECT_FALSE(delegate->text_is_full);
   engine()->Insert(5, L" World");
   EXPECT_TRUE(delegate->text_is_full);
-  EXPECT_STREQ(L"Hello Wo", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello Wo", engine()->GetText());
   engine()->LimitHorizontalScroll(false);
 
   delegate->Reset();
@@ -159,7 +159,7 @@
   EXPECT_FALSE(delegate->text_is_full);
   engine()->Insert(5, L" Wo\nrld");
   EXPECT_TRUE(delegate->text_is_full);
-  EXPECT_STREQ(L"Hello Wo\n", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello Wo\n", engine()->GetText());
   engine()->LimitVerticalScroll(false);
 
   engine()->SetDelegate(nullptr);
@@ -170,13 +170,13 @@
   engine()->Insert(0, L"Hello World");
   engine()->SetCharacterLimit(5);
   engine()->Insert(0, L"Not Inserted before ");
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
 
   engine()->SetHasCharacterLimit(false);
   engine()->Insert(0, L"Inserted before ");
   engine()->SetHasCharacterLimit(true);
   engine()->Insert(0, L"Not Inserted before ");
-  EXPECT_STREQ(L"Inserted before Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Inserted before Hello World", engine()->GetText());
 }
 
 TEST_F(CFDE_TextEditEngineTest, InsertSkipNotify) {
@@ -185,16 +185,16 @@
   engine()->Insert(0, L"Hello");
   engine()->Insert(5, L" World",
                    CFDE_TextEditEngine::RecordOperation::kSkipNotify);
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
 
   engine()->Insert(0, L"Not inserted");
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
 
   engine()->Delete(5, 1);
-  EXPECT_STREQ(L"HelloWorld", engine()->GetText().c_str());
+  EXPECT_EQ(L"HelloWorld", engine()->GetText());
 
   engine()->Insert(0, L"****");
-  EXPECT_STREQ(L"*HelloWorld", engine()->GetText().c_str());
+  EXPECT_EQ(L"*HelloWorld", engine()->GetText());
 }
 
 TEST_F(CFDE_TextEditEngineTest, InsertGrowGap) {
@@ -213,33 +213,33 @@
 }
 
 TEST_F(CFDE_TextEditEngineTest, Delete) {
-  EXPECT_STREQ(L"", engine()->Delete(0, 50).c_str());
-  EXPECT_STREQ(L"", engine()->GetText().c_str());
+  EXPECT_EQ(L"", engine()->Delete(0, 50));
+  EXPECT_EQ(L"", engine()->GetText());
 
   engine()->Insert(0, L"Hello World");
-  EXPECT_STREQ(L" World", engine()->Delete(5, 6).c_str());
-  EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
+  EXPECT_EQ(L" World", engine()->Delete(5, 6));
+  EXPECT_EQ(L"Hello", engine()->GetText());
 
   engine()->Clear();
   engine()->Insert(0, L"Hello World");
-  EXPECT_STREQ(L" ", engine()->Delete(5, 1).c_str());
-  EXPECT_STREQ(L"HelloWorld", engine()->GetText().c_str());
+  EXPECT_EQ(L" ", engine()->Delete(5, 1));
+  EXPECT_EQ(L"HelloWorld", engine()->GetText());
 
-  EXPECT_STREQ(L"elloWorld", engine()->Delete(1, 50).c_str());
-  EXPECT_STREQ(L"H", engine()->GetText().c_str());
+  EXPECT_EQ(L"elloWorld", engine()->Delete(1, 50));
+  EXPECT_EQ(L"H", engine()->GetText());
 }
 
 TEST_F(CFDE_TextEditEngineTest, Clear) {
-  EXPECT_STREQ(L"", engine()->GetText().c_str());
+  EXPECT_EQ(L"", engine()->GetText());
 
   engine()->Clear();
-  EXPECT_STREQ(L"", engine()->GetText().c_str());
+  EXPECT_EQ(L"", engine()->GetText());
 
   engine()->Insert(0, L"Hello World");
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
 
   engine()->Clear();
-  EXPECT_STREQ(L"", engine()->GetText().c_str());
+  EXPECT_EQ(L"", engine()->GetText());
   EXPECT_EQ(0U, engine()->GetLength());
 }
 
@@ -253,7 +253,7 @@
   EXPECT_EQ(L' ', engine()->GetChar(5));
 
   engine()->Insert(5, L" A");
-  EXPECT_STREQ(L"Hello A World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello A World", engine()->GetText());
   EXPECT_EQ(L'W', engine()->GetChar(8));
 
   engine()->EnablePasswordMode(true);
@@ -285,16 +285,16 @@
   EXPECT_FALSE(engine()->HasSelection());
 
   engine()->Insert(0, L"Hello World");
-  EXPECT_STREQ(L"", engine()->DeleteSelectedText().c_str());
+  EXPECT_EQ(L"", engine()->DeleteSelectedText());
 
   EXPECT_FALSE(engine()->HasSelection());
   engine()->SelectAll();
   EXPECT_TRUE(engine()->HasSelection());
-  EXPECT_STREQ(L"Hello World", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetSelectedText());
 
   engine()->ClearSelection();
   EXPECT_FALSE(engine()->HasSelection());
-  EXPECT_STREQ(L"", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"", engine()->GetSelectedText());
 
   engine()->SelectAll();
   size_t start_idx;
@@ -304,59 +304,59 @@
   EXPECT_EQ(11U, count);
 
   // Selection before gap.
-  EXPECT_STREQ(L"Hello World", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetSelectedText());
   EXPECT_TRUE(engine()->HasSelection());
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
 
   engine()->Insert(5, L" A");
   EXPECT_FALSE(engine()->HasSelection());
-  EXPECT_STREQ(L"", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"", engine()->GetSelectedText());
 
   // Selection over the gap.
   engine()->SelectAll();
   EXPECT_TRUE(engine()->HasSelection());
-  EXPECT_STREQ(L"Hello A World", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Hello A World", engine()->GetSelectedText());
   engine()->Clear();
 
   engine()->Insert(0, L"Hello World");
   engine()->SelectAll();
 
-  EXPECT_STREQ(L"Hello World", engine()->DeleteSelectedText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->DeleteSelectedText());
   EXPECT_FALSE(engine()->HasSelection());
-  EXPECT_STREQ(L"", engine()->GetText().c_str());
+  EXPECT_EQ(L"", engine()->GetText());
 
   engine()->Insert(0, L"Hello World");
   engine()->SetSelection(5, 5);
-  EXPECT_STREQ(L" Worl", engine()->DeleteSelectedText().c_str());
+  EXPECT_EQ(L" Worl", engine()->DeleteSelectedText());
   EXPECT_FALSE(engine()->HasSelection());
-  EXPECT_STREQ(L"Hellod", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hellod", engine()->GetText());
 
   engine()->Clear();
   engine()->Insert(0, L"Hello World");
   engine()->SelectAll();
   engine()->ReplaceSelectedText(L"Goodbye Everybody");
   EXPECT_FALSE(engine()->HasSelection());
-  EXPECT_STREQ(L"Goodbye Everybody", engine()->GetText().c_str());
+  EXPECT_EQ(L"Goodbye Everybody", engine()->GetText());
 
   engine()->Clear();
   engine()->Insert(0, L"Hello World");
   engine()->SetSelection(1, 4);
   engine()->ReplaceSelectedText(L"i,");
   EXPECT_FALSE(engine()->HasSelection());
-  EXPECT_STREQ(L"Hi, World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hi, World", engine()->GetText());
 
   // Selection fully after gap.
   engine()->Clear();
   engine()->Insert(0, L"Hello");
   engine()->Insert(0, L"A ");
   engine()->SetSelection(3, 6);
-  EXPECT_STREQ(L"ello", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"ello", engine()->GetSelectedText());
 
   engine()->Clear();
   engine()->Insert(0, L"Hello World");
   engine()->ClearSelection();
   engine()->DeleteSelectedText();
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
 }
 
 TEST_F(CFDE_TextEditEngineTest, UndoRedo) {
@@ -369,11 +369,11 @@
   EXPECT_TRUE(engine()->CanUndo());
   EXPECT_FALSE(engine()->CanRedo());
   EXPECT_TRUE(engine()->Undo());
-  EXPECT_STREQ(L"", engine()->GetText().c_str());
+  EXPECT_EQ(L"", engine()->GetText());
   EXPECT_FALSE(engine()->CanUndo());
   EXPECT_TRUE(engine()->CanRedo());
   EXPECT_TRUE(engine()->Redo());
-  EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello", engine()->GetText());
   EXPECT_TRUE(engine()->CanUndo());
   EXPECT_FALSE(engine()->CanRedo());
 
@@ -384,26 +384,26 @@
   engine()->Insert(0, L"Hello World");
   engine()->SelectAll();
   engine()->DeleteSelectedText();
-  EXPECT_STREQ(L"", engine()->GetText().c_str());
+  EXPECT_EQ(L"", engine()->GetText());
   EXPECT_TRUE(engine()->CanUndo());
   EXPECT_TRUE(engine()->Undo());
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
   EXPECT_TRUE(engine()->CanRedo());
   EXPECT_TRUE(engine()->Redo());
-  EXPECT_STREQ(L"", engine()->GetText().c_str());
+  EXPECT_EQ(L"", engine()->GetText());
   EXPECT_TRUE(engine()->CanUndo());
   EXPECT_FALSE(engine()->CanRedo());
 
   engine()->Insert(0, L"Hello World");
   engine()->SelectAll();
   engine()->ReplaceSelectedText(L"Goodbye Friend");
-  EXPECT_STREQ(L"Goodbye Friend", engine()->GetText().c_str());
+  EXPECT_EQ(L"Goodbye Friend", engine()->GetText());
   EXPECT_TRUE(engine()->CanUndo());
   EXPECT_TRUE(engine()->Undo());
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
   EXPECT_TRUE(engine()->CanRedo());
   EXPECT_TRUE(engine()->Redo());
-  EXPECT_STREQ(L"Goodbye Friend", engine()->GetText().c_str());
+  EXPECT_EQ(L"Goodbye Friend", engine()->GetText());
 
   engine()->Clear();
   engine()->SetMaxEditOperationsForTesting(3);
@@ -413,19 +413,19 @@
 
   EXPECT_TRUE(engine()->CanUndo());
   EXPECT_TRUE(engine()->Undo());
-  EXPECT_STREQ(L"First Second ", engine()->GetText().c_str());
+  EXPECT_EQ(L"First Second ", engine()->GetText());
   EXPECT_TRUE(engine()->CanUndo());
   EXPECT_TRUE(engine()->Undo());
   EXPECT_FALSE(
       engine()->CanUndo());  // Can't undo First; undo buffer too small.
-  EXPECT_STREQ(L"First ", engine()->GetText().c_str());
+  EXPECT_EQ(L"First ", engine()->GetText());
 
   EXPECT_TRUE(engine()->CanRedo());
   EXPECT_TRUE(engine()->Redo());
   EXPECT_TRUE(engine()->CanRedo());
   EXPECT_TRUE(engine()->Redo());
   EXPECT_FALSE(engine()->CanRedo());
-  EXPECT_STREQ(L"First Second Third", engine()->GetText().c_str());
+  EXPECT_EQ(L"First Second Third", engine()->GetText());
 
   engine()->Clear();
 
@@ -438,29 +438,29 @@
   engine()->Insert(3, L"l");
   engine()->Insert(4, L"o");
   engine()->Insert(5, L" World");
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
 
   // Do A, undo. Do B, undo. Redo should cause B.
   engine()->Delete(4, 3);
-  EXPECT_STREQ(L"Hellorld", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hellorld", engine()->GetText());
   EXPECT_TRUE(engine()->Undo());
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
   engine()->Delete(5, 6);
-  EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello", engine()->GetText());
   EXPECT_TRUE(engine()->Undo());
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
   EXPECT_TRUE(engine()->Redo());
-  EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello", engine()->GetText());
 
   // Undo down to the limit.
   EXPECT_TRUE(engine()->Undo());
-  EXPECT_STREQ(L"Hello World", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello World", engine()->GetText());
   EXPECT_TRUE(engine()->Undo());
-  EXPECT_STREQ(L"Hello", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hello", engine()->GetText());
   EXPECT_TRUE(engine()->Undo());
-  EXPECT_STREQ(L"Hell", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hell", engine()->GetText());
   EXPECT_FALSE(engine()->Undo());
-  EXPECT_STREQ(L"Hell", engine()->GetText().c_str());
+  EXPECT_EQ(L"Hell", engine()->GetText());
 }
 
 TEST_F(CFDE_TextEditEngineTest, GetIndexForPoint) {
@@ -569,7 +569,7 @@
   EXPECT_EQ(0U, start_idx);
   EXPECT_EQ(0U, count);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"", engine()->GetSelectedText());
 
   engine()->Clear();
   engine()->Insert(0, L"Hello");
@@ -577,7 +577,7 @@
   EXPECT_EQ(0U, start_idx);
   EXPECT_EQ(5U, count);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"Hello", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Hello", engine()->GetSelectedText());
 
   engine()->Clear();
   engine()->Insert(0, L"Hello World");
@@ -585,92 +585,92 @@
   EXPECT_EQ(0U, start_idx);
   EXPECT_EQ(0U, count);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"", engine()->GetSelectedText());
 
   std::tie(start_idx, count) = engine()->BoundsForWordAt(0);
   EXPECT_EQ(0U, start_idx);
   EXPECT_EQ(5U, count);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"Hello", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Hello", engine()->GetSelectedText());
 
   std::tie(start_idx, count) = engine()->BoundsForWordAt(1);
   EXPECT_EQ(0U, start_idx);
   EXPECT_EQ(5U, count);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"Hello", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Hello", engine()->GetSelectedText());
 
   std::tie(start_idx, count) = engine()->BoundsForWordAt(4);
   EXPECT_EQ(0U, start_idx);
   EXPECT_EQ(5U, count);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"Hello", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"Hello", engine()->GetSelectedText());
 
   // Select the space
   std::tie(start_idx, count) = engine()->BoundsForWordAt(5);
   EXPECT_EQ(5U, start_idx);
   EXPECT_EQ(1U, count);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L" ", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L" ", engine()->GetSelectedText());
 
   std::tie(start_idx, count) = engine()->BoundsForWordAt(6);
   EXPECT_EQ(6U, start_idx);
   EXPECT_EQ(5U, count);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"World", engine()->GetSelectedText());
 
   engine()->Clear();
   engine()->Insert(0, L"123 456 789");
   std::tie(start_idx, count) = engine()->BoundsForWordAt(5);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"456", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"456", engine()->GetSelectedText());
 
   engine()->Clear();
   engine()->Insert(0, L"123def789");
   std::tie(start_idx, count) = engine()->BoundsForWordAt(5);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"123def789", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"123def789", engine()->GetSelectedText());
 
   engine()->Clear();
   engine()->Insert(0, L"abc456ghi");
   std::tie(start_idx, count) = engine()->BoundsForWordAt(5);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"abc456ghi", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"abc456ghi", engine()->GetSelectedText());
 
   engine()->Clear();
   engine()->Insert(0, L"hello, world");
   std::tie(start_idx, count) = engine()->BoundsForWordAt(0);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"hello", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"hello", engine()->GetSelectedText());
 
   engine()->Clear();
   engine()->Insert(0, L"hello, world");
   std::tie(start_idx, count) = engine()->BoundsForWordAt(5);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L",", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L",", engine()->GetSelectedText());
 
   engine()->Clear();
   engine()->Insert(0, L"np-complete");
   std::tie(start_idx, count) = engine()->BoundsForWordAt(6);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"complete", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"complete", engine()->GetSelectedText());
 
   engine()->Clear();
   engine()->Insert(0, L"(123) 456-7890");
   std::tie(start_idx, count) = engine()->BoundsForWordAt(0);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"(", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"(", engine()->GetSelectedText());
 
   std::tie(start_idx, count) = engine()->BoundsForWordAt(1);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"123", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"123", engine()->GetSelectedText());
 
   std::tie(start_idx, count) = engine()->BoundsForWordAt(7);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"456", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"456", engine()->GetSelectedText());
 
   std::tie(start_idx, count) = engine()->BoundsForWordAt(11);
   engine()->SetSelection(start_idx, count);
-  EXPECT_STREQ(L"7890", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"7890", engine()->GetSelectedText());
 
   // Tests from:
   // http://unicode.org/Public/UNIDATA/auxiliary/WordBreakTest.html#samples
@@ -709,8 +709,7 @@
     for (const auto* res : t.results) {
       std::tie(start_idx, count) = engine()->BoundsForWordAt(idx);
       engine()->SetSelection(start_idx, count);
-      EXPECT_STREQ(res, engine()->GetSelectedText().c_str())
-          << "Input: '" << t.str << "'";
+      EXPECT_EQ(res, engine()->GetSelectedText()) << "Input: '" << t.str << "'";
       idx += count;
     }
   }
@@ -745,37 +744,37 @@
   engine()->Insert(0, L"Hello\r\nWorld\r\nTest");
   // Move to end of Hello from start of World.
   engine()->SetSelection(engine()->GetIndexLeft(7U), 7);
-  EXPECT_STREQ(L"\r\nWorld", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"\r\nWorld", engine()->GetSelectedText());
 
   // Second letter in Hello from second letter in World.
   engine()->SetSelection(engine()->GetIndexUp(8U), 2);
-  EXPECT_STREQ(L"el", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"el", engine()->GetSelectedText());
 
   // Second letter in World from second letter in Test.
   engine()->SetSelection(engine()->GetIndexUp(15U), 2);
-  EXPECT_STREQ(L"or", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"or", engine()->GetSelectedText());
 
   // Second letter in World from second letter in Hello.
   engine()->SetSelection(engine()->GetIndexDown(1U), 2);
-  EXPECT_STREQ(L"or", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"or", engine()->GetSelectedText());
 
   // Second letter in Test from second letter in World.
   engine()->SetSelection(engine()->GetIndexDown(8U), 2);
-  EXPECT_STREQ(L"es", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"es", engine()->GetSelectedText());
 
   size_t start_idx = engine()->GetIndexAtStartOfLine(8U);
   size_t end_idx = engine()->GetIndexAtEndOfLine(8U);
   engine()->SetSelection(start_idx, end_idx - start_idx);
-  EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"World", engine()->GetSelectedText());
 
   // Move past \r\n to before W.
   engine()->SetSelection(engine()->GetIndexRight(5U), 5);
-  EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"World", engine()->GetSelectedText());
 
   engine()->Clear();
   engine()->Insert(0, L"Short\nAnd a very long line");
   engine()->SetSelection(engine()->GetIndexUp(14U), 11);
-  EXPECT_STREQ(L"\nAnd a very", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"\nAnd a very", engine()->GetSelectedText());
 
   engine()->Clear();
   engine()->Insert(0, L"A Very long line\nShort");
@@ -785,61 +784,61 @@
   engine()->Insert(0, L"Hello\rWorld\rTest");
   // Move to end of Hello from start of World.
   engine()->SetSelection(engine()->GetIndexLeft(6U), 6);
-  EXPECT_STREQ(L"\rWorld", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"\rWorld", engine()->GetSelectedText());
 
   // Second letter in Hello from second letter in World.
   engine()->SetSelection(engine()->GetIndexUp(7U), 2);
-  EXPECT_STREQ(L"el", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"el", engine()->GetSelectedText());
 
   // Second letter in World from second letter in Test.
   engine()->SetSelection(engine()->GetIndexUp(13U), 2);
-  EXPECT_STREQ(L"or", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"or", engine()->GetSelectedText());
 
   // Second letter in World from second letter in Hello.
   engine()->SetSelection(engine()->GetIndexDown(1U), 2);
-  EXPECT_STREQ(L"or", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"or", engine()->GetSelectedText());
 
   // Second letter in Test from second letter in World.
   engine()->SetSelection(engine()->GetIndexDown(7U), 2);
-  EXPECT_STREQ(L"es", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"es", engine()->GetSelectedText());
 
   start_idx = engine()->GetIndexAtStartOfLine(7U);
   end_idx = engine()->GetIndexAtEndOfLine(7U);
   engine()->SetSelection(start_idx, end_idx - start_idx);
-  EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"World", engine()->GetSelectedText());
 
   // Move past \r to before W.
   engine()->SetSelection(engine()->GetIndexRight(5U), 5);
-  EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"World", engine()->GetSelectedText());
 
   engine()->Clear();
   engine()->Insert(0, L"Hello\nWorld\nTest");
   // Move to end of Hello from start of World.
   engine()->SetSelection(engine()->GetIndexLeft(6U), 6);
-  EXPECT_STREQ(L"\nWorld", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"\nWorld", engine()->GetSelectedText());
 
   // Second letter in Hello from second letter in World.
   engine()->SetSelection(engine()->GetIndexUp(7U), 2);
-  EXPECT_STREQ(L"el", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"el", engine()->GetSelectedText());
 
   // Second letter in World from second letter in Test.
   engine()->SetSelection(engine()->GetIndexUp(13U), 2);
-  EXPECT_STREQ(L"or", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"or", engine()->GetSelectedText());
 
   // Second letter in World from second letter in Hello.
   engine()->SetSelection(engine()->GetIndexDown(1U), 2);
-  EXPECT_STREQ(L"or", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"or", engine()->GetSelectedText());
 
   // Second letter in Test from second letter in World.
   engine()->SetSelection(engine()->GetIndexDown(7U), 2);
-  EXPECT_STREQ(L"es", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"es", engine()->GetSelectedText());
 
   start_idx = engine()->GetIndexAtStartOfLine(7U);
   end_idx = engine()->GetIndexAtEndOfLine(7U);
   engine()->SetSelection(start_idx, end_idx - start_idx);
-  EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"World", engine()->GetSelectedText());
 
   // Move past \r to before W.
   engine()->SetSelection(engine()->GetIndexRight(5U), 5);
-  EXPECT_STREQ(L"World", engine()->GetSelectedText().c_str());
+  EXPECT_EQ(L"World", engine()->GetSelectedText());
 }
diff --git a/xfa/fde/cfde_textout_unittest.cpp b/xfa/fde/cfde_textout_unittest.cpp
index 737375a..85c24f0 100644
--- a/xfa/fde/cfde_textout_unittest.cpp
+++ b/xfa/fde/cfde_textout_unittest.cpp
@@ -45,7 +45,7 @@
     text_out_->SetFont(font_);
     text_out_->SetFontSize(12.0f);
 
-    EXPECT_STREQ(GetEmptyBitmapChecksum(), GetBitmapChecksum().c_str());
+    EXPECT_EQ(GetEmptyBitmapChecksum(), GetBitmapChecksum());
   }
 
   void TearDown() override {
@@ -102,12 +102,12 @@
 #endif
     return "b26f1c171fcdbf185823364185adacf0";
   }();
-  EXPECT_STREQ(checksum, GetBitmapChecksum().c_str());
+  EXPECT_EQ(checksum, GetBitmapChecksum());
 }
 
 TEST_F(CFDETextOutTest, DrawLogicTextEmptyRect) {
   text_out().DrawLogicText(device(), L"foo", CFX_RectF());
-  EXPECT_STREQ(GetEmptyBitmapChecksum(), GetBitmapChecksum().c_str());
+  EXPECT_EQ(GetEmptyBitmapChecksum(), GetBitmapChecksum());
 }
 
 #if !BUILDFLAG(IS_WIN)
@@ -159,7 +159,7 @@
       L"iiiiisssss";
   text_out().DrawLogicText(device(), WideString(kText),
                            CFX_RectF(3, 3, 2048, 10));
-  EXPECT_STREQ(GetLargeTextBlobChecksum(), GetBitmapChecksum().c_str());
+  EXPECT_EQ(GetLargeTextBlobChecksum(), GetBitmapChecksum());
 }
 
 TEST_F(CFDETextOutLargeBitmapTest, DrawLogicTextBug1342078) {
@@ -181,6 +181,6 @@
       L"iiiiiiiiiisssss";
   text_out().DrawLogicText(device(), WideString(kText),
                            CFX_RectF(3, 3, 2048, 10));
-  EXPECT_STREQ(GetLargeTextBlobChecksum(), GetBitmapChecksum().c_str());
+  EXPECT_EQ(GetLargeTextBlobChecksum(), GetBitmapChecksum());
 }
 #endif  // !BUILDFLAG(IS_WIN)
diff --git a/xfa/fgas/crt/cfgas_decimal_unittest.cpp b/xfa/fgas/crt/cfgas_decimal_unittest.cpp
index ed57e83..711cb23 100644
--- a/xfa/fgas/crt/cfgas_decimal_unittest.cpp
+++ b/xfa/fgas/crt/cfgas_decimal_unittest.cpp
@@ -20,22 +20,22 @@
 TEST(CFGAS_Decimal, FromInt32) {
   CFGAS_Decimal big(std::numeric_limits<int32_t>::max());
   CFGAS_Decimal small(std::numeric_limits<int32_t>::min());
-  EXPECT_STREQ(L"2147483647", big.ToWideString().c_str());
-  EXPECT_STREQ(L"-2147483648", small.ToWideString().c_str());
+  EXPECT_EQ(L"2147483647", big.ToWideString());
+  EXPECT_EQ(L"-2147483648", small.ToWideString());
 }
 
 TEST(CFGAS_Decimal, FromUint32) {
   CFGAS_Decimal big(std::numeric_limits<uint32_t>::max());
   CFGAS_Decimal small(std::numeric_limits<uint32_t>::min());
-  EXPECT_STREQ(L"4294967295", big.ToWideString().c_str());
-  EXPECT_STREQ(L"0", small.ToWideString().c_str());
+  EXPECT_EQ(L"4294967295", big.ToWideString());
+  EXPECT_EQ(L"0", small.ToWideString());
 }
 
 TEST(CFGAS_Decimal, FromUint64) {
   CFGAS_Decimal big(std::numeric_limits<uint64_t>::max());
   CFGAS_Decimal small(std::numeric_limits<uint64_t>::min());
-  EXPECT_STREQ(L"18446744073709551615", big.ToWideString().c_str());
-  EXPECT_STREQ(L"0", small.ToWideString().c_str());
+  EXPECT_EQ(L"18446744073709551615", big.ToWideString());
+  EXPECT_EQ(L"0", small.ToWideString());
 }
 
 TEST(CFGAS_Decimal, FromFloat) {
@@ -44,17 +44,17 @@
 
   // Precision may not be the same on all platforms.
   EXPECT_EQ(big_expected.GetLength(), big.GetLength());
-  EXPECT_STREQ(big_expected.First(8).c_str(), big.First(8).c_str());
+  EXPECT_EQ(big_expected.First(8).c_str(), big.First(8));
 
   WideString tiny = CFGAS_Decimal(1e20f, 0).ToWideString();
   WideString tiny_expected = L"100000000000000000000";
   EXPECT_EQ(tiny_expected.GetLength(), tiny.GetLength());
-  EXPECT_STREQ(tiny_expected.First(8).c_str(), tiny.First(8).c_str());
+  EXPECT_EQ(tiny_expected.First(8).c_str(), tiny.First(8));
 
   WideString teeny = CFGAS_Decimal(1e14f, 4).ToWideString();
   WideString teeny_expected = L"100000000000000.0000";
   EXPECT_EQ(teeny_expected.GetLength(), teeny.GetLength());
-  EXPECT_STREQ(teeny_expected.First(8).c_str(), teeny.First(8).c_str());
+  EXPECT_EQ(teeny_expected.First(8).c_str(), teeny.First(8));
 }
 
 TEST(CFGAS_Decimal, FromFloatFractional) {
@@ -63,17 +63,17 @@
 
   // Precision may not be the same on all platforms.
   EXPECT_EQ(case1_expected.GetLength(), case1.GetLength());
-  EXPECT_STREQ(case1_expected.First(8).c_str(), case1.First(8).c_str());
+  EXPECT_EQ(case1_expected.First(8).c_str(), case1.First(8));
 }
 
 TEST(CFGAS_Decimal, FromString) {
   CFGAS_Decimal big(L"100000000000000000000000000");
   CFGAS_Decimal small(L"-1000000000000000000000000");
-  EXPECT_STREQ(L"100000000000000000000000000", big.ToWideString().c_str());
-  EXPECT_STREQ(L"-1000000000000000000000000", small.ToWideString().c_str());
+  EXPECT_EQ(L"100000000000000000000000000", big.ToWideString());
+  EXPECT_EQ(L"-1000000000000000000000000", small.ToWideString());
 }
 
 TEST(CFGAS_Decimal, FromString28Digits) {
   CFGAS_Decimal frac(L"32109876543210.0123456890123");
-  EXPECT_STREQ(L"32109876543210.0123456890123", frac.ToWideString().c_str());
+  EXPECT_EQ(L"32109876543210.0123456890123", frac.ToWideString());
 }
diff --git a/xfa/fgas/crt/cfgas_stringformatter_unittest.cpp b/xfa/fgas/crt/cfgas_stringformatter_unittest.cpp
index 93ff4c8..32bd707 100644
--- a/xfa/fgas/crt/cfgas_stringformatter_unittest.cpp
+++ b/xfa/fgas/crt/cfgas_stringformatter_unittest.cpp
@@ -96,7 +96,7 @@
     EXPECT_TRUE(fmt.FormatDateTime(Mgr(tests[i].locale), tests[i].input,
                                    CFGAS_StringFormatter::DateTimeType::kDate,
                                    &result));
-    EXPECT_STREQ(tests[i].output, result.c_str()) << " TEST: " << i;
+    EXPECT_EQ(tests[i].output, result) << " TEST: " << i;
   }
 }
 
@@ -147,7 +147,7 @@
       EXPECT_TRUE(fmt.FormatDateTime(Mgr(tests[i].locale), tests[i].input,
                                      CFGAS_StringFormatter::DateTimeType::kTime,
                                      &result));
-      EXPECT_STREQ(tests[i].output, result.c_str()) << " TEST: " << i;
+      EXPECT_EQ(tests[i].output, result) << " TEST: " << i;
     }
   }
 }
@@ -179,7 +179,7 @@
     EXPECT_TRUE(fmt.FormatDateTime(
         Mgr(tests[i].locale), tests[i].input,
         CFGAS_StringFormatter::DateTimeType::kDateTime, &result));
-    EXPECT_STREQ(tests[i].output, result.c_str()) << " TEST: " << i;
+    EXPECT_EQ(tests[i].output, result) << " TEST: " << i;
   }
 }
 
@@ -208,7 +208,7 @@
     EXPECT_TRUE(fmt.FormatDateTime(
         Mgr(tests[i].locale), tests[i].input,
         CFGAS_StringFormatter::DateTimeType::kTimeDate, &result));
-    EXPECT_STREQ(tests[i].output, result.c_str()) << " TEST: " << i;
+    EXPECT_EQ(tests[i].output, result) << " TEST: " << i;
   }
 }
 
@@ -319,7 +319,7 @@
   const wchar_t* patterns[] = {L"null{'No|data'} ", L" null{} ",
                                L" text{999*9999} ", L" text{999*999*9999}"};
   for (size_t i = 0; i < results.size(); ++i) {
-    EXPECT_STREQ(patterns[i], results[i].c_str());
+    EXPECT_EQ(patterns[i], results[i]);
   }
 }
 
@@ -459,7 +459,7 @@
     CFGAS_StringFormatter fmt(test.pattern);
     EXPECT_TRUE(fmt.ParseNum(Mgr(test.locale), test.input, &result))
         << " TEST: " << test.input << ", " << test.pattern;
-    EXPECT_STREQ(test.output, result.c_str())
+    EXPECT_EQ(test.output, result)
         << " TEST: " << test.input << ", " << test.pattern;
   }
 
@@ -590,7 +590,7 @@
     CFGAS_StringFormatter fmt(test.pattern);
     EXPECT_TRUE(fmt.FormatNum(Mgr(test.locale), test.input, &result))
         << " TEST: " << test.input << ", " << test.pattern;
-    EXPECT_STREQ(test.output, result.c_str())
+    EXPECT_EQ(test.output, result)
         << " TEST: " << test.input << ", " << test.pattern;
   }
 
@@ -622,7 +622,7 @@
     WideString result;
     CFGAS_StringFormatter fmt(tests[i].pattern);
     EXPECT_TRUE(fmt.ParseText(tests[i].input, &result));
-    EXPECT_STREQ(tests[i].output, result.c_str()) << " TEST: " << i;
+    EXPECT_EQ(tests[i].output, result) << " TEST: " << i;
   }
 }
 
@@ -653,7 +653,7 @@
     WideString result;
     CFGAS_StringFormatter fmt(tests[i].pattern);
     EXPECT_TRUE(fmt.FormatText(tests[i].input, &result));
-    EXPECT_STREQ(tests[i].output, result.c_str()) << " TEST: " << i;
+    EXPECT_EQ(tests[i].output, result) << " TEST: " << i;
   }
 }
 
@@ -682,7 +682,7 @@
     WideString result;
     CFGAS_StringFormatter fmt(tests[i].pattern);
     EXPECT_TRUE(fmt.FormatNull(&result));
-    EXPECT_STREQ(tests[i].output, result.c_str()) << " TEST: " << i;
+    EXPECT_EQ(tests[i].output, result) << " TEST: " << i;
   }
 }
 
@@ -714,7 +714,7 @@
     WideString result;
     CFGAS_StringFormatter fmt(tests[i].pattern);
     EXPECT_TRUE(fmt.FormatZero(&result));
-    EXPECT_STREQ(tests[i].output, result.c_str()) << " TEST: " << i;
+    EXPECT_EQ(tests[i].output, result) << " TEST: " << i;
   }
 }
 
diff --git a/xfa/fxfa/formcalc/cxfa_fmexpression_unittest.cpp b/xfa/fxfa/formcalc/cxfa_fmexpression_unittest.cpp
index 12ff832..a18bff1 100644
--- a/xfa/fxfa/formcalc/cxfa_fmexpression_unittest.cpp
+++ b/xfa/fxfa/formcalc/cxfa_fmexpression_unittest.cpp
@@ -112,10 +112,10 @@
       heap()->GetAllocationHandle(), L"s", nullptr);
   expr->ToJavaScript(&accumulator,
                      CXFA_FMAssignExpression::ReturnType::kInferred);
-  EXPECT_STREQ(
+  EXPECT_EQ(
       LR"***(var s = "";
 )***",
-      accumulator.MakeString().c_str());
+      accumulator.MakeString());
 }
 
 TEST_F(FMExpressionTest, VarExpressionInitBlank) {
@@ -128,11 +128,11 @@
       heap()->GetAllocationHandle(), L"s", init);
   expr->ToJavaScript(&accumulator,
                      CXFA_FMAssignExpression::ReturnType::kInferred);
-  EXPECT_STREQ(
+  EXPECT_EQ(
       LR"***(var s = "";
 s = pfm_rt.var_filter(s);
 )***",
-      accumulator.MakeString().c_str());
+      accumulator.MakeString());
 }
 
 TEST_F(FMExpressionTest, VarExpressionInitString) {
@@ -145,11 +145,11 @@
       heap()->GetAllocationHandle(), L"s", init);
   expr->ToJavaScript(&accumulator,
                      CXFA_FMAssignExpression::ReturnType::kInferred);
-  EXPECT_STREQ(
+  EXPECT_EQ(
       LR"***(var s = "foo";
 s = pfm_rt.var_filter(s);
 )***",
-      accumulator.MakeString().c_str());
+      accumulator.MakeString());
 }
 
 TEST_F(FMExpressionTest, VarExpressionInitNumeric) {
@@ -162,9 +162,9 @@
       heap()->GetAllocationHandle(), L"s", init);
   expr->ToJavaScript(&accumulator,
                      CXFA_FMAssignExpression::ReturnType::kInferred);
-  EXPECT_STREQ(
+  EXPECT_EQ(
       LR"***(var s = 112;
 s = pfm_rt.var_filter(s);
 )***",
-      accumulator.MakeString().c_str());
+      accumulator.MakeString());
 }
diff --git a/xfa/fxfa/formcalc/cxfa_fmparser_unittest.cpp b/xfa/fxfa/formcalc/cxfa_fmparser_unittest.cpp
index 00b1e3c..3e7ac41 100644
--- a/xfa/fxfa/formcalc/cxfa_fmparser_unittest.cpp
+++ b/xfa/fxfa/formcalc/cxfa_fmparser_unittest.cpp
@@ -22,7 +22,7 @@
   std::optional<WideTextBuffer> buf = ast->ToJavaScript();
   ASSERT_TRUE(buf.has_value());
   // TODO(dsinclair): This is a little weird .....
-  EXPECT_STREQ(L"// comments only", buf.value().MakeString().c_str());
+  EXPECT_EQ(L"// comments only", buf.value().MakeString());
 }
 
 TEST_F(CXFA_FMParserTest, CommentOnlyIsError) {
@@ -37,7 +37,7 @@
   CXFA_FMToJavaScriptDepth::Reset();
   std::optional<WideTextBuffer> buf = ast->ToJavaScript();
   ASSERT_TRUE(buf.has_value());
-  EXPECT_STREQ(L"// comments only", buf.value().MakeString().c_str());
+  EXPECT_EQ(L"// comments only", buf.value().MakeString());
 }
 
 TEST_F(CXFA_FMParserTest, CommentThenValue) {
@@ -67,7 +67,7 @@
   CXFA_FMToJavaScriptDepth::Reset();
   std::optional<WideTextBuffer> buf = ast->ToJavaScript();
   ASSERT_TRUE(buf.has_value());
-  EXPECT_STREQ(ret, buf.value().MakeString().c_str());
+  EXPECT_EQ(ret, buf.value().MakeString());
 }
 
 TEST_F(CXFA_FMParserTest, Parse) {
@@ -203,7 +203,7 @@
   CXFA_FMToJavaScriptDepth::Reset();
   std::optional<WideTextBuffer> buf = ast->ToJavaScript();
   ASSERT_TRUE(buf.has_value());
-  EXPECT_STREQ(ret, buf.value().MakeString().c_str());
+  EXPECT_EQ(ret, buf.value().MakeString());
 }
 
 TEST_F(CXFA_FMParserTest, ParseFuncWithoutParams) {
@@ -242,7 +242,7 @@
   CXFA_FMToJavaScriptDepth::Reset();
   std::optional<WideTextBuffer> buf = ast->ToJavaScript();
   ASSERT_TRUE(buf.has_value());
-  EXPECT_STREQ(ret, buf.value().MakeString().c_str());
+  EXPECT_EQ(ret, buf.value().MakeString());
 }
 
 TEST_F(CXFA_FMParserTest, ParseFuncWithBadParamsList) {
@@ -331,7 +331,7 @@
   CXFA_FMToJavaScriptDepth::Reset();
   std::optional<WideTextBuffer> buf = ast->ToJavaScript();
   ASSERT_TRUE(buf.has_value());
-  EXPECT_STREQ(ret, buf.value().MakeString().c_str());
+  EXPECT_EQ(ret, buf.value().MakeString());
 }
 
 TEST_F(CXFA_FMParserTest, ParseCallBig) {
@@ -373,7 +373,7 @@
   CXFA_FMToJavaScriptDepth::Reset();
   std::optional<WideTextBuffer> buf = ast->ToJavaScript();
   ASSERT_TRUE(buf.has_value());
-  EXPECT_STREQ(ret, buf.value().MakeString().c_str());
+  EXPECT_EQ(ret, buf.value().MakeString());
 }
 
 TEST_F(CXFA_FMParserTest, ParseVar) {
@@ -405,7 +405,7 @@
   CXFA_FMToJavaScriptDepth::Reset();
   std::optional<WideTextBuffer> buf = ast->ToJavaScript();
   ASSERT_TRUE(buf.has_value());
-  EXPECT_STREQ(ret, buf.value().MakeString().c_str());
+  EXPECT_EQ(ret, buf.value().MakeString());
 }
 
 TEST_F(CXFA_FMParserTest, ParseFunctionCallNoArguments) {
@@ -439,7 +439,7 @@
   CXFA_FMToJavaScriptDepth::Reset();
   std::optional<WideTextBuffer> buf = ast->ToJavaScript();
   ASSERT_TRUE(buf.has_value());
-  EXPECT_STREQ(ret, buf.value().MakeString().c_str());
+  EXPECT_EQ(ret, buf.value().MakeString());
 }
 
 TEST_F(CXFA_FMParserTest, ParseFunctionCallSingleArgument) {
@@ -473,7 +473,7 @@
   CXFA_FMToJavaScriptDepth::Reset();
   std::optional<WideTextBuffer> buf = ast->ToJavaScript();
   ASSERT_TRUE(buf.has_value());
-  EXPECT_STREQ(ret, buf.value().MakeString().c_str());
+  EXPECT_EQ(ret, buf.value().MakeString());
 }
 
 TEST_F(CXFA_FMParserTest, ParseFunctionCallMultipleArguments) {
@@ -507,7 +507,7 @@
   CXFA_FMToJavaScriptDepth::Reset();
   std::optional<WideTextBuffer> buf = ast->ToJavaScript();
   ASSERT_TRUE(buf.has_value());
-  EXPECT_STREQ(ret, buf.value().MakeString().c_str());
+  EXPECT_EQ(ret, buf.value().MakeString());
 }
 
 TEST_F(CXFA_FMParserTest, ParseFunctionCallMissingCommas) {
diff --git a/xfa/fxfa/parser/cxfa_measurement_unittest.cpp b/xfa/fxfa/parser/cxfa_measurement_unittest.cpp
index 68bea7c..243e9bb 100644
--- a/xfa/fxfa/parser/cxfa_measurement_unittest.cpp
+++ b/xfa/fxfa/parser/cxfa_measurement_unittest.cpp
@@ -10,21 +10,21 @@
   CXFA_Measurement measurement;
 
   measurement.Set(0.1f, XFA_Unit::Percent);
-  EXPECT_STREQ(L"0.1%", measurement.ToString().c_str());
+  EXPECT_EQ(L"0.1%", measurement.ToString());
   measurement.Set(1.0f, XFA_Unit::Em);
-  EXPECT_STREQ(L"1em", measurement.ToString().c_str());
+  EXPECT_EQ(L"1em", measurement.ToString());
   measurement.Set(1.1f, XFA_Unit::Pt);
-  EXPECT_STREQ(L"1.1pt", measurement.ToString().c_str());
+  EXPECT_EQ(L"1.1pt", measurement.ToString());
   measurement.Set(1.0000001f, XFA_Unit::In);
-  EXPECT_STREQ(L"1.0000001in", measurement.ToString().c_str());
+  EXPECT_EQ(L"1.0000001in", measurement.ToString());
   measurement.Set(1234.0f, XFA_Unit::Pc);
-  EXPECT_STREQ(L"1234pc", measurement.ToString().c_str());
+  EXPECT_EQ(L"1234pc", measurement.ToString());
   measurement.Set(987654321.0123456789f, XFA_Unit::Cm);
-  EXPECT_STREQ(L"9.8765434e+08cm", measurement.ToString().c_str());
+  EXPECT_EQ(L"9.8765434e+08cm", measurement.ToString());
   measurement.Set(0.0f, XFA_Unit::Mm);
-  EXPECT_STREQ(L"0mm", measurement.ToString().c_str());
+  EXPECT_EQ(L"0mm", measurement.ToString());
   measurement.Set(-2.0f, XFA_Unit::Mp);
-  EXPECT_STREQ(L"-2mp", measurement.ToString().c_str());
+  EXPECT_EQ(L"-2mp", measurement.ToString());
 }
 
 TEST(CXFAMeasurementTest, GetUnitFromString) {
