1 /*
2 Copyright 2019-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 <lyra/lyra.hpp>
9 #include <vector>
10 #include "mini_test.hpp"
11 
main()12 int main()
13 {
14 	using namespace lyra;
15 	bfg::mini_test::scope test;
16 
17 	{
18 		int number = 1;
19 		auto cli = lyra::cli()
20 				| opt(number, "number")["--number"];
21 		auto result = cli.parse({ "TestApp", "--number", "42" });
22 		test
23 			(REQUIRE(result))
24 			(REQUIRE(number == 42));
25 	}
26 	{
27 		std::vector<int> numbers;
28 		auto cli = lyra::cli() |
29 				opt(numbers, "number")["--number"].cardinality(0);
30 		auto result = cli.parse({ "TestApp", "--number", "42", "--number", "33" });
31 		test
32 			(REQUIRE(result))
33 			(REQUIRE(numbers[0] == 42))
34 			(REQUIRE(numbers[1] == 33));
35 	}
36 	{
37 		std::vector<int> numbers;
38 		auto cli = lyra::cli() |
39 				opt(numbers, "number")["--number"].cardinality(0, 2);
40 		{
41 			auto result = cli.parse({ "TestApp" });
42 			test
43 				(REQUIRE(result))
44 				(REQUIRE(numbers.size() == 0));
45 		}
46 		{
47 			auto result = cli.parse({ "TestApp", "--number", "42", "--number", "33" });
48 			test
49 				(REQUIRE(result))
50 				(REQUIRE(numbers[0] == 42))
51 				(REQUIRE(numbers[1] == 33));
52 		}
53 		{
54 			auto result = cli.parse({ "TestApp", "--number", "42", "--number", "33", "--number", "1" });
55 			test
56 				(REQUIRE(!result));
57 		}
58 	}
59 	{
60 		std::vector<int> numbers;
61 		auto cli = lyra::cli() |
62 				opt(numbers, "number")["--number"].cardinality(2, 3);
63 		{
64 			auto result = cli.parse({ "TestApp", "--number", "42", "--number", "33", "--number", "1" });
65 			test
66 				(REQUIRE(result));
67 		}
68 		{
69 			auto result = cli.parse({ "TestApp", "--number", "42" });
70 			test
71 				(REQUIRE(!result));
72 		}
73 	}
74 	{
75 		std::vector<int> numbers;
76 		auto cli = lyra::cli() |
77 				arg(numbers, "number").required();
78 		{
79 			auto result = cli.parse({ "TestApp", "42", "33", "1" });
80 			test
81 				(REQUIRE(result));
82 		}
83 		{
84 			auto result = cli.parse({ "TestApp" });
85 			test
86 				(REQUIRE(!result));
87 		}
88 	}
89 
90 	return test;
91 }
92