Skip to content

Commit 5bce78a

Browse files
committed
test: cover Flag convert helpers
1 parent 849cf8c commit 5bce78a

File tree

3 files changed

+89
-0
lines changed

3 files changed

+89
-0
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,7 @@ jobs:
104104
with:
105105
token: ${{ secrets.CODECOV_TOKEN }}
106106
files: coverage.info
107+
disable_search: true
108+
plugins: noop
107109
fail_ci_if_error: true
108110
verbose: true

CMakeLists.txt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,10 @@ add_test(NAME basic_unknown_cmd_suggest COMMAND basic_example prnit)
120120
set_tests_properties(basic_unknown_cmd_suggest PROPERTIES PASS_REGULAR_EXPRESSION [==[Did you mean this\?
121121
print]==])
122122

123+
add_test(NAME basic_unknown_cmd_prefix_suggest COMMAND basic_example pri)
124+
set_tests_properties(basic_unknown_cmd_prefix_suggest PROPERTIES PASS_REGULAR_EXPRESSION [==[Did you mean this\?
125+
print]==])
126+
123127
add_test(NAME basic_unknown_flag_suggest COMMAND basic_example print --mesage hi)
124128
set_tests_properties(basic_unknown_flag_suggest PROPERTIES PASS_REGULAR_EXPRESSION [==[Did you mean this\?
125129
--message]==])
@@ -627,6 +631,39 @@ set_tests_properties(url_invalid_scheme PROPERTIES PASS_REGULAR_EXPRESSION [==[i
627631
add_test(NAME url_invalid_empty_authority COMMAND url_example show --url http:///a)
628632
set_tests_properties(url_invalid_empty_authority PROPERTIES PASS_REGULAR_EXPRESSION [==[invalid argument "http:///a" for "--url".*Usage: app show]==])
629633

634+
add_executable(flag_convert_example examples/flag_convert_example.cpp)
635+
target_link_libraries(flag_convert_example PRIVATE clasp)
636+
637+
add_test(NAME flag_convert_bool_empty COMMAND flag_convert_example bool)
638+
set_tests_properties(flag_convert_bool_empty PROPERTIES PASS_REGULAR_EXPRESSION "bool=false")
639+
640+
add_test(NAME flag_convert_bool_true COMMAND flag_convert_example bool true)
641+
set_tests_properties(flag_convert_bool_true PROPERTIES PASS_REGULAR_EXPRESSION "bool=true")
642+
643+
add_test(NAME flag_convert_bool_true_1 COMMAND flag_convert_example bool 1)
644+
set_tests_properties(flag_convert_bool_true_1 PROPERTIES PASS_REGULAR_EXPRESSION "bool=true")
645+
646+
add_test(NAME flag_convert_bool_true_True COMMAND flag_convert_example bool True)
647+
set_tests_properties(flag_convert_bool_true_True PROPERTIES PASS_REGULAR_EXPRESSION "bool=true")
648+
649+
add_test(NAME flag_convert_bool_true_TRUE COMMAND flag_convert_example bool TRUE)
650+
set_tests_properties(flag_convert_bool_true_TRUE PROPERTIES PASS_REGULAR_EXPRESSION "bool=true")
651+
652+
add_test(NAME flag_convert_bool_true_on COMMAND flag_convert_example bool on)
653+
set_tests_properties(flag_convert_bool_true_on PROPERTIES PASS_REGULAR_EXPRESSION "bool=true")
654+
655+
add_test(NAME flag_convert_bool_false COMMAND flag_convert_example bool false)
656+
set_tests_properties(flag_convert_bool_false PROPERTIES PASS_REGULAR_EXPRESSION "bool=false")
657+
658+
add_test(NAME flag_convert_int COMMAND flag_convert_example int 42)
659+
set_tests_properties(flag_convert_int PROPERTIES PASS_REGULAR_EXPRESSION "int=42")
660+
661+
add_test(NAME flag_convert_float COMMAND flag_convert_example float 1.5)
662+
set_tests_properties(flag_convert_float PROPERTIES PASS_REGULAR_EXPRESSION "float=1\\.500000")
663+
664+
add_test(NAME flag_convert_string COMMAND flag_convert_example string hello)
665+
set_tests_properties(flag_convert_string PROPERTIES PASS_REGULAR_EXPRESSION "string=hello")
666+
630667
add_executable(external_typed_example examples/external_typed_example.cpp)
631668
target_link_libraries(external_typed_example PRIVATE clasp)
632669

examples/flag_convert_example.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#include "clasp/flag.hpp"
2+
3+
#include <cstdlib>
4+
#include <iomanip>
5+
#include <iostream>
6+
#include <string>
7+
8+
static void usage() {
9+
std::cerr << "Usage: flag_convert_example <bool|int|float|string> [value]\n";
10+
}
11+
12+
int main(int argc, char** argv) {
13+
if (argc < 2) {
14+
usage();
15+
return 2;
16+
}
17+
18+
const std::string type = argv[1];
19+
const std::string value = (argc >= 3) ? std::string(argv[2]) : std::string();
20+
21+
try {
22+
if (type == "bool") {
23+
const auto v = std::get<bool>(clasp::Flag::convertToFlagValue<bool>(value));
24+
std::cout << "bool=" << (v ? "true" : "false") << "\n";
25+
return 0;
26+
}
27+
if (type == "int") {
28+
const auto v = std::get<int>(clasp::Flag::convertToFlagValue<int>(value));
29+
std::cout << "int=" << v << "\n";
30+
return 0;
31+
}
32+
if (type == "float") {
33+
const auto v = std::get<float>(clasp::Flag::convertToFlagValue<float>(value));
34+
std::cout << std::fixed << std::setprecision(6) << "float=" << v << "\n";
35+
return 0;
36+
}
37+
if (type == "string") {
38+
const auto v = std::get<std::string>(clasp::Flag::convertToFlagValue<std::string>(value));
39+
std::cout << "string=" << v << "\n";
40+
return 0;
41+
}
42+
} catch (const std::exception& e) {
43+
std::cerr << "error: " << e.what() << "\n";
44+
return 1;
45+
}
46+
47+
usage();
48+
return 2;
49+
}
50+

0 commit comments

Comments
 (0)