source/base: Refactor out callback routine
The callback mechanism will be used by other callback methods in the
same fashion, so we can template and re-use this functionality
diff --git a/test/Makefile.am b/test/Makefile.am
index d1923fa..4b94144 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -27,6 +27,11 @@
internal_sdref_CPPFLAGS = $(gtest_cppflags)
internal_sdref_LDADD = $(gtest_ldadd)
+check_PROGRAMS += internal_utils
+internal_utils_SOURCES = internal/utils.cpp
+internal_utils_CPPFLAGS = $(gtest_cppflags)
+internal_utils_LDADD = $(gtest_ldadd)
+
check_PROGRAMS += source_base
source_base_SOURCES = source/base.cpp
source_base_CPPFLAGS = $(gtest_cppflags)
diff --git a/test/internal/utils.cpp b/test/internal/utils.cpp
new file mode 100644
index 0000000..2a347ca
--- /dev/null
+++ b/test/internal/utils.cpp
@@ -0,0 +1,38 @@
+#include <gtest/gtest.h>
+#include <sdeventplus/internal/utils.hpp>
+#include <stdexcept>
+#include <system_error>
+
+namespace sdeventplus
+{
+namespace internal
+{
+namespace
+{
+
+TEST(UtilsTest, PerformCallbackSuccess)
+{
+ EXPECT_EQ(0, performCallback([]() {}));
+}
+
+TEST(UtilsTest, SetPrepareSystemError)
+{
+ EXPECT_EQ(-EBUSY, performCallback([]() {
+ throw std::system_error(EBUSY, std::generic_category());
+ }));
+}
+
+TEST(UtilsTest, SetPrepareException)
+{
+ EXPECT_EQ(-ENOSYS,
+ performCallback([]() { throw std::runtime_error("Exception"); }));
+}
+
+TEST(UtilsTest, SetPrepareUnknownException)
+{
+ EXPECT_EQ(-ENOSYS, performCallback([]() { throw static_cast<int>(1); }));
+}
+
+} // namespace
+} // namespace internal
+} // namespace sdeventplus
diff --git a/test/source/base.cpp b/test/source/base.cpp
index 69ae8e2..435b6f2 100644
--- a/test/source/base.cpp
+++ b/test/source/base.cpp
@@ -8,7 +8,6 @@
#include <sdeventplus/source/base.hpp>
#include <sdeventplus/test/sdevent.hpp>
#include <string>
-#include <system_error>
#include <systemd/sd-event.h>
#include <type_traits>
#include <utility>
@@ -322,47 +321,32 @@
EXPECT_EQ(-EINVAL, event_handler(nullptr, nullptr));
}
-TEST_F(BaseMethodTest, SetPrepareNull)
-{
- EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, nullptr))
- .WillOnce(Return(0));
- base->set_prepare(nullptr);
- EXPECT_EQ(-ENOSYS, base->prepareCallback());
-}
-
-TEST_F(BaseMethodTest, SetPrepareSystemError)
-{
- Base::Callback callback = [](Base&) {
- throw std::system_error(EBUSY, std::generic_category());
- };
- EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_))
- .WillOnce(Return(0));
- base->set_prepare(std::move(callback));
- EXPECT_TRUE(base->get_prepare());
- EXPECT_FALSE(callback);
- EXPECT_EQ(-EBUSY, base->prepareCallback());
-}
-
-TEST_F(BaseMethodTest, SetPrepareUnknownException)
-{
- Base::Callback callback = [](Base&) { throw static_cast<int>(1); };
- EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_))
- .WillOnce(Return(0));
- base->set_prepare(std::move(callback));
- EXPECT_TRUE(base->get_prepare());
- EXPECT_FALSE(callback);
- EXPECT_EQ(-ENOSYS, base->prepareCallback());
-}
-
TEST_F(BaseMethodTest, SetPrepareError)
{
+ EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_))
+ .WillOnce(Return(0));
+ base->set_prepare(std::move([](Base&) {}));
+ EXPECT_TRUE(base->get_prepare());
+
Base::Callback callback = [](Base&) {};
EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_))
.WillOnce(Return(-EINVAL));
EXPECT_THROW(base->set_prepare(std::move(callback)), SdEventError);
EXPECT_FALSE(base->get_prepare());
EXPECT_TRUE(callback);
- EXPECT_EQ(-ENOSYS, base->prepareCallback());
+}
+
+TEST_F(BaseMethodTest, SetPrepareNull)
+{
+ EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_))
+ .WillOnce(Return(0));
+ base->set_prepare(std::move([](Base&) {}));
+ EXPECT_TRUE(base->get_prepare());
+
+ EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, nullptr))
+ .WillOnce(Return(0));
+ base->set_prepare(nullptr);
+ EXPECT_FALSE(base->get_prepare());
}
TEST_F(BaseMethodTest, GetPendingSuccess)