Changeset View
Changeset View
Standalone View
Standalone View
src/test/getarg_tests.cpp
// Copyright (c) 2012-2019 The Bitcoin Core developers | // Copyright (c) 2012-2019 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include <util/system.h> | #include <util/system.h> | ||||
#include <test/setup_common.h> | #include <test/setup_common.h> | ||||
#include <boost/algorithm/string.hpp> | #include <boost/algorithm/string.hpp> | ||||
#include <boost/test/unit_test.hpp> | #include <boost/test/unit_test.hpp> | ||||
#include <string> | #include <string> | ||||
#include <utility> | |||||
#include <vector> | #include <vector> | ||||
BOOST_FIXTURE_TEST_SUITE(getarg_tests, BasicTestingSetup) | BOOST_FIXTURE_TEST_SUITE(getarg_tests, BasicTestingSetup) | ||||
static void ResetArgs(ArgsManager &am, const std::string &strArg) { | static void ResetArgs(ArgsManager &am, const std::string &strArg) { | ||||
std::vector<std::string> vecArg; | std::vector<std::string> vecArg; | ||||
if (strArg.size()) { | if (strArg.size()) { | ||||
boost::split(vecArg, strArg, boost::is_space(), | boost::split(vecArg, strArg, boost::is_space(), | ||||
boost::token_compress_on); | boost::token_compress_on); | ||||
} | } | ||||
// Insert dummy executable name: | // Insert dummy executable name: | ||||
vecArg.insert(vecArg.begin(), "testbitcoin"); | vecArg.insert(vecArg.begin(), "testbitcoin"); | ||||
// Convert to char*: | // Convert to char*: | ||||
std::vector<const char *> vecChar; | std::vector<const char *> vecChar; | ||||
for (const std::string &s : vecArg) { | for (const std::string &s : vecArg) { | ||||
vecChar.push_back(s.c_str()); | vecChar.push_back(s.c_str()); | ||||
} | } | ||||
std::string error; | std::string error; | ||||
BOOST_CHECK(am.ParseParameters(vecChar.size(), vecChar.data(), error)); | BOOST_CHECK(am.ParseParameters(vecChar.size(), vecChar.data(), error)); | ||||
} | } | ||||
static void SetupArgs(ArgsManager &am, const std::vector<std::string> &args) { | static void | ||||
for (const std::string &arg : args) { | SetupArgs(ArgsManager &am, | ||||
am.AddArg(arg, "", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); | const std::vector<std::pair<std::string, unsigned int>> &args) { | ||||
am.ClearArgs(); | |||||
for (const auto &arg : args) { | |||||
am.AddArg(arg.first, "", arg.second, OptionsCategory::OPTIONS); | |||||
} | } | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(boolarg) { | BOOST_AUTO_TEST_CASE(boolarg) { | ||||
ArgsManager am; | ArgsManager am; | ||||
SetupArgs(am, {"-foo"}); | const auto foo = std::make_pair("-foo", ArgsManager::ALLOW_BOOL); | ||||
SetupArgs(am, {foo}); | |||||
ResetArgs(am, "-foo"); | ResetArgs(am, "-foo"); | ||||
BOOST_CHECK(am.GetBoolArg("-foo", false)); | BOOST_CHECK(am.GetBoolArg("-foo", false)); | ||||
BOOST_CHECK(am.GetBoolArg("-foo", true)); | BOOST_CHECK(am.GetBoolArg("-foo", true)); | ||||
BOOST_CHECK(!am.GetBoolArg("-fo", false)); | BOOST_CHECK(!am.GetBoolArg("-fo", false)); | ||||
BOOST_CHECK(am.GetBoolArg("-fo", true)); | BOOST_CHECK(am.GetBoolArg("-fo", true)); | ||||
BOOST_CHECK(!am.GetBoolArg("-fooo", false)); | BOOST_CHECK(!am.GetBoolArg("-fooo", false)); | ||||
Show All 38 Lines | BOOST_AUTO_TEST_CASE(boolarg) { | ||||
ResetArgs(am, "--nofoo=1"); | ResetArgs(am, "--nofoo=1"); | ||||
BOOST_CHECK(!am.GetBoolArg("-foo", false)); | BOOST_CHECK(!am.GetBoolArg("-foo", false)); | ||||
BOOST_CHECK(!am.GetBoolArg("-foo", true)); | BOOST_CHECK(!am.GetBoolArg("-foo", true)); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(stringarg) { | BOOST_AUTO_TEST_CASE(stringarg) { | ||||
ArgsManager am; | ArgsManager am; | ||||
SetupArgs(am, {"-foo", "-bar"}); | const auto foo = std::make_pair("-foo", ArgsManager::ALLOW_STRING); | ||||
const auto bar = std::make_pair("-bar", ArgsManager::ALLOW_STRING); | |||||
SetupArgs(am, {foo, bar}); | |||||
ResetArgs(am, ""); | ResetArgs(am, ""); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", ""), ""); | BOOST_CHECK_EQUAL(am.GetArg("-foo", ""), ""); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", "eleven"), "eleven"); | BOOST_CHECK_EQUAL(am.GetArg("-foo", "eleven"), "eleven"); | ||||
ResetArgs(am, "-foo -bar"); | ResetArgs(am, "-foo -bar"); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", ""), ""); | BOOST_CHECK_EQUAL(am.GetArg("-foo", ""), ""); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", "eleven"), ""); | BOOST_CHECK_EQUAL(am.GetArg("-foo", "eleven"), ""); | ||||
ResetArgs(am, "-foo="); | ResetArgs(am, "-foo="); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", ""), ""); | BOOST_CHECK_EQUAL(am.GetArg("-foo", ""), ""); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", "eleven"), ""); | BOOST_CHECK_EQUAL(am.GetArg("-foo", "eleven"), ""); | ||||
ResetArgs(am, "-foo=11"); | ResetArgs(am, "-foo=11"); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", ""), "11"); | BOOST_CHECK_EQUAL(am.GetArg("-foo", ""), "11"); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", "eleven"), "11"); | BOOST_CHECK_EQUAL(am.GetArg("-foo", "eleven"), "11"); | ||||
ResetArgs(am, "-foo=eleven"); | ResetArgs(am, "-foo=eleven"); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", ""), "eleven"); | BOOST_CHECK_EQUAL(am.GetArg("-foo", ""), "eleven"); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", "eleven"), "eleven"); | BOOST_CHECK_EQUAL(am.GetArg("-foo", "eleven"), "eleven"); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(intarg) { | BOOST_AUTO_TEST_CASE(intarg) { | ||||
ArgsManager am; | ArgsManager am; | ||||
SetupArgs(am, {"-foo", "-bar"}); | const auto foo = std::make_pair("-foo", ArgsManager::ALLOW_INT); | ||||
const auto bar = std::make_pair("-bar", ArgsManager::ALLOW_INT); | |||||
SetupArgs(am, {foo, bar}); | |||||
ResetArgs(am, ""); | ResetArgs(am, ""); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", 11), 11); | BOOST_CHECK_EQUAL(am.GetArg("-foo", 11), 11); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", 0), 0); | BOOST_CHECK_EQUAL(am.GetArg("-foo", 0), 0); | ||||
ResetArgs(am, "-foo -bar"); | ResetArgs(am, "-foo -bar"); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", 11), 0); | BOOST_CHECK_EQUAL(am.GetArg("-foo", 11), 0); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-bar", 11), 0); | BOOST_CHECK_EQUAL(am.GetArg("-bar", 11), 0); | ||||
ResetArgs(am, "-foo=11 -bar=12"); | ResetArgs(am, "-foo=11 -bar=12"); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", 0), 11); | BOOST_CHECK_EQUAL(am.GetArg("-foo", 0), 11); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-bar", 11), 12); | BOOST_CHECK_EQUAL(am.GetArg("-bar", 11), 12); | ||||
ResetArgs(am, "-foo=NaN -bar=NotANumber"); | ResetArgs(am, "-foo=NaN -bar=NotANumber"); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", 1), 0); | BOOST_CHECK_EQUAL(am.GetArg("-foo", 1), 0); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-bar", 11), 0); | BOOST_CHECK_EQUAL(am.GetArg("-bar", 11), 0); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(doubledash) { | BOOST_AUTO_TEST_CASE(doubledash) { | ||||
ArgsManager am; | ArgsManager am; | ||||
SetupArgs(am, {"-foo", "-bar"}); | const auto foo = std::make_pair("-foo", ArgsManager::ALLOW_ANY); | ||||
const auto bar = std::make_pair("-bar", ArgsManager::ALLOW_ANY); | |||||
SetupArgs(am, {foo, bar}); | |||||
ResetArgs(am, "--foo"); | ResetArgs(am, "--foo"); | ||||
BOOST_CHECK_EQUAL(am.GetBoolArg("-foo", false), true); | BOOST_CHECK_EQUAL(am.GetBoolArg("-foo", false), true); | ||||
ResetArgs(am, "--foo=verbose --bar=1"); | ResetArgs(am, "--foo=verbose --bar=1"); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-foo", ""), "verbose"); | BOOST_CHECK_EQUAL(am.GetArg("-foo", ""), "verbose"); | ||||
BOOST_CHECK_EQUAL(am.GetArg("-bar", 0), 1); | BOOST_CHECK_EQUAL(am.GetArg("-bar", 0), 1); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(boolargno) { | BOOST_AUTO_TEST_CASE(boolargno) { | ||||
ArgsManager am; | ArgsManager am; | ||||
SetupArgs(am, {"-foo", "-bar"}); | const auto foo = std::make_pair("-foo", ArgsManager::ALLOW_BOOL); | ||||
const auto bar = std::make_pair("-bar", ArgsManager::ALLOW_BOOL); | |||||
SetupArgs(am, {foo, bar}); | |||||
ResetArgs(am, "-nofoo"); | ResetArgs(am, "-nofoo"); | ||||
BOOST_CHECK(!am.GetBoolArg("-foo", true)); | BOOST_CHECK(!am.GetBoolArg("-foo", true)); | ||||
BOOST_CHECK(!am.GetBoolArg("-foo", false)); | BOOST_CHECK(!am.GetBoolArg("-foo", false)); | ||||
ResetArgs(am, "-nofoo=1"); | ResetArgs(am, "-nofoo=1"); | ||||
BOOST_CHECK(!am.GetBoolArg("-foo", true)); | BOOST_CHECK(!am.GetBoolArg("-foo", true)); | ||||
BOOST_CHECK(!am.GetBoolArg("-foo", false)); | BOOST_CHECK(!am.GetBoolArg("-foo", false)); | ||||
Show All 16 Lines |