#include // for Test, TestInfo (ptr only), TEST, EXPECT_EQ, Message, TestPartResult #include // for raise, SIGABRT, SIGFPE, SIGILL, SIGINT, SIGSEGV, SIGTERM #include // for Event, Event::Custom #include // for _Swallow_assign, ignore #include "ftxui/component/component.hpp" // for Renderer #include "ftxui/component/screen_interactive.hpp" #include "ftxui/dom/elements.hpp" // for text, Element namespace ftxui { namespace { bool TestSignal(int signal) { int called = 0; // The tree of components. This defines how to navigate using the keyboard. auto component = Renderer([&] { called++; std::ignore = std::raise(signal); called++; return text(""); }); auto screen = ScreenInteractive::FitComponent(); screen.Loop(component); EXPECT_EQ(called, 2); return true; } } // namespace TEST(ScreenInteractive, Signal_SIGTERM) { TestSignal(SIGTERM); } TEST(ScreenInteractive, Signal_SIGSEGV) { TestSignal(SIGSEGV); } TEST(ScreenInteractive, Signal_SIGINT) { TestSignal(SIGINT); } TEST(ScreenInteractive, Signal_SIGILL) { TestSignal(SIGILL); } TEST(ScreenInteractive, Signal_SIGABRT) { TestSignal(SIGABRT); } TEST(ScreenInteractive, Signal_SIGFPE) { TestSignal(SIGFPE); } // Regression test for: // https://github.com/ArthurSonzogni/FTXUI/issues/402 TEST(ScreenInteractive, PostEventToNonActive) { auto screen = ScreenInteractive::FitComponent(); screen.Post(Event::Custom); } // Regression test for: // https://github.com/ArthurSonzogni/FTXUI/issues/402 TEST(ScreenInteractive, PostTaskToNonActive) { auto screen = ScreenInteractive::FitComponent(); screen.Post([] {}); } } // namespace ftxui // Copyright 2021 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file.