18f90e28bSWilliam A. Kennington III #include <gmock/gmock.h> 28f90e28bSWilliam A. Kennington III #include <gtest/gtest.h> 3631c2460SWilliam A. Kennington III #include <memory> 48f90e28bSWilliam A. Kennington III #include <sdeventplus/event.hpp> 58f90e28bSWilliam A. Kennington III #include <sdeventplus/exception.hpp> 68f90e28bSWilliam A. Kennington III #include <sdeventplus/test/sdevent.hpp> 78f90e28bSWilliam A. Kennington III #include <type_traits> 88f90e28bSWilliam A. Kennington III 98f90e28bSWilliam A. Kennington III namespace sdeventplus 108f90e28bSWilliam A. Kennington III { 118f90e28bSWilliam A. Kennington III namespace 128f90e28bSWilliam A. Kennington III { 138f90e28bSWilliam A. Kennington III 148f90e28bSWilliam A. Kennington III using testing::DoAll; 158f90e28bSWilliam A. Kennington III using testing::Return; 168f90e28bSWilliam A. Kennington III using testing::SetArgPointee; 178f90e28bSWilliam A. Kennington III 188f90e28bSWilliam A. Kennington III class EventTest : public testing::Test 198f90e28bSWilliam A. Kennington III { 208f90e28bSWilliam A. Kennington III protected: 21*0a816c5dSWilliam A. Kennington III testing::StrictMock<test::SdEventMock> mock; 228f90e28bSWilliam A. Kennington III sd_event* const expected_event = reinterpret_cast<sd_event*>(1234); 238f90e28bSWilliam A. Kennington III }; 248f90e28bSWilliam A. Kennington III 258f90e28bSWilliam A. Kennington III TEST_F(EventTest, NewEventRef) 268f90e28bSWilliam A. Kennington III { 278f90e28bSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_ref(expected_event)) 288f90e28bSWilliam A. Kennington III .WillOnce(Return(expected_event)); 298f90e28bSWilliam A. Kennington III Event event(expected_event, &mock); 308f90e28bSWilliam A. Kennington III 318f90e28bSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 328f90e28bSWilliam A. Kennington III } 338f90e28bSWilliam A. Kennington III 348f90e28bSWilliam A. Kennington III TEST_F(EventTest, NewEventNoRef) 358f90e28bSWilliam A. Kennington III { 368f90e28bSWilliam A. Kennington III Event event(expected_event, std::false_type(), &mock); 378f90e28bSWilliam A. Kennington III 388f90e28bSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 398f90e28bSWilliam A. Kennington III } 408f90e28bSWilliam A. Kennington III 418f90e28bSWilliam A. Kennington III TEST_F(EventTest, GetNewEvent) 428f90e28bSWilliam A. Kennington III { 438f90e28bSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_new(testing::_)) 448f90e28bSWilliam A. Kennington III .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0))); 458f90e28bSWilliam A. Kennington III Event event = Event::get_new(&mock); 468f90e28bSWilliam A. Kennington III 478f90e28bSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 488f90e28bSWilliam A. Kennington III } 498f90e28bSWilliam A. Kennington III 508f90e28bSWilliam A. Kennington III TEST_F(EventTest, GetNewEventFail) 518f90e28bSWilliam A. Kennington III { 528f90e28bSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_new(testing::_)).WillOnce(Return(-EINVAL)); 538f90e28bSWilliam A. Kennington III EXPECT_THROW(Event::get_new(&mock), SdEventError); 548f90e28bSWilliam A. Kennington III } 558f90e28bSWilliam A. Kennington III 568f90e28bSWilliam A. Kennington III TEST_F(EventTest, GetDefaultEvent) 578f90e28bSWilliam A. Kennington III { 588f90e28bSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_default(testing::_)) 598f90e28bSWilliam A. Kennington III .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0))); 608f90e28bSWilliam A. Kennington III Event event = Event::get_default(&mock); 618f90e28bSWilliam A. Kennington III 628f90e28bSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 638f90e28bSWilliam A. Kennington III } 648f90e28bSWilliam A. Kennington III 658f90e28bSWilliam A. Kennington III TEST_F(EventTest, GetDefaultEventFail) 668f90e28bSWilliam A. Kennington III { 678f90e28bSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_default(testing::_)).WillOnce(Return(-EINVAL)); 688f90e28bSWilliam A. Kennington III EXPECT_THROW(Event::get_default(&mock), SdEventError); 698f90e28bSWilliam A. Kennington III } 708f90e28bSWilliam A. Kennington III 71631c2460SWilliam A. Kennington III class EventMethodTest : public EventTest 728f90e28bSWilliam A. Kennington III { 73631c2460SWilliam A. Kennington III protected: 74631c2460SWilliam A. Kennington III std::unique_ptr<Event> event; 75631c2460SWilliam A. Kennington III 76631c2460SWilliam A. Kennington III void SetUp() 77631c2460SWilliam A. Kennington III { 78631c2460SWilliam A. Kennington III event = 79631c2460SWilliam A. Kennington III std::make_unique<Event>(expected_event, std::false_type(), &mock); 808f90e28bSWilliam A. Kennington III } 818f90e28bSWilliam A. Kennington III 82631c2460SWilliam A. Kennington III void TearDown() 83631c2460SWilliam A. Kennington III { 84631c2460SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_unref(expected_event)) 85631c2460SWilliam A. Kennington III .WillOnce(Return(nullptr)); 86631c2460SWilliam A. Kennington III } 87631c2460SWilliam A. Kennington III }; 88631c2460SWilliam A. Kennington III 89631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, LoopSuccess) 90631c2460SWilliam A. Kennington III { 91631c2460SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(0)); 92631c2460SWilliam A. Kennington III EXPECT_EQ(0, event->loop()); 93631c2460SWilliam A. Kennington III } 94631c2460SWilliam A. Kennington III 95631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, LoopUserError) 968f90e28bSWilliam A. Kennington III { 978f90e28bSWilliam A. Kennington III const int user_error = 10; 988f90e28bSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_loop(expected_event)) 998f90e28bSWilliam A. Kennington III .WillOnce(Return(user_error)); 1008f90e28bSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 1018f90e28bSWilliam A. Kennington III EXPECT_EQ(user_error, 1028f90e28bSWilliam A. Kennington III Event(expected_event, std::false_type(), &mock).loop()); 1038f90e28bSWilliam A. Kennington III } 1048f90e28bSWilliam A. Kennington III 105631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, LoopInternalError) 1068f90e28bSWilliam A. Kennington III { 1078f90e28bSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(-EINVAL)); 108631c2460SWilliam A. Kennington III EXPECT_THROW(event->loop(), SdEventError); 109631c2460SWilliam A. Kennington III } 110631c2460SWilliam A. Kennington III 111631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, GetWatchdogSuccess) 112631c2460SWilliam A. Kennington III { 113631c2460SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_get_watchdog(expected_event)) 114631c2460SWilliam A. Kennington III .WillOnce(Return(0)); 115631c2460SWilliam A. Kennington III EXPECT_EQ(0, event->get_watchdog()); 116631c2460SWilliam A. Kennington III 117631c2460SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_get_watchdog(expected_event)) 118631c2460SWilliam A. Kennington III .WillOnce(Return(2)); 119631c2460SWilliam A. Kennington III EXPECT_EQ(2, event->get_watchdog()); 120631c2460SWilliam A. Kennington III } 121631c2460SWilliam A. Kennington III 122631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, GetWatchdogError) 123631c2460SWilliam A. Kennington III { 124631c2460SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_get_watchdog(expected_event)) 125631c2460SWilliam A. Kennington III .WillOnce(Return(-EINVAL)); 126631c2460SWilliam A. Kennington III EXPECT_THROW(event->get_watchdog(), SdEventError); 127631c2460SWilliam A. Kennington III } 128631c2460SWilliam A. Kennington III 129631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, SetWatchdogSuccess) 130631c2460SWilliam A. Kennington III { 131631c2460SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 0)) 132631c2460SWilliam A. Kennington III .WillOnce(Return(0)); 133631c2460SWilliam A. Kennington III EXPECT_EQ(0, event->set_watchdog(0)); 134631c2460SWilliam A. Kennington III 135631c2460SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 1)) 136631c2460SWilliam A. Kennington III .WillOnce(Return(2)); 137631c2460SWilliam A. Kennington III EXPECT_EQ(2, event->set_watchdog(1)); 138631c2460SWilliam A. Kennington III } 139631c2460SWilliam A. Kennington III 140631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, SetWatchdogError) 141631c2460SWilliam A. Kennington III { 142631c2460SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 1)) 143631c2460SWilliam A. Kennington III .WillOnce(Return(-EINVAL)); 144631c2460SWilliam A. Kennington III EXPECT_THROW(event->set_watchdog(1), SdEventError); 1458f90e28bSWilliam A. Kennington III } 1468f90e28bSWilliam A. Kennington III 1478f90e28bSWilliam A. Kennington III } // namespace 1488f90e28bSWilliam A. Kennington III } // namespace sdeventplus 149