From 81ee143d227e68912c7d3294db5e4fd9bf602fd3 Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Wed, 23 Aug 2023 06:54:19 +0200 Subject: [PATCH] Unit test updates --- examples/eventloop.cpp | 14 +++++++------- test/eventloop-monitor-test.cpp | 30 ++++++++++++++++++++---------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/examples/eventloop.cpp b/examples/eventloop.cpp index 4ce245f7..2304c60c 100644 --- a/examples/eventloop.cpp +++ b/examples/eventloop.cpp @@ -60,18 +60,18 @@ auto main() -> int finalcut::SignalMonitor sig_int_monitor{&loop}; finalcut::SignalMonitor sig_abrt_monitor{&loop}; finalcut::IoMonitor stdin_monitor{&loop}; + finalcut::FTermios::init(); + auto stdin_no = finalcut::FTermios::getStdIn(); // Save terminal setting and set terminal to raw mode // (no echo, no line buffering). - tcgetattr (STDIN_FILENO, &Global::original_term_io_settings); + tcgetattr (stdin_no, &Global::original_term_io_settings); atexit (onExit); struct termios new_term_io_settings{Global::original_term_io_settings}; new_term_io_settings.c_lflag &= uInt(~(ECHO | ICANON)); - tcsetattr (STDIN_FILENO, TCSAFLUSH, &new_term_io_settings); + tcsetattr (stdin_no, TCSAFLUSH, &new_term_io_settings); // Set file descriptor of stdin to non-blocking mode - finalcut::FTermios::init(); - auto stdin_no = finalcut::FTermios::getStdIn(); int stdin_flags{fcntl(stdin_no, F_GETFL, 0)}; (void)fcntl(stdin_no, F_SETFL, stdin_flags | O_NONBLOCK); @@ -112,12 +112,12 @@ auto main() -> int } , nullptr ); - stdin_monitor.init ( STDIN_FILENO + stdin_monitor.init ( stdin_no , POLLIN , [] (const finalcut::Monitor* monitor, short) { - uint8_t Char{0}; - const ssize_t bytes = ::read(monitor->getFileDescriptor(), &Char, 1); + char Char{'\0'}; + const auto bytes = ::read(monitor->getFileDescriptor(), &Char, 1); if ( bytes > 0 ) std::cout << "typed in: '" << Char << "'" diff --git a/test/eventloop-monitor-test.cpp b/test/eventloop-monitor-test.cpp index 474f0fa2..db724e87 100644 --- a/test/eventloop-monitor-test.cpp +++ b/test/eventloop-monitor-test.cpp @@ -285,27 +285,38 @@ void EventloopMonitorTest::setMonitorTest() void EventloopMonitorTest::IoMonitorTest() { finalcut::FTermios::init(); + finalcut::FTermios::storeTTYsettings(); + //finalcut::FTermios::setRawMode(); auto stdin_no = finalcut::FTermios::getStdIn(); auto stdin_status_flags = fcntl(stdin_no, F_GETFL); - stdin_status_flags |= O_NONBLOCK; - fcntl (stdin_no, F_SETFL, stdin_status_flags); + // Keyboard interval timeout 75 ms + std::this_thread::sleep_for(std::chrono::milliseconds(75)); finalcut::EventLoop eloop{}; signal_handler = [this] (int) { keyboard_input("A"); + // Keyboard interval timeout 75 ms + std::this_thread::sleep_for(std::chrono::milliseconds(75)); }; signal(SIGALRM, sigHandler); // Register signal handler finalcut::IoMonitor io_monitor{&eloop}; const finalcut::FString& io_monitor_classname = io_monitor.getClassName(); CPPUNIT_ASSERT ( io_monitor_classname == "IoMonitor" ); - auto callback_handler = [&eloop] (const finalcut::Monitor* mon, short) + auto callback_handler = [&stdin_status_flags, &stdin_no, &eloop] (const finalcut::Monitor* mon, short) { - std::cout << "\nIoMonitor callback handle"; - uint8_t buf{0}; - const auto bytes = ::read(mon->getFileDescriptor(), &buf, 1); - std::cout << "\nBytes: " << bytes << " read \n"; + std::cout << "\nIoMonitor callback handle" << std::flush; + // Keyboard interval timeout 75 ms + std::this_thread::sleep_for(std::chrono::milliseconds(75)); + stdin_status_flags |= O_NONBLOCK; + CPPUNIT_ASSERT ( fcntl(stdin_no, F_SETFL, stdin_status_flags) != -1 ); + char read_character{'\0'}; + CPPUNIT_ASSERT ( read_character == '\0' ); + const auto bytes = ::read(mon->getFileDescriptor(), &read_character, 1); + stdin_status_flags &= ~O_NONBLOCK; + CPPUNIT_ASSERT ( fcntl(stdin_no, F_SETFL, stdin_status_flags) != -1 ); + std::cout << "\nread " << bytes << " byte\n"; CPPUNIT_ASSERT ( bytes == 1 ); - CPPUNIT_ASSERT ( buf == 'A' ); + CPPUNIT_ASSERT ( read_character == 'A' ); eloop.leave(); }; io_monitor.init (stdin_no, POLLIN, callback_handler, nullptr); @@ -315,8 +326,7 @@ void EventloopMonitorTest::IoMonitorTest() CPPUNIT_ASSERT ( eloop.run() == 0 ); signal(SIGALRM, SIG_DFL); signal_handler = [] (int) { }; // Do nothing - stdin_status_flags &= ~O_NONBLOCK; - fcntl (stdin_no, F_SETFL, stdin_status_flags); + finalcut::FTermios::restoreTTYsettings(); } //----------------------------------------------------------------------