|  | /* | 
|  | *  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 <algorithm> | 
|  | #include <cstddef> | 
|  | #include <memory> | 
|  | #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); | 
|  | } |