/* * 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 #include #include #include #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 ReplaceDashesWithUnderscores(int argc, char* argv[]) { std::vector 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 VectorOfStringsToVectorOfPointers( std::vector& input) { std::vector 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 new_argv = ReplaceDashesWithUnderscores(argc, argv); std::vector 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 main = webrtc::TestMain::Create(); int err_code = main->Init(); if (err_code != 0) { return err_code; } return main->Run(argc, argv); }