Chromium Code Reviews| 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 #include "base/test/test_launcher.h" | 5 #include "base/test/test_launcher.h" |
| 6 | 6 |
| 7 #include "base/at_exit.h" | 7 #include "base/at_exit.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/environment.h" | 10 #include "base/environment.h" |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 114 // detailed failure messages either. | 114 // detailed failure messages either. |
| 115 class ResultsPrinter { | 115 class ResultsPrinter { |
| 116 public: | 116 public: |
| 117 ResultsPrinter(const CommandLine& command_line, | 117 ResultsPrinter(const CommandLine& command_line, |
| 118 const RunTestsCallback& callback); | 118 const RunTestsCallback& callback); |
| 119 ~ResultsPrinter(); | 119 ~ResultsPrinter(); |
| 120 | 120 |
| 121 // Called when test named |name| is scheduled to be started. | 121 // Called when test named |name| is scheduled to be started. |
| 122 void OnTestStarted(const std::string& name); | 122 void OnTestStarted(const std::string& name); |
| 123 | 123 |
| 124 // Called when all tests that were to be started have been scheduled | |
| 125 // to be started. | |
| 126 void OnAllTestsStarted(); | |
| 127 | |
| 124 // Adds |result| to the stored test results. | 128 // Adds |result| to the stored test results. |
| 125 void AddTestResult(const TestResult& result); | 129 void AddTestResult(const TestResult& result); |
| 126 | 130 |
| 127 private: | 131 private: |
| 128 // Prints a list of tests that finished with |status|. | 132 // Prints a list of tests that finished with |status|. |
| 129 void PrintTestsByStatus(TestResult::Status status, | 133 void PrintTestsByStatus(TestResult::Status status, |
| 130 const std::string& description); | 134 const std::string& description); |
| 131 | 135 |
| 132 // Test results grouped by test case name. | 136 // Test results grouped by test case name. |
| 133 typedef std::map<std::string, std::vector<TestResult> > ResultsMap; | 137 typedef std::map<std::string, std::vector<TestResult> > ResultsMap; |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 221 } | 225 } |
| 222 fprintf(out_, "</testsuites>\n"); | 226 fprintf(out_, "</testsuites>\n"); |
| 223 fclose(out_); | 227 fclose(out_); |
| 224 } | 228 } |
| 225 | 229 |
| 226 void ResultsPrinter::OnTestStarted(const std::string& name) { | 230 void ResultsPrinter::OnTestStarted(const std::string& name) { |
| 227 DCHECK(thread_checker_.CalledOnValidThread()); | 231 DCHECK(thread_checker_.CalledOnValidThread()); |
| 228 ++test_started_count_; | 232 ++test_started_count_; |
| 229 } | 233 } |
| 230 | 234 |
| 235 void ResultsPrinter::OnAllTestsStarted() { | |
| 236 if (test_started_count_ == 0) { | |
| 237 fprintf(stdout, "0 tests run\n"); | |
|
Ken Russell (switch to Gerrit)
2013/09/04 18:00:30
Did you mean to leave this printf in here?
Paweł Hajdan Jr.
2013/09/04 18:02:30
Yes - it corresponds to "x tests run" below and ex
| |
| 238 fflush(stdout); | |
| 239 | |
| 240 // No tests have actually been started, so fire the callback | |
| 241 // to avoid a hang. | |
| 242 callback_.Run(true); | |
| 243 delete this; | |
| 244 } | |
| 245 } | |
| 246 | |
| 231 void ResultsPrinter::AddTestResult(const TestResult& result) { | 247 void ResultsPrinter::AddTestResult(const TestResult& result) { |
| 232 DCHECK(thread_checker_.CalledOnValidThread()); | 248 DCHECK(thread_checker_.CalledOnValidThread()); |
| 233 | 249 |
| 234 ++test_run_count_; | 250 ++test_run_count_; |
| 235 results_[result.test_case_name].push_back(result); | 251 results_[result.test_case_name].push_back(result); |
| 236 | 252 |
| 237 // TODO(phajdan.jr): Align counter (padding). | 253 // TODO(phajdan.jr): Align counter (padding). |
| 238 std::string status_line(StringPrintf("[%" PRIuS "/%" PRIuS "] %s ", | 254 std::string status_line(StringPrintf("[%" PRIuS "/%" PRIuS "] %s ", |
| 239 test_run_count_, | 255 test_run_count_, |
| 240 test_started_count_, | 256 test_started_count_, |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 398 test_case, | 414 test_case, |
| 399 test_info, | 415 test_info, |
| 400 Bind(&ResultsPrinter::AddTestResult, Unretained(printer)))); | 416 Bind(&ResultsPrinter::AddTestResult, Unretained(printer)))); |
| 401 } | 417 } |
| 402 } | 418 } |
| 403 | 419 |
| 404 MessageLoop::current()->PostTask( | 420 MessageLoop::current()->PostTask( |
| 405 FROM_HERE, | 421 FROM_HERE, |
| 406 Bind(&TestLauncherDelegate::RunRemainingTests, | 422 Bind(&TestLauncherDelegate::RunRemainingTests, |
| 407 Unretained(launcher_delegate))); | 423 Unretained(launcher_delegate))); |
| 424 | |
| 425 MessageLoop::current()->PostTask( | |
| 426 FROM_HERE, | |
| 427 Bind(&ResultsPrinter::OnAllTestsStarted, Unretained(printer))); | |
| 408 } | 428 } |
| 409 | 429 |
| 410 void RunTestIteration(TestLauncherDelegate* launcher_delegate, | 430 void RunTestIteration(TestLauncherDelegate* launcher_delegate, |
| 411 int32 total_shards, | 431 int32 total_shards, |
| 412 int32 shard_index, | 432 int32 shard_index, |
| 413 int cycles, | 433 int cycles, |
| 414 int* exit_code, | 434 int* exit_code, |
| 415 bool run_tests_success) { | 435 bool run_tests_success) { |
| 416 if (!run_tests_success) { | 436 if (!run_tests_success) { |
| 417 *exit_code = 1; | 437 *exit_code = 1; |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 566 cycles, | 586 cycles, |
| 567 &exit_code, | 587 &exit_code, |
| 568 true)); | 588 true)); |
| 569 | 589 |
| 570 MessageLoop::current()->Run(); | 590 MessageLoop::current()->Run(); |
| 571 | 591 |
| 572 return exit_code; | 592 return exit_code; |
| 573 } | 593 } |
| 574 | 594 |
| 575 } // namespace base | 595 } // namespace base |
| OLD | NEW |