Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: base/test/launcher/unit_test_launcher.cc

Issue 314173005: Revert of Convert installer_util_unittests, sbox_integration_tests, sbox_validation_tests, sbox_unittests to … (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/test/launcher/unit_test_launcher.h ('k') | base/test/test_suite.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/launcher/unit_test_launcher.h" 5 #include "base/test/launcher/unit_test_launcher.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 95
96 new_cmd_line.AppendSwitchPath(switches::kTestLauncherOutput, output_file); 96 new_cmd_line.AppendSwitchPath(switches::kTestLauncherOutput, output_file);
97 new_cmd_line.AppendSwitchASCII(kGTestFilterFlag, JoinString(test_names, ":")); 97 new_cmd_line.AppendSwitchASCII(kGTestFilterFlag, JoinString(test_names, ":"));
98 new_cmd_line.AppendSwitch(kSingleProcessTestsFlag); 98 new_cmd_line.AppendSwitch(kSingleProcessTestsFlag);
99 99
100 return new_cmd_line; 100 return new_cmd_line;
101 } 101 }
102 102
103 class UnitTestLauncherDelegate : public TestLauncherDelegate { 103 class UnitTestLauncherDelegate : public TestLauncherDelegate {
104 public: 104 public:
105 explicit UnitTestLauncherDelegate(size_t batch_limit, bool use_job_objects) 105 explicit UnitTestLauncherDelegate(size_t batch_limit)
106 : batch_limit_(batch_limit), 106 : batch_limit_(batch_limit) {
107 use_job_objects_(use_job_objects) {
108 } 107 }
109 108
110 virtual ~UnitTestLauncherDelegate() { 109 virtual ~UnitTestLauncherDelegate() {
111 DCHECK(thread_checker_.CalledOnValidThread()); 110 DCHECK(thread_checker_.CalledOnValidThread());
112 } 111 }
113 112
114 private: 113 private:
115 struct GTestCallbackState { 114 struct GTestCallbackState {
116 TestLauncher* test_launcher; 115 TestLauncher* test_launcher;
117 std::vector<std::string> test_names; 116 std::vector<std::string> test_names;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 179
181 GTestCallbackState callback_state; 180 GTestCallbackState callback_state;
182 callback_state.test_launcher = test_launcher; 181 callback_state.test_launcher = test_launcher;
183 callback_state.test_names = current_test_names; 182 callback_state.test_names = current_test_names;
184 callback_state.output_file = output_file; 183 callback_state.output_file = output_file;
185 184
186 test_launcher->LaunchChildGTestProcess( 185 test_launcher->LaunchChildGTestProcess(
187 cmd_line, 186 cmd_line,
188 std::string(), 187 std::string(),
189 TestTimeouts::test_launcher_timeout(), 188 TestTimeouts::test_launcher_timeout(),
190 use_job_objects_,
191 Bind(&UnitTestLauncherDelegate::SerialGTestCallback, 189 Bind(&UnitTestLauncherDelegate::SerialGTestCallback,
192 Unretained(this), 190 Unretained(this),
193 callback_state, 191 callback_state,
194 new_test_names)); 192 new_test_names));
195 } 193 }
196 194
197 void RunBatch(TestLauncher* test_launcher, 195 void RunBatch(TestLauncher* test_launcher,
198 const std::vector<std::string>& test_names) { 196 const std::vector<std::string>& test_names) {
199 DCHECK(thread_checker_.CalledOnValidThread()); 197 DCHECK(thread_checker_.CalledOnValidThread());
200 198
(...skipping 21 matching lines...) Expand all
222 220
223 GTestCallbackState callback_state; 221 GTestCallbackState callback_state;
224 callback_state.test_launcher = test_launcher; 222 callback_state.test_launcher = test_launcher;
225 callback_state.test_names = test_names; 223 callback_state.test_names = test_names;
226 callback_state.output_file = output_file; 224 callback_state.output_file = output_file;
227 225
228 test_launcher->LaunchChildGTestProcess( 226 test_launcher->LaunchChildGTestProcess(
229 cmd_line, 227 cmd_line,
230 std::string(), 228 std::string(),
231 timeout, 229 timeout,
232 use_job_objects_,
233 Bind(&UnitTestLauncherDelegate::GTestCallback, 230 Bind(&UnitTestLauncherDelegate::GTestCallback,
234 Unretained(this), 231 Unretained(this),
235 callback_state)); 232 callback_state));
236 } 233 }
237 234
238 void GTestCallback(const GTestCallbackState& callback_state, 235 void GTestCallback(const GTestCallbackState& callback_state,
239 int exit_code, 236 int exit_code,
240 const TimeDelta& elapsed_time, 237 const TimeDelta& elapsed_time,
241 bool was_timeout, 238 bool was_timeout,
242 const std::string& output) { 239 const std::string& output) {
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 } 429 }
433 } 430 }
434 431
435 return called_any_callback; 432 return called_any_callback;
436 } 433 }
437 434
438 ThreadChecker thread_checker_; 435 ThreadChecker thread_checker_;
439 436
440 // Maximum number of tests to run in a single batch. 437 // Maximum number of tests to run in a single batch.
441 size_t batch_limit_; 438 size_t batch_limit_;
442
443 // Determines whether we use job objects on Windows.
444 bool use_job_objects_;
445 }; 439 };
446 440
447 bool GetSwitchValueAsInt(const std::string& switch_name, int* result) { 441 bool GetSwitchValueAsInt(const std::string& switch_name, int* result) {
448 if (!CommandLine::ForCurrentProcess()->HasSwitch(switch_name)) 442 if (!CommandLine::ForCurrentProcess()->HasSwitch(switch_name))
449 return true; 443 return true;
450 444
451 std::string switch_value = 445 std::string switch_value =
452 CommandLine::ForCurrentProcess()->GetSwitchValueASCII(switch_name); 446 CommandLine::ForCurrentProcess()->GetSwitchValueASCII(switch_name);
453 if (!StringToInt(switch_value, result) || *result < 1) { 447 if (!StringToInt(switch_value, result) || *result < 1) {
454 LOG(ERROR) << "Invalid value for " << switch_name << ": " << switch_value; 448 LOG(ERROR) << "Invalid value for " << switch_name << ": " << switch_value;
455 return false; 449 return false;
456 } 450 }
457 451
458 return true; 452 return true;
459 } 453 }
460 454
461 int LaunchUnitTestsInternal(const RunTestSuiteCallback& run_test_suite, 455 int LaunchUnitTestsInternal(int argc,
462 int default_jobs, 456 char** argv,
463 bool use_job_objects, 457 const RunTestSuiteCallback& run_test_suite,
464 const Closure& gtest_init) { 458 int default_jobs) {
459 CommandLine::Init(argc, argv);
460
465 #if defined(OS_ANDROID) 461 #if defined(OS_ANDROID)
466 // We can't easily fork on Android, just run the test suite directly. 462 // We can't easily fork on Android, just run the test suite directly.
467 return run_test_suite.Run(); 463 return run_test_suite.Run();
468 #else 464 #else
469 bool force_single_process = false; 465 bool force_single_process = false;
470 if (CommandLine::ForCurrentProcess()->HasSwitch( 466 if (CommandLine::ForCurrentProcess()->HasSwitch(
471 switches::kTestLauncherDebugLauncher)) { 467 switches::kTestLauncherDebugLauncher)) {
472 fprintf(stdout, "Forcing test launcher debugging mode.\n"); 468 fprintf(stdout, "Forcing test launcher debugging mode.\n");
473 fflush(stdout); 469 fflush(stdout);
474 } else { 470 } else {
(...skipping 24 matching lines...) Expand all
499 } 495 }
500 #endif 496 #endif
501 497
502 if (CommandLine::ForCurrentProcess()->HasSwitch(kHelpFlag)) { 498 if (CommandLine::ForCurrentProcess()->HasSwitch(kHelpFlag)) {
503 PrintUsage(); 499 PrintUsage();
504 return 0; 500 return 0;
505 } 501 }
506 502
507 base::TimeTicks start_time(base::TimeTicks::Now()); 503 base::TimeTicks start_time(base::TimeTicks::Now());
508 504
509 gtest_init.Run(); 505 testing::InitGoogleTest(&argc, argv);
510 TestTimeouts::Initialize(); 506 TestTimeouts::Initialize();
511 507
512 int batch_limit = kDefaultTestBatchLimit; 508 int batch_limit = kDefaultTestBatchLimit;
513 if (!GetSwitchValueAsInt(switches::kTestLauncherBatchLimit, &batch_limit)) 509 if (!GetSwitchValueAsInt(switches::kTestLauncherBatchLimit, &batch_limit))
514 return 1; 510 return 1;
515 511
516 fprintf(stdout, 512 fprintf(stdout,
517 "IMPORTANT DEBUGGING NOTE: batches of tests are run inside their\n" 513 "IMPORTANT DEBUGGING NOTE: batches of tests are run inside their\n"
518 "own process. For debugging a test inside a debugger, use the\n" 514 "own process. For debugging a test inside a debugger, use the\n"
519 "--gtest_filter=<your_test_name> flag along with\n" 515 "--gtest_filter=<your_test_name> flag along with\n"
520 "--single-process-tests.\n"); 516 "--single-process-tests.\n");
521 fflush(stdout); 517 fflush(stdout);
522 518
523 MessageLoopForIO message_loop; 519 MessageLoopForIO message_loop;
524 520
525 UnitTestLauncherDelegate delegate(batch_limit, use_job_objects); 521 UnitTestLauncherDelegate delegate(batch_limit);
526 base::TestLauncher launcher(&delegate, default_jobs); 522 base::TestLauncher launcher(&delegate, default_jobs);
527 bool success = launcher.Run(); 523 bool success = launcher.Run(argc, argv);
528 524
529 fprintf(stdout, 525 fprintf(stdout,
530 "Tests took %" PRId64 " seconds.\n", 526 "Tests took %" PRId64 " seconds.\n",
531 (base::TimeTicks::Now() - start_time).InSeconds()); 527 (base::TimeTicks::Now() - start_time).InSeconds());
532 fflush(stdout); 528 fflush(stdout);
533 529
534 return (success ? 0 : 1); 530 return (success ? 0 : 1);
535 } 531 }
536 532
537 void InitGoogleTestChar(int* argc, char** argv) {
538 testing::InitGoogleTest(argc, argv);
539 }
540
541 #if defined(OS_WIN)
542 void InitGoogleTestWChar(int* argc, wchar_t** argv) {
543 testing::InitGoogleTest(argc, argv);
544 }
545 #endif // defined(OS_WIN)
546
547 } // namespace 533 } // namespace
548 534
549 int LaunchUnitTests(int argc, 535 int LaunchUnitTests(int argc,
550 char** argv, 536 char** argv,
551 const RunTestSuiteCallback& run_test_suite) { 537 const RunTestSuiteCallback& run_test_suite) {
552 CommandLine::Init(argc, argv);
553 return LaunchUnitTestsInternal( 538 return LaunchUnitTestsInternal(
554 run_test_suite, 539 argc, argv, run_test_suite, SysInfo::NumberOfProcessors());
555 SysInfo::NumberOfProcessors(),
556 true,
557 Bind(&InitGoogleTestChar, &argc, argv));
558 } 540 }
559 541
560 int LaunchUnitTestsSerially(int argc, 542 int LaunchUnitTestsSerially(int argc,
561 char** argv, 543 char** argv,
562 const RunTestSuiteCallback& run_test_suite) { 544 const RunTestSuiteCallback& run_test_suite) {
563 CommandLine::Init(argc, argv); 545 return LaunchUnitTestsInternal(argc, argv, run_test_suite, 1);
564 return LaunchUnitTestsInternal(
565 run_test_suite,
566 1,
567 true,
568 Bind(&InitGoogleTestChar, &argc, argv));
569 } 546 }
570 547
571 #if defined(OS_WIN)
572 int LaunchUnitTests(int argc,
573 wchar_t** argv,
574 bool use_job_objects,
575 const RunTestSuiteCallback& run_test_suite) {
576 // Windows CommandLine::Init ignores argv anyway.
577 CommandLine::Init(argc, NULL);
578 return LaunchUnitTestsInternal(
579 run_test_suite,
580 SysInfo::NumberOfProcessors(),
581 use_job_objects,
582 Bind(&InitGoogleTestWChar, &argc, argv));
583 }
584 #endif // defined(OS_WIN)
585
586 } // namespace base 548 } // namespace base
OLDNEW
« no previous file with comments | « base/test/launcher/unit_test_launcher.h ('k') | base/test/test_suite.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698