diff --git a/libgnucash/app-utils/gnc-option.hpp b/libgnucash/app-utils/gnc-option.hpp index c85559f058..e953c3d8c4 100644 --- a/libgnucash/app-utils/gnc-option.hpp +++ b/libgnucash/app-utils/gnc-option.hpp @@ -298,7 +298,7 @@ public: GncOptionValidatedValue& operator=(GncOptionValidatedValue&&) = 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 + bool validate(ValueType value) const { + return std::visit([value] (const auto& option) -> bool { + if constexpr ((std::is_same_v, + GncOptionMultichoiceValue> && + std::is_same_v, + std::string>) || + std::is_same_v, + GncOptionValidatedValue>) + 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& { diff --git a/libgnucash/app-utils/test/gtest-gnc-option.cpp b/libgnucash/app-utils/test/gtest-gnc-option.cpp index dbf93a79d1..10e97297bd 100644 --- a/libgnucash/app-utils/test/gtest-gnc-option.cpp +++ b/libgnucash/app-utils/test/gtest-gnc-option.cpp @@ -252,6 +252,14 @@ TEST_F(GncOptionCommodityTest, test_currency_setter) GNC_COMMODITY(option.get_value())); } +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)