mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-08 11:59:48 -04:00
refactor: simplify calling *_main() from tests even more
This commit is contained in:
parent
c5c7b633c8
commit
7b2029674d
@ -26,6 +26,7 @@
|
||||
#include <filesystem>
|
||||
#include <span>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
|
||||
#include "dwarfs/types.h"
|
||||
|
||||
@ -49,7 +50,10 @@ inline std::string u8string_to_string(std::u8string const& in) {
|
||||
std::string sys_string_to_string(sys_string const& in);
|
||||
sys_string string_to_sys_string(std::string const& in);
|
||||
|
||||
int call_sys_main_iolayer(std::span<char const*> args, iolayer const& iol,
|
||||
int call_sys_main_iolayer(std::span<std::string_view> args, iolayer const& iol,
|
||||
int (*main)(int, sys_char**, iolayer const&));
|
||||
|
||||
int call_sys_main_iolayer(std::span<std::string> args, iolayer const& iol,
|
||||
int (*main)(int, sys_char**, iolayer const&));
|
||||
|
||||
size_t utf8_display_width(char const* p, size_t len);
|
||||
|
@ -23,6 +23,8 @@
|
||||
|
||||
#include <iosfwd>
|
||||
#include <span>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
|
||||
#include "dwarfs/types.h"
|
||||
|
||||
@ -36,23 +38,28 @@ namespace dwarfs {
|
||||
|
||||
struct iolayer;
|
||||
|
||||
int mkdwarfs_main(std::span<char const*> args, iolayer const& iol);
|
||||
int mkdwarfs_main(std::span<std::string> args, iolayer const& iol);
|
||||
int mkdwarfs_main(std::span<std::string_view> args, iolayer const& iol);
|
||||
int mkdwarfs_main(int argc, sys_char** argv, iolayer const& iol);
|
||||
int mkdwarfs_main(int argc, sys_char** argv);
|
||||
|
||||
int dwarfsck_main(std::span<char const*> args, iolayer const& iol);
|
||||
int dwarfsck_main(std::span<std::string> args, iolayer const& iol);
|
||||
int dwarfsck_main(std::span<std::string_view> args, iolayer const& iol);
|
||||
int dwarfsck_main(int argc, sys_char** argv, iolayer const& iol);
|
||||
int dwarfsck_main(int argc, sys_char** argv);
|
||||
|
||||
int dwarfsextract_main(std::span<char const*> args, iolayer const& iol);
|
||||
int dwarfsextract_main(std::span<std::string> args, iolayer const& iol);
|
||||
int dwarfsextract_main(std::span<std::string_view> args, iolayer const& iol);
|
||||
int dwarfsextract_main(int argc, sys_char** argv, iolayer const& iol);
|
||||
int dwarfsextract_main(int argc, sys_char** argv);
|
||||
|
||||
int dwarfsbench_main(std::span<char const*> args, iolayer const& iol);
|
||||
int dwarfsbench_main(std::span<std::string> args, iolayer const& iol);
|
||||
int dwarfsbench_main(std::span<std::string_view> args, iolayer const& iol);
|
||||
int dwarfsbench_main(int argc, sys_char** argv, iolayer const& iol);
|
||||
int dwarfsbench_main(int argc, sys_char** argv);
|
||||
|
||||
int dwarfs_main(std::span<char const*> args, iolayer const& iol);
|
||||
int dwarfs_main(std::span<std::string> args, iolayer const& iol);
|
||||
int dwarfs_main(std::span<std::string_view> args, iolayer const& iol);
|
||||
int dwarfs_main(int argc, sys_char** argv, iolayer const& iol);
|
||||
int dwarfs_main(int argc, sys_char** argv);
|
||||
|
||||
|
@ -47,6 +47,21 @@ inline std::string trimmed(std::string in) {
|
||||
}
|
||||
return in;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
int call_sys_main_iolayer_impl(std::span<T> args, iolayer const& iol,
|
||||
int (*main)(int, sys_char**, iolayer const&)) {
|
||||
std::vector<sys_string> argv;
|
||||
std::vector<sys_char*> argv_ptrs;
|
||||
argv.reserve(args.size());
|
||||
argv_ptrs.reserve(args.size());
|
||||
for (auto const& arg : args) {
|
||||
argv.emplace_back(string_to_sys_string(std::string(arg)));
|
||||
argv_ptrs.emplace_back(argv.back().data());
|
||||
}
|
||||
return main(argv_ptrs.size(), argv_ptrs.data(), iol);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
std::string size_with_unit(size_t size) {
|
||||
@ -148,17 +163,14 @@ sys_string string_to_sys_string(std::string const& in) {
|
||||
#endif
|
||||
}
|
||||
|
||||
int call_sys_main_iolayer(std::span<char const*> args, iolayer const& iol,
|
||||
int call_sys_main_iolayer(std::span<std::string_view> args, iolayer const& iol,
|
||||
int (*main)(int, sys_char**, iolayer const&)) {
|
||||
std::vector<sys_string> argv;
|
||||
std::vector<sys_char*> argv_ptrs;
|
||||
argv.reserve(args.size());
|
||||
argv_ptrs.reserve(args.size());
|
||||
for (auto const& arg : args) {
|
||||
argv.emplace_back(string_to_sys_string(arg));
|
||||
argv_ptrs.emplace_back(argv.back().data());
|
||||
}
|
||||
return main(argv_ptrs.size(), argv_ptrs.data(), iol);
|
||||
return call_sys_main_iolayer_impl(args, iol, main);
|
||||
}
|
||||
|
||||
int call_sys_main_iolayer(std::span<std::string> args, iolayer const& iol,
|
||||
int (*main)(int, sys_char**, iolayer const&)) {
|
||||
return call_sys_main_iolayer_impl(args, iol, main);
|
||||
}
|
||||
|
||||
size_t utf8_display_width(char const* p, size_t len) {
|
||||
|
@ -1389,7 +1389,11 @@ int dwarfs_main(int argc, sys_char** argv) {
|
||||
return dwarfs_main(argc, argv, iolayer::system_default());
|
||||
}
|
||||
|
||||
int dwarfs_main(std::span<char const*> args, iolayer const& iol) {
|
||||
int dwarfs_main(std::span<std::string> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, dwarfs_main);
|
||||
}
|
||||
|
||||
int dwarfs_main(std::span<std::string_view> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, dwarfs_main);
|
||||
}
|
||||
|
||||
|
@ -141,7 +141,11 @@ int dwarfsbench_main(int argc, sys_char** argv) {
|
||||
return dwarfsbench_main(argc, argv, iolayer::system_default());
|
||||
}
|
||||
|
||||
int dwarfsbench_main(std::span<char const*> args, iolayer const& iol) {
|
||||
int dwarfsbench_main(std::span<std::string> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, dwarfsbench_main);
|
||||
}
|
||||
|
||||
int dwarfsbench_main(std::span<std::string_view> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, dwarfsbench_main);
|
||||
}
|
||||
|
||||
|
@ -208,7 +208,11 @@ int dwarfsck_main(int argc, sys_char** argv) {
|
||||
return dwarfsck_main(argc, argv, iolayer::system_default());
|
||||
}
|
||||
|
||||
int dwarfsck_main(std::span<char const*> args, iolayer const& iol) {
|
||||
int dwarfsck_main(std::span<std::string> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, dwarfsck_main);
|
||||
}
|
||||
|
||||
int dwarfsck_main(std::span<std::string_view> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, dwarfsck_main);
|
||||
}
|
||||
|
||||
|
@ -201,7 +201,11 @@ int dwarfsextract_main(int argc, sys_char** argv) {
|
||||
return dwarfsextract_main(argc, argv, iolayer::system_default());
|
||||
}
|
||||
|
||||
int dwarfsextract_main(std::span<char const*> args, iolayer const& iol) {
|
||||
int dwarfsextract_main(std::span<std::string> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, dwarfsextract_main);
|
||||
}
|
||||
|
||||
int dwarfsextract_main(std::span<std::string_view> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, dwarfsextract_main);
|
||||
}
|
||||
|
||||
|
@ -1289,7 +1289,11 @@ int mkdwarfs_main(int argc, sys_char** argv) {
|
||||
return mkdwarfs_main(argc, argv, iolayer::system_default());
|
||||
}
|
||||
|
||||
int mkdwarfs_main(std::span<char const*> args, iolayer const& iol) {
|
||||
int mkdwarfs_main(std::span<std::string> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, mkdwarfs_main);
|
||||
}
|
||||
|
||||
int mkdwarfs_main(std::span<std::string_view> args, iolayer const& iol) {
|
||||
return call_sys_main_iolayer(args, iol, mkdwarfs_main);
|
||||
}
|
||||
|
||||
|
@ -57,9 +57,7 @@ TEST_P(categorizer_test, end_to_end) {
|
||||
|
||||
test::test_iolayer iolayer(input);
|
||||
|
||||
std::vector<char const*> args{"mkdwarfs", "-i", "/",
|
||||
"-o", "-", "--categorize"};
|
||||
|
||||
auto args = test::parse_args("mkdwarfs -i / -o - --categorize");
|
||||
auto exit_code = mkdwarfs_main(args, iolayer.get());
|
||||
|
||||
EXPECT_EQ(exit_code, 0);
|
||||
|
@ -469,5 +469,11 @@ std::optional<fs::path> find_binary(std::string_view name) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
std::vector<std::string> parse_args(std::string_view args) {
|
||||
std::vector<std::string> rv;
|
||||
folly::split(' ', args, rv);
|
||||
return rv;
|
||||
}
|
||||
|
||||
} // namespace test
|
||||
} // namespace dwarfs
|
||||
|
@ -183,4 +183,6 @@ std::optional<std::filesystem::path> find_binary(std::string_view name);
|
||||
|
||||
std::span<std::pair<simplestat, std::string_view> const> test_dirtree();
|
||||
|
||||
std::vector<std::string> parse_args(std::string_view args);
|
||||
|
||||
} // namespace dwarfs::test
|
||||
|
Loading…
x
Reference in New Issue
Block a user