xref: /aosp_15_r20/external/cronet/base/test/test_suite.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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