15 std::optional<int> int2;
17 std::optional<double> dbl2;
19 std::optional<std::string> s2;
20 std::vector<int> ints;
36 std::span<const TclObject, 0> in;
44 SECTION(
"only normal args") {
48 CHECK(out.size() == 3);
49 CHECK(out[0] ==
"arg1");
55 SECTION(
"(regular) integer option") {
63 SECTION(
"(optional) integer option") {
72 SECTION(
"(regular) double option") {
79 SECTION(
"(regular) string option") {
84 CHECK(s1 ==
"foobar");
86 SECTION(
"flag value") {
93 SECTION(
"multiple options and args") {
100 CHECK(out.size() == 3);
101 CHECK(out[0] ==
"bla");
102 CHECK(out[1] ==
"qwerty");
103 CHECK(out[2] ==
"zyxwv");
112 SECTION(
"set same option twice") {
116 CHECK(out.size() == 1);
119 SECTION(
"vector<T> accepts repeated options") {
124 CHECK(ints.size() == 2);
125 CHECK(ints[0] == 11);
126 CHECK(ints[1] == 22);
128 SECTION(
"no options after --") {
132 CHECK(out.size() == 2);
133 CHECK(out[0] ==
"-int1");
134 CHECK(out[1] ==
"234");
137 SECTION(
"missing value for option") {
141 SECTION(
"non-integer value for integer-option") {
145 SECTION(
"non-double value for double-option") {
149 SECTION(
"unknown option") {
This file implemented 3 utility functions:
ArgsInfo valueArg(std::string_view name, T &value)
std::vector< TclObject > parseTclArgs(Interpreter &interp, std::span< const TclObject > inArgs, std::span< const ArgsInfo > table)
ArgsInfo flagArg(std::string_view name, bool &flag)
TEST_CASE("TclArgParser")