1 /*
2 Copyright 2021-2022 René Ferdinand Rivera Morell
3 Distributed under the Boost Software License, Version 1.0.
4 (See accompanying file LICENSE.txt or copy at
5 http://www.boost.org/LICENSE_1_0.txt)
6 */
7
8 #include "mini_test.hpp"
9 #include <lyra/lyra.hpp>
10
11 #include <iostream>
12 #include <string>
13
main()14 int main()
15 {
16 bfg::mini_test::scope test;
17
18 bool someFlag = false;
19 std::string requiredArgInGroup;
20 std::string optionalArgInGroup;
21 std::string positionalArg;
22
23 auto cli = lyra::cli();
24 cli |= lyra::opt(someFlag).name("-f");
25 cli |= lyra::group([](const lyra::group &) {})
26 .add_argument(lyra::opt(requiredArgInGroup, "req")
27 .name("--req-in-group")
28 .required())
29 .add_argument(
30 lyra::opt(optionalArgInGroup, "opt").name("--opt-in-group"));
31 cli |= lyra::arg(positionalArg, "positional");
32
33 {
34 someFlag = false;
35 requiredArgInGroup = "";
36 optionalArgInGroup = "";
37 positionalArg = "";
38 auto result = cli.parse(
39 { "test_app", "-f", "--req-in-group", "test1", "test2" });
40 test(REQUIRE(result));
41 test(REQUIRE(someFlag));
42 test(REQUIRE(requiredArgInGroup == "test1"));
43 test(REQUIRE(positionalArg == "test2"));
44 }
45 {
46 someFlag = false;
47 requiredArgInGroup = "";
48 optionalArgInGroup = "";
49 positionalArg = "";
50 auto result = cli.parse(
51 { "test_app", "--req-in-group", "test1", "-f", "test2" });
52 test(REQUIRE(result));
53 test(REQUIRE(someFlag));
54 test(REQUIRE(requiredArgInGroup == "test1"));
55 test(REQUIRE(positionalArg == "test2"));
56 }
57 {
58 someFlag = false;
59 requiredArgInGroup = "";
60 optionalArgInGroup = "";
61 positionalArg = "";
62 auto result
63 = cli.parse({ "test_app", "--req-in-group", "test1", "-f" });
64 test(REQUIRE(result));
65 test(REQUIRE(requiredArgInGroup == "test1"));
66 test(REQUIRE(someFlag));
67 test(REQUIRE(positionalArg == ""));
68 }
69
70 return test;
71 }
72