|  | // Copyright 2013 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 "base/test/launcher/unit_test_launcher.h" | 
|  |  | 
|  | #include "base/command_line.h" | 
|  | #include "base/files/file_path.h" | 
|  | #include "base/files/file_util.h" | 
|  | #include "base/logging.h" | 
|  | #include "base/mac/foundation_util.h" | 
|  | #include "base/test/gtest_util.h" | 
|  | #include "base/test/test_switches.h" | 
|  |  | 
|  | namespace base { | 
|  |  | 
|  | int LaunchUnitTests(int argc, | 
|  | char** argv, | 
|  | RunTestSuiteCallback run_test_suite) { | 
|  | CHECK(CommandLine::InitializedForCurrentProcess() || | 
|  | CommandLine::Init(argc, argv)); | 
|  | const CommandLine* command_line = CommandLine::ForCurrentProcess(); | 
|  | if (command_line->HasSwitch(switches::kTestLauncherListTests)) { | 
|  | FilePath list_path(command_line->GetSwitchValuePath( | 
|  | switches::kTestLauncherListTests)); | 
|  | if (WriteCompiledInTestsToFile(list_path)) { | 
|  | return 0; | 
|  | } else { | 
|  | LOG(ERROR) << "Failed to write list of tests."; | 
|  | return 1; | 
|  | } | 
|  | } else if (command_line->HasSwitch( | 
|  | switches::kTestLauncherPrintWritablePath)) { | 
|  | fprintf(stdout, "%s", mac::GetUserLibraryPath().value().c_str()); | 
|  | fflush(stdout); | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | return std::move(run_test_suite).Run(); | 
|  | } | 
|  |  | 
|  | }  // namespace base |