Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/views/controls/textfield/textfield.h" | 5 #include "ui/views/controls/textfield/textfield.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 26 #include "ui/events/event.h" | 26 #include "ui/events/event.h" |
| 27 #include "ui/events/event_processor.h" | 27 #include "ui/events/event_processor.h" |
| 28 #include "ui/events/event_utils.h" | 28 #include "ui/events/event_utils.h" |
| 29 #include "ui/events/keycodes/keyboard_codes.h" | 29 #include "ui/events/keycodes/keyboard_codes.h" |
| 30 #include "ui/gfx/render_text.h" | 30 #include "ui/gfx/render_text.h" |
| 31 #include "ui/strings/grit/ui_strings.h" | 31 #include "ui/strings/grit/ui_strings.h" |
| 32 #include "ui/views/controls/textfield/textfield_controller.h" | 32 #include "ui/views/controls/textfield/textfield_controller.h" |
| 33 #include "ui/views/controls/textfield/textfield_model.h" | 33 #include "ui/views/controls/textfield/textfield_model.h" |
| 34 #include "ui/views/controls/textfield/textfield_test_api.h" | 34 #include "ui/views/controls/textfield/textfield_test_api.h" |
| 35 #include "ui/views/focus/focus_manager.h" | 35 #include "ui/views/focus/focus_manager.h" |
| 36 #include "ui/views/style/platform_style.h" | |
| 36 #include "ui/views/test/test_views_delegate.h" | 37 #include "ui/views/test/test_views_delegate.h" |
| 37 #include "ui/views/test/views_test_base.h" | 38 #include "ui/views/test/views_test_base.h" |
| 38 #include "ui/views/test/widget_test.h" | 39 #include "ui/views/test/widget_test.h" |
| 39 #include "ui/views/widget/widget.h" | 40 #include "ui/views/widget/widget.h" |
| 40 #include "url/gurl.h" | 41 #include "url/gurl.h" |
| 41 | 42 |
| 42 #if defined(OS_WIN) | 43 #if defined(OS_WIN) |
| 43 #include "base/win/windows_version.h" | 44 #include "base/win/windows_version.h" |
| 44 #endif | 45 #endif |
| 45 | 46 |
| (...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 640 EXPECT_TRUE(menu->IsEnabledAt(1 /* Separator */)); | 641 EXPECT_TRUE(menu->IsEnabledAt(1 /* Separator */)); |
| 641 EXPECT_EQ(textfield_has_selection, menu->IsEnabledAt(2 /* CUT */)); | 642 EXPECT_EQ(textfield_has_selection, menu->IsEnabledAt(2 /* CUT */)); |
| 642 EXPECT_EQ(textfield_has_selection, menu->IsEnabledAt(3 /* COPY */)); | 643 EXPECT_EQ(textfield_has_selection, menu->IsEnabledAt(3 /* COPY */)); |
| 643 EXPECT_NE(GetClipboardText(ui::CLIPBOARD_TYPE_COPY_PASTE).empty(), | 644 EXPECT_NE(GetClipboardText(ui::CLIPBOARD_TYPE_COPY_PASTE).empty(), |
| 644 menu->IsEnabledAt(4 /* PASTE */)); | 645 menu->IsEnabledAt(4 /* PASTE */)); |
| 645 EXPECT_EQ(textfield_has_selection, menu->IsEnabledAt(5 /* DELETE */)); | 646 EXPECT_EQ(textfield_has_selection, menu->IsEnabledAt(5 /* DELETE */)); |
| 646 EXPECT_TRUE(menu->IsEnabledAt(6 /* Separator */)); | 647 EXPECT_TRUE(menu->IsEnabledAt(6 /* Separator */)); |
| 647 EXPECT_TRUE(menu->IsEnabledAt(7 /* SELECT ALL */)); | 648 EXPECT_TRUE(menu->IsEnabledAt(7 /* SELECT ALL */)); |
| 648 } | 649 } |
| 649 | 650 |
| 651 void PressLeftMouseButton() { | |
| 652 ui::MouseEvent click(ui::ET_MOUSE_PRESSED, mouse_position_, mouse_position_, | |
| 653 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | |
| 654 ui::EF_LEFT_MOUSE_BUTTON); | |
| 655 textfield_->OnMousePressed(click); | |
| 656 } | |
| 657 | |
| 658 void ReleaseLeftMouseButton() { | |
| 659 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, mouse_position_, | |
| 660 mouse_position_, ui::EventTimeForNow(), | |
| 661 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); | |
| 662 textfield_->OnMouseReleased(release); | |
| 663 } | |
| 664 | |
| 665 void ClickLeftMouseButton() { | |
| 666 PressLeftMouseButton(); | |
| 667 ReleaseLeftMouseButton(); | |
| 668 } | |
| 669 | |
| 670 void DragMouseTo(const gfx::Point& where) { | |
| 671 mouse_position_ = where; | |
| 672 ui::MouseEvent drag(ui::ET_MOUSE_DRAGGED, where, where, | |
| 673 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, 0); | |
| 674 textfield_->OnMouseDragged(drag); | |
| 675 } | |
| 676 | |
| 677 // Textfield does not listen to OnMouseMoved, so this function does not send | |
| 678 // an event when it updates the cursor position. | |
| 679 void MoveMouseTo(const gfx::Point& where) { mouse_position_ = where; } | |
| 680 | |
| 650 // We need widget to populate wrapper class. | 681 // We need widget to populate wrapper class. |
| 651 Widget* widget_; | 682 Widget* widget_; |
| 652 | 683 |
| 653 TestTextfield* textfield_; | 684 TestTextfield* textfield_; |
| 654 scoped_ptr<TextfieldTestApi> test_api_; | 685 scoped_ptr<TextfieldTestApi> test_api_; |
| 655 TextfieldModel* model_; | 686 TextfieldModel* model_; |
| 656 | 687 |
| 657 // The string from Controller::ContentsChanged callback. | 688 // The string from Controller::ContentsChanged callback. |
| 658 base::string16 last_contents_; | 689 base::string16 last_contents_; |
| 659 | 690 |
| 660 // For testing input method related behaviors. | 691 // For testing input method related behaviors. |
| 661 MockInputMethod* input_method_; | 692 MockInputMethod* input_method_; |
| 662 | 693 |
| 663 // Indicates how many times OnBeforeUserAction() is called. | 694 // Indicates how many times OnBeforeUserAction() is called. |
| 664 int on_before_user_action_; | 695 int on_before_user_action_; |
| 665 | 696 |
| 666 // Indicates how many times OnAfterUserAction() is called. | 697 // Indicates how many times OnAfterUserAction() is called. |
| 667 int on_after_user_action_; | 698 int on_after_user_action_; |
| 668 | 699 |
| 669 private: | 700 private: |
| 670 ui::ClipboardType copied_to_clipboard_; | 701 ui::ClipboardType copied_to_clipboard_; |
| 671 scoped_ptr<test::WidgetTest::FakeActivation> fake_activation_; | 702 scoped_ptr<test::WidgetTest::FakeActivation> fake_activation_; |
| 672 | 703 |
| 704 // Mouse position, for synthetic mouse events. | |
| 705 gfx::Point mouse_position_; | |
| 706 | |
| 673 #if defined(OS_MACOSX) && !defined(USE_AURA) | 707 #if defined(OS_MACOSX) && !defined(USE_AURA) |
| 674 scoped_ptr<ui::test::EventGenerator> event_generator_; | 708 scoped_ptr<ui::test::EventGenerator> event_generator_; |
| 675 #endif | 709 #endif |
| 676 | 710 |
| 677 DISALLOW_COPY_AND_ASSIGN(TextfieldTest); | 711 DISALLOW_COPY_AND_ASSIGN(TextfieldTest); |
| 678 }; | 712 }; |
| 679 | 713 |
| 680 TEST_F(TextfieldTest, ModelChangesTest) { | 714 TEST_F(TextfieldTest, ModelChangesTest) { |
| 681 InitTextfield(); | 715 InitTextfield(); |
| 682 | 716 |
| (...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1080 widget_->GetFocusManager()->AdvanceFocus(true); | 1114 widget_->GetFocusManager()->AdvanceFocus(true); |
| 1081 EXPECT_EQ(3, GetFocusedView()->id()); | 1115 EXPECT_EQ(3, GetFocusedView()->id()); |
| 1082 | 1116 |
| 1083 // Request focus should still work. | 1117 // Request focus should still work. |
| 1084 textfield_->RequestFocus(); | 1118 textfield_->RequestFocus(); |
| 1085 EXPECT_EQ(1, GetFocusedView()->id()); | 1119 EXPECT_EQ(1, GetFocusedView()->id()); |
| 1086 | 1120 |
| 1087 // Test if clicking on textfield view sets the focus. | 1121 // Test if clicking on textfield view sets the focus. |
| 1088 widget_->GetFocusManager()->AdvanceFocus(true); | 1122 widget_->GetFocusManager()->AdvanceFocus(true); |
| 1089 EXPECT_EQ(3, GetFocusedView()->id()); | 1123 EXPECT_EQ(3, GetFocusedView()->id()); |
| 1090 ui::MouseEvent click(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 1124 MoveMouseTo(gfx::Point()); |
| 1091 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 1125 ClickLeftMouseButton(); |
| 1092 ui::EF_LEFT_MOUSE_BUTTON); | 1126 // ui::MouseEvent click(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
|
tapted
2016/04/15 00:35:08
(delete commented stuff)
Elly Fong-Jones
2016/04/15 14:47:46
Done.
| |
| 1093 textfield_->OnMousePressed(click); | 1127 // ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
| 1128 // ui::EF_LEFT_MOUSE_BUTTON); | |
| 1129 // textfield_->OnMousePressed(click); | |
| 1094 EXPECT_EQ(1, GetFocusedView()->id()); | 1130 EXPECT_EQ(1, GetFocusedView()->id()); |
| 1095 | 1131 |
| 1096 // Tab/Shift+Tab should also cycle focus, not insert a tab character. | 1132 // Tab/Shift+Tab should also cycle focus, not insert a tab character. |
| 1097 SendKeyEvent(ui::VKEY_TAB, false, false); | 1133 SendKeyEvent(ui::VKEY_TAB, false, false); |
| 1098 EXPECT_EQ(2, GetFocusedView()->id()); | 1134 EXPECT_EQ(2, GetFocusedView()->id()); |
| 1099 SendKeyEvent(ui::VKEY_TAB, false, false); | 1135 SendKeyEvent(ui::VKEY_TAB, false, false); |
| 1100 EXPECT_EQ(3, GetFocusedView()->id()); | 1136 EXPECT_EQ(3, GetFocusedView()->id()); |
| 1101 // Cycle back to the first textfield. | 1137 // Cycle back to the first textfield. |
| 1102 SendKeyEvent(ui::VKEY_TAB, false, false); | 1138 SendKeyEvent(ui::VKEY_TAB, false, false); |
| 1103 EXPECT_EQ(1, GetFocusedView()->id()); | 1139 EXPECT_EQ(1, GetFocusedView()->id()); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 1132 VerifyTextfieldContextMenuContents(true, true, GetContextMenuModel()); | 1168 VerifyTextfieldContextMenuContents(true, true, GetContextMenuModel()); |
| 1133 | 1169 |
| 1134 // Exercise the "paste enabled?" check in the verifier. | 1170 // Exercise the "paste enabled?" check in the verifier. |
| 1135 SetClipboardText(ui::CLIPBOARD_TYPE_COPY_PASTE, "Test"); | 1171 SetClipboardText(ui::CLIPBOARD_TYPE_COPY_PASTE, "Test"); |
| 1136 VerifyTextfieldContextMenuContents(true, true, GetContextMenuModel()); | 1172 VerifyTextfieldContextMenuContents(true, true, GetContextMenuModel()); |
| 1137 } | 1173 } |
| 1138 | 1174 |
| 1139 TEST_F(TextfieldTest, DoubleAndTripleClickTest) { | 1175 TEST_F(TextfieldTest, DoubleAndTripleClickTest) { |
| 1140 InitTextfield(); | 1176 InitTextfield(); |
| 1141 textfield_->SetText(ASCIIToUTF16("hello world")); | 1177 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 1142 ui::MouseEvent click(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | |
| 1143 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | |
| 1144 ui::EF_LEFT_MOUSE_BUTTON); | |
| 1145 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), | |
| 1146 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | |
| 1147 ui::EF_LEFT_MOUSE_BUTTON); | |
| 1148 ui::MouseEvent double_click(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | |
| 1149 ui::EventTimeForNow(), | |
| 1150 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_IS_DOUBLE_CLICK, | |
| 1151 ui::EF_LEFT_MOUSE_BUTTON); | |
| 1152 | 1178 |
| 1153 // Test for double click. | 1179 // Test for double click. |
| 1154 textfield_->OnMousePressed(click); | 1180 MoveMouseTo(gfx::Point()); |
| 1155 textfield_->OnMouseReleased(release); | 1181 ClickLeftMouseButton(); |
| 1156 EXPECT_TRUE(textfield_->GetSelectedText().empty()); | 1182 EXPECT_TRUE(textfield_->GetSelectedText().empty()); |
| 1157 textfield_->OnMousePressed(double_click); | 1183 ClickLeftMouseButton(); |
|
tapted
2016/04/15 00:35:08
This needs to pass in a parameter to do a double-c
Elly Fong-Jones
2016/04/15 14:47:46
I added overloaded versions of ClickLeftMouseButto
| |
| 1158 textfield_->OnMouseReleased(release); | |
| 1159 EXPECT_STR_EQ("hello", textfield_->GetSelectedText()); | 1184 EXPECT_STR_EQ("hello", textfield_->GetSelectedText()); |
| 1160 | 1185 |
| 1161 // Test for triple click. | 1186 // Test for triple click. |
| 1162 textfield_->OnMousePressed(click); | 1187 ClickLeftMouseButton(); |
| 1163 textfield_->OnMouseReleased(release); | |
| 1164 EXPECT_STR_EQ("hello world", textfield_->GetSelectedText()); | 1188 EXPECT_STR_EQ("hello world", textfield_->GetSelectedText()); |
| 1165 | 1189 |
| 1166 // Another click should reset back to double click. | 1190 // Another click should reset back to double click. |
| 1167 textfield_->OnMousePressed(click); | 1191 ClickLeftMouseButton(); |
| 1168 textfield_->OnMouseReleased(release); | |
| 1169 EXPECT_STR_EQ("hello", textfield_->GetSelectedText()); | 1192 EXPECT_STR_EQ("hello", textfield_->GetSelectedText()); |
| 1170 } | 1193 } |
| 1171 | 1194 |
| 1172 TEST_F(TextfieldTest, DragToSelect) { | 1195 TEST_F(TextfieldTest, DragToSelect) { |
| 1173 InitTextfield(); | 1196 InitTextfield(); |
| 1174 textfield_->SetText(ASCIIToUTF16("hello world")); | 1197 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 1175 const int kStart = GetCursorPositionX(5); | 1198 const int kStart = GetCursorPositionX(5); |
| 1176 const int kEnd = 500; | 1199 const int kEnd = 500; |
| 1177 gfx::Point start_point(kStart, 0); | 1200 gfx::Point start_point(kStart, 0); |
| 1178 gfx::Point end_point(kEnd, 0); | 1201 gfx::Point end_point(kEnd, 0); |
| 1179 ui::MouseEvent click_a(ui::ET_MOUSE_PRESSED, start_point, start_point, | 1202 |
| 1180 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 1203 MoveMouseTo(start_point); |
| 1181 ui::EF_LEFT_MOUSE_BUTTON); | 1204 PressLeftMouseButton(); |
| 1182 ui::MouseEvent click_b(ui::ET_MOUSE_PRESSED, end_point, end_point, | |
| 1183 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | |
| 1184 ui::EF_LEFT_MOUSE_BUTTON); | |
| 1185 ui::MouseEvent drag_left(ui::ET_MOUSE_DRAGGED, gfx::Point(), gfx::Point(), | |
| 1186 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, 0); | |
| 1187 ui::MouseEvent drag_right(ui::ET_MOUSE_DRAGGED, end_point, end_point, | |
| 1188 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, 0); | |
| 1189 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, end_point, end_point, | |
| 1190 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | |
| 1191 ui::EF_LEFT_MOUSE_BUTTON); | |
| 1192 textfield_->OnMousePressed(click_a); | |
| 1193 EXPECT_TRUE(textfield_->GetSelectedText().empty()); | 1205 EXPECT_TRUE(textfield_->GetSelectedText().empty()); |
| 1206 | |
| 1194 // Check that dragging left selects the beginning of the string. | 1207 // Check that dragging left selects the beginning of the string. |
| 1195 textfield_->OnMouseDragged(drag_left); | 1208 DragMouseTo(gfx::Point()); |
| 1196 base::string16 text_left = textfield_->GetSelectedText(); | 1209 base::string16 text_left = textfield_->GetSelectedText(); |
| 1197 EXPECT_STR_EQ("hello", text_left); | 1210 EXPECT_STR_EQ("hello", text_left); |
| 1211 | |
| 1198 // Check that dragging right selects the rest of the string. | 1212 // Check that dragging right selects the rest of the string. |
| 1199 textfield_->OnMouseDragged(drag_right); | 1213 DragMouseTo(end_point); |
| 1200 base::string16 text_right = textfield_->GetSelectedText(); | 1214 base::string16 text_right = textfield_->GetSelectedText(); |
| 1201 EXPECT_STR_EQ(" world", text_right); | 1215 EXPECT_STR_EQ(" world", text_right); |
| 1216 | |
| 1202 // Check that releasing in the same location does not alter the selection. | 1217 // Check that releasing in the same location does not alter the selection. |
| 1203 textfield_->OnMouseReleased(release); | 1218 ReleaseLeftMouseButton(); |
| 1204 EXPECT_EQ(text_right, textfield_->GetSelectedText()); | 1219 EXPECT_EQ(text_right, textfield_->GetSelectedText()); |
| 1220 | |
| 1205 // Check that dragging from beyond the text length works too. | 1221 // Check that dragging from beyond the text length works too. |
| 1206 textfield_->OnMousePressed(click_b); | 1222 MoveMouseTo(end_point); |
| 1207 textfield_->OnMouseDragged(drag_left); | 1223 PressLeftMouseButton(); |
| 1208 textfield_->OnMouseReleased(release); | 1224 DragMouseTo(gfx::Point()); |
| 1225 ReleaseLeftMouseButton(); | |
| 1209 EXPECT_EQ(textfield_->text(), textfield_->GetSelectedText()); | 1226 EXPECT_EQ(textfield_->text(), textfield_->GetSelectedText()); |
| 1210 } | 1227 } |
| 1211 | 1228 |
| 1229 // This test checks that dragging above the textfield selects to the beginning | |
| 1230 // and dragging below the textfield selects to the end, but only on platforms | |
| 1231 // where that is the expected behavior. | |
| 1232 TEST_F(TextfieldTest, DragUpOrDownSelectsToEnd) { | |
| 1233 InitTextfield(); | |
| 1234 textfield_->SetText(ASCIIToUTF16("hello world")); | |
| 1235 const base::string16 expected_up = base::ASCIIToUTF16( | |
| 1236 PlatformStyle::kTextfieldDragVerticallyDragsToEnd ? "hello" : "lo"); | |
| 1237 const base::string16 expected_down = base::ASCIIToUTF16( | |
| 1238 PlatformStyle::kTextfieldDragVerticallyDragsToEnd ? " world" : " w"); | |
| 1239 const int kStartX = GetCursorPositionX(5); | |
| 1240 const int kDownX = GetCursorPositionX(7); | |
| 1241 const int kUpX = GetCursorPositionX(3); | |
| 1242 gfx::Point start_point(kStartX, 0); | |
| 1243 gfx::Point down_point(kDownX, 500); | |
| 1244 gfx::Point up_point(kUpX, -500); | |
| 1245 | |
| 1246 MoveMouseTo(start_point); | |
| 1247 PressLeftMouseButton(); | |
| 1248 DragMouseTo(up_point); | |
| 1249 ReleaseLeftMouseButton(); | |
| 1250 EXPECT_EQ(textfield_->GetSelectedText(), expected_up); | |
| 1251 | |
| 1252 MoveMouseTo(start_point); | |
| 1253 PressLeftMouseButton(); | |
| 1254 DragMouseTo(down_point); | |
| 1255 ReleaseLeftMouseButton(); | |
| 1256 EXPECT_EQ(textfield_->GetSelectedText(), expected_down); | |
| 1257 } | |
| 1258 | |
| 1212 #if defined(OS_WIN) | 1259 #if defined(OS_WIN) |
| 1213 TEST_F(TextfieldTest, DragAndDrop_AcceptDrop) { | 1260 TEST_F(TextfieldTest, DragAndDrop_AcceptDrop) { |
| 1214 InitTextfield(); | 1261 InitTextfield(); |
| 1215 textfield_->SetText(ASCIIToUTF16("hello world")); | 1262 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 1216 | 1263 |
| 1217 ui::OSExchangeData data; | 1264 ui::OSExchangeData data; |
| 1218 base::string16 string(ASCIIToUTF16("string ")); | 1265 base::string16 string(ASCIIToUTF16("string ")); |
| 1219 data.SetString(string); | 1266 data.SetString(string); |
| 1220 int formats = 0; | 1267 int formats = 0; |
| 1221 std::set<ui::Clipboard::FormatType> format_types; | 1268 std::set<ui::Clipboard::FormatType> format_types; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1284 // Ensure that textfields without selections do not support drag operations. | 1331 // Ensure that textfields without selections do not support drag operations. |
| 1285 textfield_->ClearSelection(); | 1332 textfield_->ClearSelection(); |
| 1286 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, | 1333 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, |
| 1287 textfield_->GetDragOperationsForView(NULL, kStringPoint)); | 1334 textfield_->GetDragOperationsForView(NULL, kStringPoint)); |
| 1288 textfield_->SelectRange(kStringRange); | 1335 textfield_->SelectRange(kStringRange); |
| 1289 // Ensure that password textfields do not support drag operations. | 1336 // Ensure that password textfields do not support drag operations. |
| 1290 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD); | 1337 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD); |
| 1291 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, | 1338 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, |
| 1292 textfield_->GetDragOperationsForView(NULL, kStringPoint)); | 1339 textfield_->GetDragOperationsForView(NULL, kStringPoint)); |
| 1293 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_TEXT); | 1340 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_TEXT); |
| 1341 MoveMouseTo(kStringPoint); | |
| 1342 PressLeftMouseButton(); | |
| 1294 // Ensure that textfields only initiate drag operations inside the selection. | 1343 // Ensure that textfields only initiate drag operations inside the selection. |
| 1295 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, kStringPoint, kStringPoint, | 1344 // ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, kStringPoint, |
|
tapted
2016/04/15 00:35:08
(remove)
Elly Fong-Jones
2016/04/15 14:47:45
Done.
| |
| 1296 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 1345 // kStringPoint, |
| 1297 ui::EF_LEFT_MOUSE_BUTTON); | 1346 // ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
| 1298 textfield_->OnMousePressed(press_event); | 1347 // ui::EF_LEFT_MOUSE_BUTTON); |
| 1348 // textfield_->OnMousePressed(press_event); | |
| 1299 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, | 1349 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, |
| 1300 textfield_->GetDragOperationsForView(NULL, gfx::Point())); | 1350 textfield_->GetDragOperationsForView(NULL, gfx::Point())); |
| 1301 EXPECT_FALSE(textfield_->CanStartDragForView(NULL, gfx::Point(), | 1351 EXPECT_FALSE(textfield_->CanStartDragForView(NULL, gfx::Point(), |
| 1302 gfx::Point())); | 1352 gfx::Point())); |
| 1303 EXPECT_EQ(ui::DragDropTypes::DRAG_COPY, | 1353 EXPECT_EQ(ui::DragDropTypes::DRAG_COPY, |
| 1304 textfield_->GetDragOperationsForView(NULL, kStringPoint)); | 1354 textfield_->GetDragOperationsForView(NULL, kStringPoint)); |
| 1305 EXPECT_TRUE(textfield_->CanStartDragForView(NULL, kStringPoint, | 1355 EXPECT_TRUE(textfield_->CanStartDragForView(NULL, kStringPoint, |
| 1306 gfx::Point())); | 1356 gfx::Point())); |
| 1307 // Ensure that textfields support local moves. | 1357 // Ensure that textfields support local moves. |
| 1308 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE | ui::DragDropTypes::DRAG_COPY, | 1358 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE | ui::DragDropTypes::DRAG_COPY, |
| 1309 textfield_->GetDragOperationsForView(textfield_, kStringPoint)); | 1359 textfield_->GetDragOperationsForView(textfield_, kStringPoint)); |
| 1310 } | 1360 } |
| 1311 | 1361 |
| 1312 TEST_F(TextfieldTest, DragAndDrop_ToTheRight) { | 1362 TEST_F(TextfieldTest, DragAndDrop_ToTheRight) { |
| 1313 InitTextfield(); | 1363 InitTextfield(); |
| 1314 textfield_->SetText(ASCIIToUTF16("hello world")); | 1364 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 1315 | 1365 |
| 1316 base::string16 string; | 1366 base::string16 string; |
| 1317 ui::OSExchangeData data; | 1367 ui::OSExchangeData data; |
| 1318 int formats = 0; | 1368 int formats = 0; |
| 1319 int operations = 0; | 1369 int operations = 0; |
| 1320 std::set<ui::Clipboard::FormatType> format_types; | 1370 std::set<ui::Clipboard::FormatType> format_types; |
| 1321 | 1371 |
| 1322 // Start dragging "ello". | 1372 // Start dragging "ello". |
| 1323 textfield_->SelectRange(gfx::Range(1, 5)); | 1373 textfield_->SelectRange(gfx::Range(1, 5)); |
| 1324 gfx::Point point(GetCursorPositionX(3), 0); | 1374 gfx::Point point(GetCursorPositionX(3), 0); |
| 1325 ui::MouseEvent click_a(ui::ET_MOUSE_PRESSED, point, point, | 1375 MoveMouseTo(point); |
| 1326 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 1376 PressLeftMouseButton(); |
| 1327 ui::EF_LEFT_MOUSE_BUTTON); | 1377 // ui::MouseEvent click_a(ui::ET_MOUSE_PRESSED, point, point, |
|
tapted
2016/04/15 00:35:08
(remove)
Elly Fong-Jones
2016/04/15 14:47:46
Done.
| |
| 1328 textfield_->OnMousePressed(click_a); | 1378 // ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
| 1329 EXPECT_TRUE(textfield_->CanStartDragForView(textfield_, click_a.location(), | 1379 // ui::EF_LEFT_MOUSE_BUTTON); |
| 1330 gfx::Point())); | 1380 // textfield_->OnMousePressed(click_a); |
| 1331 operations = textfield_->GetDragOperationsForView(textfield_, | 1381 EXPECT_TRUE(textfield_->CanStartDragForView(textfield_, point, gfx::Point())); |
|
tapted
2016/04/15 00:35:08
The third argument for CanStartDragForView is the
Elly Fong-Jones
2016/04/15 14:47:46
point is more correct so point it is.
| |
| 1332 click_a.location()); | 1382 operations = textfield_->GetDragOperationsForView(textfield_, point); |
| 1333 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE | ui::DragDropTypes::DRAG_COPY, | 1383 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE | ui::DragDropTypes::DRAG_COPY, |
| 1334 operations); | 1384 operations); |
| 1335 textfield_->WriteDragDataForView(NULL, click_a.location(), &data); | 1385 textfield_->WriteDragDataForView(NULL, point, &data); |
|
tapted
2016/04/15 00:35:08
nit: nullptr
Elly Fong-Jones
2016/04/15 14:47:46
Done.
| |
| 1336 EXPECT_TRUE(data.GetString(&string)); | 1386 EXPECT_TRUE(data.GetString(&string)); |
| 1337 EXPECT_EQ(textfield_->GetSelectedText(), string); | 1387 EXPECT_EQ(textfield_->GetSelectedText(), string); |
| 1338 EXPECT_TRUE(textfield_->GetDropFormats(&formats, &format_types)); | 1388 EXPECT_TRUE(textfield_->GetDropFormats(&formats, &format_types)); |
| 1339 EXPECT_EQ(ui::OSExchangeData::STRING, formats); | 1389 EXPECT_EQ(ui::OSExchangeData::STRING, formats); |
| 1340 EXPECT_TRUE(format_types.empty()); | 1390 EXPECT_TRUE(format_types.empty()); |
| 1341 | 1391 |
| 1342 // Drop "ello" after "w". | 1392 // Drop "ello" after "w". |
| 1343 const gfx::Point kDropPoint(GetCursorPositionX(7), 0); | 1393 const gfx::Point kDropPoint(GetCursorPositionX(7), 0); |
| 1344 EXPECT_TRUE(textfield_->CanDrop(data)); | 1394 EXPECT_TRUE(textfield_->CanDrop(data)); |
| 1345 ui::DropTargetEvent drop_a(data, kDropPoint, kDropPoint, operations); | 1395 ui::DropTargetEvent drop_a(data, kDropPoint, kDropPoint, operations); |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 1369 | 1419 |
| 1370 base::string16 string; | 1420 base::string16 string; |
| 1371 ui::OSExchangeData data; | 1421 ui::OSExchangeData data; |
| 1372 int formats = 0; | 1422 int formats = 0; |
| 1373 int operations = 0; | 1423 int operations = 0; |
| 1374 std::set<ui::Clipboard::FormatType> format_types; | 1424 std::set<ui::Clipboard::FormatType> format_types; |
| 1375 | 1425 |
| 1376 // Start dragging " worl". | 1426 // Start dragging " worl". |
| 1377 textfield_->SelectRange(gfx::Range(5, 10)); | 1427 textfield_->SelectRange(gfx::Range(5, 10)); |
| 1378 gfx::Point point(GetCursorPositionX(7), 0); | 1428 gfx::Point point(GetCursorPositionX(7), 0); |
| 1379 ui::MouseEvent click_a(ui::ET_MOUSE_PRESSED, point, point, | 1429 MoveMouseTo(point); |
| 1380 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 1430 PressLeftMouseButton(); |
| 1381 ui::EF_LEFT_MOUSE_BUTTON); | 1431 // ui::MouseEvent click_a(ui::ET_MOUSE_PRESSED, point, point, |
|
tapted
2016/04/15 00:35:08
(remove)
Elly Fong-Jones
2016/04/15 14:47:46
Done.
| |
| 1382 textfield_->OnMousePressed(click_a); | 1432 // ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
| 1383 EXPECT_TRUE(textfield_->CanStartDragForView(textfield_, click_a.location(), | 1433 // ui::EF_LEFT_MOUSE_BUTTON); |
| 1384 gfx::Point())); | 1434 // textfield_->OnMousePressed(click_a); |
| 1385 operations = textfield_->GetDragOperationsForView(textfield_, | 1435 EXPECT_TRUE(textfield_->CanStartDragForView(textfield_, point, gfx::Point())); |
| 1386 click_a.location()); | 1436 operations = textfield_->GetDragOperationsForView(textfield_, point); |
| 1387 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE | ui::DragDropTypes::DRAG_COPY, | 1437 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE | ui::DragDropTypes::DRAG_COPY, |
| 1388 operations); | 1438 operations); |
| 1389 textfield_->WriteDragDataForView(NULL, click_a.location(), &data); | 1439 textfield_->WriteDragDataForView(NULL, point, &data); |
|
tapted
2016/04/15 00:35:08
nit: nullptr
Elly Fong-Jones
2016/04/15 14:47:46
Done.
| |
| 1390 EXPECT_TRUE(data.GetString(&string)); | 1440 EXPECT_TRUE(data.GetString(&string)); |
| 1391 EXPECT_EQ(textfield_->GetSelectedText(), string); | 1441 EXPECT_EQ(textfield_->GetSelectedText(), string); |
| 1392 EXPECT_TRUE(textfield_->GetDropFormats(&formats, &format_types)); | 1442 EXPECT_TRUE(textfield_->GetDropFormats(&formats, &format_types)); |
| 1393 EXPECT_EQ(ui::OSExchangeData::STRING, formats); | 1443 EXPECT_EQ(ui::OSExchangeData::STRING, formats); |
| 1394 EXPECT_TRUE(format_types.empty()); | 1444 EXPECT_TRUE(format_types.empty()); |
| 1395 | 1445 |
| 1396 // Drop " worl" after "h". | 1446 // Drop " worl" after "h". |
| 1397 EXPECT_TRUE(textfield_->CanDrop(data)); | 1447 EXPECT_TRUE(textfield_->CanDrop(data)); |
| 1398 gfx::Point drop_point(GetCursorPositionX(1), 0); | 1448 gfx::Point drop_point(GetCursorPositionX(1), 0); |
| 1399 ui::DropTargetEvent drop_a(data, drop_point, drop_point, operations); | 1449 ui::DropTargetEvent drop_a(data, drop_point, drop_point, operations); |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 1417 EXPECT_STR_EQ("h worlellod", textfield_->text()); | 1467 EXPECT_STR_EQ("h worlellod", textfield_->text()); |
| 1418 } | 1468 } |
| 1419 | 1469 |
| 1420 TEST_F(TextfieldTest, DragAndDrop_Canceled) { | 1470 TEST_F(TextfieldTest, DragAndDrop_Canceled) { |
| 1421 InitTextfield(); | 1471 InitTextfield(); |
| 1422 textfield_->SetText(ASCIIToUTF16("hello world")); | 1472 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 1423 | 1473 |
| 1424 // Start dragging "worl". | 1474 // Start dragging "worl". |
| 1425 textfield_->SelectRange(gfx::Range(6, 10)); | 1475 textfield_->SelectRange(gfx::Range(6, 10)); |
| 1426 gfx::Point point(GetCursorPositionX(8), 0); | 1476 gfx::Point point(GetCursorPositionX(8), 0); |
| 1427 ui::MouseEvent click(ui::ET_MOUSE_PRESSED, point, point, | 1477 MoveMouseTo(point); |
| 1428 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 1478 PressLeftMouseButton(); |
| 1429 ui::EF_LEFT_MOUSE_BUTTON); | |
| 1430 textfield_->OnMousePressed(click); | |
| 1431 ui::OSExchangeData data; | 1479 ui::OSExchangeData data; |
| 1432 textfield_->WriteDragDataForView(NULL, click.location(), &data); | 1480 textfield_->WriteDragDataForView(NULL, point, &data); |
|
tapted
2016/04/15 00:35:08
nit: nullptr
Elly Fong-Jones
2016/04/15 14:47:45
Done.
| |
| 1433 EXPECT_TRUE(textfield_->CanDrop(data)); | 1481 EXPECT_TRUE(textfield_->CanDrop(data)); |
| 1434 // Drag the text over somewhere valid, outside the current selection. | 1482 // Drag the text over somewhere valid, outside the current selection. |
| 1435 gfx::Point drop_point(GetCursorPositionX(2), 0); | 1483 gfx::Point drop_point(GetCursorPositionX(2), 0); |
| 1436 ui::DropTargetEvent drop(data, drop_point, drop_point, | 1484 ui::DropTargetEvent drop(data, drop_point, drop_point, |
| 1437 ui::DragDropTypes::DRAG_MOVE); | 1485 ui::DragDropTypes::DRAG_MOVE); |
| 1438 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE, textfield_->OnDragUpdated(drop)); | 1486 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE, textfield_->OnDragUpdated(drop)); |
| 1439 // "Cancel" the drag, via move and release over the selection, and OnDragDone. | 1487 // "Cancel" the drag, via move and release over the selection, and OnDragDone. |
| 1440 gfx::Point drag_point(GetCursorPositionX(9), 0); | 1488 gfx::Point drag_point(GetCursorPositionX(9), 0); |
| 1441 ui::MouseEvent drag(ui::ET_MOUSE_DRAGGED, drag_point, drag_point, | 1489 DragMouseTo(drag_point); |
| 1442 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, 0); | 1490 ReleaseLeftMouseButton(); |
| 1443 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, drag_point, drag_point, | |
| 1444 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | |
| 1445 ui::EF_LEFT_MOUSE_BUTTON); | |
| 1446 textfield_->OnMouseDragged(drag); | |
| 1447 textfield_->OnMouseReleased(release); | |
| 1448 textfield_->OnDragDone(); | |
| 1449 EXPECT_EQ(ASCIIToUTF16("hello world"), textfield_->text()); | 1491 EXPECT_EQ(ASCIIToUTF16("hello world"), textfield_->text()); |
| 1450 } | 1492 } |
| 1451 | 1493 |
| 1452 TEST_F(TextfieldTest, ReadOnlyTest) { | 1494 TEST_F(TextfieldTest, ReadOnlyTest) { |
| 1453 InitTextfield(); | 1495 InitTextfield(); |
| 1454 textfield_->SetText(ASCIIToUTF16("read only")); | 1496 textfield_->SetText(ASCIIToUTF16("read only")); |
| 1455 textfield_->SetReadOnly(true); | 1497 textfield_->SetReadOnly(true); |
| 1456 EXPECT_TRUE(textfield_->enabled()); | 1498 EXPECT_TRUE(textfield_->enabled()); |
| 1457 EXPECT_TRUE(textfield_->IsFocusable()); | 1499 EXPECT_TRUE(textfield_->IsFocusable()); |
| 1458 | 1500 |
| (...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2212 | 2254 |
| 2213 textfield_->SelectRange(gfx::Range(5, 5)); | 2255 textfield_->SelectRange(gfx::Range(5, 5)); |
| 2214 const gfx::Rect middle_cursor = GetCursorBounds(); | 2256 const gfx::Rect middle_cursor = GetCursorBounds(); |
| 2215 textfield_->SelectRange(gfx::Range(0, 0)); | 2257 textfield_->SelectRange(gfx::Range(0, 0)); |
| 2216 const gfx::Point beginning = GetCursorBounds().origin(); | 2258 const gfx::Point beginning = GetCursorBounds().origin(); |
| 2217 | 2259 |
| 2218 // Double click, but do not release the left button. | 2260 // Double click, but do not release the left button. |
| 2219 MouseClick(middle_cursor, 0); | 2261 MouseClick(middle_cursor, 0); |
| 2220 const gfx::Point middle(middle_cursor.x(), | 2262 const gfx::Point middle(middle_cursor.x(), |
| 2221 middle_cursor.y() + middle_cursor.height() / 2); | 2263 middle_cursor.y() + middle_cursor.height() / 2); |
| 2222 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, middle, middle, | 2264 MoveMouseTo(middle); |
| 2223 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 2265 PressLeftMouseButton(); |
| 2224 ui::EF_LEFT_MOUSE_BUTTON); | |
| 2225 textfield_->OnMousePressed(press_event); | |
| 2226 EXPECT_EQ(gfx::Range(4, 7), textfield_->GetSelectedRange()); | 2266 EXPECT_EQ(gfx::Range(4, 7), textfield_->GetSelectedRange()); |
| 2227 | 2267 |
| 2228 // Drag the mouse to the beginning of the textfield. | 2268 // Drag the mouse to the beginning of the textfield. |
| 2229 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, beginning, beginning, | 2269 DragMouseTo(beginning); |
| 2230 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, 0); | |
| 2231 textfield_->OnMouseDragged(drag_event); | |
| 2232 EXPECT_EQ(gfx::Range(7, 0), textfield_->GetSelectedRange()); | 2270 EXPECT_EQ(gfx::Range(7, 0), textfield_->GetSelectedRange()); |
| 2233 } | 2271 } |
| 2234 | 2272 |
| 2235 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) | 2273 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| 2236 // flaky: http://crbug.com/396477 | 2274 // flaky: http://crbug.com/396477 |
| 2237 TEST_F(TextfieldTest, DISABLED_SelectionClipboard) { | 2275 TEST_F(TextfieldTest, DISABLED_SelectionClipboard) { |
| 2238 InitTextfield(); | 2276 InitTextfield(); |
| 2239 textfield_->SetText(ASCIIToUTF16("0123")); | 2277 textfield_->SetText(ASCIIToUTF16("0123")); |
| 2240 gfx::Point point_1(GetCursorPositionX(1), 0); | 2278 gfx::Point point_1(GetCursorPositionX(1), 0); |
| 2241 gfx::Point point_2(GetCursorPositionX(2), 0); | 2279 gfx::Point point_2(GetCursorPositionX(2), 0); |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2583 | 2621 |
| 2584 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD); | 2622 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD); |
| 2585 ui::AXViewState state_protected; | 2623 ui::AXViewState state_protected; |
| 2586 textfield_->GetAccessibleState(&state_protected); | 2624 textfield_->GetAccessibleState(&state_protected); |
| 2587 EXPECT_EQ(ui::AX_ROLE_TEXT_FIELD, state_protected.role); | 2625 EXPECT_EQ(ui::AX_ROLE_TEXT_FIELD, state_protected.role); |
| 2588 EXPECT_EQ(ASCIIToUTF16("********"), state_protected.value); | 2626 EXPECT_EQ(ASCIIToUTF16("********"), state_protected.value); |
| 2589 EXPECT_TRUE(state_protected.HasStateFlag(ui::AX_STATE_PROTECTED)); | 2627 EXPECT_TRUE(state_protected.HasStateFlag(ui::AX_STATE_PROTECTED)); |
| 2590 } | 2628 } |
| 2591 | 2629 |
| 2592 } // namespace views | 2630 } // namespace views |
| OLD | NEW |