File: ArgumentParser.cpp

package info (click to toggle)
hyprutils 0.11.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 560 kB
  • sloc: cpp: 5,332; sh: 10; makefile: 3
file content (105 lines) | stat: -rw-r--r-- 4,691 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <cli/ArgumentParser.hpp>

#include <gtest/gtest.h>

#include <print>

using namespace Hyprutils::CLI;
using namespace Hyprutils;

constexpr const char* DESC_TEST = R"#(┏ My description
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┣ --hello                  -h          | Says hello                              ┃
┣ --hello2                             | Says hello 2                            ┃
┣ --value                  -v [float]  | Sets a valueeeeeee                      ┃
┣ --longlonglonglongintopt -l [int]    | Long long                               ┃
┃                                        maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa┃
┃                                        aaaaaaaaaaan maaan man maaan man maaan  ┃
┃                                        man maaan man                           ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
)#";

TEST(CLI, ArgumentParser) {
    std::vector<const char*> argv = {"app", "--hello", "--value", "0.2"};

    CArgumentParser          parser(argv);

    EXPECT_TRUE(parser.registerBoolOption("hello", "h", "Says hello"));
    EXPECT_TRUE(parser.registerBoolOption("hello2", "", "Says hello 2"));
    EXPECT_TRUE(parser.registerFloatOption("value", "v", "Sets a valueeeeeee"));
    EXPECT_TRUE(parser.registerIntOption("longlonglonglongintopt", "l", "Long long maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaan maaan man maaan man maaan man maaan man"));

    auto result = parser.parse();

    EXPECT_TRUE(result.has_value());

    std::println("{}", parser.getDescription("My description"));

    if (!result.has_value())
        std::println("Error: {}", result.error());

    EXPECT_EQ(parser.getBool("hello").value_or(false), true);
    EXPECT_EQ(parser.getBool("hello2").value_or(false), false);
    EXPECT_EQ(parser.getFloat("value").value_or(0.F), 0.2F);

    EXPECT_EQ(parser.getDescription("My description"), DESC_TEST);

    CArgumentParser parser2(argv);

    EXPECT_TRUE(parser2.registerBoolOption("hello2", "e", "Says hello 2"));
    EXPECT_TRUE(parser2.registerFloatOption("value", "v", "Sets a valueeeeeee"));
    EXPECT_TRUE(parser2.registerIntOption("longlonglonglongintopt", "l", "Long long maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaan maaan man maaan man maaan man maaan man"));
    EXPECT_TRUE(parser2.registerFloatOption("value2", "", "Sets a valueeeeeee 2"));
    EXPECT_TRUE(!parser2.registerFloatOption("", "a", "Sets a valueeeeeee 2"));

    auto result2 = parser2.parse();

    EXPECT_TRUE(!result2.has_value());

    std::vector<const char*> argv3 = {"app", "--hello", "--value"};

    CArgumentParser          parser3(argv3);

    EXPECT_TRUE(parser3.registerBoolOption("hello2", "e", "Says hello 2"));
    EXPECT_TRUE(parser3.registerFloatOption("value", "v", "Sets a valueeeeeee"));
    EXPECT_TRUE(parser3.registerIntOption("longlonglonglongintopt", "l", "Long long maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaan maaan man maaan man maaan man maaan man"));

    auto result3 = parser3.parse();

    EXPECT_TRUE(!result3.has_value());

    std::vector<const char*> argv4 = {"app", "--value", "hi", "-w", "2"};

    CArgumentParser          parser4(argv4);

    EXPECT_TRUE(parser4.registerStringOption("value", "v", "Sets a valueeeeeee"));
    EXPECT_TRUE(parser4.registerIntOption("value2", "w", "Sets a valueeeeeee 2"));

    auto result4 = parser4.parse();

    EXPECT_TRUE(result4.has_value());

    EXPECT_EQ(parser4.getString("value").value_or(""), "hi");
    EXPECT_EQ(parser4.getInt("value2").value_or(0), 2);

    std::vector<const char*> argv5 = {
        "app",
        "e",
    };

    CArgumentParser parser5(argv5);

    EXPECT_TRUE(parser5.registerStringOption("value", "v", "Sets a valueeeeeee"));
    EXPECT_TRUE(parser5.registerStringOption("value2", "w", "Sets a valueeeeeee 2"));

    auto result5 = parser5.parse();

    EXPECT_TRUE(!result5.has_value());

    CArgumentParser parser6(argv5);

    EXPECT_TRUE(parser6.registerStringOption("aa", "v", "Sets a valueeeeeee"));
    EXPECT_TRUE(!parser6.registerStringOption("aa", "w", "Sets a valueeeeeee 2"));
    EXPECT_TRUE(parser6.registerStringOption("bb", "b", "Sets a valueeeeeee"));
    EXPECT_TRUE(!parser6.registerStringOption("cc", "b", "Sets a valueeeeeee 2"));
}