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