diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ad42a2..851bcfc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -157,6 +157,7 @@ if (FTXUI_BUILD_TESTS AND GTEST_FOUND AND THREADS_FOUND) add_executable(tests src/ftxui/component/toggle_test.cpp src/ftxui/component/radiobox_test.cpp + src/ftxui/component/container_test.cpp src/ftxui/dom/gauge_test.cpp src/ftxui/dom/hbox_test.cpp src/ftxui/dom/text_test.cpp diff --git a/src/ftxui/component/container_test.cpp b/src/ftxui/component/container_test.cpp new file mode 100644 index 0000000..bcab985 --- /dev/null +++ b/src/ftxui/component/container_test.cpp @@ -0,0 +1,76 @@ +#include "ftxui/component/container.hpp" + +#include "gtest/gtest.h" + +using namespace ftxui; + +TEST(ContainerTest, HorizontalEvent) { + auto container = Container::Horizontal(); + Component c0, c1, c2; + container.Add(&c0); + container.Add(&c1); + container.Add(&c2); + + // With arrow key. + EXPECT_EQ(container.ActiveChild(), &c0); + container.OnEvent(Event::ArrowRight); + EXPECT_EQ(container.ActiveChild(), &c1); + container.OnEvent(Event::ArrowRight); + EXPECT_EQ(container.ActiveChild(), &c2); + container.OnEvent(Event::ArrowRight); + EXPECT_EQ(container.ActiveChild(), &c2); + container.OnEvent(Event::ArrowLeft); + EXPECT_EQ(container.ActiveChild(), &c1); + container.OnEvent(Event::ArrowLeft); + EXPECT_EQ(container.ActiveChild(), &c0); + container.OnEvent(Event::ArrowLeft); + EXPECT_EQ(container.ActiveChild(), &c0); + + // With arrow key in the wrong dimension. + container.OnEvent(Event::ArrowUp); + EXPECT_EQ(container.ActiveChild(), &c0); + container.OnEvent(Event::ArrowDown); + EXPECT_EQ(container.ActiveChild(), &c0); + + // With vim like characters. + EXPECT_EQ(container.ActiveChild(), &c0); + container.OnEvent(Event::Character('l')); + EXPECT_EQ(container.ActiveChild(), &c1); + container.OnEvent(Event::Character('l')); + EXPECT_EQ(container.ActiveChild(), &c2); + container.OnEvent(Event::Character('l')); + EXPECT_EQ(container.ActiveChild(), &c2); + container.OnEvent(Event::Character('h')); + EXPECT_EQ(container.ActiveChild(), &c1); + container.OnEvent(Event::Character('h')); + EXPECT_EQ(container.ActiveChild(), &c0); + container.OnEvent(Event::Character('h')); + EXPECT_EQ(container.ActiveChild(), &c0); + + // With vim like characters in the wrong direction. + container.OnEvent(Event::Character('j')); + EXPECT_EQ(container.ActiveChild(), &c0); + container.OnEvent(Event::Character('k')); + EXPECT_EQ(container.ActiveChild(), &c0); + + // With tab characters. + container.OnEvent(Event::Tab); + EXPECT_EQ(container.ActiveChild(), &c1); + container.OnEvent(Event::Tab); + EXPECT_EQ(container.ActiveChild(), &c2); + container.OnEvent(Event::Tab); + EXPECT_EQ(container.ActiveChild(), &c0); + container.OnEvent(Event::Tab); + EXPECT_EQ(container.ActiveChild(), &c1); + container.OnEvent(Event::Tab); + EXPECT_EQ(container.ActiveChild(), &c2); + container.OnEvent(Event::TabReverse); + EXPECT_EQ(container.ActiveChild(), &c1); + container.OnEvent(Event::TabReverse); + EXPECT_EQ(container.ActiveChild(), &c0); + container.OnEvent(Event::TabReverse); + EXPECT_EQ(container.ActiveChild(), &c2); + container.OnEvent(Event::TabReverse); + EXPECT_EQ(container.ActiveChild(), &c1); + container.OnEvent(Event::TabReverse); +} diff --git a/src/ftxui/component/toggle_test.cpp b/src/ftxui/component/toggle_test.cpp index 090e5e0..e2a5aca 100644 --- a/src/ftxui/component/toggle_test.cpp +++ b/src/ftxui/component/toggle_test.cpp @@ -2,7 +2,6 @@ #include "gtest/gtest.h" -using namespace ftxui; using namespace ftxui; TEST(ToggleTest, leftRightArrow) {