1 #include <gmock/gmock.h> 2 #include <gtest/gtest.h> 3 #include <sdeventplus/event.hpp> 4 #include <sdeventplus/exception.hpp> 5 #include <sdeventplus/test/sdevent.hpp> 6 #include <type_traits> 7 8 namespace sdeventplus 9 { 10 namespace 11 { 12 13 using testing::DoAll; 14 using testing::Return; 15 using testing::SetArgPointee; 16 17 class EventTest : public testing::Test 18 { 19 protected: 20 testing::StrictMock<SdEventMock> mock; 21 sd_event *const expected_event = reinterpret_cast<sd_event *>(1234); 22 }; 23 24 TEST_F(EventTest, NewEventRef) 25 { 26 EXPECT_CALL(mock, sd_event_ref(expected_event)) 27 .WillOnce(Return(expected_event)); 28 Event event(expected_event, &mock); 29 30 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 31 } 32 33 TEST_F(EventTest, NewEventNoRef) 34 { 35 Event event(expected_event, std::false_type(), &mock); 36 37 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 38 } 39 40 TEST_F(EventTest, GetNewEvent) 41 { 42 EXPECT_CALL(mock, sd_event_new(testing::_)) 43 .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0))); 44 Event event = Event::get_new(&mock); 45 46 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 47 } 48 49 TEST_F(EventTest, GetNewEventFail) 50 { 51 EXPECT_CALL(mock, sd_event_new(testing::_)).WillOnce(Return(-EINVAL)); 52 EXPECT_THROW(Event::get_new(&mock), SdEventError); 53 } 54 55 TEST_F(EventTest, GetDefaultEvent) 56 { 57 EXPECT_CALL(mock, sd_event_default(testing::_)) 58 .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0))); 59 Event event = Event::get_default(&mock); 60 61 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 62 } 63 64 TEST_F(EventTest, GetDefaultEventFail) 65 { 66 EXPECT_CALL(mock, sd_event_default(testing::_)).WillOnce(Return(-EINVAL)); 67 EXPECT_THROW(Event::get_default(&mock), SdEventError); 68 } 69 70 TEST_F(EventTest, LoopSuccess) 71 { 72 EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(0)); 73 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 74 EXPECT_EQ(0, Event(expected_event, std::false_type(), &mock).loop()); 75 } 76 77 TEST_F(EventTest, LoopUserError) 78 { 79 const int user_error = 10; 80 EXPECT_CALL(mock, sd_event_loop(expected_event)) 81 .WillOnce(Return(user_error)); 82 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 83 EXPECT_EQ(user_error, 84 Event(expected_event, std::false_type(), &mock).loop()); 85 } 86 87 TEST_F(EventTest, LoopInternalError) 88 { 89 EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(-EINVAL)); 90 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 91 EXPECT_THROW(Event(expected_event, std::false_type(), &mock).loop(), 92 SdEventError); 93 } 94 95 } // namespace 96 } // namespace sdeventplus 97