Use a pdfium-specific unittest main rather than gtest's

We must initialize our partition allocator before calling into
any test cases.

We can then remove the FPDF_Test class, which did the same thing.

Change-Id: I614480fa474b2032052857a02e94781f15a27a4e
Reviewed-on: https://pdfium-review.googlesource.com/4473
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/BUILD.gn b/BUILD.gn
index a0d999f..23e1cf2 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1878,13 +1878,13 @@
     "fpdfsdk/fpdfdoc_unittest.cpp",
     "fpdfsdk/fpdfeditimg_unittest.cpp",
     "fpdfsdk/fpdfview_unittest.cpp",
+    "testing/unit_test_main.cpp",
   ]
   deps = [
     ":pdfium",
     ":test_support",
     "//testing/gmock",
     "//testing/gtest",
-    "//testing/gtest:gtest_main",
   ]
   include_dirs = []
   if (pdf_enable_xfa) {
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
index fdf3124..b08dd8a 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
@@ -17,16 +17,14 @@
 #include "testing/test_support.h"
 #include "third_party/base/ptr_util.h"
 
-class CPDF_PageContentGeneratorTest : public pdfium::FPDF_Test {
+class CPDF_PageContentGeneratorTest : public testing::Test {
  protected:
   void SetUp() override {
-    FPDF_Test::SetUp();
     CPDF_ModuleMgr::Get()->InitPageModule();
   }
 
   void TearDown() override {
     CPDF_ModuleMgr::Destroy();
-    FPDF_Test::TearDown();
   }
 
   void TestProcessPath(CPDF_PageContentGenerator* pGen,
diff --git a/core/fxcrt/xml/cfx_saxreader_unittest.cpp b/core/fxcrt/xml/cfx_saxreader_unittest.cpp
index 0bb5e1a..dca93b3 100644
--- a/core/fxcrt/xml/cfx_saxreader_unittest.cpp
+++ b/core/fxcrt/xml/cfx_saxreader_unittest.cpp
@@ -44,7 +44,7 @@
 
 }  // namespace
 
-class CFX_SAXReaderTest : public pdfium::FPDF_Test {
+class CFX_SAXReaderTest : public testing::Test {
  public:
   void SetHandler(CFX_SAXReader::HandlerIface* handler) {
     reader_.SetHandler(handler);
diff --git a/core/fxcrt/xml/cfx_xmlsyntaxparser_unittest.cpp b/core/fxcrt/xml/cfx_xmlsyntaxparser_unittest.cpp
index 09d4fea..c3cc3d2 100644
--- a/core/fxcrt/xml/cfx_xmlsyntaxparser_unittest.cpp
+++ b/core/fxcrt/xml/cfx_xmlsyntaxparser_unittest.cpp
@@ -11,9 +11,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/test_support.h"
 
-class CFX_XMLSyntaxParserTest : public pdfium::FPDF_Test {};
-
-TEST_F(CFX_XMLSyntaxParserTest, CData) {
+TEST(CFX_XMLSyntaxParserTest, CData) {
   const char* input =
       "<script contentType=\"application/x-javascript\">\n"
       "  <![CDATA[\n"
@@ -59,7 +57,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, CDataWithInnerScript) {
+TEST(CFX_XMLSyntaxParserTest, CDataWithInnerScript) {
   const char* input =
       "<script contentType=\"application/x-javascript\">\n"
       "  <![CDATA[\n"
@@ -107,7 +105,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, ArrowBangArrow) {
+TEST(CFX_XMLSyntaxParserTest, ArrowBangArrow) {
   const char* input =
       "<script contentType=\"application/x-javascript\">\n"
       "  <!>\n"
@@ -142,7 +140,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, ArrowBangBracketArrow) {
+TEST(CFX_XMLSyntaxParserTest, ArrowBangBracketArrow) {
   const char* input =
       "<script contentType=\"application/x-javascript\">\n"
       "  <![>\n"
@@ -172,7 +170,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, IncompleteCData) {
+TEST(CFX_XMLSyntaxParserTest, IncompleteCData) {
   const char* input =
       "<script contentType=\"application/x-javascript\">\n"
       "  <![CDATA>\n"
@@ -202,7 +200,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, UnClosedCData) {
+TEST(CFX_XMLSyntaxParserTest, UnClosedCData) {
   const char* input =
       "<script contentType=\"application/x-javascript\">\n"
       "  <![CDATA[\n"
@@ -232,7 +230,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, EmptyCData) {
+TEST(CFX_XMLSyntaxParserTest, EmptyCData) {
   const char* input =
       "<script contentType=\"application/x-javascript\">\n"
       "  <![CDATA[]]>\n"
@@ -269,7 +267,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, Comment) {
+TEST(CFX_XMLSyntaxParserTest, Comment) {
   const char* input =
       "<script contentType=\"application/x-javascript\">\n"
       "  <!-- A Comment -->\n"
@@ -303,7 +301,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, IncorrectCommentStart) {
+TEST(CFX_XMLSyntaxParserTest, IncorrectCommentStart) {
   const char* input =
       "<script contentType=\"application/x-javascript\">\n"
       "  <!- A Comment -->\n"
@@ -337,7 +335,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, CommentEmpty) {
+TEST(CFX_XMLSyntaxParserTest, CommentEmpty) {
   const char* input =
       "<script contentType=\"application/x-javascript\">\n"
       "  <!---->\n"
@@ -371,7 +369,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, CommentThreeDash) {
+TEST(CFX_XMLSyntaxParserTest, CommentThreeDash) {
   const char* input =
       "<script contentType=\"application/x-javascript\">\n"
       "  <!--->\n"
@@ -399,7 +397,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, CommentTwoDash) {
+TEST(CFX_XMLSyntaxParserTest, CommentTwoDash) {
   const char* input =
       "<script contentType=\"application/x-javascript\">\n"
       "  <!-->\n"
@@ -427,7 +425,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, Entities) {
+TEST(CFX_XMLSyntaxParserTest, Entities) {
   const char* input =
       "<script contentType=\"application/x-javascript\">"
       "&#66;"
@@ -462,7 +460,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, EntityOverflowHex) {
+TEST(CFX_XMLSyntaxParserTest, EntityOverflowHex) {
   const char* input =
       "<script contentType=\"application/x-javascript\">"
       "&#xaDBDFFFFF;"
@@ -494,7 +492,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, EntityOverflowDecimal) {
+TEST(CFX_XMLSyntaxParserTest, EntityOverflowDecimal) {
   const char* input =
       "<script contentType=\"application/x-javascript\">"
       "&#2914910205;"
@@ -526,7 +524,7 @@
   ASSERT_EQ(FX_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
 }
 
-TEST_F(CFX_XMLSyntaxParserTest, IsXMLNameChar) {
+TEST(CFX_XMLSyntaxParserTest, IsXMLNameChar) {
   EXPECT_FALSE(CFX_XMLSyntaxParser::IsXMLNameChar(L'-', true));
   EXPECT_TRUE(CFX_XMLSyntaxParser::IsXMLNameChar(L'-', false));
 
diff --git a/testing/test_support.cpp b/testing/test_support.cpp
index 1f52781..a2e9a6a 100644
--- a/testing/test_support.cpp
+++ b/testing/test_support.cpp
@@ -228,14 +228,3 @@
   memcpy(buf, new_file->data() + pos, size);
   return 1;
 }
-
-namespace pdfium {
-
-void FPDF_Test::SetUp() {
-  FXMEM_InitalizePartitionAlloc();
-}
-
-void FPDF_Test::TearDown() {
-}
-
-}  // namespace pdfium
diff --git a/testing/test_support.h b/testing/test_support.h
index f175811..4fe7c29 100644
--- a/testing/test_support.h
+++ b/testing/test_support.h
@@ -59,12 +59,6 @@
   inline void operator()(void* ptr) const { free(ptr); }
 };
 
-class FPDF_Test : public ::testing::Test {
- public:
-  void SetUp() override;
-  void TearDown() override;
-};
-
 }  // namespace pdfium
 
 // Reads the entire contents of a file into a newly alloc'd buffer.
diff --git a/testing/unit_test_main.cpp b/testing/unit_test_main.cpp
new file mode 100644
index 0000000..d8076ab
--- /dev/null
+++ b/testing/unit_test_main.cpp
@@ -0,0 +1,16 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "core/fxcrt/fx_memory.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+// Can't use gtest-provided main since we need to initialize partition
+// alloc before invoking any test.
+int main(int argc, char** argv) {
+  FXMEM_InitalizePartitionAlloc();
+  testing::InitGoogleTest(&argc, argv);
+  testing::InitGoogleMock(&argc, argv);
+  return RUN_ALL_TESTS();
+}
diff --git a/xfa/fde/cfde_txtedtbuf_unittest.cpp b/xfa/fde/cfde_txtedtbuf_unittest.cpp
index aa80a66..539ce24 100644
--- a/xfa/fde/cfde_txtedtbuf_unittest.cpp
+++ b/xfa/fde/cfde_txtedtbuf_unittest.cpp
@@ -8,10 +8,9 @@
 #include "testing/test_support.h"
 #include "third_party/base/ptr_util.h"
 
-class CFDE_TxtEdtBufTest : public pdfium::FPDF_Test {
+class CFDE_TxtEdtBufTest : public testing::Test {
  public:
   void SetUp() override {
-    FPDF_Test::SetUp();
     buf_ = pdfium::MakeUnique<CFDE_TxtEdtBuf>();
     buf_->SetChunkSizeForTesting(5);
   }
diff --git a/xfa/fde/css/cfde_cssdeclaration_unittest.cpp b/xfa/fde/css/cfde_cssdeclaration_unittest.cpp
index 80cd72c..f43f941 100644
--- a/xfa/fde/css/cfde_cssdeclaration_unittest.cpp
+++ b/xfa/fde/css/cfde_cssdeclaration_unittest.cpp
@@ -7,9 +7,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/test_support.h"
 
-class CFDE_CSSDecalrationTest : public pdfium::FPDF_Test {};
-
-TEST_F(CFDE_CSSDecalrationTest, HexEncodingParsing) {
+TEST(CFDE_CSSDecalrationTest, HexEncodingParsing) {
   FX_ARGB color;
 
   // Length value invalid.
@@ -45,7 +43,7 @@
   EXPECT_EQ(60, FXARGB_B(color));
 }
 
-TEST_F(CFDE_CSSDecalrationTest, RGBEncodingParsing) {
+TEST(CFDE_CSSDecalrationTest, RGBEncodingParsing) {
   FX_ARGB color;
 
   // Invalid input for rgb() syntax.
diff --git a/xfa/fde/css/cfde_cssvaluelistparser_unittest.cpp b/xfa/fde/css/cfde_cssvaluelistparser_unittest.cpp
index 077fb54..53a0657 100644
--- a/xfa/fde/css/cfde_cssvaluelistparser_unittest.cpp
+++ b/xfa/fde/css/cfde_cssvaluelistparser_unittest.cpp
@@ -10,9 +10,7 @@
 #include "testing/test_support.h"
 #include "third_party/base/ptr_util.h"
 
-class CFDE_CSSValueListParserTest : public pdfium::FPDF_Test {};
-
-TEST_F(CFDE_CSSValueListParserTest, rgb_short) {
+TEST(CFDE_CSSValueListParserTest, rgb_short) {
   FDE_CSSPrimitiveType type;
   const wchar_t* start;
   int32_t len;
@@ -43,7 +41,7 @@
   EXPECT_FALSE(parser->NextValue(type, start, len));
 }
 
-TEST_F(CFDE_CSSValueListParserTest, number_parsing) {
+TEST(CFDE_CSSValueListParserTest, number_parsing) {
   FDE_CSSPrimitiveType type;
   const wchar_t* start;
   int32_t len;
@@ -85,7 +83,7 @@
   EXPECT_EQ(L"43a1.12.34", CFX_WideString(start, len));
 }
 
-TEST_F(CFDE_CSSValueListParserTest, string_parsing) {
+TEST(CFDE_CSSValueListParserTest, string_parsing) {
   FDE_CSSPrimitiveType type;
   const wchar_t* start;
   int32_t len;
@@ -108,7 +106,7 @@
   EXPECT_EQ(L"standalone", CFX_WideString(start, len));
 }
 
-TEST_F(CFDE_CSSValueListParserTest, multiparsing) {
+TEST(CFDE_CSSValueListParserTest, multiparsing) {
   FDE_CSSPrimitiveType type;
   const wchar_t* start;
   int32_t len;
diff --git a/xfa/fxfa/cxfa_ffapp_unittest.cpp b/xfa/fxfa/cxfa_ffapp_unittest.cpp
index fc1d038..bd35956 100644
--- a/xfa/fxfa/cxfa_ffapp_unittest.cpp
+++ b/xfa/fxfa/cxfa_ffapp_unittest.cpp
@@ -15,9 +15,7 @@
 #include "third_party/base/ptr_util.h"
 #include "xfa/fxfa/cxfa_fileread.h"
 
-class CXFAFileReadTest : public pdfium::FPDF_Test {};
-
-TEST_F(CXFAFileReadTest, NoStreams) {
+TEST(CXFAFileReadTest, NoStreams) {
   std::vector<CPDF_Stream*> streams;
   auto fileread = pdfium::MakeRetain<CXFA_FileRead>(streams);
 
@@ -27,7 +25,7 @@
   EXPECT_EQ(0xbd, output_buffer[0]);
 }
 
-TEST_F(CXFAFileReadTest, EmptyStreams) {
+TEST(CXFAFileReadTest, EmptyStreams) {
   std::vector<CPDF_Stream*> streams;
   auto stream1 = pdfium::MakeUnique<CPDF_Stream>();
   streams.push_back(stream1.get());
@@ -39,7 +37,7 @@
   EXPECT_EQ(0xbd, output_buffer[0]);
 }
 
-TEST_F(CXFAFileReadTest, NormalStreams) {
+TEST(CXFAFileReadTest, NormalStreams) {
   std::vector<CPDF_Stream*> streams;
   auto stream1 = pdfium::MakeUnique<CPDF_Stream>();
   auto stream2 = pdfium::MakeUnique<CPDF_Stream>();
diff --git a/xfa/fxfa/fm2js/xfa_simpleexpression_unittest.cpp b/xfa/fxfa/fm2js/xfa_simpleexpression_unittest.cpp
index a2c7f1b..160c4a1 100644
--- a/xfa/fxfa/fm2js/xfa_simpleexpression_unittest.cpp
+++ b/xfa/fxfa/fm2js/xfa_simpleexpression_unittest.cpp
@@ -12,9 +12,7 @@
 #include "third_party/base/ptr_util.h"
 #include "xfa/fxfa/fm2js/xfa_lexer.h"
 
-class FMCallExpressionTest : public pdfium::FPDF_Test {};
-
-TEST_F(FMCallExpressionTest, more_than_32_arguments) {
+TEST(FMCallExpressionTest, more_than_32_arguments) {
   // Use sign as it has 3 object parameters at positions 0, 5, and 6.
   auto exp = pdfium::MakeUnique<CXFA_FMIdentifierExpression>(0, L"sign");
 
diff --git a/xfa/fxfa/parser/xfa_utils_unittest.cpp b/xfa/fxfa/parser/xfa_utils_unittest.cpp
index 6a1de85..aa46813 100644
--- a/xfa/fxfa/parser/xfa_utils_unittest.cpp
+++ b/xfa/fxfa/parser/xfa_utils_unittest.cpp
@@ -11,9 +11,7 @@
 #include "testing/test_support.h"
 #include "third_party/base/ptr_util.h"
 
-class XfaUtilsImpTest : public pdfium::FPDF_Test {};
-
-TEST_F(XfaUtilsImpTest, XFA_MapRotation) {
+TEST(XfaUtilsImpTest, XFA_MapRotation) {
   struct TestCase {
     int input;
     int expected_output;
@@ -29,7 +27,7 @@
   }
 }
 
-class XFANodeIteratorTest : public pdfium::FPDF_Test {
+class XFANodeIteratorTest : public testing::Test {
  public:
   class Node {
    public: