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 "mini_test.hpp"
9 #include <lyra/lyra.hpp>
10 #include <iostream>
11 
12 template <typename Value>
test_val(bfg::mini_test::scope & test,Value test_value,Value default_value=Value ())13 void test_val(bfg::mini_test::scope& test, Value test_value, Value default_value = Value())
14 {
15 	using namespace lyra;
16 	std::string test_value_s;
17 	lyra::detail::to_string(test_value, test_value_s);
18 	{
19 		Value arg_value { default_value };
20 		auto cli = lyra::cli() | arg(arg_value, "value");
21 		char* args[] = { (char*)"TestApp", (char*)test_value_s.c_str() };
22 		auto result = cli.parse({ 2, args });
23 		if (!result) std::cerr << result.message() << '\n';
24 		test(REQUIRE(result));
25 		test(arg_value == test_value, "arg_value == " + test_value_s, CONTEXT);
26 	}
27 	{
28 		Value arg_value { default_value };
29 		auto cli = lyra::cli() | opt(arg_value, "value").name("--value");
30 		char* args[]
31 			= { (char*)"TestApp", (char*)"--value", (char*)test_value_s.c_str() };
32 		auto result = cli.parse({ 3, args });
33 		if (!result) std::cerr << result.message() << '\n';
34 		test(REQUIRE(result));
35 		test(arg_value == test_value, "arg_value == " + test_value_s, CONTEXT);
36 	}
37 	{
38 		Value arg_value { default_value };
39 		auto cli = lyra::cli() | opt(arg_value, "value").name("--value");
40 		std::string value_arg = "--value=" + test_value_s;
41 		char* args[]
42 			= { (char*)"TestApp", (char*)value_arg.c_str() };
43 		auto result = cli.parse({ 2, args });
44 		if (!result) std::cerr << result.message() << '\n';
45 		test(REQUIRE(result));
46 		test(arg_value == test_value, "arg_value == " + test_value_s, CONTEXT);
47 	}
48 }
49 
main()50 int main()
51 {
52 	using namespace lyra;
53 	bfg::mini_test::scope test;
54 
55 	test_val(test, unsigned(1));
56 	test_val(test, int(1));
57 	test_val(test, int(-1));
58 
59 	return test;
60 }
61