Convert EXPECT_STREQ(x, y.c_str()) to EXPECT_EQ(x, y).

The objective is to stop calling .c_str() except when absolutely
necessary, as extracting a c_str() from one of our string types
may someday require UNSAFE_BUFFERS(). It also may leave the tests
vulnerable to, say, injected NULs.

The gtest macros can handle these EXPECT_EQ comparisons so long
as operator==() is defined for the string type. The risk is that
a bug in operator==() might propagate to other tests, but we
test this itself in other tests.

-- Fix several places that were including a trailing NUL.

Change-Id: I9bdbd857c45b2356719a19560a30c35a80b2bff5
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/116912
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
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) {