utils: add join_paths + tests
This commit is contained in:
@ -257,6 +257,17 @@ test_program_in_path(void)
|
||||
g_assert_true(!!program_in_path("ls"));
|
||||
}
|
||||
|
||||
static void
|
||||
test_join_paths()
|
||||
{
|
||||
|
||||
assert_equal(join_paths(), "");
|
||||
assert_equal(join_paths("a"), "a");
|
||||
assert_equal(join_paths("a", "b"), "a/b");
|
||||
assert_equal(join_paths("/a/b///c/d//", "e"), "/a/b/c/d/e");
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char* argv[])
|
||||
@ -272,12 +283,12 @@ main(int argc, char* argv[])
|
||||
test_check_dir_03);
|
||||
g_test_add_func("/utils/check-dir-04",
|
||||
test_check_dir_04);
|
||||
|
||||
g_test_add_func("/utils/determine-dtype-with-lstat",
|
||||
test_determine_dtype_with_lstat);
|
||||
|
||||
g_test_add_func("/utils/program-in-path",
|
||||
test_program_in_path);
|
||||
g_test_add_func("/utils/join-paths",
|
||||
test_join_paths);
|
||||
|
||||
return g_test_run();
|
||||
}
|
||||
|
||||
@ -24,8 +24,8 @@
|
||||
#include <cinttypes>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <utils/mu-sexp.hh>
|
||||
#include <utils/mu-option.hh>
|
||||
#include <utils/mu-regex.hh>
|
||||
|
||||
namespace Mu {
|
||||
|
||||
@ -135,7 +135,28 @@ enum struct RuntimePath {
|
||||
* @return the path name
|
||||
*/
|
||||
std::string runtime_path(RuntimePath path, const std::string& muhome="");
|
||||
/**
|
||||
* Join path components into a path (with '/')
|
||||
*
|
||||
* @param s a string-convertible value
|
||||
* @param args 0 or more string-convertible values
|
||||
*
|
||||
* @return the path
|
||||
*/
|
||||
static inline std::string join_paths() { return {}; }
|
||||
template<typename S, typename...Args>
|
||||
std::string join_paths(S&& s, Args...args) {
|
||||
|
||||
static std::string sepa{"/"};
|
||||
auto&& str{std::string{std::forward<S>(s)}};
|
||||
if (auto&& rest{join_paths(std::forward<Args>(args)...)}; !rest.empty())
|
||||
str += (sepa + rest);
|
||||
|
||||
static auto rx = Regex::make("//*").value();
|
||||
return rx.replace(str, sepa);
|
||||
}
|
||||
#endif /* MU_UTILS_FILE_HH__ */
|
||||
|
||||
|
||||
} // namespace Mu
|
||||
|
||||
#endif /* MU_UTILS_FILE_HH__ */
|
||||
|
||||
Reference in New Issue
Block a user