97 lines
2.4 KiB
C++
97 lines
2.4 KiB
C++
#include <test/test.hpp>
|
|
|
|
using namespace ::lt::test;
|
|
using namespace ::lt::test::details;
|
|
|
|
void parse_option(std::string_view argument, Registry::Options &options)
|
|
{
|
|
constexpr auto case_str = std::string_view { "--case=" };
|
|
constexpr auto suite_str = std::string_view { "--suite=" };
|
|
|
|
if (argument == "--stop-on-fail")
|
|
{
|
|
options.stop_on_fail = true;
|
|
return;
|
|
}
|
|
|
|
if (argument.starts_with("--mode=") && argument.substr(7ul) == "stats")
|
|
{
|
|
options.execution_policy = Registry::ExecutionPolicy::stats;
|
|
return;
|
|
}
|
|
|
|
if (argument.starts_with(suite_str) && argument.length() > suite_str.size())
|
|
{
|
|
options.suite_regex = argument.substr(suite_str.length());
|
|
std::println("SUITE REGEX: {}", options.suite_regex);
|
|
return;
|
|
}
|
|
|
|
if (argument.starts_with(case_str) && argument.length() > case_str.size())
|
|
{
|
|
options.case_regex = argument.substr(case_str.length());
|
|
std::println("CASE REGEX: {}", options.case_regex);
|
|
return;
|
|
}
|
|
|
|
throw std::invalid_argument { std::format("Invalid argument: {}", argument) };
|
|
}
|
|
|
|
void print_help()
|
|
{
|
|
std::println("Options: ");
|
|
std::println("--stop-on-fail --> Stops executing the remaining tests on first failure");
|
|
std::println("--suite --> Regex for running specific suite(s)");
|
|
std::println("--case --> Regex for running specific test(s)");
|
|
std::println("--mode=stats --> Executes tests with an alternative policy");
|
|
std::println("\t---> stats: Print statistics about the tests without running any");
|
|
std::println("--help | -h --> ~You just used it! :D");
|
|
}
|
|
|
|
auto main(int32_t argc, char **argv) -> int32_t
|
|
try
|
|
{
|
|
auto raw_arguments = std::span<char *>(argv, argc);
|
|
|
|
auto options = Registry::Options {};
|
|
for (auto idx = 0; auto &raw_argument : raw_arguments)
|
|
{
|
|
// First argument is the "cwd'
|
|
if (idx++ == 0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
auto argument = std::string_view(raw_argument);
|
|
|
|
if (argument == "-h" || argument == "--help")
|
|
{
|
|
print_help();
|
|
return 0;
|
|
}
|
|
|
|
if (argument.starts_with("--") || argument.starts_with("-"))
|
|
{
|
|
parse_option(argument, options);
|
|
}
|
|
else
|
|
{
|
|
throw std::invalid_argument { std::format("Invalid argument: {}", argument) };
|
|
}
|
|
}
|
|
|
|
return static_cast<int32_t>(Registry::run_all(options));
|
|
}
|
|
catch (const std::exception &exp)
|
|
{
|
|
std::println("Terminated due to uncaught exception:");
|
|
std::println("\twhat: {}", exp.what());
|
|
|
|
return EXIT_FAILURE;
|
|
}
|
|
catch (...)
|
|
{
|
|
std::println("Terminated due to uncaught non-std exception!");
|
|
|
|
return EXIT_FAILURE;
|
|
}
|