#include "common.hh" #include "logger.hh" #include "looper.hh" #include "signal_handler.hh" #include class SignalHandlerTestFixture : public testing::TestWithParam> { }; TEST_P(SignalHandlerTestFixture, raise_before_loop) { bool called = false; auto logger = Logger::create_null(); std::shared_ptr looper = Looper::create(); auto handler = SignalHandler::create(looper, GetParam().first, [&called, &looper] { called = true; looper->quit(); }); raise(GetParam().second); looper->run(logger.get()); EXPECT_TRUE(called); } TEST_P(SignalHandlerTestFixture, raise_during_loop) { bool called = false; auto logger = Logger::create_null(); std::shared_ptr looper = Looper::create(); auto handler = SignalHandler::create(looper, GetParam().first, [&called, &looper] { called = true; looper->quit(); }); looper->schedule(0, [] (uint32_t) { raise(GetParam().second); }); looper->run(logger.get()); EXPECT_TRUE(called); } TEST_P(SignalHandlerTestFixture, no_raise) { bool called = false; auto logger = Logger::create_null(); std::shared_ptr looper = Looper::create(); auto handler = SignalHandler::create(looper, GetParam().first, [&called, &looper] { called = true; looper->quit(); }); looper->schedule(0, [&looper] (uint32_t) { looper->quit(); }); looper->run(logger.get()); EXPECT_FALSE(called); } INSTANTIATE_TEST_SUITE_P( SignalHandlerTests, SignalHandlerTestFixture, testing::Values(std::make_pair(SignalHandler::Signal::INT, SIGINT), std::make_pair(SignalHandler::Signal::TERM, SIGTERM), std::make_pair(SignalHandler::Signal::HUP, SIGHUP)));