tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

MozHelpers.cpp (1927B)


      1 #include "MozHelpers.h"
      2 
      3 #include <iostream>
      4 
      5 #include "gtest/gtest-spi.h"
      6 #include "mozilla/Mutex.h"
      7 #include "nsDebug.h"
      8 
      9 namespace mozilla::gtest {
     10 
     11 void DisableCrashReporter() {
     12  nsCOMPtr<nsICrashReporter> crashreporter =
     13      do_GetService("@mozilla.org/toolkit/crash-reporter;1");
     14  if (crashreporter) {
     15    crashreporter->SetEnabled(false);
     16  }
     17 }
     18 
     19 class ScopedTestResultReporterImpl
     20    : public ScopedTestResultReporter,
     21      public testing::ScopedFakeTestPartResultReporter {
     22 public:
     23  explicit ScopedTestResultReporterImpl(ExitMode aExitMode)
     24      : testing::ScopedFakeTestPartResultReporter(INTERCEPT_ALL_THREADS,
     25                                                  nullptr),
     26        mExitMode(aExitMode) {}
     27 
     28  ~ScopedTestResultReporterImpl() {
     29    switch (mExitMode) {
     30      case ExitMode::ExitOnDtor:
     31        exit(ExitCode(Status()));
     32      case ExitMode::NoExit:
     33        break;
     34    }
     35  }
     36 
     37  void ReportTestPartResult(const testing::TestPartResult& aResult) override {
     38    {
     39      MutexAutoLock lock(mMutex);
     40      if (aResult.nonfatally_failed() &&
     41          mStatus < TestResultStatus::NonFatalFailure) {
     42        mStatus = TestResultStatus::NonFatalFailure;
     43      }
     44 
     45      if (aResult.fatally_failed() &&
     46          mStatus < TestResultStatus::FatalFailure) {
     47        mStatus = TestResultStatus::FatalFailure;
     48      }
     49    }
     50 
     51    std::ostringstream stream;
     52    stream << aResult;
     53    printf_stderr("%s\n", stream.str().c_str());
     54  }
     55 
     56  TestResultStatus Status() const override {
     57    MutexAutoLock lock(mMutex);
     58    return mStatus;
     59  }
     60 
     61 private:
     62  const ExitMode mExitMode;
     63 
     64  mutable Mutex mMutex{"ScopedTestResultReporterImpl::mMutex"};
     65  TestResultStatus mStatus MOZ_GUARDED_BY(mMutex) = TestResultStatus::Pass;
     66 };
     67 
     68 UniquePtr<ScopedTestResultReporter> ScopedTestResultReporter::Create(
     69    ExitMode aExitMode) {
     70  return MakeUnique<ScopedTestResultReporterImpl>(aExitMode);
     71 }
     72 
     73 }  // namespace mozilla::gtest