CONFIG_*_DEFAULTED now uses safeAs and should be used everywhere instead of CONFIG_* macros
This commit is contained in:
parent
369da03b7e
commit
b7f06ac352
2 changed files with 34 additions and 3 deletions
|
@ -28,6 +28,20 @@
|
|||
#include <boost/bind.hpp>
|
||||
#include <boost/signal.hpp>
|
||||
|
||||
namespace Transport {
|
||||
|
||||
template <class myType>
|
||||
const myType &safeAs(const boost::program_options::variable_value &var, const myType &def) {
|
||||
try {
|
||||
return var.as<myType>();
|
||||
}
|
||||
catch(...) {
|
||||
return def;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#define CONFIG_HAS_KEY(PTR, KEY) (*PTR).hasKey(KEY)
|
||||
#define CONFIG_STRING(PTR, KEY) (*PTR)[KEY].as<std::string>()
|
||||
#define CONFIG_INT(PTR, KEY) (*PTR)[KEY].as<int>()
|
||||
|
@ -35,9 +49,9 @@
|
|||
#define CONFIG_LIST(PTR, KEY) (*PTR)[KEY].as<std::list<std::string> >()
|
||||
#define CONFIG_VECTOR(PTR, KEY) ((*PTR).hasKey(KEY) ? (*PTR)[KEY].as<std::vector<std::string> >() : std::vector<std::string>())
|
||||
|
||||
#define CONFIG_STRING_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? (*PTR)[KEY].as<std::string>() : DEF)
|
||||
#define CONFIG_BOOL_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? (*PTR)[KEY].as<bool>() : DEF)
|
||||
#define CONFIG_LIST_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? (*PTR)[KEY].as<std::list<std::string> >() : DEF)
|
||||
#define CONFIG_STRING_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? Transport::safeAs<std::string>((*PTR)[KEY], DEF) : DEF)
|
||||
#define CONFIG_BOOL_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? Transport::safeAs<bool>((*PTR)[KEY], DEF) : DEF)
|
||||
#define CONFIG_LIST_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? Transport::safeAs<std::list<std::string> >((*PTR)[KEY], DEF) : DEF)
|
||||
|
||||
|
||||
namespace Transport {
|
||||
|
|
|
@ -28,6 +28,8 @@ class ConfigTest : public CPPUNIT_NS :: TestFixture{
|
|||
CPPUNIT_TEST(updateBackendConfig);
|
||||
CPPUNIT_TEST(unregisteredList);
|
||||
CPPUNIT_TEST(unregisteredString);
|
||||
CPPUNIT_TEST(unregisteredListAsString);
|
||||
CPPUNIT_TEST(unregisteredStringAsList);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
|
@ -69,6 +71,21 @@ class ConfigTest : public CPPUNIT_NS :: TestFixture{
|
|||
CPPUNIT_ASSERT_EQUAL(std::string("irc.freenode.org"), CONFIG_STRING(&cfg, "service.irc_server"));
|
||||
}
|
||||
|
||||
void unregisteredListAsString() {
|
||||
Config cfg;
|
||||
std::istringstream ifs("service.irc_server = irc.freenode.orgn\nservice.irc_server = irc2.freenode.org");
|
||||
cfg.load(ifs);
|
||||
CPPUNIT_ASSERT_EQUAL(std::string(""), CONFIG_STRING_DEFAULTED(&cfg, "service.irc_server", ""));
|
||||
}
|
||||
|
||||
void unregisteredStringAsList() {
|
||||
Config cfg;
|
||||
std::istringstream ifs("service.irc_server = irc.freenode.org");
|
||||
cfg.load(ifs);
|
||||
std::list<std::string> list;
|
||||
CPPUNIT_ASSERT_EQUAL(0, (int) CONFIG_LIST_DEFAULTED(&cfg, "service.irc_server", list).size());
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION (ConfigTest);
|
||||
|
|
Loading…
Add table
Reference in a new issue