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 bool show_help = false;
16 struct Config
17 {
18 int seed = 0;
19 std::string name;
20 std::vector<std::string> tests;
21 bool flag = false;
22 double value = 0;
23 } config;
24 auto parser
25 = help( show_help )
26 | opt( config.seed, "time|value" )
27 ["--rng-seed"]["-r"]
28 ("set a specific seed for random numbers" )
29 | opt( config.name, "name" )
30 ["-n"]["--name"]
31 ( "the name to use" )
32 | opt( config.flag )
33 ["-f"]["--flag"]
34 ( "a flag to set" )
35 | opt( [&]( double value ){ config.value = value; }, "number" )
36 ["-d"]["--double"]
37 ( "just some number" )
38 | arg( config.tests, "test name|tags|pattern" )
39 ( "which test or tests to use" );
40
41 show_help = false;
42 config = Config();
43 {
44 auto result = parser.parse( { "TestApp", "-n", "Bill", "-d=123.45", "-f", "test1", "test2" } );
45 test
46 (REQUIRE( result ))
47 (REQUIRE( result.value().type() == parser_result_type::matched ))
48 (REQUIRE( config.name == "Bill" ))
49 (REQUIRE( config.value == 123.45 ))
50 (REQUIRE( (config.tests == std::vector<std::string> { "test1", "test2" }) ))
51 (REQUIRE( show_help == false ))
52 ;
53 }
54 show_help = false;
55 config = Config();
56 {
57 auto result = parser.parse( { "TestApp", "-?", "-n=NotSet" } );
58 test
59 (REQUIRE( result ))
60 (REQUIRE( result.value().type() == parser_result_type::short_circuit_all ))
61 (REQUIRE( config.name == "" )) // We should never have processed -n:NotSet
62 (REQUIRE( show_help == true ))
63 ;
64 }
65
66 return test;
67 }
68