Skip to content

Commit

Permalink
Unit test updates
Browse files Browse the repository at this point in the history
  • Loading branch information
gansm committed Aug 23, 2023
1 parent b0a3377 commit 81ee143
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 17 deletions.
14 changes: 7 additions & 7 deletions examples/eventloop.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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 << "'"
Expand Down
30 changes: 20 additions & 10 deletions test/eventloop-monitor-test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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();
}

//----------------------------------------------------------------------
Expand Down

0 comments on commit 81ee143

Please sign in to comment.