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