| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef BASE_TEST_LAUNCHER_UNIT_TEST_LAUNCHER_H_ | 5 #ifndef BASE_TEST_LAUNCHER_UNIT_TEST_LAUNCHER_H_ |
| 6 #define BASE_TEST_LAUNCHER_UNIT_TEST_LAUNCHER_H_ | 6 #define BASE_TEST_LAUNCHER_UNIT_TEST_LAUNCHER_H_ |
| 7 | 7 |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
| 10 #include "base/test/launcher/test_launcher.h" | 10 #include "base/test/launcher/test_launcher.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 // of current process. |test_names| is a vector of test full names | 48 // of current process. |test_names| is a vector of test full names |
| 49 // (e.g. "A.B"), |output_file| is path to the GTest XML output file. | 49 // (e.g. "A.B"), |output_file| is path to the GTest XML output file. |
| 50 virtual CommandLine GetCommandLineForChildGTestProcess( | 50 virtual CommandLine GetCommandLineForChildGTestProcess( |
| 51 const std::vector<std::string>& test_names, | 51 const std::vector<std::string>& test_names, |
| 52 const base::FilePath& output_file) = 0; | 52 const base::FilePath& output_file) = 0; |
| 53 | 53 |
| 54 // Returns wrapper to use for child GTest process. Empty string means | 54 // Returns wrapper to use for child GTest process. Empty string means |
| 55 // no wrapper. | 55 // no wrapper. |
| 56 virtual std::string GetWrapperForChildGTestProcess() = 0; | 56 virtual std::string GetWrapperForChildGTestProcess() = 0; |
| 57 | 57 |
| 58 // Relaunch tests, e.g. after a crash. |
| 59 virtual void RelaunchTests(TestLauncher* test_launcher, |
| 60 const std::vector<std::string>& test_names, |
| 61 int launch_flags) = 0; |
| 62 |
| 58 protected: | 63 protected: |
| 59 ~UnitTestPlatformDelegate() {} | 64 ~UnitTestPlatformDelegate() {} |
| 60 }; | 65 }; |
| 61 | 66 |
| 67 // Runs tests serially, each in its own process. |
| 68 void RunUnitTestsSerially(TestLauncher* test_launcher, |
| 69 UnitTestPlatformDelegate* platform_delegate, |
| 70 const std::vector<std::string>& test_names, |
| 71 int launch_flags); |
| 72 |
| 73 // Runs tests in batches (each batch in its own process). |
| 74 void RunUnitTestsBatch(TestLauncher* test_launcher, |
| 75 UnitTestPlatformDelegate* platform_delegate, |
| 76 const std::vector<std::string>& test_names, |
| 77 int launch_flags); |
| 78 |
| 62 // Test launcher delegate for unit tests (mostly to support batching). | 79 // Test launcher delegate for unit tests (mostly to support batching). |
| 63 class UnitTestLauncherDelegate : public TestLauncherDelegate { | 80 class UnitTestLauncherDelegate : public TestLauncherDelegate { |
| 64 public: | 81 public: |
| 65 UnitTestLauncherDelegate(UnitTestPlatformDelegate* delegate, | 82 UnitTestLauncherDelegate(UnitTestPlatformDelegate* delegate, |
| 66 size_t batch_limit, | 83 size_t batch_limit, |
| 67 bool use_job_objects); | 84 bool use_job_objects); |
| 68 ~UnitTestLauncherDelegate() override; | 85 ~UnitTestLauncherDelegate() override; |
| 69 | 86 |
| 70 private: | 87 private: |
| 71 struct GTestCallbackState { | |
| 72 GTestCallbackState(); | |
| 73 ~GTestCallbackState(); | |
| 74 | |
| 75 TestLauncher* test_launcher; | |
| 76 std::vector<std::string> test_names; | |
| 77 FilePath output_file; | |
| 78 }; | |
| 79 | |
| 80 // TestLauncherDelegate: | 88 // TestLauncherDelegate: |
| 81 bool GetTests(std::vector<SplitTestName>* output) override; | 89 bool GetTests(std::vector<SplitTestName>* output) override; |
| 82 bool ShouldRunTest(const std::string& test_case_name, | 90 bool ShouldRunTest(const std::string& test_case_name, |
| 83 const std::string& test_name) override; | 91 const std::string& test_name) override; |
| 84 size_t RunTests(TestLauncher* test_launcher, | 92 size_t RunTests(TestLauncher* test_launcher, |
| 85 const std::vector<std::string>& test_names) override; | 93 const std::vector<std::string>& test_names) override; |
| 86 size_t RetryTests(TestLauncher* test_launcher, | 94 size_t RetryTests(TestLauncher* test_launcher, |
| 87 const std::vector<std::string>& test_names) override; | 95 const std::vector<std::string>& test_names) override; |
| 88 | 96 |
| 89 // Runs tests serially, each in its own process. | |
| 90 void RunSerially(TestLauncher* test_launcher, | |
| 91 const std::vector<std::string>& test_names); | |
| 92 | |
| 93 // Runs tests in batches (each batch in its own process). | |
| 94 void RunBatch(TestLauncher* test_launcher, | |
| 95 const std::vector<std::string>& test_names); | |
| 96 | |
| 97 // Callback for batched tests. | |
| 98 void GTestCallback(const GTestCallbackState& callback_state, | |
| 99 int exit_code, | |
| 100 const TimeDelta& elapsed_time, | |
| 101 bool was_timeout, | |
| 102 const std::string& output); | |
| 103 | |
| 104 // Callback for serialized tests. | |
| 105 void SerialGTestCallback(const GTestCallbackState& callback_state, | |
| 106 const std::vector<std::string>& test_names, | |
| 107 int exit_code, | |
| 108 const TimeDelta& elapsed_time, | |
| 109 bool was_timeout, | |
| 110 const std::string& output); | |
| 111 | |
| 112 // Interprets test results and reports to the test launcher. Returns true | |
| 113 // on success. | |
| 114 static bool ProcessTestResults(TestLauncher* test_launcher, | |
| 115 const std::vector<std::string>& test_names, | |
| 116 const base::FilePath& output_file, | |
| 117 const std::string& output, | |
| 118 int exit_code, | |
| 119 bool was_timeout, | |
| 120 std::vector<std::string>* tests_to_relaunch); | |
| 121 | |
| 122 ThreadChecker thread_checker_; | 97 ThreadChecker thread_checker_; |
| 123 | 98 |
| 124 UnitTestPlatformDelegate* platform_delegate_; | 99 UnitTestPlatformDelegate* platform_delegate_; |
| 125 | 100 |
| 126 // Maximum number of tests to run in a single batch. | 101 // Maximum number of tests to run in a single batch. |
| 127 size_t batch_limit_; | 102 size_t batch_limit_; |
| 128 | 103 |
| 129 // Determines whether we use job objects on Windows. | 104 // Determines whether we use job objects on Windows. |
| 130 bool use_job_objects_; | 105 bool use_job_objects_; |
| 131 | 106 |
| 132 DISALLOW_COPY_AND_ASSIGN(UnitTestLauncherDelegate); | 107 DISALLOW_COPY_AND_ASSIGN(UnitTestLauncherDelegate); |
| 133 }; | 108 }; |
| 134 | 109 |
| 135 } // namespace base | 110 } // namespace base |
| 136 | 111 |
| 137 #endif // BASE_TEST_LAUNCHER_UNIT_TEST_LAUNCHER_H_ | 112 #endif // BASE_TEST_LAUNCHER_UNIT_TEST_LAUNCHER_H_ |
| OLD | NEW |