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