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