test_suite.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/test_suite.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/at_exit.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_paths.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_switches.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/debug/debug_on_start_win.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/debug/debugger.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/debug/stack_trace.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/i18n/icu_util.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/process_util.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/multiprocess_test.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/test_timeouts.h" 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/multiprocess_func_list.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/mac/scoped_nsautorelease_pool.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_IOS) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/test_listener_ios.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/mock_chrome_application_mac.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_IOS 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_MACOSX 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/test_support_android.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_IOS) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/test_support_ios.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_GTK) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <gtk/gtk.h> 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MaybeTestDisabler : public testing::EmptyTestEventListener { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnTestStart(const testing::TestInfo& test_info) OVERRIDE { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(TestSuite::IsMarkedMaybe(test_info)) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Probably the OS #ifdefs don't include all of the necessary " 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "platforms.\nPlease ensure that no tests have the MAYBE_ prefix " 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "after the code is preprocessed."; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestClientInitializer : public testing::EmptyTestEventListener { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestClientInitializer() 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : old_command_line_(CommandLine::NO_PROGRAM) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnTestStart(const testing::TestInfo& test_info) OVERRIDE { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) old_command_line_ = *CommandLine::ForCurrentProcess(); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnTestEnd(const testing::TestInfo& test_info) OVERRIDE { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *CommandLine::ForCurrentProcess() = old_command_line_; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine old_command_line_; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestClientInitializer); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestSuite::TestSuite(int argc, char** argv) : initialized_command_line_(false) { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PreInitialize(argc, argv, true); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestSuite::TestSuite(int argc, char** argv, bool create_at_exit_manager) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : initialized_command_line_(false) { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PreInitialize(argc, argv, create_at_exit_manager); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestSuite::~TestSuite() { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (initialized_command_line_) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine::Reset(); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestSuite::PreInitialize(int argc, char** argv, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool create_at_exit_manager) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::GTEST_FLAG(catch_exceptions) = false; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::EnableTerminationOnHeapCorruption(); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initialized_command_line_ = CommandLine::Init(argc, argv); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::InitGoogleTest(&argc, argv); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) && defined(USE_AURA) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When calling native char conversion functions (e.g wrctomb) we need to 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // have the locale set. In the absence of such a call the "C" locale is the 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default. In the gtk code (below) gtk_init() implicitly sets a locale. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setlocale(LC_ALL, ""); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(TOOLKIT_GTK) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gtk_init_check(&argc, &argv); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(TOOLKIT_GTK) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On Android, AtExitManager is created in 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // testing/android/native_test_wrapper.cc before main() is called. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_ANDROID) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (create_at_exit_manager) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) at_exit_manager_.reset(new base::AtExitManager); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_IOS) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InitIOSRunHook(this, argc, argv); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't add additional code to this function. Instead add it to 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize(). See bug 6436. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestSuite::IsMarkedMaybe(const testing::TestInfo& test) { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return strncmp(test.name(), "MAYBE_", 6) == 0; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestSuite::CatchMaybeTests() { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::TestEventListeners& listeners = 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::UnitTest::GetInstance()->listeners(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listeners.Append(new MaybeTestDisabler); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestSuite::ResetCommandLine() { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::TestEventListeners& listeners = 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::UnitTest::GetInstance()->listeners(); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listeners.Append(new TestClientInitializer); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Don't add additional code to this method. Instead add it to 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Initialize(). See bug 6436. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int TestSuite::Run() { 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_IOS) 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunTestsFromIOSApp(); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::mac::ScopedNSAutoreleasePool scoped_pool; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Initialize(); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string client_func = 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kTestChildProcess); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check to see if we are being run as a client process. 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!client_func.empty()) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return multi_process_function_list::InvokeChildProcessTest(client_func); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_IOS) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::test_listener_ios::RegisterTestEndListener(); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = RUN_ALL_TESTS(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This MUST happen before Shutdown() since Shutdown() tears down 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // objects (such as NotificationService::current()) that Cocoa 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // objects use to remove themselves as observers. 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_pool.Recycle(); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Shutdown(); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestSuite::UnitTestAssertHandler(const std::string& str) { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RAW_LOG(FATAL, str.c_str()); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestSuite::SuppressErrorDialogs() { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UINT new_flags = SEM_FAILCRITICALERRORS | 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SEM_NOGPFAULTERRORBOX | 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SEM_NOOPENFILEERRORBOX; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Preserve existing error mode, as discussed at 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UINT existing_flags = SetErrorMode(new_flags); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetErrorMode(existing_flags | new_flags); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_DEBUG) && defined(_HAS_EXCEPTIONS) && (_HAS_EXCEPTIONS == 1) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Suppress the "Debug Assertion Failed" dialog. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(hbono): remove this code when gtest has it. 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://groups.google.com/d/topic/googletestframework/OjuwNlXy5ac/discussion 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(_DEBUG) && defined(_HAS_EXCEPTIONS) && (_HAS_EXCEPTIONS == 1) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_WIN) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestSuite::Initialize() { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) && !defined(OS_IOS) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Some of the app unit tests spin runloops. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_cr_app::RegisterMockCrApp(); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_IOS) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitIOSTestMessageLoop(); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_IOS 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitAndroidTest(); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize logging. 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath exe; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(base::FILE_EXE, &exe); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath log_filename = exe.ReplaceExtension(FILE_PATH_LITERAL("log")); 224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch logging::LoggingSettings settings; 225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch settings.logging_dest = logging::LOG_TO_ALL; 226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch settings.log_file = log_filename.value().c_str(); 227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch settings.delete_old = logging::DELETE_OLD_LOG_FILE; 228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch logging::InitLogging(settings); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We want process and thread IDs because we may have multiple processes. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: temporarily enabled timestamps in an effort to catch bug 6361. 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logging::SetLogItems(true, true, true, true); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // else defined(OS_ANDROID) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(base::debug::EnableInProcessStackDumping()); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure we run with high resolution timer to minimize differences 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // between production code and test code. 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time::EnableHighResolutionTimer(true); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_WIN) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In some cases, we do not want to see standard error dialogs. 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!base::debug::BeingDebugged() && 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !CommandLine::ForCurrentProcess()->HasSwitch("show-error-dialogs")) { 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SuppressErrorDialogs(); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::debug::SetSuppressDebugUI(true); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logging::SetLogAssertHandler(UnitTestAssertHandler); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) icu_util::Initialize(); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CatchMaybeTests(); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResetCommandLine(); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTimeouts::Initialize(); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestSuite::Shutdown() { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 259