More ConfigDefinition unit tests, fixes, support std::string as type

pull/1186/head
Stephen Shelton 4 years ago
parent 25212b929c
commit 105dd30fd9
No known key found for this signature in database
GPG Key ID: EE4BADACCE8B631C

@ -69,10 +69,11 @@ namespace llarp
std::string
defaultValueAsString()
{
if (defaultValue)
return std::to_string(defaultValue.value());
else
return "";
std::ostringstream oss;
if (defaultValue.has_value())
oss << defaultValue.value();
return oss.str();
}
void
@ -89,7 +90,7 @@ namespace llarp
iss >> t;
if (iss.fail())
{
throw std::invalid_argument(stringify(input, " is not a valid" , typeid(T).name()));
throw std::invalid_argument(stringify(input, " is not a valid ", typeid(T).name()));
}
else
{
@ -102,12 +103,13 @@ namespace llarp
std::string
writeValue(bool useDefault)
{
if (parsedValue)
return std::to_string(parsedValue.value());
std::ostringstream oss;
if (parsedValue.has_value())
oss << parsedValue.value();
else if (useDefault and defaultValue.has_value())
return std::to_string(defaultValue.value());
else
return {};
oss << defaultValue.value();
return oss.str();
}
nonstd::optional<T> defaultValue;

@ -2,7 +2,7 @@
#include <catch2/catch.hpp>
TEST_CASE("ConfigDefinition parse test", "[config]")
TEST_CASE("ConfigDefinition int parse test", "[config]")
{
llarp::ConfigDefinition<int> def("foo", "bar", false, false, 42);
@ -18,6 +18,18 @@ TEST_CASE("ConfigDefinition parse test", "[config]")
CHECK(def.defaultValueAsString() == "42");
}
TEST_CASE("ConfigDefinition string parse test", "[config]")
{
llarp::ConfigDefinition<std::string> def("foo", "bar", false, false, "test");
CHECK(def.getValue() == "test");
CHECK(def.defaultValueAsString() == "test");
CHECK_NOTHROW(def.parseValue("foo"));
CHECK(def.getValue() == "foo");
CHECK(def.numFound == 1);
}
TEST_CASE("ConfigDefinition multiple parses test", "[config]")
{
{
@ -67,6 +79,22 @@ TEST_CASE("Configuration basic add/get test", "[config]")
CHECK(config.getConfigValue<int>("router", "threads") == 5);
}
TEST_CASE("Configuration missing def test", "[config]")
{
llarp::Configuration config;
CHECK_THROWS(config.addConfigValue("foo", "bar", "5"));
CHECK_THROWS(config.getConfigValue<int>("foo", "bar") == 5);
config.addDefinition(std::make_unique<llarp::ConfigDefinition<int>>(
"quux",
"bar",
false,
false,
4));
CHECK_THROWS(config.addConfigValue("foo", "bar", "5"));
}
TEST_CASE("Configuration required test", "[config]")
{
llarp::Configuration config;
@ -83,3 +111,31 @@ TEST_CASE("Configuration required test", "[config]")
CHECK_NOTHROW(config.validate());
}
TEST_CASE("Configuration section test", "[config]")
{
llarp::Configuration config;
config.addDefinition(std::make_unique<llarp::ConfigDefinition<int>>(
"foo",
"bar",
true,
false,
1));
config.addDefinition(std::make_unique<llarp::ConfigDefinition<int>>(
"goo",
"bar",
true,
false,
1));
CHECK_THROWS(config.validate());
config.addConfigValue("foo", "bar", "5");
CHECK_THROWS(config.validate());
CHECK_NOTHROW(config.addConfigValue("goo", "bar", "6"));
CHECK_NOTHROW(config.validate());
CHECK(config.getConfigValue<int>("foo", "bar") == 5);
CHECK(config.getConfigValue<int>("goo", "bar") == 6);
}

Loading…
Cancel
Save