1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_TEST_TEST_SUITE_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_TEST_TEST_SUITE_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker // Defines a basic test suite framework for running gtest based tests. You can 9*6777b538SAndroid Build Coastguard Worker // instantiate this class in your main function and call its Run method to run 10*6777b538SAndroid Build Coastguard Worker // any gtest based tests that are linked into your executable. 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker #include <memory> 13*6777b538SAndroid Build Coastguard Worker #include <string_view> 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker #include "base/at_exit.h" 16*6777b538SAndroid Build Coastguard Worker #include "base/check.h" 17*6777b538SAndroid Build Coastguard Worker #include "base/memory/raw_ptr.h" 18*6777b538SAndroid Build Coastguard Worker #include "base/tracing_buildflags.h" 19*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h" 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(ENABLE_BASE_TRACING) 22*6777b538SAndroid Build Coastguard Worker #include "base/test/trace_to_file.h" 23*6777b538SAndroid Build Coastguard Worker #endif // BUILDFLAG(ENABLE_BASE_TRACING) 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN) 26*6777b538SAndroid Build Coastguard Worker #include <vector> 27*6777b538SAndroid Build Coastguard Worker #include "base/memory/raw_ptr_exclusion.h" 28*6777b538SAndroid Build Coastguard Worker #endif 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker namespace logging { 31*6777b538SAndroid Build Coastguard Worker class ScopedLogAssertHandler; 32*6777b538SAndroid Build Coastguard Worker } 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker namespace testing { 35*6777b538SAndroid Build Coastguard Worker class TestInfo; 36*6777b538SAndroid Build Coastguard Worker } 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker namespace base { 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker class XmlUnitTestResultPrinter; 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker // Instantiates TestSuite, runs it and returns exit code. 43*6777b538SAndroid Build Coastguard Worker int RunUnitTestsUsingBaseTestSuite(int argc, char** argv); 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker class TestSuite { 46*6777b538SAndroid Build Coastguard Worker public: 47*6777b538SAndroid Build Coastguard Worker // Match function used by the GetTestCount method. 48*6777b538SAndroid Build Coastguard Worker typedef bool (*TestMatch)(const testing::TestInfo&); 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker TestSuite(int argc, char** argv); 51*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN) 52*6777b538SAndroid Build Coastguard Worker TestSuite(int argc, wchar_t** argv); 53*6777b538SAndroid Build Coastguard Worker #endif // BUILDFLAG(IS_WIN) 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker TestSuite(const TestSuite&) = delete; 56*6777b538SAndroid Build Coastguard Worker TestSuite& operator=(const TestSuite&) = delete; 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker virtual ~TestSuite(); 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker int Run(); 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker // Disables checks for thread and process priority at the beginning and end of 63*6777b538SAndroid Build Coastguard Worker // each test. Most tests should not use this. 64*6777b538SAndroid Build Coastguard Worker void DisableCheckForThreadAndProcessPriority(); 65*6777b538SAndroid Build Coastguard Worker 66*6777b538SAndroid Build Coastguard Worker // Disables checks for certain global objects being leaked across tests. 67*6777b538SAndroid Build Coastguard Worker void DisableCheckForLeakedGlobals(); 68*6777b538SAndroid Build Coastguard Worker 69*6777b538SAndroid Build Coastguard Worker protected: 70*6777b538SAndroid Build Coastguard Worker // By default fatal log messages (e.g. from DCHECKs) result in error dialogs 71*6777b538SAndroid Build Coastguard Worker // which gum up buildbots. Use a minimalistic assert handler which just 72*6777b538SAndroid Build Coastguard Worker // terminates the process. 73*6777b538SAndroid Build Coastguard Worker void UnitTestAssertHandler(const char* file, 74*6777b538SAndroid Build Coastguard Worker int line, 75*6777b538SAndroid Build Coastguard Worker const std::string_view summary, 76*6777b538SAndroid Build Coastguard Worker const std::string_view stack_trace); 77*6777b538SAndroid Build Coastguard Worker 78*6777b538SAndroid Build Coastguard Worker // Disable crash dialogs so that it doesn't gum up the buildbot 79*6777b538SAndroid Build Coastguard Worker virtual void SuppressErrorDialogs(); 80*6777b538SAndroid Build Coastguard Worker 81*6777b538SAndroid Build Coastguard Worker // Override these for custom test handling. Use these instead of putting 82*6777b538SAndroid Build Coastguard Worker // complex code in your constructor/destructor. 83*6777b538SAndroid Build Coastguard Worker virtual void Initialize(); 84*6777b538SAndroid Build Coastguard Worker virtual void InitializeFromCommandLine(int* argc, char** argv); 85*6777b538SAndroid Build Coastguard Worker virtual int RunAllTests(); 86*6777b538SAndroid Build Coastguard Worker virtual void Shutdown(); 87*6777b538SAndroid Build Coastguard Worker 88*6777b538SAndroid Build Coastguard Worker // Make sure that we setup an AtExitManager so Singleton objects will be 89*6777b538SAndroid Build Coastguard Worker // destroyed. 90*6777b538SAndroid Build Coastguard Worker std::unique_ptr<base::AtExitManager> at_exit_manager_; 91*6777b538SAndroid Build Coastguard Worker 92*6777b538SAndroid Build Coastguard Worker private: 93*6777b538SAndroid Build Coastguard Worker // Basic initialization for the test suite happens here. 94*6777b538SAndroid Build Coastguard Worker void PreInitialize(); 95*6777b538SAndroid Build Coastguard Worker 96*6777b538SAndroid Build Coastguard Worker void AddTestLauncherResultPrinter(); 97*6777b538SAndroid Build Coastguard Worker 98*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(ENABLE_BASE_TRACING) 99*6777b538SAndroid Build Coastguard Worker test::TraceToFile trace_to_file_; 100*6777b538SAndroid Build Coastguard Worker #endif // BUILDFLAG(ENABLE_BASE_TRACING) 101*6777b538SAndroid Build Coastguard Worker 102*6777b538SAndroid Build Coastguard Worker raw_ptr<XmlUnitTestResultPrinter, DanglingUntriaged> printer_ = nullptr; 103*6777b538SAndroid Build Coastguard Worker 104*6777b538SAndroid Build Coastguard Worker std::unique_ptr<logging::ScopedLogAssertHandler> assert_handler_; 105*6777b538SAndroid Build Coastguard Worker 106*6777b538SAndroid Build Coastguard Worker bool initialized_command_line_ = false; 107*6777b538SAndroid Build Coastguard Worker bool check_for_leaked_globals_ = true; 108*6777b538SAndroid Build Coastguard Worker bool check_for_thread_and_process_priority_ = true; 109*6777b538SAndroid Build Coastguard Worker bool is_initialized_ = false; 110*6777b538SAndroid Build Coastguard Worker int argc_; 111*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN) 112*6777b538SAndroid Build Coastguard Worker // We need argv_as_pointers_.data() to have type char**, so we can't use 113*6777b538SAndroid Build Coastguard Worker // raw_ptr here. 114*6777b538SAndroid Build Coastguard Worker RAW_PTR_EXCLUSION std::vector<char*> argv_as_pointers_; 115*6777b538SAndroid Build Coastguard Worker std::vector<std::string> argv_as_strings_; 116*6777b538SAndroid Build Coastguard Worker #endif 117*6777b538SAndroid Build Coastguard Worker raw_ptr<char*> argv_; 118*6777b538SAndroid Build Coastguard Worker }; 119*6777b538SAndroid Build Coastguard Worker 120*6777b538SAndroid Build Coastguard Worker } // namespace base 121*6777b538SAndroid Build Coastguard Worker 122*6777b538SAndroid Build Coastguard Worker #endif // BASE_TEST_TEST_SUITE_H_ 123