testing/gtest/mozilla/GTestRunner.cpp

Wed, 31 Dec 2014 07:16:47 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:16:47 +0100
branch
TOR_BUG_9701
changeset 3
141e0f1194b1
permissions
-rw-r--r--

Revert simplistic fix pending revisit of Mozilla integration attempt.

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
     2  * * This Source Code Form is subject to the terms of the Mozilla Public
     3  * * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #include "GTestRunner.h"
     7 #include "gtest/gtest.h"
     8 #include "mozilla/Attributes.h"
     9 #include "mozilla/NullPtr.h"
    10 #ifdef MOZ_CRASHREPORTER
    11 #include "nsICrashReporter.h"
    12 #endif
    13 #include "testing/TestHarness.h"
    14 #include "prenv.h"
    16 using ::testing::EmptyTestEventListener;
    17 using ::testing::InitGoogleTest;
    18 using ::testing::Test;
    19 using ::testing::TestCase;
    20 using ::testing::TestEventListeners;
    21 using ::testing::TestInfo;
    22 using ::testing::TestPartResult;
    23 using ::testing::UnitTest;
    25 namespace mozilla {
    27 // See gtest.h for method documentation
    28 class MozillaPrinter : public EmptyTestEventListener
    29 {
    30 public:
    31   virtual void OnTestProgramStart(const UnitTest& /* aUnitTest */) MOZ_OVERRIDE {
    32     printf("TEST-INFO | GTest unit test starting\n");
    33   }
    34   virtual void OnTestProgramEnd(const UnitTest& aUnitTest) MOZ_OVERRIDE {
    35     printf("TEST-%s | GTest unit test: %s\n",
    36            aUnitTest.Passed() ? "PASS" : "UNEXPECTED-FAIL",
    37            aUnitTest.Passed() ? "passed" : "failed");
    38   }
    39   virtual void OnTestStart(const TestInfo& aTestInfo) MOZ_OVERRIDE {
    40     mTestInfo = &aTestInfo;
    41     printf("TEST-START | %s.%s\n",
    42         mTestInfo->test_case_name(), mTestInfo->name());
    43   }
    44   virtual void OnTestPartResult(const TestPartResult& aTestPartResult) MOZ_OVERRIDE {
    45     printf("TEST-%s | %s.%s | %s @ %s:%i\n",
    46            !aTestPartResult.failed() ? "PASS" : "UNEXPECTED-FAIL",
    47            mTestInfo ? mTestInfo->test_case_name() : "?", mTestInfo ? mTestInfo->name() : "?",
    48            aTestPartResult.summary(),
    49            aTestPartResult.file_name(), aTestPartResult.line_number());
    50   }
    51   virtual void OnTestEnd(const TestInfo& aTestInfo) MOZ_OVERRIDE {
    52     printf("TEST-%s | %s.%s | test completed (time: %llims)\n",
    53            aTestInfo.result()->Passed() ? "PASS": "UNEXPECTED-FAIL",
    54            aTestInfo.test_case_name(), aTestInfo.name(),
    55            aTestInfo.result()->elapsed_time());
    56     MOZ_ASSERT(&aTestInfo == mTestInfo);
    57     mTestInfo = nullptr;
    58   }
    60   const TestInfo* mTestInfo;
    61 };
    63 static void ReplaceGTestLogger()
    64 {
    65   // Replace the GTest logger so that it can be passed
    66   // by the mozilla test parsers.
    67   // Code is based on: http://googletest.googlecode.com/svn/trunk/samples/sample9_unittest.cc
    68   UnitTest& unitTest = *UnitTest::GetInstance();
    69   TestEventListeners& listeners = unitTest.listeners();
    70   delete listeners.Release(listeners.default_result_printer());
    72   listeners.Append(new MozillaPrinter);
    73 }
    75 int RunGTestFunc()
    76 {
    77   int c = 0;
    78   InitGoogleTest(&c, static_cast<char**>(nullptr));
    80   if (getenv("MOZ_TBPL_PARSER")) {
    81     ReplaceGTestLogger();
    82   }
    84   PR_SetEnv("XPCOM_DEBUG_BREAK=stack-and-abort");
    86   ScopedXPCOM xpcom("AsyncPanZoomController");
    88 #ifdef MOZ_CRASHREPORTER
    89   nsCOMPtr<nsICrashReporter> crashreporter;
    90   char *crashreporterStr = PR_GetEnv("MOZ_CRASHREPORTER");
    91   if (crashreporterStr && !strcmp(crashreporterStr, "1")) {
    92     //TODO: move this to an even-more-common location to use in all
    93     // C++ unittests
    94     crashreporter = do_GetService("@mozilla.org/toolkit/crash-reporter;1");
    95     if (crashreporter) {
    96       std::cerr << "Setting up crash reporting" << std::endl;
    98       nsCOMPtr<nsIProperties> dirsvc =
    99           do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID);
   100       nsCOMPtr<nsIFile> cwd;
   101       nsresult rv = dirsvc->Get(NS_OS_CURRENT_WORKING_DIR,
   102                        NS_GET_IID(nsIFile),
   103                        getter_AddRefs(cwd));
   104       MOZ_ASSERT(NS_SUCCEEDED(rv));
   105       crashreporter->SetEnabled(true);
   106       crashreporter->SetMinidumpPath(cwd);
   107     }
   108   }
   109 #endif
   111   return RUN_ALL_TESTS();
   112 }
   114 // We use a static var 'RunGTest' defined in nsAppRunner.cpp.
   115 // RunGTest is initialized to nullptr but if GTest (this file)
   116 // is linked in then RunGTest will be set here indicating
   117 // GTest is supported.
   118 class _InitRunGTest {
   119 public:
   120   _InitRunGTest() {
   121     RunGTest = RunGTestFunc;
   122   }
   123 } InitRunGTest;
   125 }

mercurial