Chromium Code Reviews| 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. |