test_suite.cc revision 58e6fbe4ee35d65e14b626c557d37565bf8ad179
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Copyright (c) 2012 The Chromium Authors. All rights reserved. 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Use of this source code is governed by a BSD-style license that can be 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// found in the LICENSE file. 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/test/test_suite.h" 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/at_exit.h" 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/base_paths.h" 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/base_switches.h" 10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "base/command_line.h" 11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "base/debug/debug_on_start_win.h" 127a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "base/debug/debugger.h" 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/debug/stack_trace.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/files/file_path.h" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/i18n/icu_util.h" 1698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "base/logging.h" 17640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton#include "base/memory/scoped_ptr.h" 1863094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "base/path_service.h" 192c354722318f0fcad087c76f2bc0dc8db9200b4bAndrew Kaylor#include "base/process/memory.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/test/multiprocess_test.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/test/test_timeouts.h" 2263094e0bb161580564954dee512955c1c79d3476Greg Clayton#include "base/time/time.h" 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "testing/gtest/include/gtest/gtest.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "testing/multiprocess_func_list.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#if defined(OS_MACOSX) 27643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton#include "base/mac/scoped_nsautorelease_pool.h" 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#if defined(OS_IOS) 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/test/test_listener_ios.h" 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#else 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "base/test/mock_chrome_application_mac.h" 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // OS_IOS 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // OS_MACOSX 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#if defined(OS_ANDROID) 367a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "base/test/test_support_android.h" 377a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#endif 3894a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 391586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham#if defined(OS_IOS) 407a62c8b129b7e1b5e838b7616a794e01df01818bEli Friedman#include "base/test/test_support_ios.h" 411586d9720002e407a3a097baf302de5fa4ca9c1bJim Ingham#endif 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#if defined(TOOLKIT_GTK) 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <gtk/gtk.h> 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif 4694a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 4794a5d0de4433dce556db59758f3d6124eb0e1a2aJim Inghamnamespace { 4894a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham 4994a5d0de4433dce556db59758f3d6124eb0e1a2aJim Inghamclass MaybeTestDisabler : public testing::EmptyTestEventListener { 5094a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham public: 5194a5d0de4433dce556db59758f3d6124eb0e1a2aJim Ingham virtual void OnTestStart(const testing::TestInfo& test_info) OVERRIDE { 5249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton ASSERT_FALSE(TestSuite::IsMarkedMaybe(test_info)) 5349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton << "Probably the OS #ifdefs don't include all of the necessary " 5449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton "platforms.\nPlease ensure that no tests have the MAYBE_ prefix " 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner "after the code is preprocessed."; 56a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass TestClientInitializer : public testing::EmptyTestEventListener { 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public: 61a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton TestClientInitializer() 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner : old_command_line_(CommandLine::NO_PROGRAM) { 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 651b28441cf05e7781bd9685a0cdcd349d8b09fefbGreg Clayton virtual void OnTestStart(const testing::TestInfo& test_info) OVERRIDE { 66a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton old_command_line_ = *CommandLine::ForCurrentProcess(); 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 68a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void OnTestEnd(const testing::TestInfo& test_info) OVERRIDE { 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner *CommandLine::ForCurrentProcess() = old_command_line_; 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 7249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton 7349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton private: 7449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton CommandLine old_command_line_; 7549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton 7649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton DISALLOW_COPY_AND_ASSIGN(TestClientInitializer); 7749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton}; 7849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton 79a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton} // namespace 8049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton 8149ce682dfa7993d31206cea19ce7006cd3f3077eGreg ClaytonTestSuite::TestSuite(int argc, char** argv) : initialized_command_line_(false) { 8249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton PreInitialize(argc, argv, true); 8349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton} 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerTestSuite::TestSuite(int argc, char** argv, bool create_at_exit_manager) 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner : initialized_command_line_(false) { 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PreInitialize(argc, argv, create_at_exit_manager); 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerTestSuite::~TestSuite() { 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (initialized_command_line_) 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CommandLine::Reset(); 93a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton} 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid TestSuite::PreInitialize(int argc, char** argv, 9643490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton bool create_at_exit_manager) { 9743490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton#if defined(OS_WIN) 9843490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton testing::GTEST_FLAG(catch_exceptions) = false; 99a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#endif 10043490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton base::EnableTerminationOnHeapCorruption(); 10143490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton initialized_command_line_ = CommandLine::Init(argc, argv); 10243490d1332d13694fb6690365984bf0ecdd8dcc3Greg Clayton testing::InitGoogleTest(&argc, argv); 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#if defined(OS_LINUX) && defined(USE_AURA) 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // When calling native char conversion functions (e.g wrctomb) we need to 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // have the locale set. In the absence of such a call the "C" locale is the 106952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton // default. In the gtk code (below) gtk_init() implicitly sets a locale. 1077826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice setlocale(LC_ALL, ""); 1087826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice#elif defined(TOOLKIT_GTK) 109d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham gtk_init_check(&argc, &argv); 110d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham#endif // defined(TOOLKIT_GTK) 111d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham 112f4124deeb9532044a38c0774ced872f2709347daGreg Clayton // On Android, AtExitManager is created in 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // testing/android/native_test_wrapper.cc before main() is called. 114a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#if !defined(OS_ANDROID) 115a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton if (create_at_exit_manager) 116a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton at_exit_manager_.reset(new base::AtExitManager); 1173acaa926c8f0d32da48db61a5fcb95276e6a4006Greg Clayton#endif 118a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 1199f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton#if defined(OS_IOS) 1209f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton InitIOSRunHook(this, argc, argv); 1219f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton#endif 1229f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton 1239f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton // Don't add additional code to this function. Instead add it to 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Initialize(). See bug 6436. 1257826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice} 1267826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 127f4124deeb9532044a38c0774ced872f2709347daGreg Clayton 12861ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice// static 1297826c8894803dc729f29789ebc038956a94d3e7aCaroline Ticebool TestSuite::IsMarkedMaybe(const testing::TestInfo& test) { 1307826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice return strncmp(test.name(), "MAYBE_", 6) == 0; 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid TestSuite::CatchMaybeTests() { 134640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton testing::TestEventListeners& listeners = 135640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton testing::UnitTest::GetInstance()->listeners(); 136d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham listeners.Append(new MaybeTestDisabler); 137d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham} 138d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham 139f4124deeb9532044a38c0774ced872f2709347daGreg Claytonvoid TestSuite::ResetCommandLine() { 140640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton testing::TestEventListeners& listeners = 141a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton testing::UnitTest::GetInstance()->listeners(); 142a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton listeners.Append(new TestClientInitializer); 143640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton} 144a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 145a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton// Don't add additional code to this method. Instead add it to 146640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton// Initialize(). See bug 6436. 147a894fe78bc15344a0025c1154e414c554ab31dd9Greg Claytonint TestSuite::Run() { 148a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#if defined(OS_IOS) 149640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton RunTestsFromIOSApp(); 150a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#endif 151a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 152a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#if defined(OS_MACOSX) 1530bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton base::mac::ScopedNSAutoreleasePool scoped_pool; 154a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#endif 155278f16e1dd4097bf3dd12b0f63f1fac0f11c4006Andrew Kaylor 156a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Initialize(); 157a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton std::string client_func = 158a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 159a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton switches::kTestChildProcess); 160a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 161a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // Check to see if we are being run as a client process. 162a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton if (!client_func.empty()) 163a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton return multi_process_function_list::InvokeChildProcessTest(client_func); 164a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#if defined(OS_IOS) 165a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton base::test_listener_ios::RegisterTestEndListener(); 166a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#endif 167a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton int result = RUN_ALL_TESTS(); 168a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 169640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton#if defined(OS_MACOSX) 170a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // This MUST happen before Shutdown() since Shutdown() tears down 171a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // objects (such as NotificationService::current()) that Cocoa 172640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // objects use to remove themselves as observers. 173a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton scoped_pool.Recycle(); 174a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#endif 175640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton 176a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton Shutdown(); 177a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 178a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton return result; 179640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton} 180640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton 1819f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton// static 1829f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Claytonvoid TestSuite::UnitTestAssertHandler(const std::string& str) { 183952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton RAW_LOG(FATAL, str.c_str()); 1849f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton} 1859f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton 1869f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Claytonvoid TestSuite::SuppressErrorDialogs() { 187640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton#if defined(OS_WIN) 188640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton UINT new_flags = SEM_FAILCRITICALERRORS | 189640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton SEM_NOGPFAULTERRORBOX | 190640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton SEM_NOOPENFILEERRORBOX; 191640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton 192640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // Preserve existing error mode, as discussed at 193640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx 194d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham UINT existing_flags = SetErrorMode(new_flags); 195d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham SetErrorMode(existing_flags | new_flags); 196d0bdddff8bc6dd5f71492452ce2bbd72fdaa147bJim Ingham 197f4124deeb9532044a38c0774ced872f2709347daGreg Clayton#if defined(_DEBUG) && defined(_HAS_EXCEPTIONS) && (_HAS_EXCEPTIONS == 1) 198640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // Suppress the "Debug Assertion Failed" dialog. 199a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // TODO(hbono): remove this code when gtest has it. 200a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // http://groups.google.com/d/topic/googletestframework/OjuwNlXy5ac/discussion 201640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); 202a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); 203a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#endif // defined(_DEBUG) && defined(_HAS_EXCEPTIONS) && (_HAS_EXCEPTIONS == 1) 204a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#endif // defined(OS_WIN) 205640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton} 206a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 207a894fe78bc15344a0025c1154e414c554ab31dd9Greg Claytonvoid TestSuite::Initialize() { 208640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton#if defined(OS_MACOSX) && !defined(OS_IOS) 209a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // Some of the app unit tests spin runloops. 210a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton mock_cr_app::RegisterMockCrApp(); 211a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#endif 2120bce9a22354df3f00e68ffd912119a0741753b7fGreg Clayton 213a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#if defined(OS_IOS) 214278f16e1dd4097bf3dd12b0f63f1fac0f11c4006Andrew Kaylor InitIOSTestMessageLoop(); 215a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#endif // OS_IOS 216a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 217a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#if defined(OS_ANDROID) 218a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton InitAndroidTest(); 219640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton#else 220a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // Initialize logging. 221a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton base::FilePath exe; 222a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton PathService::Get(base::FILE_EXE, &exe); 223640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton base::FilePath log_filename = exe.ReplaceExtension(FILE_PATH_LITERAL("log")); 224a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton logging::LoggingSettings settings; 225a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton settings.logging_dest = logging::LOG_TO_ALL; 226a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton settings.log_file = log_filename.value().c_str(); 227640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton settings.delete_old = logging::DELETE_OLD_LOG_FILE; 228a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton logging::InitLogging(settings); 229a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // We want process and thread IDs because we may have multiple processes. 230a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // Note: temporarily enabled timestamps in an effort to catch bug 6361. 231a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton logging::SetLogItems(true, true, true, true); 232a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#endif // else defined(OS_ANDROID) 233a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 234a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton CHECK(base::debug::EnableInProcessStackDumping()); 235a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton#if defined(OS_WIN) 236a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // Make sure we run with high resolution timer to minimize differences 237a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton // between production code and test code. 238640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton base::Time::EnableHighResolutionTimer(true); 239640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton#endif // defined(OS_WIN) 240a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 241640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton // In some cases, we do not want to see standard error dialogs. 242a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton if (!base::debug::BeingDebugged() && 243640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton !CommandLine::ForCurrentProcess()->HasSwitch("show-error-dialogs")) { 244a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton SuppressErrorDialogs(); 245a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton base::debug::SetSuppressDebugUI(true); 246640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton logging::SetLogAssertHandler(UnitTestAssertHandler); 247a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton } 248a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 249640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton icu_util::Initialize(); 250a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton 251a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton CatchMaybeTests(); 252a894fe78bc15344a0025c1154e414c554ab31dd9Greg Clayton ResetCommandLine(); 253640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton 254640dc6b983964615bcb149d7d37ee007a13fb02cGreg Clayton TestTimeouts::Initialize(); 2559f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton} 2569f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton 257952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Claytonvoid TestSuite::Shutdown() { 2589f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton} 2599f3c98e1cfdb463848cb13d03312fab8a5ec7f0dGreg Clayton