From bb4994d67bc6bd82b6f310e89ef54864ddc22297 Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Mon, 28 Mar 2022 21:55:25 +0200 Subject: [PATCH] run-tests: Port to LibMain --- Userland/Utilities/CMakeLists.txt | 2 +- Userland/Utilities/run-tests.cpp | 26 ++++++++++++++------------ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/Userland/Utilities/CMakeLists.txt b/Userland/Utilities/CMakeLists.txt index 3660433000..b28287470b 100644 --- a/Userland/Utilities/CMakeLists.txt +++ b/Userland/Utilities/CMakeLists.txt @@ -176,7 +176,7 @@ target_link_libraries(reboot LibMain) target_link_libraries(rev LibMain) target_link_libraries(rm LibMain) target_link_libraries(rmdir LibMain) -target_link_libraries(run-tests LibRegex LibCoredump) +target_link_libraries(run-tests LibRegex LibCoredump LibMain) target_link_libraries(shot LibGUI LibMain) target_link_libraries(shuf LibMain) target_link_libraries(shutdown LibMain) diff --git a/Userland/Utilities/run-tests.cpp b/Userland/Utilities/run-tests.cpp index 23f33a48b1..cb05648839 100644 --- a/Userland/Utilities/run-tests.cpp +++ b/Userland/Utilities/run-tests.cpp @@ -8,7 +8,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -289,18 +291,18 @@ FileResult TestRunner::run_test_file(const String& test_path) return FileResult { move(path_for_test), get_time_in_ms() - start_time, test_result, child_out_err_file, child_pid }; } -int main(int argc, char** argv) +ErrorOr serenity_main(Main::Arguments arguments) { - auto program_name = LexicalPath::basename(argv[0]); + auto program_name = LexicalPath::basename(arguments.strings[0]); #ifdef SIGINFO - signal(SIGINFO, [](int) { + TRY(Core::System::signal(SIGINFO, [](int) { static char buffer[4096]; auto& counts = ::Test::TestRunner::the()->counts(); int len = snprintf(buffer, sizeof(buffer), "Pass: %d, Fail: %d, Skip: %d\nCurrent test: %s\n", counts.tests_passed, counts.tests_failed, counts.tests_skipped, g_currently_running_test.characters()); write(STDOUT_FILENO, buffer, len); - }); + })); #endif bool print_progress = @@ -342,7 +344,7 @@ int main(int argc, char** argv) args_parser.add_option(exclude_pattern, "Regular expression to use to exclude paths from being considered tests", "exclude-pattern", 'e', "pattern"); args_parser.add_option(config_file, "Configuration file to use", "config-file", 'c', "filename"); args_parser.add_positional_argument(specified_test_root, "Tests root directory", "path", Core::ArgsParser::Required::No); - args_parser.parse(argc, argv); + args_parser.parse(arguments); test_glob = String::formatted("*{}*", test_glob); @@ -351,10 +353,10 @@ int main(int argc, char** argv) } // Make UBSAN deadly for all tests we run by default. - setenv("UBSAN_OPTIONS", "halt_on_error=1", true); + TRY(Core::System::setenv("UBSAN_OPTIONS", "halt_on_error=1", true)); if (!run_benchmarks) - setenv("TESTS_ONLY", "1", true); + TRY(Core::System::setenv("TESTS_ONLY", "1", true)); String test_root; @@ -370,16 +372,16 @@ int main(int argc, char** argv) test_root = Core::File::real_path_for(test_root); - if (chdir(test_root.characters()) < 0) { - auto saved_errno = errno; - warnln("chdir failed: {}", strerror(saved_errno)); - return 1; + auto void_or_error = Core::System::chdir(test_root); + if (void_or_error.is_error()) { + warnln("chdir failed: {}", void_or_error.error()); + return void_or_error.release_error(); } auto config_or_error = config_file.is_empty() ? Core::ConfigFile::open_for_app("Tests") : Core::ConfigFile::open(config_file); if (config_or_error.is_error()) { warnln("Failed to open configuration file ({}): {}", config_file.is_empty() ? "User config for Tests" : config_file.characters(), config_or_error.error()); - return 1; + return config_or_error.release_error(); } auto config = config_or_error.release_value();