| Index: chrome/test/browser/browser_test_runner.cc
|
| ===================================================================
|
| --- chrome/test/browser/browser_test_runner.cc (revision 25792)
|
| +++ chrome/test/browser/browser_test_runner.cc (working copy)
|
| @@ -1,133 +0,0 @@
|
| -// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/test/browser/browser_test_runner.h"
|
| -
|
| -#include <vector>
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/logging.h"
|
| -#include "base/process_util.h"
|
| -#include "base/scoped_ptr.h"
|
| -#include "base/string_util.h"
|
| -
|
| -namespace {
|
| -
|
| -const wchar_t* const kGTestListTestsFlag = L"gtest_list_tests";
|
| -const wchar_t* const kGTestRunDisabledTestsFlag =
|
| - L"gtest_also_run_disabled_tests";
|
| -
|
| -// Retrieves the list of tests to run by running gtest with the
|
| -// --gtest_list_tests flag in a forked process and parsing its output.
|
| -// |command_line| should contain the command line used to start the browser
|
| -// test launcher, it is expected that it does not contain the
|
| -// --gtest_list_tests flag already.
|
| -// Note: we cannot implement this in-process for InProcessBrowserTestRunner as
|
| -// GTest prints to the stdout and there are no good way of temporarily
|
| -// redirecting outputs.
|
| -bool GetTestList(const CommandLine& command_line,
|
| - std::vector<std::string>* test_list) {
|
| - DCHECK(!command_line.HasSwitch(kGTestListTestsFlag));
|
| -
|
| - // Run ourselves with the --gtest_list_tests option and read the output.
|
| - CommandLine new_command_line(command_line);
|
| - new_command_line.AppendSwitch(kGTestListTestsFlag);
|
| - std::string output;
|
| - if (!base::GetAppOutput(new_command_line, &output))
|
| - return false;
|
| -
|
| - // The output looks like:
|
| - // TestCase.
|
| - // Test1
|
| - // Test2
|
| - // OtherTestCase.
|
| - // FooTest
|
| - // ...
|
| - std::vector<std::string> lines;
|
| - SplitString(output, '\n', &lines);
|
| -
|
| - std::string test_case;
|
| - for (std::vector<std::string>::const_iterator iter = lines.begin();
|
| - iter != lines.end(); ++iter) {
|
| - std::string line = *iter;
|
| - if (line.empty())
|
| - continue; // Just ignore empty lines if any.
|
| -
|
| - if (line[line.size() - 1] == '.') {
|
| - // This is a new test case.
|
| - test_case = line;
|
| - continue;
|
| - }
|
| -
|
| - if (!command_line.HasSwitch(kGTestRunDisabledTestsFlag) &&
|
| - line.find("DISABLED") != std::string::npos)
|
| - continue; // Skip disabled tests.
|
| -
|
| - // We are dealing with a test.
|
| - test_list->push_back(test_case + line);
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace browser_tests {
|
| -
|
| -BrowserTestRunner::BrowserTestRunner() {
|
| -}
|
| -
|
| -BrowserTestRunner::~BrowserTestRunner() {
|
| -}
|
| -
|
| -bool RunTests(const BrowserTestRunnerFactory& browser_test_runner_factory) {
|
| - const CommandLine* command_line = CommandLine::ForCurrentProcess();
|
| -
|
| - DCHECK(!command_line->HasSwitch(kGTestListTestsFlag));
|
| -
|
| - // First let's get the list of tests we need to run.
|
| - std::vector<std::string> test_list;
|
| - if (!GetTestList(*command_line, &test_list)) {
|
| - printf("Failed to retrieve the tests to run.\n");
|
| - return false;
|
| - }
|
| -
|
| - if (test_list.empty()) {
|
| - printf("No tests to run.\n");
|
| - return false;
|
| - }
|
| -
|
| - int test_run_count = 0;
|
| - std::vector<std::string> failed_tests;
|
| - for (std::vector<std::string>::const_iterator iter = test_list.begin();
|
| - iter != test_list.end(); ++iter) {
|
| - std::string test_name = *iter;
|
| - scoped_ptr<BrowserTestRunner> test_runner(
|
| - browser_test_runner_factory.CreateBrowserTestRunner());
|
| - if (!test_runner.get() || !test_runner->Init())
|
| - return false;
|
| - test_run_count++;
|
| - if (!test_runner->RunTest(test_name.c_str())) {
|
| - if (std::find(failed_tests.begin(), failed_tests.end(), test_name) ==
|
| - failed_tests.end()) {
|
| - failed_tests.push_back(*iter);
|
| - }
|
| - }
|
| - }
|
| -
|
| - printf("%d test%s run\n", test_run_count, test_run_count > 1 ? "s" : "");
|
| - printf("%d test%s failed\n", static_cast<int>(failed_tests.size()),
|
| - failed_tests.size() > 1 ? "s" : "");
|
| - if (failed_tests.empty())
|
| - return true;
|
| -
|
| - printf("Failing tests:\n");
|
| - for (std::vector<std::string>::const_iterator iter = failed_tests.begin();
|
| - iter != failed_tests.end(); ++iter) {
|
| - printf("%s\n", iter->c_str());
|
| - }
|
| -
|
| - return false;
|
| -}
|
| -
|
| -} // namespace
|
|
|