diff options
Diffstat (limited to 'libc/test/UnitTest/LibcTestMain.cpp')
-rw-r--r-- | libc/test/UnitTest/LibcTestMain.cpp | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/libc/test/UnitTest/LibcTestMain.cpp b/libc/test/UnitTest/LibcTestMain.cpp index bf1a921..94536e9 100644 --- a/libc/test/UnitTest/LibcTestMain.cpp +++ b/libc/test/UnitTest/LibcTestMain.cpp @@ -7,16 +7,46 @@ //===----------------------------------------------------------------------===// #include "LibcTest.h" +#include "src/__support/CPP/string_view.h" -static const char *getTestFilter(int argc, char *argv[]) { - return argc > 1 ? argv[1] : nullptr; +using LIBC_NAMESPACE::cpp::string_view; +using LIBC_NAMESPACE::testing::TestOptions; + +namespace { + +// A poor-man's getopt_long. +// Run unit tests with --gtest_color=no to disable printing colors, or +// --gtest_print_time to print timings in milliseconds only (as GTest does, so +// external tools such as Android's atest may expect that format to parse the +// output). Other command line flags starting with --gtest_ are ignored. +// Otherwise, the last command line arg is used as a test filter, if command +// line args are specified. +TestOptions parseOptions(int argc, char **argv) { + TestOptions Options; + + for (int i = 1; i < argc; ++i) { + string_view arg{argv[i]}; + + if (arg == "--gtest_color=no") + Options.PrintColor = false; + else if (arg == "--gtest_print_time") + Options.TimeInMs = true; + // Ignore other unsupported gtest specific flags. + else if (arg.starts_with("--gtest_")) + continue; + else + Options.TestFilter = argv[i]; + } + + return Options; } +} // anonymous namespace + extern "C" int main(int argc, char **argv, char **envp) { LIBC_NAMESPACE::testing::argc = argc; LIBC_NAMESPACE::testing::argv = argv; LIBC_NAMESPACE::testing::envp = envp; - const char *TestFilter = getTestFilter(argc, argv); - return LIBC_NAMESPACE::testing::Test::runTests(TestFilter); + return LIBC_NAMESPACE::testing::Test::runTests(parseOptions(argc, argv)); } |