/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * This Source Code Form is subject to the terms of the Mozilla Public * * License, v. 2.0. If a copy of the MPL was not distributed with this
* * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
using ::testing::EmptyTestEventListener; using ::testing::InitGoogleTest; using ::testing::TestEventListeners; using ::testing::TestInfo; using ::testing::TestPartResult; using ::testing::UnitTest;
staticvoid ReplaceGTestLogger() { // Replace the GTest logger so that it can be passed // by the mozilla test parsers. // Code is based on: // http://googletest.googlecode.com/svn/trunk/samples/sample9_unittest.cc
UnitTest& unitTest = *UnitTest::GetInstance();
TestEventListeners& listeners = unitTest.listeners(); delete listeners.Release(listeners.default_result_printer());
listeners.Append(new MozillaPrinter);
}
int RunGTestFunc(int* argc, char** argv) {
InitGoogleTest(argc, argv);
if (getenv("MOZ_TBPL_PARSER")) {
ReplaceGTestLogger();
}
PR_SetEnv("XPCOM_DEBUG_BREAK=stack-and-abort");
ScopedXPCOM xpcom("GTest");
#ifdef XP_WIN
mozilla::ipc::windows::InitUIThread(); #endif #ifdef ANDROID // On Android, gtest is running in an application, which uses a // current working directory of '/' by default. Desktop tests // sometimes assume that support files are in the current // working directory. For compatibility with desktop, the Android // harness pushes test support files to the device at the location // specified by MOZ_GTEST_CWD and gtest changes the cwd to that // location. char* path = PR_GetEnv("MOZ_GTEST_CWD");
chdir(path); #endif
nsCOMPtr<nsICrashReporter> crashreporter; char* crashreporterStr = PR_GetEnv("MOZ_CRASHREPORTER"); if (crashreporterStr && !strcmp(crashreporterStr, "1")) { // TODO: move this to an even-more-common location to use in all // C++ unittests
crashreporter = do_GetService("@mozilla.org/toolkit/crash-reporter;1"); if (crashreporter) {
printf_stderr("Setting up crash reporting\n"); char* path = PR_GetEnv("MOZ_GTEST_MINIDUMPS_PATH");
nsCOMPtr<nsIFile> file; if (path) {
nsresult rv =
NS_NewUTF8LocalFile(nsDependentCString(path), getter_AddRefs(file)); if (NS_FAILED(rv)) {
printf_stderr("Ignoring invalid MOZ_GTEST_MINIDUMPS_PATH\n");
}
} if (!file) {
nsCOMPtr<nsIProperties> dirsvc =
do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID);
nsresult rv = dirsvc->Get(NS_OS_CURRENT_WORKING_DIR,
NS_GET_IID(nsIFile), getter_AddRefs(file));
MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv));
}
crashreporter->SetEnabled(true);
crashreporter->SetMinidumpPath(file);
}
}
// FOG should init exactly once, as early into running as possible, to enable // instrumentation tests to work properly. // However, at init, Glean may decide to send a ping. So let's first tell FOG // that these pings shouldn't actually be uploaded.
Preferences::SetInt("telemetry.fog.test.localhost_port", -1); // Though the default user-activity limits ought to be longer than a test, // ensure that they don't trigger unnecessary ping submission (which clears // storage, making it hard to test instrumentation).
Preferences::SetInt("telemetry.fog.test.activity_limit", -1);
Preferences::SetInt("telemetry.fog.test.inactivity_limit", -1); const nsCString empty;
RefPtr<FOG>(FOG::GetSingleton())->InitializeFOG(empty, empty, false);
return RUN_ALL_TESTS();
}
// We use a static var 'RunGTest' defined in nsAppRunner.cpp. // RunGTest is initialized to nullptr but if GTest (this file) // is linked in then RunGTest will be set here indicating // GTest is supported.
MOZ_RUNINIT class _InitRunGTest { public:
_InitRunGTest() { RunGTest = RunGTestFunc; }
} InitRunGTest;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.