| /* | 
 |  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 
 |  * | 
 |  *  Use of this source code is governed by a BSD-style license | 
 |  *  that can be found in the LICENSE file in the root of the source | 
 |  *  tree. An additional intellectual property rights grant can be found | 
 |  *  in the file PATENTS.  All contributing project authors may | 
 |  *  be found in the AUTHORS file in the root of the source tree. | 
 |  */ | 
 |  | 
 | #include <memory> | 
 | #include <regex> | 
 | #include <string> | 
 | #include <vector> | 
 |  | 
 | #include "absl/debugging/failure_signal_handler.h" | 
 | #include "absl/debugging/symbolize.h" | 
 | #include "absl/flags/parse.h" | 
 | #include "test/gmock.h" | 
 | #include "test/test_main_lib.h" | 
 |  | 
 | namespace { | 
 |  | 
 | std::vector<std::string> ReplaceDashesWithUnderscores(int argc, char* argv[]) { | 
 |   std::vector<std::string> args(argv, argv + argc); | 
 |   for (std::string& arg : args) { | 
 |     // Only replace arguments that starts with a dash. | 
 |     if (!arg.empty() && arg[0] == '-') { | 
 |       // Don't replace the 2 first characters. | 
 |       auto begin = arg.begin() + 2; | 
 |       // Replace dashes on the left of '=' or on all the arg if no '=' is found. | 
 |       auto end = std::find(arg.begin(), arg.end(), '='); | 
 |       std::replace(begin, end, '-', '_'); | 
 |     } | 
 |   } | 
 |   return args; | 
 | } | 
 |  | 
 | std::vector<char*> VectorOfStringsToVectorOfPointers( | 
 |     std::vector<std::string>& input) { | 
 |   std::vector<char*> output(input.size()); | 
 |   for (size_t i = 0; i < input.size(); ++i) { | 
 |     output[i] = &(input[i][0]); | 
 |   } | 
 |   return output; | 
 | } | 
 |  | 
 | }  // namespace | 
 |  | 
 | int main(int argc, char* argv[]) { | 
 |   // Initialize the symbolizer to get a human-readable stack trace | 
 |   absl::InitializeSymbolizer(argv[0]); | 
 |   testing::InitGoogleMock(&argc, argv); | 
 |   // Before parsing the arguments with the absl flag library, any internal '-' | 
 |   // characters will be converted to '_' characters to make sure the string is a | 
 |   // valid attribute name. | 
 |   std::vector<std::string> new_argv = ReplaceDashesWithUnderscores(argc, argv); | 
 |   std::vector<char*> raw_new_argv = VectorOfStringsToVectorOfPointers(new_argv); | 
 |   absl::ParseCommandLine(argc, &raw_new_argv[0]); | 
 |  | 
 | // This absl handler use unsupported features/instructions on Fuchsia | 
 | #if !defined(WEBRTC_FUCHSIA) | 
 |   absl::FailureSignalHandlerOptions options; | 
 |   absl::InstallFailureSignalHandler(options); | 
 | #endif | 
 |  | 
 |   std::unique_ptr<webrtc::TestMain> main = webrtc::TestMain::Create(); | 
 |   int err_code = main->Init(); | 
 |   if (err_code != 0) { | 
 |     return err_code; | 
 |   } | 
 |   return main->Run(argc, argv); | 
 | } |