Skip to content
Snippets Groups Projects
Unverified Commit 5ba29a95 authored by jdfa's avatar jdfa Committed by GitHub
Browse files

#487 Handled Space and Enter events for Radiobox (#491)


Return true when an event a RadioBox is state change due to pressing Return or space.

Co-authored-by: default avatarArthurSonzogni <sonzogniarthur@gmail.com>
parent c61fadd8
No related branches found
No related tags found
No related merge requests found
...@@ -103,8 +103,8 @@ class RadioboxBase : public ComponentBase { ...@@ -103,8 +103,8 @@ class RadioboxBase : public ComponentBase {
if (event == Event::Character(' ') || event == Event::Return) { if (event == Event::Character(' ') || event == Event::Return) {
*selected_ = hovered_; *selected_ = hovered_;
//*selected_ = focused_entry();
option_->on_change(); option_->on_change();
return true;
} }
return false; return false;
......
...@@ -11,106 +11,205 @@ ...@@ -11,106 +11,205 @@
namespace ftxui { namespace ftxui {
TEST(RadioboxTest, Navigation) { TEST(RadioboxTest, NavigationArrow) {
int selected = 0; int selected = 0;
std::vector<std::string> entries = {"1", "2", "3"}; std::vector<std::string> entries = {"1", "2", "3"};
auto radiobox = Radiobox(&entries, &selected); auto radiobox = Radiobox(&entries, &selected);
// With arrow key. // Down + Return
EXPECT_EQ(selected, 0); EXPECT_EQ(selected, 0);
radiobox->OnEvent(Event::ArrowDown); EXPECT_TRUE(radiobox->OnEvent(Event::ArrowDown));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 0);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 1);
EXPECT_TRUE(radiobox->OnEvent(Event::ArrowDown));
EXPECT_EQ(selected, 1); EXPECT_EQ(selected, 1);
radiobox->OnEvent(Event::ArrowDown); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 2);
EXPECT_FALSE(radiobox->OnEvent(Event::ArrowDown));
EXPECT_EQ(selected, 2); EXPECT_EQ(selected, 2);
radiobox->OnEvent(Event::ArrowDown); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 2);
// Up + Return
EXPECT_TRUE(radiobox->OnEvent(Event::ArrowUp));
EXPECT_EQ(selected, 2); EXPECT_EQ(selected, 2);
radiobox->OnEvent(Event::ArrowUp); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return);
EXPECT_EQ(selected, 1); EXPECT_EQ(selected, 1);
radiobox->OnEvent(Event::ArrowUp); EXPECT_TRUE(radiobox->OnEvent(Event::ArrowUp));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 1);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 0);
EXPECT_FALSE(radiobox->OnEvent(Event::ArrowUp));
EXPECT_EQ(selected, 0); EXPECT_EQ(selected, 0);
radiobox->OnEvent(Event::ArrowUp); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return);
EXPECT_EQ(selected, 0); EXPECT_EQ(selected, 0);
}
TEST(RadioboxTest, NavigationArrowVim) {
int selected = 0;
std::vector<std::string> entries = {"1", "2", "3"};
auto radiobox = Radiobox(&entries, &selected);
// With vim like characters. // J + Return
EXPECT_EQ(selected, 0);
EXPECT_TRUE(radiobox->OnEvent(Event::Character('j')));
EXPECT_EQ(selected, 0); EXPECT_EQ(selected, 0);
radiobox->OnEvent(Event::Character('j')); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return);
EXPECT_EQ(selected, 1); EXPECT_EQ(selected, 1);
radiobox->OnEvent(Event::Character('j')); EXPECT_TRUE(radiobox->OnEvent(Event::Character('j')));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 1);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 2);
EXPECT_FALSE(radiobox->OnEvent(Event::Character('j')));
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 2); EXPECT_EQ(selected, 2);
radiobox->OnEvent(Event::Character('j'));
radiobox->OnEvent(Event::Return); // K + Return
EXPECT_TRUE(radiobox->OnEvent(Event::Character('k')));
EXPECT_EQ(selected, 2); EXPECT_EQ(selected, 2);
radiobox->OnEvent(Event::Character('k')); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 1);
EXPECT_TRUE(radiobox->OnEvent(Event::Character('k')));
EXPECT_EQ(selected, 1); EXPECT_EQ(selected, 1);
radiobox->OnEvent(Event::Character('k')); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 0);
EXPECT_FALSE(radiobox->OnEvent(Event::Character('k')));
EXPECT_EQ(selected, 0); EXPECT_EQ(selected, 0);
radiobox->OnEvent(Event::Character('k')); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return);
EXPECT_EQ(selected, 0); EXPECT_EQ(selected, 0);
}
// With more entries TEST(RadioboxTest, NavigationTab) {
entries = {"1", "2", "3"}; int selected = 0;
std::vector<std::string> entries = {"1", "2", "3"};
auto radiobox = Radiobox(&entries, &selected);
// Tab + Return
EXPECT_EQ(selected, 0); EXPECT_EQ(selected, 0);
radiobox->OnEvent(Event::ArrowDown); EXPECT_TRUE(radiobox->OnEvent(Event::Tab));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 0);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 1);
EXPECT_TRUE(radiobox->OnEvent(Event::Tab));
EXPECT_EQ(selected, 1); EXPECT_EQ(selected, 1);
radiobox->OnEvent(Event::ArrowDown); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return);
EXPECT_EQ(selected, 2); EXPECT_EQ(selected, 2);
radiobox->OnEvent(Event::ArrowDown); EXPECT_TRUE(radiobox->OnEvent(Event::Tab));
radiobox->OnEvent(Event::Return);
EXPECT_EQ(selected, 2); EXPECT_EQ(selected, 2);
radiobox->OnEvent(Event::ArrowUp); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 0);
EXPECT_TRUE(radiobox->OnEvent(Event::Tab));
EXPECT_EQ(selected, 0);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 1);
EXPECT_TRUE(radiobox->OnEvent(Event::Tab));
EXPECT_EQ(selected, 1); EXPECT_EQ(selected, 1);
radiobox->OnEvent(Event::ArrowUp); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 2);
// TabReverse + Return
EXPECT_TRUE(radiobox->OnEvent(Event::TabReverse));
EXPECT_EQ(selected, 2);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 1);
EXPECT_TRUE(radiobox->OnEvent(Event::TabReverse));
EXPECT_EQ(selected, 1);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 0); EXPECT_EQ(selected, 0);
radiobox->OnEvent(Event::ArrowUp); EXPECT_TRUE(radiobox->OnEvent(Event::TabReverse));
radiobox->OnEvent(Event::Return);
EXPECT_EQ(selected, 0); EXPECT_EQ(selected, 0);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 2);
EXPECT_TRUE(radiobox->OnEvent(Event::TabReverse));
EXPECT_EQ(selected, 2);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 1);
EXPECT_TRUE(radiobox->OnEvent(Event::TabReverse));
EXPECT_EQ(selected, 1);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
}
TEST(RadioboxTest, NavigationHome) {
int selected = 0;
std::vector<std::string> entries = {"1", "2", "3"};
auto radiobox = Radiobox(&entries, &selected);
// With tab. selected = 0;
EXPECT_FALSE(radiobox->OnEvent(Event::Home));
EXPECT_EQ(selected, 0); EXPECT_EQ(selected, 0);
radiobox->OnEvent(Event::Tab);
radiobox->OnEvent(Event::Return); selected = 1;
EXPECT_FALSE(radiobox->OnEvent(Event::Home));
EXPECT_EQ(selected, 1); EXPECT_EQ(selected, 1);
radiobox->OnEvent(Event::Tab); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 0);
EXPECT_FALSE(radiobox->OnEvent(Event::Home));
EXPECT_EQ(selected, 0);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 0);
selected = 2;
EXPECT_FALSE(radiobox->OnEvent(Event::Home));
EXPECT_EQ(selected, 2); EXPECT_EQ(selected, 2);
radiobox->OnEvent(Event::Tab); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return);
EXPECT_EQ(selected, 0); EXPECT_EQ(selected, 0);
radiobox->OnEvent(Event::Tab); EXPECT_FALSE(radiobox->OnEvent(Event::Home));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 0);
EXPECT_EQ(selected, 1); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Tab); EXPECT_EQ(selected, 0);
radiobox->OnEvent(Event::Return); }
TEST(RadioboxTest, NavigationEnd) {
int selected = 0;
std::vector<std::string> entries = {"1", "2", "3"};
auto radiobox = Radiobox(&entries, &selected);
selected = 0;
EXPECT_TRUE(radiobox->OnEvent(Event::End));
EXPECT_EQ(selected, 0);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 2);
EXPECT_FALSE(radiobox->OnEvent(Event::End));
EXPECT_EQ(selected, 2);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 2); EXPECT_EQ(selected, 2);
radiobox->OnEvent(Event::TabReverse);
radiobox->OnEvent(Event::Return); selected = 1;
EXPECT_FALSE(radiobox->OnEvent(Event::End));
EXPECT_EQ(selected, 1); EXPECT_EQ(selected, 1);
radiobox->OnEvent(Event::TabReverse); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 2);
EXPECT_EQ(selected, 0); EXPECT_FALSE(radiobox->OnEvent(Event::End));
radiobox->OnEvent(Event::TabReverse); EXPECT_EQ(selected, 2);
radiobox->OnEvent(Event::Return); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 2);
selected = 2;
EXPECT_FALSE(radiobox->OnEvent(Event::End));
EXPECT_EQ(selected, 2);
EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 2); EXPECT_EQ(selected, 2);
radiobox->OnEvent(Event::TabReverse); }
radiobox->OnEvent(Event::Return);
TEST(RadioboxTest, EventSpace) {
int selected = 0;
std::vector<std::string> entries = {"1", "2", "3"};
auto radiobox = Radiobox(&entries, &selected);
EXPECT_EQ(selected, 0);
EXPECT_TRUE(radiobox->OnEvent(Event::ArrowDown));
EXPECT_EQ(selected, 0);
EXPECT_TRUE(radiobox->OnEvent(Event::Character(' ')));
EXPECT_EQ(selected, 1); EXPECT_EQ(selected, 1);
radiobox->OnEvent(Event::TabReverse); EXPECT_TRUE(radiobox->OnEvent(Event::ArrowDown));
radiobox->OnEvent(Event::Return); EXPECT_EQ(selected, 1);
EXPECT_TRUE(radiobox->OnEvent(Event::Character(' ')));
EXPECT_EQ(selected, 2);
EXPECT_FALSE(radiobox->OnEvent(Event::ArrowDown));
EXPECT_EQ(selected, 2);
EXPECT_TRUE(radiobox->OnEvent(Event::Character(' ')));
EXPECT_EQ(selected, 2);
} }
TEST(RadioboxTest, RemoveEntries) { TEST(RadioboxTest, RemoveEntries) {
...@@ -124,9 +223,9 @@ TEST(RadioboxTest, RemoveEntries) { ...@@ -124,9 +223,9 @@ TEST(RadioboxTest, RemoveEntries) {
EXPECT_EQ(selected, 0); EXPECT_EQ(selected, 0);
EXPECT_EQ(focused_entry, 0); EXPECT_EQ(focused_entry, 0);
radiobox->OnEvent(Event::ArrowDown); EXPECT_TRUE(radiobox->OnEvent(Event::ArrowDown));
radiobox->OnEvent(Event::ArrowDown); EXPECT_TRUE(radiobox->OnEvent(Event::ArrowDown));
radiobox->OnEvent(Event::Return); EXPECT_TRUE(radiobox->OnEvent(Event::Return));
EXPECT_EQ(selected, 2); EXPECT_EQ(selected, 2);
EXPECT_EQ(focused_entry, 2); EXPECT_EQ(focused_entry, 2);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment