forked from p-ranav/argparse
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest-module.cpp
More file actions
96 lines (84 loc) · 2.94 KB
/
test-module.cpp
File metadata and controls
96 lines (84 loc) · 2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <doctest.hpp>
#include <ostream>
import argparse;
using doctest::test_suite;
#define Check(...) REQUIRE(requires __VA_ARGS__)
TEST_CASE("Module exports enum 'nargs_pattern'" * test_suite("module")) {
Check({ typename argparse::nargs_pattern; });
}
TEST_CASE("Module exports enumerators of 'nargs_pattern'" *
test_suite("module")) {
Check({
{argparse::nargs_pattern::optional};
{argparse::nargs_pattern::any};
{argparse::nargs_pattern::at_least_one};
});
}
TEST_CASE("Module exports enum 'default_arguments'" * test_suite("module")) {
Check({ typename argparse::default_arguments; });
}
TEST_CASE("Module exports enumerators of 'default_arguments'" *
test_suite("module")) {
Check({
{argparse::default_arguments::none};
{argparse::default_arguments::all};
{argparse::default_arguments::help};
{argparse::default_arguments::version};
});
}
TEST_CASE("Module exports operator& for enum 'default_arguments'" *
test_suite("module")) {
Check({
{argparse::default_arguments::none & argparse::default_arguments::all};
});
}
TEST_CASE("Module exports class 'ArgumentParser'" * test_suite("module")) {
Check({ typename argparse::ArgumentParser; });
}
TEST_CASE("Module exports operator<< for class 'ArgumentParser'" *
test_suite("module")) {
Check((argparse::ArgumentParser A, std::ostream O) { O << A; });
}
TEST_CASE("Module exports class 'Argument'" * test_suite("module")) {
Check({ typename argparse::Argument; });
}
TEST_CASE("Module exports operator<< for class 'Argument'" *
test_suite("module")) {
Check((argparse::Argument A, std::ostream O) { O << A; });
}
TEST_CASE("Module can instantiate template<T> Argument::operator==(T)" *
test_suite("module")) {
Check((argparse::Argument A) { A == 0; });
}
TEST_CASE("Module can instantiate template<T> Argument::default_value(T)" *
test_suite("module")) {
Check((argparse::Argument A) { A.default_value<double>(0); });
}
TEST_CASE("Module can instantiate template<T> Argument::action(T)" *
test_suite("module")) {
constexpr auto Callback = [](const auto &) {};
Check((argparse::Argument A) { A.action(Callback); });
}
#if defined(__GNUC__) && !defined(__clang__)
// the following tests confuse gcc, causing an internal compiler error
#else
TEST_CASE("Module can build and execute a test program" *
test_suite("module")) {
int argc = 2;
const char *argv[] = {"test", "--foo"};
using namespace argparse;
ArgumentParser program(
"test", "1.0", default_arguments::all & default_arguments::help, false);
program.add_argument("--foo")
.implicit_value(true)
.default_value(false)
.action([&](const auto &) { ++argc; });
const auto unknown_args = program.parse_known_args(argc, argv);
bool ok = unknown_args.empty();
if (program.is_used("--foo"))
ok &= program.get<bool>("--foo");
else
ok &= not program.usage().empty();
REQUIRE(ok);
}
#endif