mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-03 09:56:38 -05:00
refactor: Add util_CheckValue test
Test GetSetting and GetArg type coercion, negation, and default value handling. Test is expanded later to cover other flags besides ALLOW_ANY when they are implemented in https://github.com/bitcoin/bitcoin/pull/16545 This commit does not change behavior.
This commit is contained in:
parent
0fa54358b0
commit
425bb30725
1 changed files with 108 additions and 0 deletions
|
@ -5,6 +5,7 @@
|
||||||
#include <util/system.h>
|
#include <util/system.h>
|
||||||
|
|
||||||
#include <clientversion.h>
|
#include <clientversion.h>
|
||||||
|
#include <optional.h>
|
||||||
#include <sync.h>
|
#include <sync.h>
|
||||||
#include <test/util/setup_common.h>
|
#include <test/util/setup_common.h>
|
||||||
#include <test/util.h>
|
#include <test/util.h>
|
||||||
|
@ -189,12 +190,119 @@ struct TestArgsManager : public ArgsManager
|
||||||
AddArg(arg.first, "", arg.second, OptionsCategory::OPTIONS);
|
AddArg(arg.first, "", arg.second, OptionsCategory::OPTIONS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
using ArgsManager::GetSetting;
|
||||||
|
using ArgsManager::GetSettingsList;
|
||||||
using ArgsManager::ReadConfigStream;
|
using ArgsManager::ReadConfigStream;
|
||||||
using ArgsManager::cs_args;
|
using ArgsManager::cs_args;
|
||||||
using ArgsManager::m_network;
|
using ArgsManager::m_network;
|
||||||
using ArgsManager::m_settings;
|
using ArgsManager::m_settings;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Test GetSetting and GetArg type coercion, negation, and default value handling.
|
||||||
|
class CheckValueTest : public TestChain100Setup
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
struct Expect {
|
||||||
|
util::SettingsValue setting;
|
||||||
|
bool default_string = false;
|
||||||
|
bool default_int = false;
|
||||||
|
bool default_bool = false;
|
||||||
|
const char* string_value = nullptr;
|
||||||
|
Optional<int64_t> int_value;
|
||||||
|
Optional<bool> bool_value;
|
||||||
|
Optional<std::vector<std::string>> list_value;
|
||||||
|
const char* error = nullptr;
|
||||||
|
|
||||||
|
Expect(util::SettingsValue s) : setting(std::move(s)) {}
|
||||||
|
Expect& DefaultString() { default_string = true; return *this; }
|
||||||
|
Expect& DefaultInt() { default_int = true; return *this; }
|
||||||
|
Expect& DefaultBool() { default_bool = true; return *this; }
|
||||||
|
Expect& String(const char* s) { string_value = s; return *this; }
|
||||||
|
Expect& Int(int64_t i) { int_value = i; return *this; }
|
||||||
|
Expect& Bool(bool b) { bool_value = b; return *this; }
|
||||||
|
Expect& List(std::vector<std::string> m) { list_value = std::move(m); return *this; }
|
||||||
|
Expect& Error(const char* e) { error = e; return *this; }
|
||||||
|
};
|
||||||
|
|
||||||
|
void CheckValue(unsigned int flags, const char* arg, const Expect& expect)
|
||||||
|
{
|
||||||
|
TestArgsManager test;
|
||||||
|
test.SetupArgs({{"-value", flags}});
|
||||||
|
const char* argv[] = {"ignored", arg};
|
||||||
|
std::string error;
|
||||||
|
bool success = test.ParseParameters(arg ? 2 : 1, (char**)argv, error);
|
||||||
|
|
||||||
|
BOOST_CHECK_EQUAL(test.GetSetting("-value").write(), expect.setting.write());
|
||||||
|
auto settings_list = test.GetSettingsList("-value");
|
||||||
|
if (expect.setting.isNull() || expect.setting.isFalse()) {
|
||||||
|
BOOST_CHECK_EQUAL(settings_list.size(), 0);
|
||||||
|
} else {
|
||||||
|
BOOST_CHECK_EQUAL(settings_list.size(), 1);
|
||||||
|
BOOST_CHECK_EQUAL(settings_list[0].write(), expect.setting.write());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expect.error) {
|
||||||
|
BOOST_CHECK(!success);
|
||||||
|
BOOST_CHECK_NE(error.find(expect.error), std::string::npos);
|
||||||
|
} else {
|
||||||
|
BOOST_CHECK(success);
|
||||||
|
BOOST_CHECK_EQUAL(error, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expect.default_string) {
|
||||||
|
BOOST_CHECK_EQUAL(test.GetArg("-value", "zzzzz"), "zzzzz");
|
||||||
|
} else if (expect.string_value) {
|
||||||
|
BOOST_CHECK_EQUAL(test.GetArg("-value", "zzzzz"), expect.string_value);
|
||||||
|
} else {
|
||||||
|
BOOST_CHECK(!success);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expect.default_int) {
|
||||||
|
BOOST_CHECK_EQUAL(test.GetArg("-value", 99999), 99999);
|
||||||
|
} else if (expect.int_value) {
|
||||||
|
BOOST_CHECK_EQUAL(test.GetArg("-value", 99999), *expect.int_value);
|
||||||
|
} else {
|
||||||
|
BOOST_CHECK(!success);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expect.default_bool) {
|
||||||
|
BOOST_CHECK_EQUAL(test.GetBoolArg("-value", false), false);
|
||||||
|
BOOST_CHECK_EQUAL(test.GetBoolArg("-value", true), true);
|
||||||
|
} else if (expect.bool_value) {
|
||||||
|
BOOST_CHECK_EQUAL(test.GetBoolArg("-value", false), *expect.bool_value);
|
||||||
|
BOOST_CHECK_EQUAL(test.GetBoolArg("-value", true), *expect.bool_value);
|
||||||
|
} else {
|
||||||
|
BOOST_CHECK(!success);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expect.list_value) {
|
||||||
|
auto l = test.GetArgs("-value");
|
||||||
|
BOOST_CHECK_EQUAL_COLLECTIONS(l.begin(), l.end(), expect.list_value->begin(), expect.list_value->end());
|
||||||
|
} else {
|
||||||
|
BOOST_CHECK(!success);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
BOOST_FIXTURE_TEST_CASE(util_CheckValue, CheckValueTest)
|
||||||
|
{
|
||||||
|
using M = ArgsManager;
|
||||||
|
|
||||||
|
CheckValue(M::ALLOW_ANY, nullptr, Expect{{}}.DefaultString().DefaultInt().DefaultBool().List({}));
|
||||||
|
CheckValue(M::ALLOW_ANY, "-novalue", Expect{false}.String("0").Int(0).Bool(false).List({}));
|
||||||
|
CheckValue(M::ALLOW_ANY, "-novalue=", Expect{false}.String("0").Int(0).Bool(false).List({}));
|
||||||
|
CheckValue(M::ALLOW_ANY, "-novalue=0", Expect{true}.String("1").Int(1).Bool(true).List({"1"}));
|
||||||
|
CheckValue(M::ALLOW_ANY, "-novalue=1", Expect{false}.String("0").Int(0).Bool(false).List({}));
|
||||||
|
CheckValue(M::ALLOW_ANY, "-novalue=2", Expect{false}.String("0").Int(0).Bool(false).List({}));
|
||||||
|
CheckValue(M::ALLOW_ANY, "-novalue=abc", Expect{true}.String("1").Int(1).Bool(true).List({"1"}));
|
||||||
|
CheckValue(M::ALLOW_ANY, "-value", Expect{""}.String("").Int(0).Bool(true).List({""}));
|
||||||
|
CheckValue(M::ALLOW_ANY, "-value=", Expect{""}.String("").Int(0).Bool(true).List({""}));
|
||||||
|
CheckValue(M::ALLOW_ANY, "-value=0", Expect{"0"}.String("0").Int(0).Bool(false).List({"0"}));
|
||||||
|
CheckValue(M::ALLOW_ANY, "-value=1", Expect{"1"}.String("1").Int(1).Bool(true).List({"1"}));
|
||||||
|
CheckValue(M::ALLOW_ANY, "-value=2", Expect{"2"}.String("2").Int(2).Bool(true).List({"2"}));
|
||||||
|
CheckValue(M::ALLOW_ANY, "-value=abc", Expect{"abc"}.String("abc").Int(0).Bool(false).List({"abc"}));
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(util_ParseParameters)
|
BOOST_AUTO_TEST_CASE(util_ParseParameters)
|
||||||
{
|
{
|
||||||
TestArgsManager testArgs;
|
TestArgsManager testArgs;
|
||||||
|
|
Loading…
Add table
Reference in a new issue