diff --git a/core/fpdfdoc/cpdf_dest_unittest.cpp b/core/fpdfdoc/cpdf_dest_unittest.cpp
index ae2d979..9bd1400 100644
--- a/core/fpdfdoc/cpdf_dest_unittest.cpp
+++ b/core/fpdfdoc/cpdf_dest_unittest.cpp
@@ -12,7 +12,7 @@
 #include "core/fpdfapi/parser/cpdf_number.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-TEST(cpdf_dest, GetXYZ) {
+TEST(CPDFDestTest, GetXYZ) {
   bool hasX;
   bool hasY;
   bool hasZoom;
diff --git a/core/fpdfdoc/cpdf_filespec_unittest.cpp b/core/fpdfdoc/cpdf_filespec_unittest.cpp
index 7762dd7..5e010a6 100644
--- a/core/fpdfdoc/cpdf_filespec_unittest.cpp
+++ b/core/fpdfdoc/cpdf_filespec_unittest.cpp
@@ -20,7 +20,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/test_support.h"
 
-TEST(cpdf_filespec, EncodeDecodeFileName) {
+TEST(CPDFFileSpecTest, EncodeDecodeFileName) {
   static const std::vector<pdfium::NullTermWstrFuncTestData> test_data = {
     // Empty src string.
     {L"", L""},
@@ -58,7 +58,7 @@
   }
 }
 
-TEST(cpdf_filespec, GetFileName) {
+TEST(CPDFFileSpecTest, GetFileName) {
   {
     // String object.
     static const pdfium::NullTermWstrFuncTestData test_data = {
@@ -136,7 +136,7 @@
   }
 }
 
-TEST(cpdf_filespec, GetFileStream) {
+TEST(CPDFFileSpecTest, GetFileStream) {
   {
     // Invalid object.
     auto name_obj = pdfium::MakeRetain<CPDF_Name>(nullptr, "test.pdf");
@@ -197,7 +197,7 @@
   }
 }
 
-TEST(cpdf_filespec, GetParamsDict) {
+TEST(CPDFFileSpecTest, GetParamsDict) {
   {
     // Invalid object.
     auto name_obj = pdfium::MakeRetain<CPDF_Name>(nullptr, "test.pdf");
diff --git a/core/fpdfdoc/cpdf_formfield_unittest.cpp b/core/fpdfdoc/cpdf_formfield_unittest.cpp
index 0e4b3e9..f5189e9 100644
--- a/core/fpdfdoc/cpdf_formfield_unittest.cpp
+++ b/core/fpdfdoc/cpdf_formfield_unittest.cpp
@@ -67,7 +67,7 @@
 
 }  // namespace
 
-TEST(CPDF_FormFieldTest, GetFullNameForDict) {
+TEST(CPDFFormFieldTest, GetFullNameForDict) {
   WideString name = CPDF_FormField::GetFullNameForDict(nullptr);
   EXPECT_TRUE(name.IsEmpty());
 
@@ -105,7 +105,7 @@
   EXPECT_EQ("bar.foo.qux", name.ToUTF8());
 }
 
-TEST(CPDF_FormFieldTest, IsItemSelected) {
+TEST(CPDFFormFieldTest, IsItemSelected) {
   ScopedCPDF_PageModule page_module;
 
   auto opt_array = pdfium::MakeRetain<CPDF_Array>();
diff --git a/core/fpdfdoc/cpdf_metadata_unittest.cpp b/core/fpdfdoc/cpdf_metadata_unittest.cpp
index ab71dc2..853557f 100644
--- a/core/fpdfdoc/cpdf_metadata_unittest.cpp
+++ b/core/fpdfdoc/cpdf_metadata_unittest.cpp
@@ -7,7 +7,7 @@
 #include "core/fpdfapi/parser/cpdf_stream.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-TEST(CPDF_MetadataTest, CheckSharedFormEmailAtTopLevel) {
+TEST(CPDFMetadataTest, CheckSharedFormEmailAtTopLevel) {
   static const char data[] =
       "<?xml charset=\"utf-8\"?>\n"
       "<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n"
@@ -24,7 +24,7 @@
   EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormEmail, results[0]);
 }
 
-TEST(CPDF_MetadataTest, CheckSharedFormAcrobatAtTopLevel) {
+TEST(CPDFMetadataTest, CheckSharedFormAcrobatAtTopLevel) {
   static const char data[] =
       "<?xml charset=\"utf-8\"?>\n"
       "<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n"
@@ -41,7 +41,7 @@
   EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormAcrobat, results[0]);
 }
 
-TEST(CPDF_MetadataTest, CheckSharedFormFilesystemAtTopLevel) {
+TEST(CPDFMetadataTest, CheckSharedFormFilesystemAtTopLevel) {
   static const char data[] =
       "<?xml charset=\"utf-8\"?>\n"
       "<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n"
@@ -58,7 +58,7 @@
   EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormFilesystem, results[0]);
 }
 
-TEST(CPDF_MetadataTest, CheckSharedFormWithoutWorkflow) {
+TEST(CPDFMetadataTest, CheckSharedFormWithoutWorkflow) {
   static const char data[] =
       "<?xml charset=\"utf-8\"?>\n"
       "<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n"
@@ -74,7 +74,7 @@
   EXPECT_EQ(0U, results.size());
 }
 
-TEST(CPDF_MetadataTest, CheckSharedFormAsChild) {
+TEST(CPDFMetadataTest, CheckSharedFormAsChild) {
   static const char data[] =
       "<?xml charset=\"utf-8\"?>\n"
       "<grandparent><parent>\n"
@@ -93,7 +93,7 @@
   EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormEmail, results[0]);
 }
 
-TEST(CPDF_MetadataTest, CheckSharedFormAsNoAdhoc) {
+TEST(CPDFMetadataTest, CheckSharedFormAsNoAdhoc) {
   static const char data[] =
       "<?xml charset=\"utf-8\"?>\n"
       "<node></node>";
@@ -106,7 +106,7 @@
   EXPECT_EQ(0U, results.size());
 }
 
-TEST(CPDF_MetadataTest, CheckSharedFormExceedMaxDepth) {
+TEST(CPDFMetadataTest, CheckSharedFormExceedMaxDepth) {
   // Node <parent> has the depth of 130, which exceeds the maximum node depth of
   // `kMaxMetaDataDepth`.
   static const char kData[] =
@@ -139,7 +139,7 @@
   ASSERT_EQ(0U, results.size());
 }
 
-TEST(CPDF_MetadataTest, CheckSharedFormWrongNamespace) {
+TEST(CPDFMetadataTest, CheckSharedFormWrongNamespace) {
   static const char data[] =
       "<?xml charset=\"utf-8\"?>\n"
       "<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/2.0/\">\n"
@@ -155,7 +155,7 @@
   EXPECT_EQ(0U, results.size());
 }
 
-TEST(CPDF_MetadataTest, CheckSharedFormMultipleErrors) {
+TEST(CPDFMetadataTest, CheckSharedFormMultipleErrors) {
   static const char data[] =
       "<?xml charset=\"utf-8\"?>\n"
       "<grandparent>"
diff --git a/core/fpdfdoc/cpdf_nametree_unittest.cpp b/core/fpdfdoc/cpdf_nametree_unittest.cpp
index 0861f10..752b691 100644
--- a/core/fpdfdoc/cpdf_nametree_unittest.cpp
+++ b/core/fpdfdoc/cpdf_nametree_unittest.cpp
@@ -101,7 +101,7 @@
 
 }  // namespace
 
-TEST(cpdf_nametree, GetUnicodeNameWithBOM) {
+TEST(CPDFNameTreeTest, GetUnicodeNameWithBOM) {
   // Set up the root dictionary with a Names array.
   auto pRootDict = pdfium::MakeRetain<CPDF_Dictionary>();
   auto pNames = pRootDict->SetNewFor<CPDF_Array>("Names");
@@ -124,7 +124,7 @@
   EXPECT_EQ(100, pNumber->GetInteger());
 }
 
-TEST(cpdf_nametree, GetFromTreeWithLimitsArrayWith4Items) {
+TEST(CPDFNameTreeTest, GetFromTreeWithLimitsArrayWith4Items) {
   // After creating a name tree, mutate a /Limits array so it has excess
   // elements.
   auto pRootDict = pdfium::MakeRetain<CPDF_Dictionary>();
@@ -149,7 +149,7 @@
   CheckLimitsArray(pGrandKid3.Get(), "9.txt", "9.txt");
 }
 
-TEST(cpdf_nametree, AddIntoNames) {
+TEST(CPDFNameTreeTest, AddIntoNames) {
   // Set up a name tree with a single Names array.
   auto pRootDict = pdfium::MakeRetain<CPDF_Dictionary>();
   auto pNames = pRootDict->SetNewFor<CPDF_Array>("Names");
@@ -183,7 +183,7 @@
   CheckNameKeyValue(pNames.Get(), 4, "9.txt", 999);
 }
 
-TEST(cpdf_nametree, AddIntoEmptyNames) {
+TEST(CPDFNameTreeTest, AddIntoEmptyNames) {
   // Set up a name tree with an empty Names array.
   auto pRootDict = pdfium::MakeRetain<CPDF_Dictionary>();
   auto pNames = pRootDict->SetNewFor<CPDF_Array>("Names");
@@ -218,7 +218,7 @@
   CheckNameKeyValue(pNames.Get(), 3, "9.txt", 999);
 }
 
-TEST(cpdf_nametree, AddIntoKids) {
+TEST(CPDFNameTreeTest, AddIntoKids) {
   auto pRootDict = pdfium::MakeRetain<CPDF_Dictionary>();
   FillNameTreeDict(pRootDict.Get());
   std::unique_ptr<CPDF_NameTree> name_tree =
@@ -293,7 +293,7 @@
   CheckNameKeyValue(pNames.Get(), 3, "6.txt", 666);
 }
 
-TEST(cpdf_nametree, DeleteFromKids) {
+TEST(CPDFNameTreeTest, DeleteFromKids) {
   auto pRootDict = pdfium::MakeRetain<CPDF_Dictionary>();
   FillNameTreeDict(pRootDict.Get());
   std::unique_ptr<CPDF_NameTree> name_tree =
