78953d296f4f333ba6d3937b9c8f12278e738fbf
[novacoin.git] / src / test / getarg_tests.cpp
1 #include <boost/algorithm/string.hpp>
2 #include <boost/foreach.hpp>
3 #include <boost/test/unit_test.hpp>
4
5 #include "util.h"
6
7 BOOST_AUTO_TEST_SUITE(getarg_tests)
8
9 static void
10 ResetArgs(const std::string& strArg)
11 {
12     std::vector<std::string> vecArg;
13     boost::split(vecArg, strArg, boost::is_space(), boost::token_compress_on);
14
15     // Insert dummy executable name:
16     vecArg.insert(vecArg.begin(), "testbitcoin");
17
18     // Convert to char*:
19     std::vector<const char*> vecChar;
20     BOOST_FOREACH(std::string& s, vecArg)
21         vecChar.push_back(s.c_str());
22
23     ParseParameters(vecChar.size(), &vecChar[0]);
24 }
25
26 BOOST_AUTO_TEST_CASE(boolarg)
27 {
28     ResetArgs("-foo");
29     BOOST_CHECK(GetBoolArg("-foo"));
30     BOOST_CHECK(GetBoolArg("-foo", false));
31     BOOST_CHECK(GetBoolArg("-foo", true));
32
33     BOOST_CHECK(!GetBoolArg("-fo"));
34     BOOST_CHECK(!GetBoolArg("-fo", false));
35     BOOST_CHECK(GetBoolArg("-fo", true));
36
37     BOOST_CHECK(!GetBoolArg("-fooo"));
38     BOOST_CHECK(!GetBoolArg("-fooo", false));
39     BOOST_CHECK(GetBoolArg("-fooo", true));
40
41     ResetArgs("-foo=0");
42     BOOST_CHECK(!GetBoolArg("-foo"));
43     BOOST_CHECK(!GetBoolArg("-foo", false));
44     BOOST_CHECK(!GetBoolArg("-foo", true));
45
46     ResetArgs("-foo=1");
47     BOOST_CHECK(GetBoolArg("-foo"));
48     BOOST_CHECK(GetBoolArg("-foo", false));
49     BOOST_CHECK(GetBoolArg("-foo", true));
50
51     // New 0.6 feature: auto-map -nosomething to !-something:
52     ResetArgs("-nofoo");
53     BOOST_CHECK(!GetBoolArg("-foo"));
54     BOOST_CHECK(!GetBoolArg("-foo", false));
55     BOOST_CHECK(!GetBoolArg("-foo", true));
56
57     ResetArgs("-nofoo=1");
58     BOOST_CHECK(!GetBoolArg("-foo"));
59     BOOST_CHECK(!GetBoolArg("-foo", false));
60     BOOST_CHECK(!GetBoolArg("-foo", true));
61
62     ResetArgs("-foo -nofoo");  // -foo should win
63     BOOST_CHECK(GetBoolArg("-foo"));
64     BOOST_CHECK(GetBoolArg("-foo", false));
65     BOOST_CHECK(GetBoolArg("-foo", true));
66
67     ResetArgs("-foo=1 -nofoo=1");  // -foo should win
68     BOOST_CHECK(GetBoolArg("-foo"));
69     BOOST_CHECK(GetBoolArg("-foo", false));
70     BOOST_CHECK(GetBoolArg("-foo", true));
71
72     ResetArgs("-foo=0 -nofoo=0");  // -foo should win
73     BOOST_CHECK(!GetBoolArg("-foo"));
74     BOOST_CHECK(!GetBoolArg("-foo", false));
75     BOOST_CHECK(!GetBoolArg("-foo", true));
76
77     // New 0.6 feature: treat -- same as -:
78     ResetArgs("--foo=1");
79     BOOST_CHECK(GetBoolArg("-foo"));
80     BOOST_CHECK(GetBoolArg("-foo", false));
81     BOOST_CHECK(GetBoolArg("-foo", true));
82
83     ResetArgs("--nofoo=1");
84     BOOST_CHECK(!GetBoolArg("-foo"));
85     BOOST_CHECK(!GetBoolArg("-foo", false));
86     BOOST_CHECK(!GetBoolArg("-foo", true));
87
88 }
89
90 BOOST_AUTO_TEST_CASE(stringarg)
91 {
92     ResetArgs("");
93     BOOST_CHECK_EQUAL(GetArg("-foo", ""), "");
94     BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "eleven");
95
96     ResetArgs("-foo -bar");
97     BOOST_CHECK_EQUAL(GetArg("-foo", ""), "");
98     BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "");
99
100     ResetArgs("-foo=");
101     BOOST_CHECK_EQUAL(GetArg("-foo", ""), "");
102     BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "");
103
104     ResetArgs("-foo=11");
105     BOOST_CHECK_EQUAL(GetArg("-foo", ""), "11");
106     BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "11");
107
108     ResetArgs("-foo=eleven");
109     BOOST_CHECK_EQUAL(GetArg("-foo", ""), "eleven");
110     BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "eleven");
111
112 }
113
114 BOOST_AUTO_TEST_CASE(intarg)
115 {
116     ResetArgs("");
117     BOOST_CHECK_EQUAL(GetArg("-foo", 11), 11);
118     BOOST_CHECK_EQUAL(GetArg("-foo", 0), 0);
119
120     ResetArgs("-foo -bar");
121     BOOST_CHECK_EQUAL(GetArg("-foo", 11), 0);
122     BOOST_CHECK_EQUAL(GetArg("-bar", 11), 0);
123
124     ResetArgs("-foo=11 -bar=12");
125     BOOST_CHECK_EQUAL(GetArg("-foo", 0), 11);
126     BOOST_CHECK_EQUAL(GetArg("-bar", 11), 12);
127
128     ResetArgs("-foo=NaN -bar=NotANumber");
129     BOOST_CHECK_EQUAL(GetArg("-foo", 1), 0);
130     BOOST_CHECK_EQUAL(GetArg("-bar", 11), 0);
131 }
132
133 BOOST_AUTO_TEST_CASE(doubledash)
134 {
135     ResetArgs("--foo");
136     BOOST_CHECK_EQUAL(GetBoolArg("-foo"), true);
137
138     ResetArgs("--foo=verbose --bar=1");
139     BOOST_CHECK_EQUAL(GetArg("-foo", ""), "verbose");
140     BOOST_CHECK_EQUAL(GetArg("-bar", 0), 1);
141 }
142
143 BOOST_AUTO_TEST_CASE(boolargno)
144 {
145     ResetArgs("-nofoo");
146     BOOST_CHECK(!GetBoolArg("-foo"));
147     BOOST_CHECK(!GetBoolArg("-foo", true));
148     BOOST_CHECK(!GetBoolArg("-foo", false));
149
150     ResetArgs("-nofoo=1");
151     BOOST_CHECK(!GetBoolArg("-foo"));
152     BOOST_CHECK(!GetBoolArg("-foo", true));
153     BOOST_CHECK(!GetBoolArg("-foo", false));
154
155     ResetArgs("-nofoo=0");
156     BOOST_CHECK(GetBoolArg("-foo"));
157     BOOST_CHECK(GetBoolArg("-foo", true));
158     BOOST_CHECK(GetBoolArg("-foo", false));
159
160     ResetArgs("-foo --nofoo");
161     BOOST_CHECK(GetBoolArg("-foo"));
162
163     ResetArgs("-nofoo -foo"); // foo always wins:
164     BOOST_CHECK(GetBoolArg("-foo"));
165 }
166
167 BOOST_AUTO_TEST_SUITE_END()