source/base: Take an event directly instead of sdevent

Also expose a mechanism for retrieving our internal event.
diff --git a/test/source/base.cpp b/test/source/base.cpp
index 13c534a..3b6a63f 100644
--- a/test/source/base.cpp
+++ b/test/source/base.cpp
@@ -1,12 +1,15 @@
 #include <cerrno>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
+#include <memory>
+#include <sdeventplus/event.hpp>
 #include <sdeventplus/exception.hpp>
 #include <sdeventplus/internal/sdevent.hpp>
 #include <sdeventplus/source/base.hpp>
 #include <sdeventplus/test/sdevent.hpp>
 #include <string>
 #include <system_error>
+#include <systemd/sd-event.h>
 #include <type_traits>
 
 namespace sdeventplus
@@ -24,13 +27,11 @@
 class BaseImpl : public Base
 {
   public:
-    BaseImpl(sd_event_source* source, internal::SdEvent* sdevent) :
-        Base(source, sdevent)
+    BaseImpl(const Event& event, sd_event_source* source) : Base(event, source)
     {
     }
-    BaseImpl(sd_event_source* source, std::false_type,
-             internal::SdEvent* sdevent) :
-        Base(source, std::false_type(), sdevent)
+    BaseImpl(const Event& event, sd_event_source* source, std::false_type) :
+        Base(event, source, std::false_type())
     {
     }
 };
@@ -39,15 +40,30 @@
 {
   protected:
     testing::StrictMock<test::SdEventMock> mock;
-    sd_event_source* const expected_source =
-        reinterpret_cast<sd_event_source*>(1234);
+    sd_event_source* expected_source = reinterpret_cast<sd_event_source*>(1234);
+    sd_event* expected_event = reinterpret_cast<sd_event*>(2345);
+    std::unique_ptr<Event> event;
+
+    virtual void SetUp()
+    {
+        event =
+            std::make_unique<Event>(expected_event, std::false_type(), &mock);
+    }
+    virtual void TearDown()
+    {
+        EXPECT_CALL(mock, sd_event_unref(expected_event))
+            .WillOnce(Return(nullptr));
+        event.reset();
+    }
 };
 
 TEST_F(BaseTest, NewBaseRef)
 {
+    EXPECT_CALL(mock, sd_event_ref(expected_event))
+        .WillOnce(Return(expected_event));
     EXPECT_CALL(mock, sd_event_source_ref(expected_source))
         .WillOnce(Return(expected_source));
-    BaseImpl source(expected_source, &mock);
+    BaseImpl source(*event, expected_source);
 
     {
         testing::InSequence seq;
@@ -57,11 +73,14 @@
         EXPECT_CALL(mock, sd_event_source_unref(expected_source))
             .WillOnce(Return(nullptr));
     }
+    EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
 }
 
 TEST_F(BaseTest, NewBaseNoRef)
 {
-    BaseImpl source(expected_source, std::false_type(), &mock);
+    EXPECT_CALL(mock, sd_event_ref(expected_event))
+        .WillOnce(Return(expected_event));
+    BaseImpl source(*event, expected_source, std::false_type());
 
     {
         testing::InSequence seq;
@@ -71,6 +90,7 @@
         EXPECT_CALL(mock, sd_event_source_unref(expected_source))
             .WillOnce(Return(nullptr));
     }
+    EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
 }
 
 class BaseMethodTest : public BaseTest
@@ -78,13 +98,16 @@
   protected:
     std::unique_ptr<BaseImpl> base;
 
-    void SetUp()
+    void SetUp() override
     {
-        base = std::make_unique<BaseImpl>(expected_source, std::false_type(),
-                                          &mock);
+        BaseTest::SetUp();
+        EXPECT_CALL(mock, sd_event_ref(expected_event))
+            .WillOnce(Return(expected_event));
+        base = std::make_unique<BaseImpl>(*event, expected_source,
+                                          std::false_type());
     }
 
-    void TearDown()
+    void TearDown() override
     {
         {
             testing::InSequence seq;
@@ -94,9 +117,19 @@
             EXPECT_CALL(mock, sd_event_source_unref(expected_source))
                 .WillOnce(Return(nullptr));
         }
+        EXPECT_CALL(mock, sd_event_unref(expected_event))
+            .WillOnce(Return(nullptr));
+        base.reset();
+        BaseTest::TearDown();
     }
 };
 
+TEST_F(BaseMethodTest, GetEvent)
+{
+    EXPECT_NE(event.get(), &base->get_event());
+    EXPECT_EQ(event->get(), base->get_event().get());
+}
+
 TEST_F(BaseMethodTest, GetDescriptionSuccess)
 {
     const char* expected = "test_desc";