mirror of
https://github.com/dashpay/dash.git
synced 2024-12-28 05:23:01 +01:00
0fcb967e4d
903055730b Test gArgs erroring on unknown args (Andrew Chow) 4f8704d57f Give an error and exit if there are unknown parameters (Andrew Chow) 174f7c8080 Use a struct for arguments and nested map for categories (Andrew Chow) Pull request description: Following #13190, gArgs is aware of all of the command line arguments. This PR has gArgs check whether the arguments provided are actually valid arguments. When an unknown argument is encountered, an error is printed to stderr and the program exist. Since gArgs is used for everything that has command line arguments, `bitcoind`, `bitcoin-cli`, `bitcoin-qt`, `bitcoin-tx`, and `bench_bitcoin` are all effected by this change and all now have the same argument checking behavior. Closes #1044 Tree-SHA512: 388201319a7d6493204bb5433da47e8e6c8266882e809f6df45f86d925f1f320f2fd13edb3e57ffc6a37415dfdfc689f83929452bca224229783accb367032e7
176 lines
5.2 KiB
C++
176 lines
5.2 KiB
C++
// Copyright (c) 2012-2015 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#include <util/system.h>
|
|
#include <test/test_dash.h>
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <boost/algorithm/string.hpp>
|
|
#include <boost/test/unit_test.hpp>
|
|
|
|
BOOST_FIXTURE_TEST_SUITE(getarg_tests, BasicTestingSetup)
|
|
|
|
static void ResetArgs(const std::string& strArg)
|
|
{
|
|
std::vector<std::string> vecArg;
|
|
if (strArg.size())
|
|
boost::split(vecArg, strArg, boost::is_space(), boost::token_compress_on);
|
|
|
|
// Insert dummy executable name:
|
|
vecArg.insert(vecArg.begin(), "testdash");
|
|
|
|
// Convert to char*:
|
|
std::vector<const char*> vecChar;
|
|
for (std::string& s : vecArg)
|
|
vecChar.push_back(s.c_str());
|
|
|
|
std::string error;
|
|
gArgs.ParseParameters(vecChar.size(), vecChar.data(), error);
|
|
}
|
|
|
|
static void SetupArgs(const std::vector<std::string>& args)
|
|
{
|
|
gArgs.ClearArgs();
|
|
for (const std::string& arg : args) {
|
|
gArgs.AddArg(arg, "", false, OptionsCategory::OPTIONS);
|
|
}
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(boolarg)
|
|
{
|
|
SetupArgs({"-foo"});
|
|
ResetArgs("-foo");
|
|
BOOST_CHECK(gArgs.GetBoolArg("-foo", false));
|
|
BOOST_CHECK(gArgs.GetBoolArg("-foo", true));
|
|
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-fo", false));
|
|
BOOST_CHECK(gArgs.GetBoolArg("-fo", true));
|
|
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-fooo", false));
|
|
BOOST_CHECK(gArgs.GetBoolArg("-fooo", true));
|
|
|
|
ResetArgs("-foo=0");
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
|
|
|
|
ResetArgs("-foo=1");
|
|
BOOST_CHECK(gArgs.GetBoolArg("-foo", false));
|
|
BOOST_CHECK(gArgs.GetBoolArg("-foo", true));
|
|
|
|
// New 0.6 feature: auto-map -nosomething to !-something:
|
|
ResetArgs("-nofoo");
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
|
|
|
|
ResetArgs("-nofoo=1");
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
|
|
|
|
ResetArgs("-foo -nofoo"); // -nofoo should win
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
|
|
|
|
ResetArgs("-foo=1 -nofoo=1"); // -nofoo should win
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
|
|
|
|
ResetArgs("-foo=0 -nofoo=0"); // -nofoo=0 should win
|
|
BOOST_CHECK(gArgs.GetBoolArg("-foo", false));
|
|
BOOST_CHECK(gArgs.GetBoolArg("-foo", true));
|
|
|
|
// New 0.6 feature: treat -- same as -:
|
|
ResetArgs("--foo=1");
|
|
BOOST_CHECK(gArgs.GetBoolArg("-foo", false));
|
|
BOOST_CHECK(gArgs.GetBoolArg("-foo", true));
|
|
|
|
ResetArgs("--nofoo=1");
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
|
|
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(stringarg)
|
|
{
|
|
SetupArgs({"-foo", "-bar"});
|
|
ResetArgs("");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", ""), "");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", "eleven"), "eleven");
|
|
|
|
ResetArgs("-foo -bar");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", ""), "");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", "eleven"), "");
|
|
|
|
ResetArgs("-foo=");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", ""), "");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", "eleven"), "");
|
|
|
|
ResetArgs("-foo=11");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", ""), "11");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", "eleven"), "11");
|
|
|
|
ResetArgs("-foo=eleven");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", ""), "eleven");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", "eleven"), "eleven");
|
|
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(intarg)
|
|
{
|
|
SetupArgs({"-foo", "-bar"});
|
|
ResetArgs("");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", 11), 11);
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", 0), 0);
|
|
|
|
ResetArgs("-foo -bar");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", 11), 0);
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-bar", 11), 0);
|
|
|
|
ResetArgs("-foo=11 -bar=12");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", 0), 11);
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-bar", 11), 12);
|
|
|
|
ResetArgs("-foo=NaN -bar=NotANumber");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", 1), 0);
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-bar", 11), 0);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(doubledash)
|
|
{
|
|
SetupArgs({"-foo", "-bar"});
|
|
ResetArgs("--foo");
|
|
BOOST_CHECK_EQUAL(gArgs.GetBoolArg("-foo", false), true);
|
|
|
|
ResetArgs("--foo=verbose --bar=1");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-foo", ""), "verbose");
|
|
BOOST_CHECK_EQUAL(gArgs.GetArg("-bar", 0), 1);
|
|
}
|
|
|
|
BOOST_AUTO_TEST_CASE(boolargno)
|
|
{
|
|
SetupArgs({"-foo", "-bar"});
|
|
ResetArgs("-nofoo");
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
|
|
|
|
ResetArgs("-nofoo=1");
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
|
|
|
|
ResetArgs("-nofoo=0");
|
|
BOOST_CHECK(gArgs.GetBoolArg("-foo", true));
|
|
BOOST_CHECK(gArgs.GetBoolArg("-foo", false));
|
|
|
|
ResetArgs("-foo --nofoo"); // --nofoo should win
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", true));
|
|
BOOST_CHECK(!gArgs.GetBoolArg("-foo", false));
|
|
|
|
ResetArgs("-nofoo -foo"); // foo always wins:
|
|
BOOST_CHECK(gArgs.GetBoolArg("-foo", true));
|
|
BOOST_CHECK(gArgs.GetBoolArg("-foo", false));
|
|
}
|
|
|
|
BOOST_AUTO_TEST_SUITE_END()
|