mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2025-09-29 16:39:34 +08:00
Featre: Support ctrl+arrow in input. (#494)
CTRL+LEFT: Move the cursor to the beginning of the word. CTRL+RIGHT: Move the cursor to the beginning of the word. This was requested by: https://github.com/ArthurSonzogni/FTXUI/issues/490
This commit is contained in:
@@ -369,6 +369,124 @@ TEST(InputTest, MouseClickComplex) {
|
||||
EXPECT_EQ(option.cursor_position(), 4u);
|
||||
}
|
||||
|
||||
TEST(InputTest, CtrlArrowLeft) {
|
||||
std::string content = "word word 测ord wo测d word";
|
||||
// 0 5 10 15 20
|
||||
std::string placeholder;
|
||||
auto option = InputOption();
|
||||
option.cursor_position = 22;
|
||||
auto input = Input(&content, &placeholder, &option);
|
||||
|
||||
// Use CTRL+Left several time
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowLeftCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 20u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowLeftCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 15u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowLeftCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 10u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowLeftCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 5u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowLeftCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 0u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowLeftCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 0u);
|
||||
}
|
||||
|
||||
TEST(InputTest, CtrlArrowLeft2) {
|
||||
std::string content = " word word 测ord wo测d word ";
|
||||
// 0 3 6 9 12 15 18 21 24 27 30 33
|
||||
std::string placeholder;
|
||||
auto option = InputOption();
|
||||
option.cursor_position = 33;
|
||||
auto input = Input(&content, &placeholder, &option);
|
||||
|
||||
// Use CTRL+Left several time
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowLeftCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 27u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowLeftCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 21u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowLeftCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 15u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowLeftCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 9u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowLeftCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 3u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowLeftCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 0u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowLeftCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 0u);
|
||||
}
|
||||
|
||||
TEST(InputTest, CtrlArrowRight) {
|
||||
std::string content = "word word 测ord wo测d word";
|
||||
// 0 5 10 15 20
|
||||
std::string placeholder;
|
||||
auto option = InputOption();
|
||||
option.cursor_position = 2;
|
||||
auto input = Input(&content, &placeholder, &option);
|
||||
|
||||
// Use CTRL+Left several time
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowRightCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 4);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowRightCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 9);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowRightCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 14u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowRightCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 19u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowRightCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 24u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowRightCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 24u);
|
||||
}
|
||||
|
||||
TEST(InputTest, CtrlArrowRight2) {
|
||||
std::string content = " word word 测ord wo测d word ";
|
||||
// 0 3 6 9 12 15 18 21 24 27 30 33
|
||||
std::string placeholder;
|
||||
auto option = InputOption();
|
||||
option.cursor_position = 0;
|
||||
auto input = Input(&content, &placeholder, &option);
|
||||
|
||||
// Use CTRL+Left several time
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowRightCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 7u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowRightCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 13u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowRightCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 19u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowRightCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 25u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowRightCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 31u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowRightCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 34u);
|
||||
|
||||
EXPECT_TRUE(input->OnEvent(Event::ArrowRightCtrl));
|
||||
EXPECT_EQ(option.cursor_position(), 34u);
|
||||
}
|
||||
|
||||
} // namespace ftxui
|
||||
|
||||
// Copyright 2021 Arthur Sonzogni. All rights reserved.
|
||||
|
Reference in New Issue
Block a user