| /* | |
| * 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); | |
| } |