From d4019e4222e1c096541877dd41f2a23417f200a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20W=C3=B6lzer?= <martin@libclapp.org> Date: Tue, 6 Sep 2022 21:22:53 +0200 Subject: [PATCH] src/include/clapp/value.h: moved stringify() function from src/clapp/option_container.cpp --- src/clapp/option_container.cpp | 12 ------------ src/include/clapp/value.h | 6 ++++++ src/include/clapp/value.hpp | 12 ++++++++++++ tests/value.cpp | 31 +++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/clapp/option_container.cpp b/src/clapp/option_container.cpp index 06f2ec45..dda9d375 100644 --- a/src/clapp/option_container.cpp +++ b/src/clapp/option_container.cpp @@ -145,18 +145,6 @@ void clapp::parser::basic_option_container_t::validate_options() const { } } -namespace clapp { -static std::string stringify( - std::optional<std::vector<std::string>>& opt_str_vec) { - return std::accumulate(opt_str_vec.value().begin(), - opt_str_vec.value().end(), std::string{}, - [](std::string& lhs, const std::string& rhs) { - return lhs.empty() ? (rhs) : (lhs + " " + rhs); - }); -} - -} // namespace clapp - void clapp::parser::basic_option_container_t::validate_options_xor( const types::variant_opt_conf_container_t* options, const std::string& options_str, diff --git a/src/include/clapp/value.h b/src/include/clapp/value.h index 70816a81..7c8fd52c 100644 --- a/src/include/clapp/value.h +++ b/src/include/clapp/value.h @@ -19,6 +19,7 @@ #include <clapp/filesystem.h> #include <functional> +#include <numeric> #include <optional> #include <string> #include <string_view> @@ -106,6 +107,11 @@ class path_exists_t { }; #endif +inline std::string concat_str(const std::string &lhs, const std::string &rhs); + +inline std::string stringify( + const std::optional<std::vector<std::string>> &opt_str_vec); + } // namespace value } // namespace clapp diff --git a/src/include/clapp/value.hpp b/src/include/clapp/value.hpp index c455f608..c86ec873 100644 --- a/src/include/clapp/value.hpp +++ b/src/include/clapp/value.hpp @@ -204,4 +204,16 @@ clapp::fs::path clapp::value::convert_value<clapp::fs::path>( std::string_view param); #endif +std::string clapp::value::concat_str(const std::string& lhs, + const std::string& rhs) { + return lhs.empty() ? (rhs) : (lhs + " " + rhs); +} + +std::string clapp::value::stringify( + const std::optional<std::vector<std::string>>& opt_str_vec) { + return std::accumulate(opt_str_vec.value().begin(), + opt_str_vec.value().end(), std::string{}, + concat_str); +} + #endif diff --git a/tests/value.cpp b/tests/value.cpp index c5e0f4b1..47b53cba 100644 --- a/tests/value.cpp +++ b/tests/value.cpp @@ -501,3 +501,34 @@ TEST(value, foundFuncTReturnsExit) { ASSERT_THAT(ret.value().get_exit_code(), testing::Eq(exit_code)); ASSERT_THAT(stringstr.str(), testing::StrEq("called func-name2")); } + +TEST(value, concatStr) { + ASSERT_THAT(clapp::value::concat_str("", "b"), testing::StrEq("b")); + ASSERT_THAT(clapp::value::concat_str("a", "b"), testing::StrEq("a b")); + ASSERT_THAT(clapp::value::concat_str("a", ""), testing::StrEq("a ")); +} + +TEST(value, stringifyNulloptThrows) { + const std::optional<std::vector<std::string>> opt_str_vec{std::nullopt}; + ASSERT_THROW(clapp::value::stringify(opt_str_vec), + std::bad_optional_access); +} + +TEST(value, stringifyEmptyVec) { + const std::optional<std::vector<std::string>> opt_str_vec{ + std::vector<std::string>{}}; + ASSERT_THAT(clapp::value::stringify(opt_str_vec), testing::StrEq("")); +} + +TEST(value, stringifyVecWithOneElement) { + const std::optional<std::vector<std::string>> opt_str_vec{ + std::vector<std::string>{"one"}}; + ASSERT_THAT(clapp::value::stringify(opt_str_vec), testing::StrEq("one")); +} + +TEST(value, stringifyVecWithTwoElements) { + const std::optional<std::vector<std::string>> opt_str_vec{ + std::vector<std::string>{"one", "two"}}; + ASSERT_THAT(clapp::value::stringify(opt_str_vec), + testing::StrEq("one two")); +} -- GitLab