13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 27f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen// Use of this source code is governed by a BSD-style license that can be 37f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen// found in the LICENSE file. 47f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 57f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "base/test/test_suite.h" 67f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 77f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "base/at_exit.h" 87f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "base/base_paths.h" 97f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "base/base_switches.h" 107f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "base/command_line.h" 113f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/debug/debug_on_start_win.h" 12513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/debug/debugger.h" 137f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "base/file_path.h" 147f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "base/i18n/icu_util.h" 157f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "base/logging.h" 16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/mac/scoped_nsautorelease_pool.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 187f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "base/path_service.h" 197f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "base/process_util.h" 207f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "base/test/multiprocess_test.h" 21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/test/test_timeouts.h" 227f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "base/time.h" 237f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "testing/gtest/include/gtest/gtest.h" 247f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include "testing/multiprocess_func_list.h" 257f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#if defined(OS_MACOSX) 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/test/mock_chrome_application_mac.h" 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 307f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#if defined(TOOLKIT_USES_GTK) 317f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#include <gtk/gtk.h> 327f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#endif 337f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 347f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsennamespace { 357f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 367f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenclass MaybeTestDisabler : public testing::EmptyTestEventListener { 377f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen public: 387f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen virtual void OnTestStart(const testing::TestInfo& test_info) { 397f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen ASSERT_FALSE(TestSuite::IsMarkedMaybe(test_info)) 407f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen << "Probably the OS #ifdefs don't include all of the necessary " 417f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen "platforms.\nPlease ensure that no tests have the MAYBE_ prefix " 427f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen "after the code is preprocessed."; 437f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen } 447f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen}; 457f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 467f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} // namespace 477f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 487f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenconst char TestSuite::kStrictFailureHandling[] = "strict_failure_handling"; 497f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 507f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian MonsenTestSuite::TestSuite(int argc, char** argv) { 51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#if defined(OS_WIN) 52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen testing::GTEST_FLAG(catch_exceptions) = false; 53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#endif 547f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen base::EnableTerminationOnHeapCorruption(); 557f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen CommandLine::Init(argc, argv); 567f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen testing::InitGoogleTest(&argc, argv); 577f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#if defined(TOOLKIT_USES_GTK) 587f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen g_thread_init(NULL); 597f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen gtk_init_check(&argc, &argv); 607f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#endif // defined(TOOLKIT_USES_GTK) 617f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // Don't add additional code to this constructor. Instead add it to 627f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // Initialize(). See bug 6436. 637f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 647f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 657f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian MonsenTestSuite::~TestSuite() { 667f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen CommandLine::Reset(); 677f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 687f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 697f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen// static 707f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenbool TestSuite::IsMarkedFlaky(const testing::TestInfo& test) { 717f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen return strncmp(test.name(), "FLAKY_", 6) == 0; 727f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 737f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 747f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen// static 757f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenbool TestSuite::IsMarkedFailing(const testing::TestInfo& test) { 767f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen return strncmp(test.name(), "FAILS_", 6) == 0; 777f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 787f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 797f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen// static 807f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenbool TestSuite::IsMarkedMaybe(const testing::TestInfo& test) { 817f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen return strncmp(test.name(), "MAYBE_", 6) == 0; 827f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 837f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 847f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen// static 857f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenbool TestSuite::ShouldIgnoreFailure(const testing::TestInfo& test) { 867f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen if (CommandLine::ForCurrentProcess()->HasSwitch(kStrictFailureHandling)) 877f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen return false; 887f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen return IsMarkedFlaky(test) || IsMarkedFailing(test); 897f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 907f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 917f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen// static 927f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenbool TestSuite::NonIgnoredFailures(const testing::TestInfo& test) { 937f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen return test.should_run() && test.result()->Failed() && 947f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen !ShouldIgnoreFailure(test); 957f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 967f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 977f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenint TestSuite::GetTestCount(TestMatch test_match) { 987f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen testing::UnitTest* instance = testing::UnitTest::GetInstance(); 997f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen int count = 0; 1007f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1017f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen for (int i = 0; i < instance->total_test_case_count(); ++i) { 1027f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen const testing::TestCase& test_case = *instance->GetTestCase(i); 1037f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen for (int j = 0; j < test_case.total_test_count(); ++j) { 1047f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen if (test_match(*test_case.GetTestInfo(j))) { 1057f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen count++; 1067f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen } 1077f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen } 1087f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen } 1097f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1107f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen return count; 1117f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 1127f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1137f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenvoid TestSuite::CatchMaybeTests() { 1147f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen testing::TestEventListeners& listeners = 1157f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen testing::UnitTest::GetInstance()->listeners(); 1167f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen listeners.Append(new MaybeTestDisabler); 1177f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 1187f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1197f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen// Don't add additional code to this method. Instead add it to 1207f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen// Initialize(). See bug 6436. 1217f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenint TestSuite::Run() { 122731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick base::mac::ScopedNSAutoreleasePool scoped_pool; 1237f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1247f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen Initialize(); 1257f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen std::string client_func = 1267f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 1277f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen switches::kTestChildProcess); 1287f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // Check to see if we are being run as a client process. 1297f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen if (!client_func.empty()) 1307f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen return multi_process_function_list::InvokeChildProcessTest(client_func); 1317f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen int result = RUN_ALL_TESTS(); 1327f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1337f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // If there are failed tests, see if we should ignore the failures. 1347f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen if (result != 0 && GetTestCount(&TestSuite::NonIgnoredFailures) == 0) 1357f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen result = 0; 1367f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1377f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // Display the number of flaky tests. 1387f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen int flaky_count = GetTestCount(&TestSuite::IsMarkedFlaky); 1397f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen if (flaky_count) { 1407f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen printf(" YOU HAVE %d FLAKY %s\n\n", flaky_count, 1417f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen flaky_count == 1 ? "TEST" : "TESTS"); 1427f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen } 1437f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1447f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // Display the number of tests with ignored failures (FAILS). 1457f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen int failing_count = GetTestCount(&TestSuite::IsMarkedFailing); 1467f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen if (failing_count) { 1477f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen printf(" YOU HAVE %d %s with ignored failures (FAILS prefix)\n\n", 1487f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen failing_count, failing_count == 1 ? "test" : "tests"); 1497f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen } 1507f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1517f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // This MUST happen before Shutdown() since Shutdown() tears down 1527f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // objects (such as NotificationService::current()) that Cocoa 1537f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // objects use to remove themselves as observers. 1547f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen scoped_pool.Recycle(); 1557f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1567f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen Shutdown(); 1577f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1587f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen return result; 1597f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 1607f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1617f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen// static 1627f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenvoid TestSuite::UnitTestAssertHandler(const std::string& str) { 1637f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen RAW_LOG(FATAL, str.c_str()); 1647f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 1657f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1667f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenvoid TestSuite::SuppressErrorDialogs() { 1677f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#if defined(OS_WIN) 1687f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen UINT new_flags = SEM_FAILCRITICALERRORS | 1697f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen SEM_NOGPFAULTERRORBOX | 1707f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen SEM_NOOPENFILEERRORBOX; 1717f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1727f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // Preserve existing error mode, as discussed at 1737f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx 1747f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen UINT existing_flags = SetErrorMode(new_flags); 1757f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen SetErrorMode(existing_flags | new_flags); 1767f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#endif // defined(OS_WIN) 1777f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 1787f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1797f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenvoid TestSuite::Initialize() { 18072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#if defined(OS_MACOSX) 18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Some of the app unit tests spin runloops. 18272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen mock_cr_app::RegisterMockCrApp(); 18372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif 18472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1857f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // Initialize logging. 1867f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen FilePath exe; 1877f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen PathService::Get(base::FILE_EXE, &exe); 1887f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen FilePath log_filename = exe.ReplaceExtension(FILE_PATH_LITERAL("log")); 18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen logging::InitLogging( 19072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen log_filename.value().c_str(), 19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen logging::LOG_TO_BOTH_FILE_AND_SYSTEM_DEBUG_LOG, 19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen logging::LOCK_LOG_FILE, 19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen logging::DELETE_OLD_LOG_FILE, 19472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen logging::DISABLE_DCHECK_FOR_NON_OFFICIAL_RELEASE_BUILDS); 1957f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // We want process and thread IDs because we may have multiple processes. 1967f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // Note: temporarily enabled timestamps in an effort to catch bug 6361. 1977f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen logging::SetLogItems(true, true, true, true); 1987f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 1997f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen CHECK(base::EnableInProcessStackDumping()); 2007f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#if defined(OS_WIN) 2017f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // Make sure we run with high resolution timer to minimize differences 2027f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // between production code and test code. 2037f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen base::Time::EnableHighResolutionTimer(true); 2047f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen#endif // defined(OS_WIN) 2057f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 2067f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen // In some cases, we do not want to see standard error dialogs. 207513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!base::debug::BeingDebugged() && 2087f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen !CommandLine::ForCurrentProcess()->HasSwitch("show-error-dialogs")) { 2097f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen SuppressErrorDialogs(); 2103f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen base::debug::SetSuppressDebugUI(true); 2117f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen logging::SetLogAssertHandler(UnitTestAssertHandler); 2127f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen } 2137f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 2147f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen icu_util::Initialize(); 2157f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 2167f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen CatchMaybeTests(); 217731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 218731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick TestTimeouts::Initialize(); 2197f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 2207f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen 2217f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsenvoid TestSuite::Shutdown() { 2227f92e4ca7bcb209f5d9b38cacaf3a1c6cbe493aaKristian Monsen} 223