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 "mini_test.hpp"
10 
main()11 int main()
12 {
13 	using namespace lyra;
14 	bfg::mini_test::scope test;
15 
16 	// no .required() or .optional()
17 	{
18 		std::string name;
19 		int number = 1;
20 		auto cli =
21 			opt(name, "name")["--name"]
22 			| opt(number, "number")["--number"];
23 		auto result = cli.parse({ "TestApp", "--name", "foo" });
24 		test
25 			(REQUIRE(result))
26 			(REQUIRE(name == "foo"))
27 			(REQUIRE(number == 1));
28 	}
29 	// .optional() and value present
30 	{
31 		std::string name;
32 		int number = 1;
33 		auto cli =
34 			opt(name, "name")["--name"].optional()
35 			| opt(number, "number")["--number"];
36 		auto result = cli.parse({ "TestApp", "--name", "foo" });
37 		test
38 			(REQUIRE(result))
39 			(REQUIRE(name == "foo"))
40 			(REQUIRE(number == 1));
41 	}
42 	// .optional() and value not present
43 	{
44 		std::string name;
45 		int number = 1;
46 		auto cli =
47 			opt(name, "name")["--name"].optional()
48 			| opt(number, "number")["--number"];
49 		auto result = cli.parse({ "TestApp", "--number", "42" });
50 		test
51 			(REQUIRE(result))
52 			(REQUIRE(name == ""))
53 			(REQUIRE(number == 42));
54 	}
55 	// .required() and value present
56 	{
57 		std::string name;
58 		int number = 1;
59 		auto cli =
60 			opt(name, "name")["--name"].required()
61 			| opt(number, "number")["--number"];
62 		auto result = cli.parse({ "TestApp", "--name", "foo" });
63 		test
64 			(REQUIRE(result))
65 			(REQUIRE(name == "foo"))
66 			(REQUIRE(number == 1));
67 	}
68 	// .required() and value not present
69 	{
70 		std::string name;
71 		int number = 1;
72 		auto cli =
73 			opt(name, "name")["--name"].required()
74 			| opt(number, "number")["--number"];
75 		auto result = cli.parse({ "TestApp", "--number", "42" });
76 		test
77 			(REQUIRE(!result))
78 			(REQUIRE(result.message() == "Expected: --name <name>"));
79 	}
80 
81 	return test;
82 }
83