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