Expose function validate to GncOption and test it on GncOptionValidatedValue.

pull/1191/head
John Ralls 7 years ago
parent 6df516dfcd
commit e2a36a8be3

@ -298,7 +298,7 @@ public:
GncOptionValidatedValue<ValueType>& operator=(GncOptionValidatedValue<ValueType>&&) = default;
ValueType get_value() const { return m_value; }
ValueType get_default_value() const { return m_default_value; }
bool validate(ValueType value) { return m_validator(value); }
bool validate(ValueType value) const { return m_validator(value); }
void set_value(ValueType value)
{
if (this->validate(value))
@ -787,6 +787,20 @@ public:
}, m_option);
}
template<typename ValueType>
bool validate(ValueType value) const {
return std::visit([value] (const auto& option) -> bool {
if constexpr ((std::is_same_v<std::decay_t<decltype(option)>,
GncOptionMultichoiceValue> &&
std::is_same_v<std::decay_t<ValueType>,
std::string>) ||
std::is_same_v<std::decay_t<decltype(option)>,
GncOptionValidatedValue<ValueType>>)
return option.validate(value);
else
return false;
}, m_option);
}
std::ostream& out_stream(std::ostream& oss) const
{
return std::visit([&oss](auto& option) -> std::ostream& {

@ -252,6 +252,14 @@ TEST_F(GncOptionCommodityTest, test_currency_setter)
GNC_COMMODITY(option.get_value<QofInstance*>()));
}
TEST_F(GncOptionCommodityTest, test_currency_validator)
{
auto option = make_currency_option("foo", "bar", "baz", "Phony Option",
m_eur, true);
EXPECT_TRUE(option.validate(QOF_INSTANCE(m_usd)));
EXPECT_FALSE(option.validate(QOF_INSTANCE(m_aapl)));
}
}
TEST_F(GncOptionTest, test_qofinstance_out)

Loading…
Cancel
Save