| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "base/test/test_suite.h" | 5 #include "base/test/test_suite.h" |
| 6 | 6 |
| 7 #include "base/at_exit.h" | 7 #include "base/at_exit.h" |
| 8 #include "base/base_paths.h" | 8 #include "base/base_paths.h" |
| 9 #include "base/base_switches.h" | 9 #include "base/base_switches.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 } | 71 } |
| 72 | 72 |
| 73 private: | 73 private: |
| 74 CommandLine old_command_line_; | 74 CommandLine old_command_line_; |
| 75 | 75 |
| 76 DISALLOW_COPY_AND_ASSIGN(TestClientInitializer); | 76 DISALLOW_COPY_AND_ASSIGN(TestClientInitializer); |
| 77 }; | 77 }; |
| 78 | 78 |
| 79 } // namespace | 79 } // namespace |
| 80 | 80 |
| 81 const char TestSuite::kStrictFailureHandling[] = "strict_failure_handling"; | |
| 82 | |
| 83 TestSuite::TestSuite(int argc, char** argv) : initialized_command_line_(false) { | 81 TestSuite::TestSuite(int argc, char** argv) : initialized_command_line_(false) { |
| 84 PreInitialize(argc, argv, true); | 82 PreInitialize(argc, argv, true); |
| 85 } | 83 } |
| 86 | 84 |
| 87 TestSuite::TestSuite(int argc, char** argv, bool create_at_exit_manager) | 85 TestSuite::TestSuite(int argc, char** argv, bool create_at_exit_manager) |
| 88 : initialized_command_line_(false) { | 86 : initialized_command_line_(false) { |
| 89 PreInitialize(argc, argv, create_at_exit_manager); | 87 PreInitialize(argc, argv, create_at_exit_manager); |
| 90 } | 88 } |
| 91 | 89 |
| 92 TestSuite::~TestSuite() { | 90 TestSuite::~TestSuite() { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 117 if (create_at_exit_manager) | 115 if (create_at_exit_manager) |
| 118 at_exit_manager_.reset(new base::AtExitManager); | 116 at_exit_manager_.reset(new base::AtExitManager); |
| 119 #endif | 117 #endif |
| 120 | 118 |
| 121 // Don't add additional code to this function. Instead add it to | 119 // Don't add additional code to this function. Instead add it to |
| 122 // Initialize(). See bug 6436. | 120 // Initialize(). See bug 6436. |
| 123 } | 121 } |
| 124 | 122 |
| 125 | 123 |
| 126 // static | 124 // static |
| 127 bool TestSuite::IsMarkedFlaky(const testing::TestInfo& test) { | |
| 128 return strncmp(test.name(), "FLAKY_", 6) == 0; | |
| 129 } | |
| 130 | |
| 131 // static | |
| 132 bool TestSuite::IsMarkedMaybe(const testing::TestInfo& test) { | 125 bool TestSuite::IsMarkedMaybe(const testing::TestInfo& test) { |
| 133 return strncmp(test.name(), "MAYBE_", 6) == 0; | 126 return strncmp(test.name(), "MAYBE_", 6) == 0; |
| 134 } | 127 } |
| 135 | 128 |
| 136 // static | |
| 137 bool TestSuite::ShouldIgnoreFailure(const testing::TestInfo& test) { | |
| 138 if (CommandLine::ForCurrentProcess()->HasSwitch(kStrictFailureHandling)) | |
| 139 return false; | |
| 140 return IsMarkedFlaky(test); | |
| 141 } | |
| 142 | |
| 143 // static | |
| 144 bool TestSuite::NonIgnoredFailures(const testing::TestInfo& test) { | |
| 145 return test.should_run() && test.result()->Failed() && | |
| 146 !ShouldIgnoreFailure(test); | |
| 147 } | |
| 148 | |
| 149 int TestSuite::GetTestCount(TestMatch test_match) { | |
| 150 testing::UnitTest* instance = testing::UnitTest::GetInstance(); | |
| 151 int count = 0; | |
| 152 | |
| 153 for (int i = 0; i < instance->total_test_case_count(); ++i) { | |
| 154 const testing::TestCase& test_case = *instance->GetTestCase(i); | |
| 155 for (int j = 0; j < test_case.total_test_count(); ++j) { | |
| 156 if (test_match(*test_case.GetTestInfo(j))) { | |
| 157 count++; | |
| 158 } | |
| 159 } | |
| 160 } | |
| 161 | |
| 162 return count; | |
| 163 } | |
| 164 | |
| 165 void TestSuite::CatchMaybeTests() { | 129 void TestSuite::CatchMaybeTests() { |
| 166 testing::TestEventListeners& listeners = | 130 testing::TestEventListeners& listeners = |
| 167 testing::UnitTest::GetInstance()->listeners(); | 131 testing::UnitTest::GetInstance()->listeners(); |
| 168 listeners.Append(new MaybeTestDisabler); | 132 listeners.Append(new MaybeTestDisabler); |
| 169 } | 133 } |
| 170 | 134 |
| 171 void TestSuite::ResetCommandLine() { | 135 void TestSuite::ResetCommandLine() { |
| 172 testing::TestEventListeners& listeners = | 136 testing::TestEventListeners& listeners = |
| 173 testing::UnitTest::GetInstance()->listeners(); | 137 testing::UnitTest::GetInstance()->listeners(); |
| 174 listeners.Append(new TestClientInitializer); | 138 listeners.Append(new TestClientInitializer); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 187 switches::kTestChildProcess); | 151 switches::kTestChildProcess); |
| 188 | 152 |
| 189 // Check to see if we are being run as a client process. | 153 // Check to see if we are being run as a client process. |
| 190 if (!client_func.empty()) | 154 if (!client_func.empty()) |
| 191 return multi_process_function_list::InvokeChildProcessTest(client_func); | 155 return multi_process_function_list::InvokeChildProcessTest(client_func); |
| 192 #if defined(OS_IOS) | 156 #if defined(OS_IOS) |
| 193 base::test_listener_ios::RegisterTestEndListener(); | 157 base::test_listener_ios::RegisterTestEndListener(); |
| 194 #endif | 158 #endif |
| 195 int result = RUN_ALL_TESTS(); | 159 int result = RUN_ALL_TESTS(); |
| 196 | 160 |
| 197 // If there are failed tests, see if we should ignore the failures. | |
| 198 if (result != 0 && GetTestCount(&TestSuite::NonIgnoredFailures) == 0) | |
| 199 result = 0; | |
| 200 | |
| 201 // Display the number of flaky tests. | |
| 202 int flaky_count = GetTestCount(&TestSuite::IsMarkedFlaky); | |
| 203 if (flaky_count) { | |
| 204 printf(" YOU HAVE %d FLAKY %s\n\n", flaky_count, | |
| 205 flaky_count == 1 ? "TEST" : "TESTS"); | |
| 206 } | |
| 207 | |
| 208 #if defined(OS_MACOSX) | 161 #if defined(OS_MACOSX) |
| 209 // This MUST happen before Shutdown() since Shutdown() tears down | 162 // This MUST happen before Shutdown() since Shutdown() tears down |
| 210 // objects (such as NotificationService::current()) that Cocoa | 163 // objects (such as NotificationService::current()) that Cocoa |
| 211 // objects use to remove themselves as observers. | 164 // objects use to remove themselves as observers. |
| 212 scoped_pool.Recycle(); | 165 scoped_pool.Recycle(); |
| 213 #endif | 166 #endif |
| 214 | 167 |
| 215 Shutdown(); | 168 Shutdown(); |
| 216 | 169 |
| 217 return result; | 170 return result; |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 icu_util::Initialize(); | 242 icu_util::Initialize(); |
| 290 | 243 |
| 291 CatchMaybeTests(); | 244 CatchMaybeTests(); |
| 292 ResetCommandLine(); | 245 ResetCommandLine(); |
| 293 | 246 |
| 294 TestTimeouts::Initialize(); | 247 TestTimeouts::Initialize(); |
| 295 } | 248 } |
| 296 | 249 |
| 297 void TestSuite::Shutdown() { | 250 void TestSuite::Shutdown() { |
| 298 } | 251 } |
| OLD | NEW |