Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(917)

Unified Diff: ui/views/controls/textfield/textfield_unittest.cc

Issue 2228833002: MacViews: Fix behavior of move and select commands when selection direction changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@use_text_commands
Patch Set: Add apple rdar in comment. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/views/controls/textfield/textfield_unittest.cc
diff --git a/ui/views/controls/textfield/textfield_unittest.cc b/ui/views/controls/textfield/textfield_unittest.cc
index affd8dc47159c6d0273660df2bac6fd74e2163d5..4885f7a177d04c979c3b138cbd1e3b513a8170b1 100644
--- a/ui/views/controls/textfield/textfield_unittest.cc
+++ b/ui/views/controls/textfield/textfield_unittest.cc
@@ -27,6 +27,7 @@
#include "ui/base/ime/input_method_base.h"
#include "ui/base/ime/input_method_delegate.h"
#include "ui/base/ime/input_method_factory.h"
+#include "ui/base/ime/text_edit_commands.h"
#include "ui/base/ime/text_input_client.h"
#include "ui/base/ui_base_switches.h"
#include "ui/base/ui_base_switches_util.h"
@@ -832,7 +833,218 @@ TEST_F(TextfieldTest, ControlAndSelectTest) {
SendEndEvent(true);
EXPECT_STR_EQ("two three", textfield_->GetSelectedText());
SendHomeEvent(true);
+
+// On Mac, the existing selection should be extended.
+#if defined(OS_MACOSX)
+ EXPECT_STR_EQ("ZERO two three", textfield_->GetSelectedText());
+#else
EXPECT_STR_EQ("ZERO ", textfield_->GetSelectedText());
+#endif
+}
+
+TEST_F(TextfieldTest, WordSelection) {
+ InitTextfield();
+ textfield_->SetText(ASCIIToUTF16("12 34567 89"));
+
+ // Place the cursor after "5".
+ textfield_->SetSelectionRange(gfx::Range(6));
+
+ // Select word towards right.
+ SendWordEvent(ui::VKEY_RIGHT, true);
+ EXPECT_STR_EQ("67", textfield_->GetSelectedText());
+ SendWordEvent(ui::VKEY_RIGHT, true);
+ EXPECT_STR_EQ("67 89", textfield_->GetSelectedText());
+
+ // Select word towards left.
+ SendWordEvent(ui::VKEY_LEFT, true);
+ EXPECT_STR_EQ("67 ", textfield_->GetSelectedText());
+ SendWordEvent(ui::VKEY_LEFT, true);
+
+// On Mac, the selection should reduce to a caret when the selection direction
+// changes for a word selection.
+#if defined(OS_MACOSX)
+ EXPECT_EQ(gfx::Range(6), textfield_->GetSelectedRange());
+#else
+ EXPECT_STR_EQ("345", textfield_->GetSelectedText());
+ EXPECT_EQ(gfx::Range(6, 3), textfield_->GetSelectedRange());
+#endif
+
+ SendWordEvent(ui::VKEY_LEFT, true);
+#if defined(OS_MACOSX)
+ EXPECT_STR_EQ("345", textfield_->GetSelectedText());
+#else
+ EXPECT_STR_EQ("12 345", textfield_->GetSelectedText());
+#endif
+ EXPECT_TRUE(textfield_->GetSelectedRange().is_reversed());
+
+ SendWordEvent(ui::VKEY_LEFT, true);
+ EXPECT_STR_EQ("12 345", textfield_->GetSelectedText());
+}
+
+TEST_F(TextfieldTest, LineSelection) {
+ InitTextfield();
+ textfield_->SetText(ASCIIToUTF16("12 34567 89"));
+
+ // Place the cursor after "5".
+ textfield_->SetSelectionRange(gfx::Range(6));
+
+ // Select line towards right.
+ SendEndEvent(true);
+ EXPECT_STR_EQ("67 89", textfield_->GetSelectedText());
+
+ // Select line towards left. On Mac, the existing selection should be extended
+ // to cover the whole line.
+ SendHomeEvent(true);
+#if defined(OS_MACOSX)
+ EXPECT_EQ(textfield_->text(), textfield_->GetSelectedText());
+#else
+ EXPECT_STR_EQ("12 345", textfield_->GetSelectedText());
+#endif
+ EXPECT_TRUE(textfield_->GetSelectedRange().is_reversed());
+
+ // Select line towards right.
+ SendEndEvent(true);
+#if defined(OS_MACOSX)
+ EXPECT_EQ(textfield_->text(), textfield_->GetSelectedText());
+#else
+ EXPECT_STR_EQ("67 89", textfield_->GetSelectedText());
+#endif
+ EXPECT_FALSE(textfield_->GetSelectedRange().is_reversed());
+}
+
+TEST_F(TextfieldTest, MoveUpDownAndModifySelection) {
+ InitTextfield();
+ textfield_->SetText(ASCIIToUTF16("12 34567 89"));
+ const int kStringLength = 11;
msw 2016/08/16 18:37:58 optional nit: I think the test is more readable if
karandeepb 2016/08/17 04:37:23 Done.
+ const int kInitialCursorPosition = 6;
+
+ EXPECT_EQ(gfx::Range(kStringLength), textfield_->GetSelectedRange());
msw 2016/08/16 18:37:58 nit: remove this (seems unnecessary)
karandeepb 2016/08/17 04:37:23 Done.
+ textfield_->SetSelectionRange(gfx::Range(kInitialCursorPosition));
+
+ // Up/Down keys won't be handled except on Mac where they map to move
+ // commands.
+ SendKeyEvent(ui::VKEY_UP);
+ EXPECT_TRUE(textfield_->key_received());
+#if defined(OS_MACOSX)
+ EXPECT_TRUE(textfield_->key_handled());
+ EXPECT_EQ(gfx::Range(0), textfield_->GetSelectedRange());
+#else
+ EXPECT_FALSE(textfield_->key_handled());
+#endif
+ textfield_->clear();
+
+ SendKeyEvent(ui::VKEY_DOWN);
+ EXPECT_TRUE(textfield_->key_received());
+#if defined(OS_MACOSX)
+ EXPECT_TRUE(textfield_->key_handled());
+ EXPECT_EQ(gfx::Range(kStringLength), textfield_->GetSelectedRange());
+#else
+ EXPECT_FALSE(textfield_->key_handled());
+#endif
+ textfield_->clear();
+
+ textfield_->SetSelectionRange(gfx::Range(kInitialCursorPosition));
+
+ // Shift+[Up/Down] on Mac should execute the command
+ // MOVE_[UP/DOWN]_AND_MODIFY_SELECTION. On other platforms, textfield won't
+ // handle these events.
+ SendKeyEvent(ui::VKEY_UP, true /* shift */, false /* command */);
+ EXPECT_TRUE(textfield_->key_received());
+#if defined(OS_MACOSX)
+ EXPECT_TRUE(textfield_->key_handled());
+ EXPECT_EQ(gfx::Range(kInitialCursorPosition, 0),
+ textfield_->GetSelectedRange());
+#else
+ EXPECT_FALSE(textfield_->key_handled());
+#endif
+ textfield_->clear();
+
+ SendKeyEvent(ui::VKEY_DOWN, true /* shift */, false /* command */);
+ EXPECT_TRUE(textfield_->key_received());
+#if defined(OS_MACOSX)
+ EXPECT_TRUE(textfield_->key_handled());
+ EXPECT_EQ(gfx::Range(kInitialCursorPosition, kStringLength),
+ textfield_->GetSelectedRange());
+#else
+ EXPECT_FALSE(textfield_->key_handled());
+#endif
+ textfield_->clear();
+}
+
+TEST_F(TextfieldTest, MovePageUpDownAndModifySelection) {
+ InitTextfield();
+
+// MOVE_PAGE_[UP/DOWN] and the associated selection commands should only be
+// enabled on Mac.
+#if defined(OS_MACOSX)
+ textfield_->SetText(ASCIIToUTF16("12 34567 89"));
+ const int kStringLength = 11;
+ const int kInitialCursorPosition = 6;
+
+ textfield_->SetSelectionRange(gfx::Range(kInitialCursorPosition));
+
+ EXPECT_TRUE(
+ textfield_->IsTextEditCommandEnabled(ui::TextEditCommand::MOVE_PAGE_UP));
+ EXPECT_TRUE(textfield_->IsTextEditCommandEnabled(
+ ui::TextEditCommand::MOVE_PAGE_DOWN));
+ EXPECT_TRUE(textfield_->IsTextEditCommandEnabled(
+ ui::TextEditCommand::MOVE_PAGE_UP_AND_MODIFY_SELECTION));
+ EXPECT_TRUE(textfield_->IsTextEditCommandEnabled(
+ ui::TextEditCommand::MOVE_PAGE_DOWN_AND_MODIFY_SELECTION));
+
+ test_api_->ExecuteTextEditCommand(ui::TextEditCommand::MOVE_PAGE_UP);
+ EXPECT_EQ(gfx::Range(0), textfield_->GetSelectedRange());
+
+ test_api_->ExecuteTextEditCommand(ui::TextEditCommand::MOVE_PAGE_DOWN);
+ EXPECT_EQ(gfx::Range(kStringLength), textfield_->GetSelectedRange());
+
+ textfield_->SetSelectionRange(gfx::Range(kInitialCursorPosition));
+ test_api_->ExecuteTextEditCommand(
+ ui::TextEditCommand::MOVE_PAGE_UP_AND_MODIFY_SELECTION);
+ EXPECT_EQ(gfx::Range(kInitialCursorPosition, 0),
+ textfield_->GetSelectedRange());
+
+ test_api_->ExecuteTextEditCommand(
+ ui::TextEditCommand::MOVE_PAGE_DOWN_AND_MODIFY_SELECTION);
+ EXPECT_EQ(gfx::Range(kInitialCursorPosition, kStringLength),
+ textfield_->GetSelectedRange());
+#else
+ EXPECT_FALSE(
+ textfield_->IsTextEditCommandEnabled(ui::TextEditCommand::MOVE_PAGE_UP));
+ EXPECT_FALSE(textfield_->IsTextEditCommandEnabled(
+ ui::TextEditCommand::MOVE_PAGE_DOWN));
+ EXPECT_FALSE(textfield_->IsTextEditCommandEnabled(
+ ui::TextEditCommand::MOVE_PAGE_UP_AND_MODIFY_SELECTION));
+ EXPECT_FALSE(textfield_->IsTextEditCommandEnabled(
+ ui::TextEditCommand::MOVE_PAGE_DOWN_AND_MODIFY_SELECTION));
+#endif
+}
+
+TEST_F(TextfieldTest, MoveParagraphForwardBackwardAndModifySelection) {
+ InitTextfield();
+ textfield_->SetText(ASCIIToUTF16("12 34567 89"));
+ const int kStringLength = 11;
+ const int kInitialCursorPosition = 6;
+
+ textfield_->SetSelectionRange(gfx::Range(kInitialCursorPosition));
+
+ test_api_->ExecuteTextEditCommand(
+ ui::TextEditCommand::MOVE_PARAGRAPH_FORWARD_AND_MODIFY_SELECTION);
+ EXPECT_EQ(gfx::Range(kInitialCursorPosition, kStringLength),
+ textfield_->GetSelectedRange());
+
+ test_api_->ExecuteTextEditCommand(
+ ui::TextEditCommand::MOVE_PARAGRAPH_BACKWARD_AND_MODIFY_SELECTION);
+ EXPECT_EQ(gfx::Range(kInitialCursorPosition), textfield_->GetSelectedRange());
msw 2016/08/16 18:37:58 You'll need to update this test if you address my
karandeepb 2016/08/17 04:37:23 Done.
+
+ test_api_->ExecuteTextEditCommand(
+ ui::TextEditCommand::MOVE_PARAGRAPH_BACKWARD_AND_MODIFY_SELECTION);
+ EXPECT_EQ(gfx::Range(kInitialCursorPosition, 0),
+ textfield_->GetSelectedRange());
+
+ test_api_->ExecuteTextEditCommand(
+ ui::TextEditCommand::MOVE_PARAGRAPH_FORWARD_AND_MODIFY_SELECTION);
+ EXPECT_EQ(gfx::Range(kInitialCursorPosition), textfield_->GetSelectedRange());
}
TEST_F(TextfieldTest, InsertionDeletionTest) {
@@ -1052,26 +1264,6 @@ TEST_F(TextfieldTest, OnKeyPress) {
#endif
EXPECT_FALSE(textfield_->key_handled());
textfield_->clear();
-
- // Up/Down keys won't be handled except on Mac where they map to move
- // commands.
- SendKeyEvent(ui::VKEY_UP);
- EXPECT_TRUE(textfield_->key_received());
-#if defined(OS_MACOSX)
- EXPECT_TRUE(textfield_->key_handled());
-#else
- EXPECT_FALSE(textfield_->key_handled());
-#endif
- textfield_->clear();
-
- SendKeyEvent(ui::VKEY_DOWN);
- EXPECT_TRUE(textfield_->key_received());
-#if defined(OS_MACOSX)
- EXPECT_TRUE(textfield_->key_handled());
-#else
- EXPECT_FALSE(textfield_->key_handled());
-#endif
- textfield_->clear();
}
// Tests that default key bindings are handled even with a delegate installed.
« ui/views/controls/textfield/textfield.cc ('K') | « ui/views/controls/textfield/textfield_test_api.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698