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

Side by Side Diff: content/public/test/test_launcher.cc

Issue 10855231: Make content_browsertests support restarts across a test. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Allow _CRASH suffix Created 8 years, 4 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 | « content/public/test/test_launcher.h ('k') | content/shell/shell_browser_context.cc » ('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 (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 "content/public/test/test_launcher.h" 5 #include "content/public/test/test_launcher.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 // profile. i.e. Foo.PRE_Test runs and then Foo.Test. This allows writing tests 54 // profile. i.e. Foo.PRE_Test runs and then Foo.Test. This allows writing tests
55 // that span browser restarts. 55 // that span browser restarts.
56 const char kPreTestPrefix[] = "PRE_"; 56 const char kPreTestPrefix[] = "PRE_";
57 57
58 // Manual tests only run when --run-manual is specified. This allows writing 58 // Manual tests only run when --run-manual is specified. This allows writing
59 // tests that don't run automatically but are still in the same test binary. 59 // tests that don't run automatically but are still in the same test binary.
60 // This is useful so that a team that wants to run a few tests doesn't have to 60 // This is useful so that a team that wants to run a few tests doesn't have to
61 // add a new binary that must be compiled on all builds. 61 // add a new binary that must be compiled on all builds.
62 const char kManualTestPrefix[] = "MANUAL_"; 62 const char kManualTestPrefix[] = "MANUAL_";
63 63
64 // Tests with this suffix are expected to crash, so it won't count as a failure.
65 // A test that uses this must have a PRE_ prefix.
66 const char kCrashTestSuffix[] = "_CRASH";
67
64 TestLauncherDelegate* g_launcher_delegate; 68 TestLauncherDelegate* g_launcher_delegate;
65 } 69 }
66 70
67 // The environment variable name for the total number of test shards. 71 // The environment variable name for the total number of test shards.
68 const char kTestTotalShards[] = "GTEST_TOTAL_SHARDS"; 72 const char kTestTotalShards[] = "GTEST_TOTAL_SHARDS";
69 // The environment variable name for the test shard index. 73 // The environment variable name for the test shard index.
70 const char kTestShardIndex[] = "GTEST_SHARD_INDEX"; 74 const char kTestShardIndex[] = "GTEST_SHARD_INDEX";
71 75
72 // The default output file for XML output. 76 // The default output file for XML output.
73 const FilePath::CharType kDefaultOutputFile[] = FILE_PATH_LITERAL( 77 const FilePath::CharType kDefaultOutputFile[] = FILE_PATH_LITERAL(
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 std::string replace_string = std::string(".") + kPreTestPrefix; 328 std::string replace_string = std::string(".") + kPreTestPrefix;
325 ReplaceFirstSubstringAfterOffset(&pre_test_name, 0, ".", replace_string); 329 ReplaceFirstSubstringAfterOffset(&pre_test_name, 0, ".", replace_string);
326 for (int i = 0; i < test_case->total_test_count(); ++i) { 330 for (int i = 0; i < test_case->total_test_count(); ++i) {
327 const testing::TestInfo* test_info = test_case->GetTestInfo(i); 331 const testing::TestInfo* test_info = test_case->GetTestInfo(i);
328 std::string cur_test_name = test_info->test_case_name(); 332 std::string cur_test_name = test_info->test_case_name();
329 cur_test_name.append("."); 333 cur_test_name.append(".");
330 cur_test_name.append(test_info->name()); 334 cur_test_name.append(test_info->name());
331 if (cur_test_name == pre_test_name) { 335 if (cur_test_name == pre_test_name) {
332 int exit_code = RunTestInternal(test_case, pre_test_name, command_line, 336 int exit_code = RunTestInternal(test_case, pre_test_name, command_line,
333 default_timeout, was_timeout); 337 default_timeout, was_timeout);
334 if (exit_code != 0) 338 if (exit_code != 0 &&
339 !EndsWith(pre_test_name, kCrashTestSuffix, true)) {
335 return exit_code; 340 return exit_code;
341 }
336 } 342 }
337 } 343 }
338 } 344 }
339 345
340 CommandLine new_cmd_line(*command_line); 346 CommandLine new_cmd_line(*command_line);
341 347
342 // Always enable disabled tests. This method is not called with disabled 348 // Always enable disabled tests. This method is not called with disabled
343 // tests unless this flag was specified to the browser test executable. 349 // tests unless this flag was specified to the browser test executable.
344 new_cmd_line.AppendSwitch("gtest_also_run_disabled_tests"); 350 new_cmd_line.AppendSwitch("gtest_also_run_disabled_tests");
345 new_cmd_line.AppendSwitchASCII("gtest_filter", test_name); 351 new_cmd_line.AppendSwitchASCII("gtest_filter", test_name);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 439
434 for (CommandLine::SwitchMap::const_iterator iter = switches.begin(); 440 for (CommandLine::SwitchMap::const_iterator iter = switches.begin();
435 iter != switches.end(); ++iter) { 441 iter != switches.end(); ++iter) {
436 new_cmd_line.AppendSwitchNative((*iter).first, (*iter).second); 442 new_cmd_line.AppendSwitchNative((*iter).first, (*iter).second);
437 } 443 }
438 444
439 // Do not let the child ignore failures. We need to propagate the 445 // Do not let the child ignore failures. We need to propagate the
440 // failure status back to the parent. 446 // failure status back to the parent.
441 new_cmd_line.AppendSwitch(base::TestSuite::kStrictFailureHandling); 447 new_cmd_line.AppendSwitch(base::TestSuite::kStrictFailureHandling);
442 448
443 if (!launcher_delegate->AdjustChildProcessCommandLine(&new_cmd_line)) 449 ScopedTempDir temp_dir;
450 // Create a new data dir and pass it to the child.
451 if (!temp_dir.CreateUniqueTempDir() || !temp_dir.IsValid()) {
452 LOG(ERROR) << "Error creating temp data directory";
444 return -1; 453 return -1;
454 }
455
456 if (!launcher_delegate->AdjustChildProcessCommandLine(&new_cmd_line,
457 temp_dir.path())) {
458 return -1;
459 }
445 460
446 return RunTestInternal( 461 return RunTestInternal(
447 test_case, test_name, &new_cmd_line, default_timeout, was_timeout); 462 test_case, test_name, &new_cmd_line, default_timeout, was_timeout);
448 } 463 }
449 464
450 bool RunTests(TestLauncherDelegate* launcher_delegate, 465 bool RunTests(TestLauncherDelegate* launcher_delegate,
451 bool should_shard, 466 bool should_shard,
452 int total_shards, 467 int total_shards,
453 int shard_index) { 468 int shard_index) {
454 const CommandLine* command_line = CommandLine::ForCurrentProcess(); 469 const CommandLine* command_line = CommandLine::ForCurrentProcess();
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 cycles--; 743 cycles--;
729 } 744 }
730 return exit_code; 745 return exit_code;
731 } 746 }
732 747
733 TestLauncherDelegate* GetCurrentTestLauncherDelegate() { 748 TestLauncherDelegate* GetCurrentTestLauncherDelegate() {
734 return g_launcher_delegate; 749 return g_launcher_delegate;
735 } 750 }
736 751
737 } // namespace test_launcher 752 } // namespace test_launcher
OLDNEW
« no previous file with comments | « content/public/test/test_launcher.h ('k') | content/shell/shell_browser_context.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698