PIVX Core  5.6.99
P2P Digital Currency
getarg_tests.cpp
Go to the documentation of this file.
1 // Copyright (c) 2012-2016 The Bitcoin Core developers
2 // Copyright (c) 2017-2021 The PIVX Core developers
3 // Distributed under the MIT/X11 software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #include "util/system.h"
7 #include "test/test_pivx.h"
8 
9 #include <string>
10 #include <vector>
11 
12 #include <boost/algorithm/string.hpp>
13 #include <boost/test/unit_test.hpp>
14 
16 
17 static void ResetArgs(const std::string& strArg)
18 {
19  std::vector<std::string> vecArg;
20  if (strArg.size())
21  boost::split(vecArg, strArg, boost::is_space(), boost::token_compress_on);
22 
23  // Insert dummy executable name:
24  vecArg.insert(vecArg.begin(), "testbitcoin");
25 
26  // Convert to char*:
27  std::vector<const char*> vecChar;
28  for (std::string& s : vecArg)
29  vecChar.push_back(s.c_str());
30 
31  gArgs.ParseParameters(vecChar.size(), vecChar.data());
32 }
33 
35 {
36  ResetArgs("-foo");
37  BOOST_CHECK(gArgs.GetBoolArg("-foo", false));
38  BOOST_CHECK(gArgs.GetBoolArg("-foo", true));
39 
40  BOOST_CHECK(!gArgs.GetBoolArg("-fo", false));
41  BOOST_CHECK(gArgs.GetBoolArg("-fo", true));
42 
43  BOOST_CHECK(!gArgs.GetBoolArg("-fooo", false));
44  BOOST_CHECK(gArgs.GetBoolArg("-fooo", true));
45 
46  ResetArgs("-foo=0");
47  BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
48  BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
49 
50  ResetArgs("-foo=1");
51  BOOST_CHECK(gArgs.GetBoolArg("-foo", false));
52  BOOST_CHECK(gArgs.GetBoolArg("-foo", true));
53 
54  // New 0.6 feature: auto-map -nosomething to !-something:
55  ResetArgs("-nofoo");
56  BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
57  BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
58 
59  ResetArgs("-nofoo=1");
60  BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
61  BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
62 
63  ResetArgs("-foo -nofoo"); // -nofoo should win
64  BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
65  BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
66 
67  ResetArgs("-foo=1 -nofoo=1"); // -nofoo should win
68  BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
69  BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
70 
71  ResetArgs("-foo=0 -nofoo=0"); // -nofoo=0 should win
72  BOOST_CHECK(gArgs.GetBoolArg("-foo", false));
73  BOOST_CHECK(gArgs.GetBoolArg("-foo", true));
74 
75  // New 0.6 feature: treat -- same as -:
76  ResetArgs("--foo=1");
77  BOOST_CHECK(gArgs.GetBoolArg("-foo", false));
78  BOOST_CHECK(gArgs.GetBoolArg("-foo", true));
79 
80  ResetArgs("--nofoo=1");
81  BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
82  BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
83 
84 }
85 
87 {
88  ResetArgs("");
89  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", ""), "");
90  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", "eleven"), "eleven");
91 
92  ResetArgs("-foo -bar");
93  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", ""), "");
94  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", "eleven"), "");
95 
96  ResetArgs("-foo=");
97  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", ""), "");
98  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", "eleven"), "");
99 
100  ResetArgs("-foo=11");
101  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", ""), "11");
102  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", "eleven"), "11");
103 
104  ResetArgs("-foo=eleven");
105  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", ""), "eleven");
106  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", "eleven"), "eleven");
107 
108 }
109 
111 {
112  ResetArgs("");
113  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", 11), 11);
114  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", 0), 0);
115 
116  ResetArgs("-foo -bar");
117  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", 11), 0);
118  BOOST_CHECK_EQUAL(gArgs.GetArg("-bar", 11), 0);
119 
120  ResetArgs("-foo=11 -bar=12");
121  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", 0), 11);
122  BOOST_CHECK_EQUAL(gArgs.GetArg("-bar", 11), 12);
123 
124  ResetArgs("-foo=NaN -bar=NotANumber");
125  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", 1), 0);
126  BOOST_CHECK_EQUAL(gArgs.GetArg("-bar", 11), 0);
127 }
128 
130 {
131  ResetArgs("--foo");
132  BOOST_CHECK_EQUAL(gArgs.GetBoolArg("-foo", false), true);
133 
134  ResetArgs("--foo=verbose --bar=1");
135  BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", ""), "verbose");
136  BOOST_CHECK_EQUAL(gArgs.GetArg("-bar", 0), 1);
137 }
138 
140 {
141  ResetArgs("-nofoo");
142  BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
143  BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
144 
145  ResetArgs("-nofoo=1");
146  BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
147  BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
148 
149  ResetArgs("-nofoo=0");
150  BOOST_CHECK(gArgs.GetBoolArg("-foo", true));
151  BOOST_CHECK(gArgs.GetBoolArg("-foo", false));
152 
153  ResetArgs("-foo --nofoo"); // --nofoo should win
154  BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
155  BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
156 
157  ResetArgs("-nofoo -foo"); // foo always wins:
158  BOOST_CHECK(gArgs.GetBoolArg("-foo", true));
159  BOOST_CHECK(gArgs.GetBoolArg("-foo", false));
160 }
161 
void ParseParameters(int argc, const char *const argv[])
Definition: system.cpp:371
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string argument or default value.
Definition: system.cpp:449
bool GetBoolArg(const std::string &strArg, bool fDefault) const
Return boolean argument or default value.
Definition: system.cpp:465
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_CASE(boolarg)
#define BOOST_FIXTURE_TEST_SUITE(a, b)
Definition: object.cpp:14
#define BOOST_CHECK_EQUAL(v1, v2)
Definition: object.cpp:18
#define BOOST_CHECK(expr)
Definition: object.cpp:17
Basic testing setup.
Definition: test_pivx.h:51
ArgsManager gArgs
Definition: system.cpp:89