Unit tests for the GetArg() methods
This commit is contained in:
parent
0b452dff5e
commit
3ae0735553
3 changed files with 146 additions and 24 deletions
95
src/test/getarg_tests.cpp
Normal file
95
src/test/getarg_tests.cpp
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
#include <boost/algorithm/string.hpp>
|
||||||
|
#include <boost/foreach.hpp>
|
||||||
|
#include <boost/test/unit_test.hpp>
|
||||||
|
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE(getarg_tests)
|
||||||
|
|
||||||
|
static void
|
||||||
|
ResetArgs(const std::string& strArg)
|
||||||
|
{
|
||||||
|
std::vector<std::string> vecArg;
|
||||||
|
boost::split(vecArg, strArg, boost::is_space(), boost::token_compress_on);
|
||||||
|
|
||||||
|
// Insert dummy executable name:
|
||||||
|
vecArg.insert(vecArg.begin(), "testbitcoin");
|
||||||
|
|
||||||
|
// Convert to char*:
|
||||||
|
std::vector<const char*> vecChar;
|
||||||
|
BOOST_FOREACH(std::string& s, vecArg)
|
||||||
|
vecChar.push_back(s.c_str());
|
||||||
|
|
||||||
|
ParseParameters(vecChar.size(), &vecChar[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(boolarg)
|
||||||
|
{
|
||||||
|
ResetArgs("-foo");
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo"));
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo", false));
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo", true));
|
||||||
|
|
||||||
|
BOOST_CHECK(!GetBoolArg("-fo"));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-fo", false));
|
||||||
|
BOOST_CHECK(GetBoolArg("-fo", true));
|
||||||
|
|
||||||
|
BOOST_CHECK(!GetBoolArg("-fooo"));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-fooo", false));
|
||||||
|
BOOST_CHECK(GetBoolArg("-fooo", true));
|
||||||
|
|
||||||
|
ResetArgs("-foo=0");
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo"));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", false));
|
||||||
|
BOOST_CHECK(!GetBoolArg("-foo", true));
|
||||||
|
|
||||||
|
ResetArgs("-foo=1");
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo"));
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo", false));
|
||||||
|
BOOST_CHECK(GetBoolArg("-foo", true));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(stringarg)
|
||||||
|
{
|
||||||
|
ResetArgs("");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", ""), "");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "eleven");
|
||||||
|
|
||||||
|
ResetArgs("-foo -bar");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", ""), "");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "");
|
||||||
|
|
||||||
|
ResetArgs("-foo=");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", ""), "");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "");
|
||||||
|
|
||||||
|
ResetArgs("-foo=11");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", ""), "11");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "11");
|
||||||
|
|
||||||
|
ResetArgs("-foo=eleven");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", ""), "eleven");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "eleven");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(intarg)
|
||||||
|
{
|
||||||
|
ResetArgs("");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", 11), 11);
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", 0), 0);
|
||||||
|
|
||||||
|
ResetArgs("-foo -bar");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", 11), 0);
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-bar", 11), 0);
|
||||||
|
|
||||||
|
ResetArgs("-foo=11 -bar=12");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", 0), 11);
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-bar", 11), 12);
|
||||||
|
|
||||||
|
ResetArgs("-foo=NaN -bar=NotANumber");
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-foo", 1), 0);
|
||||||
|
BOOST_CHECK_EQUAL(GetArg("-bar", 11), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE_END()
|
27
src/util.cpp
27
src/util.cpp
|
@ -454,7 +454,7 @@ vector<unsigned char> ParseHex(const string& str)
|
||||||
return ParseHex(str.c_str());
|
return ParseHex(str.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ParseParameters(int argc, char* argv[])
|
void ParseParameters(int argc, const char*const argv[])
|
||||||
{
|
{
|
||||||
mapArgs.clear();
|
mapArgs.clear();
|
||||||
mapMultiArgs.clear();
|
mapMultiArgs.clear();
|
||||||
|
@ -480,6 +480,31 @@ void ParseParameters(int argc, char* argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string GetArg(const std::string& strArg, const std::string& strDefault)
|
||||||
|
{
|
||||||
|
if (mapArgs.count(strArg))
|
||||||
|
return mapArgs[strArg];
|
||||||
|
return strDefault;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64 GetArg(const std::string& strArg, int64 nDefault)
|
||||||
|
{
|
||||||
|
if (mapArgs.count(strArg))
|
||||||
|
return atoi64(mapArgs[strArg]);
|
||||||
|
return nDefault;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GetBoolArg(const std::string& strArg, bool fDefault)
|
||||||
|
{
|
||||||
|
if (mapArgs.count(strArg))
|
||||||
|
{
|
||||||
|
if (mapArgs[strArg].empty())
|
||||||
|
return true;
|
||||||
|
return (atoi(mapArgs[strArg]) != 0);
|
||||||
|
}
|
||||||
|
return fDefault;
|
||||||
|
}
|
||||||
|
|
||||||
bool SoftSetArg(const std::string& strArg, const std::string& strValue)
|
bool SoftSetArg(const std::string& strArg, const std::string& strValue)
|
||||||
{
|
{
|
||||||
if (mapArgs.count(strArg))
|
if (mapArgs.count(strArg))
|
||||||
|
|
48
src/util.h
48
src/util.h
|
@ -143,7 +143,7 @@ std::vector<unsigned char> DecodeBase64(const char* p, bool* pfInvalid = NULL);
|
||||||
std::string DecodeBase64(const std::string& str);
|
std::string DecodeBase64(const std::string& str);
|
||||||
std::string EncodeBase64(const unsigned char* pch, size_t len);
|
std::string EncodeBase64(const unsigned char* pch, size_t len);
|
||||||
std::string EncodeBase64(const std::string& str);
|
std::string EncodeBase64(const std::string& str);
|
||||||
void ParseParameters(int argc, char* argv[]);
|
void ParseParameters(int argc, const char*const argv[]);
|
||||||
bool WildcardMatch(const char* psz, const char* mask);
|
bool WildcardMatch(const char* psz, const char* mask);
|
||||||
bool WildcardMatch(const std::string& str, const std::string& mask);
|
bool WildcardMatch(const std::string& str, const std::string& mask);
|
||||||
int GetFilesize(FILE* file);
|
int GetFilesize(FILE* file);
|
||||||
|
@ -401,30 +401,32 @@ inline bool IsSwitchChar(char c)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::string GetArg(const std::string& strArg, const std::string& strDefault)
|
/**
|
||||||
{
|
* Return string argument or default value
|
||||||
if (mapArgs.count(strArg))
|
*
|
||||||
return mapArgs[strArg];
|
* @param strArg Argument to get (e.g. "-foo")
|
||||||
return strDefault;
|
* @param default (e.g. "1")
|
||||||
}
|
* @return command-line argument or default value
|
||||||
|
*/
|
||||||
|
std::string GetArg(const std::string& strArg, const std::string& strDefault);
|
||||||
|
|
||||||
inline int64 GetArg(const std::string& strArg, int64 nDefault)
|
/**
|
||||||
{
|
* Return integer argument or default value
|
||||||
if (mapArgs.count(strArg))
|
*
|
||||||
return atoi64(mapArgs[strArg]);
|
* @param strArg Argument to get (e.g. "-foo")
|
||||||
return nDefault;
|
* @param default (e.g. 1)
|
||||||
}
|
* @return command-line argument (0 if invalid number) or default value
|
||||||
|
*/
|
||||||
|
int64 GetArg(const std::string& strArg, int64 nDefault);
|
||||||
|
|
||||||
inline bool GetBoolArg(const std::string& strArg, bool fDefault=false)
|
/**
|
||||||
{
|
* Return boolean argument or default value
|
||||||
if (mapArgs.count(strArg))
|
*
|
||||||
{
|
* @param strArg Argument to get (e.g. "-foo")
|
||||||
if (mapArgs[strArg].empty())
|
* @param default (true or false)
|
||||||
return true;
|
* @return command-line argument or default value
|
||||||
return (atoi(mapArgs[strArg]) != 0);
|
*/
|
||||||
}
|
bool GetBoolArg(const std::string& strArg, bool fDefault=false);
|
||||||
return fDefault;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set an argument if it doesn't already have a value
|
* Set an argument if it doesn't already have a value
|
||||||
|
|
Loading…
Reference in a new issue