| 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 | 49 |
| 50 #define EXPECT_STR_EQ(ascii, utf16) EXPECT_EQ(ASCIIToUTF16(ascii), utf16) | 50 #define EXPECT_STR_EQ(ascii, utf16) EXPECT_EQ(ASCIIToUTF16(ascii), utf16) |
| 51 | 51 |
| 52 namespace { | 52 namespace { |
| 53 | 53 |
| 54 const base::char16 kHebrewLetterSamekh = 0x05E1; | 54 const base::char16 kHebrewLetterSamekh = 0x05E1; |
| 55 | 55 |
| 56 // A Textfield wrapper to intercept OnKey[Pressed|Released]() ressults. | 56 // A Textfield wrapper to intercept OnKey[Pressed|Released]() ressults. |
| 57 class TestTextfield : public views::Textfield { | 57 class TestTextfield : public views::Textfield { |
| 58 public: | 58 public: |
| 59 explicit TestTextfield(StyleFlags style) | 59 TestTextfield() : Textfield(), key_handled_(false), key_received_(false) {} |
| 60 : Textfield(style), | |
| 61 key_handled_(false), | |
| 62 key_received_(false) { | |
| 63 } | |
| 64 | 60 |
| 65 virtual bool OnKeyPressed(const ui::KeyEvent& e) OVERRIDE { | 61 virtual bool OnKeyPressed(const ui::KeyEvent& e) OVERRIDE { |
| 66 key_received_ = true; | 62 key_received_ = true; |
| 67 key_handled_ = views::Textfield::OnKeyPressed(e); | 63 key_handled_ = views::Textfield::OnKeyPressed(e); |
| 68 return key_handled_; | 64 return key_handled_; |
| 69 } | 65 } |
| 70 | 66 |
| 71 virtual bool OnKeyReleased(const ui::KeyEvent& e) OVERRIDE { | 67 virtual bool OnKeyReleased(const ui::KeyEvent& e) OVERRIDE { |
| 72 key_received_ = true; | 68 key_received_ = true; |
| 73 key_handled_ = views::Textfield::OnKeyReleased(e); | 69 key_handled_ = views::Textfield::OnKeyReleased(e); |
| 74 return key_handled_; | 70 return key_handled_; |
| 75 } | 71 } |
| 76 | 72 |
| 77 bool key_handled() const { return key_handled_; } | 73 bool key_handled() const { return key_handled_; } |
| 78 bool key_received() const { return key_received_; } | 74 bool key_received() const { return key_received_; } |
| 79 | 75 |
| 80 void clear() { key_received_ = key_handled_ = false; } | 76 void clear() { key_received_ = key_handled_ = false; } |
| 81 | 77 |
| 82 bool focusable() const { return View::focusable(); } | |
| 83 | |
| 84 private: | 78 private: |
| 85 bool key_handled_; | 79 bool key_handled_; |
| 86 bool key_received_; | 80 bool key_received_; |
| 87 | 81 |
| 88 DISALLOW_COPY_AND_ASSIGN(TestTextfield); | 82 DISALLOW_COPY_AND_ASSIGN(TestTextfield); |
| 89 }; | 83 }; |
| 90 | 84 |
| 91 // A helper class for use with ui::TextInputClient::GetTextFromRange(). | 85 // A helper class for use with ui::TextInputClient::GetTextFromRange(). |
| 92 class GetTextHelper { | 86 class GetTextHelper { |
| 93 public: | 87 public: |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 } | 151 } |
| 158 | 152 |
| 159 virtual void OnBeforeUserAction(Textfield* sender) OVERRIDE { | 153 virtual void OnBeforeUserAction(Textfield* sender) OVERRIDE { |
| 160 ++on_before_user_action_; | 154 ++on_before_user_action_; |
| 161 } | 155 } |
| 162 | 156 |
| 163 virtual void OnAfterUserAction(Textfield* sender) OVERRIDE { | 157 virtual void OnAfterUserAction(Textfield* sender) OVERRIDE { |
| 164 ++on_after_user_action_; | 158 ++on_after_user_action_; |
| 165 } | 159 } |
| 166 | 160 |
| 167 void InitTextfield(Textfield::StyleFlags style) { | 161 void InitTextfield() { |
| 168 InitTextfields(style, 1); | 162 InitTextfields(1); |
| 169 } | 163 } |
| 170 | 164 |
| 171 void InitTextfields(Textfield::StyleFlags style, int count) { | 165 void InitTextfields(int count) { |
| 172 ASSERT_FALSE(textfield_); | 166 ASSERT_FALSE(textfield_); |
| 173 textfield_ = new TestTextfield(style); | 167 textfield_ = new TestTextfield(); |
| 174 textfield_->SetController(this); | 168 textfield_->set_controller(this); |
| 175 widget_ = new Widget(); | 169 widget_ = new Widget(); |
| 176 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 170 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 177 params.bounds = gfx::Rect(100, 100, 100, 100); | 171 params.bounds = gfx::Rect(100, 100, 100, 100); |
| 178 widget_->Init(params); | 172 widget_->Init(params); |
| 179 View* container = new View(); | 173 View* container = new View(); |
| 180 widget_->SetContentsView(container); | 174 widget_->SetContentsView(container); |
| 181 container->AddChildView(textfield_); | 175 container->AddChildView(textfield_); |
| 182 textfield_->SetBoundsRect(params.bounds); | 176 textfield_->SetBoundsRect(params.bounds); |
| 183 textfield_->set_id(1); | 177 textfield_->set_id(1); |
| 184 | 178 |
| 185 for (int i = 1; i < count; i++) { | 179 for (int i = 1; i < count; i++) { |
| 186 Textfield* textfield = new Textfield(style); | 180 Textfield* textfield = new Textfield(); |
| 187 container->AddChildView(textfield); | 181 container->AddChildView(textfield); |
| 188 textfield->set_id(i + 1); | 182 textfield->set_id(i + 1); |
| 189 } | 183 } |
| 190 | 184 |
| 191 model_ = textfield_->model_.get(); | 185 model_ = textfield_->model_.get(); |
| 192 model_->ClearEditHistory(); | 186 model_->ClearEditHistory(); |
| 193 | 187 |
| 194 input_method_ = new MockInputMethod(); | 188 input_method_ = new MockInputMethod(); |
| 195 widget_->ReplaceInputMethod(input_method_); | 189 widget_->ReplaceInputMethod(input_method_); |
| 196 | 190 |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 int on_before_user_action_; | 332 int on_before_user_action_; |
| 339 | 333 |
| 340 // Indicates how many times OnAfterUserAction() is called. | 334 // Indicates how many times OnAfterUserAction() is called. |
| 341 int on_after_user_action_; | 335 int on_after_user_action_; |
| 342 | 336 |
| 343 private: | 337 private: |
| 344 DISALLOW_COPY_AND_ASSIGN(TextfieldTest); | 338 DISALLOW_COPY_AND_ASSIGN(TextfieldTest); |
| 345 }; | 339 }; |
| 346 | 340 |
| 347 TEST_F(TextfieldTest, ModelChangesTest) { | 341 TEST_F(TextfieldTest, ModelChangesTest) { |
| 348 InitTextfield(Textfield::STYLE_DEFAULT); | 342 InitTextfield(); |
| 349 | 343 |
| 350 // TextfieldController::ContentsChanged() shouldn't be called when changing | 344 // TextfieldController::ContentsChanged() shouldn't be called when changing |
| 351 // text programmatically. | 345 // text programmatically. |
| 352 last_contents_.clear(); | 346 last_contents_.clear(); |
| 353 textfield_->SetText(ASCIIToUTF16("this is")); | 347 textfield_->SetText(ASCIIToUTF16("this is")); |
| 354 | 348 |
| 355 EXPECT_STR_EQ("this is", model_->text()); | 349 EXPECT_STR_EQ("this is", model_->text()); |
| 356 EXPECT_STR_EQ("this is", textfield_->text()); | 350 EXPECT_STR_EQ("this is", textfield_->text()); |
| 357 EXPECT_TRUE(last_contents_.empty()); | 351 EXPECT_TRUE(last_contents_.empty()); |
| 358 | 352 |
| 359 textfield_->AppendText(ASCIIToUTF16(" a test")); | 353 textfield_->AppendText(ASCIIToUTF16(" a test")); |
| 360 EXPECT_STR_EQ("this is a test", model_->text()); | 354 EXPECT_STR_EQ("this is a test", model_->text()); |
| 361 EXPECT_STR_EQ("this is a test", textfield_->text()); | 355 EXPECT_STR_EQ("this is a test", textfield_->text()); |
| 362 EXPECT_TRUE(last_contents_.empty()); | 356 EXPECT_TRUE(last_contents_.empty()); |
| 363 | 357 |
| 364 EXPECT_EQ(base::string16(), textfield_->GetSelectedText()); | 358 EXPECT_EQ(base::string16(), textfield_->GetSelectedText()); |
| 365 textfield_->SelectAll(false); | 359 textfield_->SelectAll(false); |
| 366 EXPECT_STR_EQ("this is a test", textfield_->GetSelectedText()); | 360 EXPECT_STR_EQ("this is a test", textfield_->GetSelectedText()); |
| 367 EXPECT_TRUE(last_contents_.empty()); | 361 EXPECT_TRUE(last_contents_.empty()); |
| 368 } | 362 } |
| 369 | 363 |
| 370 TEST_F(TextfieldTest, ModelChangesTestLowerCase) { | |
| 371 // Check if |model_|'s text is properly lowercased for STYLE_LOWERCASE. | |
| 372 InitTextfield(Textfield::STYLE_LOWERCASE); | |
| 373 EXPECT_EQ(0U, textfield_->GetCursorPosition()); | |
| 374 | |
| 375 last_contents_.clear(); | |
| 376 textfield_->SetText(ASCIIToUTF16("THIS IS")); | |
| 377 EXPECT_EQ(7U, textfield_->GetCursorPosition()); | |
| 378 | |
| 379 EXPECT_STR_EQ("this is", textfield_->text()); | |
| 380 EXPECT_TRUE(last_contents_.empty()); | |
| 381 | |
| 382 textfield_->AppendText(ASCIIToUTF16(" A TEST")); | |
| 383 EXPECT_EQ(7U, textfield_->GetCursorPosition()); | |
| 384 EXPECT_STR_EQ("this is a test", textfield_->text()); | |
| 385 | |
| 386 EXPECT_TRUE(last_contents_.empty()); | |
| 387 } | |
| 388 | |
| 389 TEST_F(TextfieldTest, ModelChangesTestLowerCaseI18n) { | |
| 390 // Check if lower case conversion works for non-ASCII characters. | |
| 391 InitTextfield(Textfield::STYLE_LOWERCASE); | |
| 392 EXPECT_EQ(0U, textfield_->GetCursorPosition()); | |
| 393 | |
| 394 last_contents_.clear(); | |
| 395 // Zenkaku Japanese "ABCabc" | |
| 396 textfield_->SetText(WideToUTF16(L"\xFF21\xFF22\xFF23\xFF41\xFF42\xFF43")); | |
| 397 EXPECT_EQ(6U, textfield_->GetCursorPosition()); | |
| 398 // Zenkaku Japanese "abcabc" | |
| 399 EXPECT_EQ(WideToUTF16(L"\xFF41\xFF42\xFF43\xFF41\xFF42\xFF43"), | |
| 400 textfield_->text()); | |
| 401 EXPECT_TRUE(last_contents_.empty()); | |
| 402 | |
| 403 // Zenkaku Japanese "XYZxyz" | |
| 404 textfield_->AppendText(WideToUTF16(L"\xFF38\xFF39\xFF3A\xFF58\xFF59\xFF5A")); | |
| 405 EXPECT_EQ(6U, textfield_->GetCursorPosition()); | |
| 406 // Zenkaku Japanese "abcabcxyzxyz" | |
| 407 EXPECT_EQ(WideToUTF16(L"\xFF41\xFF42\xFF43\xFF41\xFF42\xFF43" | |
| 408 L"\xFF58\xFF59\xFF5A\xFF58\xFF59\xFF5A"), | |
| 409 textfield_->text()); | |
| 410 EXPECT_TRUE(last_contents_.empty()); | |
| 411 } | |
| 412 | |
| 413 TEST_F(TextfieldTest, ModelChangesTestLowerCaseWithLocale) { | |
| 414 // Check if lower case conversion honors locale properly. | |
| 415 std::string locale = l10n_util::GetApplicationLocale(""); | |
| 416 base::i18n::SetICUDefaultLocale("tr"); | |
| 417 | |
| 418 InitTextfield(Textfield::STYLE_LOWERCASE); | |
| 419 EXPECT_EQ(0U, textfield_->GetCursorPosition()); | |
| 420 | |
| 421 last_contents_.clear(); | |
| 422 // Turkish 'I' should be converted to dotless 'i' (U+0131). | |
| 423 textfield_->SetText(WideToUTF16(L"I")); | |
| 424 EXPECT_EQ(1U, textfield_->GetCursorPosition()); | |
| 425 EXPECT_EQ(WideToUTF16(L"\x0131"), textfield_->text()); | |
| 426 EXPECT_TRUE(last_contents_.empty()); | |
| 427 | |
| 428 base::i18n::SetICUDefaultLocale(locale); | |
| 429 | |
| 430 // On default (en) locale, 'I' should be converted to 'i'. | |
| 431 textfield_->SetText(WideToUTF16(L"I")); | |
| 432 EXPECT_EQ(1U, textfield_->GetCursorPosition()); | |
| 433 EXPECT_EQ(WideToUTF16(L"i"), textfield_->text()); | |
| 434 EXPECT_TRUE(last_contents_.empty()); | |
| 435 } | |
| 436 | |
| 437 TEST_F(TextfieldTest, KeyTest) { | 364 TEST_F(TextfieldTest, KeyTest) { |
| 438 InitTextfield(Textfield::STYLE_DEFAULT); | 365 InitTextfield(); |
| 439 // Event flags: key, alt, shift, ctrl, caps-lock. | 366 // Event flags: key, alt, shift, ctrl, caps-lock. |
| 440 SendKeyEvent(ui::VKEY_T, false, true, false, false); | 367 SendKeyEvent(ui::VKEY_T, false, true, false, false); |
| 441 SendKeyEvent(ui::VKEY_E, false, false, false, false); | 368 SendKeyEvent(ui::VKEY_E, false, false, false, false); |
| 442 SendKeyEvent(ui::VKEY_X, false, true, false, true); | 369 SendKeyEvent(ui::VKEY_X, false, true, false, true); |
| 443 SendKeyEvent(ui::VKEY_T, false, false, false, true); | 370 SendKeyEvent(ui::VKEY_T, false, false, false, true); |
| 444 SendKeyEvent(ui::VKEY_1, false, true, false, false); | 371 SendKeyEvent(ui::VKEY_1, false, true, false, false); |
| 445 SendKeyEvent(ui::VKEY_1, false, false, false, false); | 372 SendKeyEvent(ui::VKEY_1, false, false, false, false); |
| 446 SendKeyEvent(ui::VKEY_1, false, true, false, true); | 373 SendKeyEvent(ui::VKEY_1, false, true, false, true); |
| 447 SendKeyEvent(ui::VKEY_1, false, false, false, true); | 374 SendKeyEvent(ui::VKEY_1, false, false, false, true); |
| 448 EXPECT_STR_EQ("TexT!1!1", textfield_->text()); | 375 EXPECT_STR_EQ("TexT!1!1", textfield_->text()); |
| 449 } | 376 } |
| 450 | 377 |
| 451 TEST_F(TextfieldTest, ControlAndSelectTest) { | 378 TEST_F(TextfieldTest, ControlAndSelectTest) { |
| 452 // Insert a test string in a textfield. | 379 // Insert a test string in a textfield. |
| 453 InitTextfield(Textfield::STYLE_DEFAULT); | 380 InitTextfield(); |
| 454 textfield_->SetText(ASCIIToUTF16("one two three")); | 381 textfield_->SetText(ASCIIToUTF16("one two three")); |
| 455 SendKeyEvent(ui::VKEY_HOME, false /* shift */, false /* control */); | 382 SendKeyEvent(ui::VKEY_HOME, false /* shift */, false /* control */); |
| 456 SendKeyEvent(ui::VKEY_RIGHT, true, false); | 383 SendKeyEvent(ui::VKEY_RIGHT, true, false); |
| 457 SendKeyEvent(ui::VKEY_RIGHT, true, false); | 384 SendKeyEvent(ui::VKEY_RIGHT, true, false); |
| 458 SendKeyEvent(ui::VKEY_RIGHT, true, false); | 385 SendKeyEvent(ui::VKEY_RIGHT, true, false); |
| 459 | 386 |
| 460 EXPECT_STR_EQ("one", textfield_->GetSelectedText()); | 387 EXPECT_STR_EQ("one", textfield_->GetSelectedText()); |
| 461 | 388 |
| 462 // Test word select. | 389 // Test word select. |
| 463 SendKeyEvent(ui::VKEY_RIGHT, true, true); | 390 SendKeyEvent(ui::VKEY_RIGHT, true, true); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 478 EXPECT_STR_EQ("ZERO two three", textfield_->text()); | 405 EXPECT_STR_EQ("ZERO two three", textfield_->text()); |
| 479 | 406 |
| 480 SendKeyEvent(ui::VKEY_END, true, false); | 407 SendKeyEvent(ui::VKEY_END, true, false); |
| 481 EXPECT_STR_EQ("two three", textfield_->GetSelectedText()); | 408 EXPECT_STR_EQ("two three", textfield_->GetSelectedText()); |
| 482 SendKeyEvent(ui::VKEY_HOME, true, false); | 409 SendKeyEvent(ui::VKEY_HOME, true, false); |
| 483 EXPECT_STR_EQ("ZERO ", textfield_->GetSelectedText()); | 410 EXPECT_STR_EQ("ZERO ", textfield_->GetSelectedText()); |
| 484 } | 411 } |
| 485 | 412 |
| 486 TEST_F(TextfieldTest, InsertionDeletionTest) { | 413 TEST_F(TextfieldTest, InsertionDeletionTest) { |
| 487 // Insert a test string in a textfield. | 414 // Insert a test string in a textfield. |
| 488 InitTextfield(Textfield::STYLE_DEFAULT); | 415 InitTextfield(); |
| 489 for (size_t i = 0; i < 10; i++) | 416 for (size_t i = 0; i < 10; i++) |
| 490 SendKeyEvent(static_cast<ui::KeyboardCode>(ui::VKEY_A + i)); | 417 SendKeyEvent(static_cast<ui::KeyboardCode>(ui::VKEY_A + i)); |
| 491 EXPECT_STR_EQ("abcdefghij", textfield_->text()); | 418 EXPECT_STR_EQ("abcdefghij", textfield_->text()); |
| 492 | 419 |
| 493 // Test the delete and backspace keys. | 420 // Test the delete and backspace keys. |
| 494 textfield_->SelectRange(gfx::Range(5)); | 421 textfield_->SelectRange(gfx::Range(5)); |
| 495 for (int i = 0; i < 3; i++) | 422 for (int i = 0; i < 3; i++) |
| 496 SendKeyEvent(ui::VKEY_BACK); | 423 SendKeyEvent(ui::VKEY_BACK); |
| 497 EXPECT_STR_EQ("abfghij", textfield_->text()); | 424 EXPECT_STR_EQ("abfghij", textfield_->text()); |
| 498 for (int i = 0; i < 3; i++) | 425 for (int i = 0; i < 3; i++) |
| (...skipping 30 matching lines...) Expand all Loading... |
| 529 SendKeyEvent(ui::VKEY_RIGHT, false, false, true, false); | 456 SendKeyEvent(ui::VKEY_RIGHT, false, false, true, false); |
| 530 SendKeyEvent(ui::VKEY_DELETE, false, true, true, false); | 457 SendKeyEvent(ui::VKEY_DELETE, false, true, true, false); |
| 531 #if defined(OS_LINUX) | 458 #if defined(OS_LINUX) |
| 532 EXPECT_STR_EQ(" two", textfield_->text()); | 459 EXPECT_STR_EQ(" two", textfield_->text()); |
| 533 #else | 460 #else |
| 534 EXPECT_STR_EQ(" two three four", textfield_->text()); | 461 EXPECT_STR_EQ(" two three four", textfield_->text()); |
| 535 #endif | 462 #endif |
| 536 } | 463 } |
| 537 | 464 |
| 538 TEST_F(TextfieldTest, PasswordTest) { | 465 TEST_F(TextfieldTest, PasswordTest) { |
| 539 InitTextfield(Textfield::STYLE_OBSCURED); | 466 InitTextfield(); |
| 467 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD); |
| 540 EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, GetTextInputType()); | 468 EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, GetTextInputType()); |
| 541 EXPECT_TRUE(textfield_->enabled()); | 469 EXPECT_TRUE(textfield_->enabled()); |
| 542 EXPECT_TRUE(textfield_->focusable()); | 470 EXPECT_TRUE(textfield_->IsFocusable()); |
| 543 | 471 |
| 544 last_contents_.clear(); | 472 last_contents_.clear(); |
| 545 textfield_->SetText(ASCIIToUTF16("password")); | 473 textfield_->SetText(ASCIIToUTF16("password")); |
| 546 // Ensure text() and the callback returns the actual text instead of "*". | 474 // Ensure text() and the callback returns the actual text instead of "*". |
| 547 EXPECT_STR_EQ("password", textfield_->text()); | 475 EXPECT_STR_EQ("password", textfield_->text()); |
| 548 EXPECT_TRUE(last_contents_.empty()); | 476 EXPECT_TRUE(last_contents_.empty()); |
| 549 model_->SelectAll(false); | 477 model_->SelectAll(false); |
| 550 SetClipboardText("foo"); | 478 SetClipboardText("foo"); |
| 551 | 479 |
| 552 // Cut and copy should be disabled. | 480 // Cut and copy should be disabled. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 565 | 493 |
| 566 // Paste should work normally. | 494 // Paste should work normally. |
| 567 EXPECT_TRUE(textfield_->IsCommandIdEnabled(IDS_APP_PASTE)); | 495 EXPECT_TRUE(textfield_->IsCommandIdEnabled(IDS_APP_PASTE)); |
| 568 textfield_->ExecuteCommand(IDS_APP_PASTE, 0); | 496 textfield_->ExecuteCommand(IDS_APP_PASTE, 0); |
| 569 SendKeyEvent(ui::VKEY_V, false, true); | 497 SendKeyEvent(ui::VKEY_V, false, true); |
| 570 SendKeyEvent(ui::VKEY_INSERT, true, false); | 498 SendKeyEvent(ui::VKEY_INSERT, true, false); |
| 571 EXPECT_STR_EQ("foo", base::string16(GetClipboardText())); | 499 EXPECT_STR_EQ("foo", base::string16(GetClipboardText())); |
| 572 EXPECT_STR_EQ("foofoofoo", textfield_->text()); | 500 EXPECT_STR_EQ("foofoofoo", textfield_->text()); |
| 573 } | 501 } |
| 574 | 502 |
| 575 TEST_F(TextfieldTest, InputTypeSetsObscured) { | 503 TEST_F(TextfieldTest, TextInputType) { |
| 576 InitTextfield(Textfield::STYLE_DEFAULT); | 504 InitTextfield(); |
| 577 | 505 |
| 578 // Defaults to TEXT | 506 // Defaults to TEXT |
| 579 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, GetTextInputType()); | 507 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, GetTextInputType()); |
| 580 | |
| 581 // Setting to TEXT_INPUT_TYPE_PASSWORD also sets obscured state of textfield. | |
| 582 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD); | |
| 583 EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, GetTextInputType()); | |
| 584 EXPECT_TRUE(textfield_->IsObscured()); | |
| 585 } | |
| 586 | |
| 587 TEST_F(TextfieldTest, ObscuredSetsInputType) { | |
| 588 InitTextfield(Textfield::STYLE_DEFAULT); | |
| 589 | |
| 590 // Defaults to TEXT | |
| 591 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, GetTextInputType()); | |
| 592 | |
| 593 textfield_->SetObscured(true); | |
| 594 EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, GetTextInputType()); | |
| 595 | |
| 596 textfield_->SetObscured(false); | |
| 597 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, GetTextInputType()); | |
| 598 } | |
| 599 | |
| 600 TEST_F(TextfieldTest, TextInputType) { | |
| 601 InitTextfield(Textfield::STYLE_DEFAULT); | |
| 602 | |
| 603 // Defaults to TEXT | |
| 604 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, GetTextInputType()); | |
| 605 | 508 |
| 606 // And can be set. | 509 // And can be set. |
| 607 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_URL); | 510 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_URL); |
| 608 EXPECT_EQ(ui::TEXT_INPUT_TYPE_URL, GetTextInputType()); | 511 EXPECT_EQ(ui::TEXT_INPUT_TYPE_URL, GetTextInputType()); |
| 512 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD); |
| 513 EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, GetTextInputType()); |
| 609 | 514 |
| 610 // Readonly textfields have type NONE | 515 // Readonly textfields have type NONE |
| 611 textfield_->SetReadOnly(true); | 516 textfield_->SetReadOnly(true); |
| 612 EXPECT_EQ(ui::TEXT_INPUT_TYPE_NONE, GetTextInputType()); | 517 EXPECT_EQ(ui::TEXT_INPUT_TYPE_NONE, GetTextInputType()); |
| 613 | 518 |
| 614 textfield_->SetReadOnly(false); | 519 textfield_->SetReadOnly(false); |
| 615 EXPECT_EQ(ui::TEXT_INPUT_TYPE_URL, GetTextInputType()); | 520 EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, GetTextInputType()); |
| 616 | 521 |
| 617 // As do disabled textfields | 522 // As do disabled textfields |
| 618 textfield_->SetEnabled(false); | 523 textfield_->SetEnabled(false); |
| 619 EXPECT_EQ(ui::TEXT_INPUT_TYPE_NONE, GetTextInputType()); | 524 EXPECT_EQ(ui::TEXT_INPUT_TYPE_NONE, GetTextInputType()); |
| 525 |
| 526 textfield_->SetEnabled(true); |
| 527 EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, GetTextInputType()); |
| 620 } | 528 } |
| 621 | 529 |
| 622 TEST_F(TextfieldTest, OnKeyPressReturnValueTest) { | 530 TEST_F(TextfieldTest, OnKeyPressReturnValueTest) { |
| 623 InitTextfield(Textfield::STYLE_DEFAULT); | 531 InitTextfield(); |
| 624 | 532 |
| 625 // Character keys will be handled by input method. | 533 // Character keys will be handled by input method. |
| 626 SendKeyEvent(ui::VKEY_A); | 534 SendKeyEvent(ui::VKEY_A); |
| 627 EXPECT_TRUE(textfield_->key_received()); | 535 EXPECT_TRUE(textfield_->key_received()); |
| 628 EXPECT_FALSE(textfield_->key_handled()); | 536 EXPECT_FALSE(textfield_->key_handled()); |
| 629 textfield_->clear(); | 537 textfield_->clear(); |
| 630 | 538 |
| 631 // Home will be handled. | 539 // Home will be handled. |
| 632 SendKeyEvent(ui::VKEY_HOME); | 540 SendKeyEvent(ui::VKEY_HOME); |
| 633 EXPECT_TRUE(textfield_->key_received()); | 541 EXPECT_TRUE(textfield_->key_received()); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 676 textfield_->clear(); | 584 textfield_->clear(); |
| 677 | 585 |
| 678 // Now left key should not be handled. | 586 // Now left key should not be handled. |
| 679 SendKeyEvent(ui::VKEY_LEFT); | 587 SendKeyEvent(ui::VKEY_LEFT); |
| 680 EXPECT_TRUE(textfield_->key_received()); | 588 EXPECT_TRUE(textfield_->key_received()); |
| 681 EXPECT_FALSE(textfield_->key_handled()); | 589 EXPECT_FALSE(textfield_->key_handled()); |
| 682 textfield_->clear(); | 590 textfield_->clear(); |
| 683 } | 591 } |
| 684 | 592 |
| 685 TEST_F(TextfieldTest, CursorMovement) { | 593 TEST_F(TextfieldTest, CursorMovement) { |
| 686 InitTextfield(Textfield::STYLE_DEFAULT); | 594 InitTextfield(); |
| 687 | 595 |
| 688 // Test with trailing whitespace. | 596 // Test with trailing whitespace. |
| 689 textfield_->SetText(ASCIIToUTF16("one two hre ")); | 597 textfield_->SetText(ASCIIToUTF16("one two hre ")); |
| 690 | 598 |
| 691 // Send the cursor at the end. | 599 // Send the cursor at the end. |
| 692 SendKeyEvent(ui::VKEY_END); | 600 SendKeyEvent(ui::VKEY_END); |
| 693 | 601 |
| 694 // Ctrl+Left should move the cursor just before the last word. | 602 // Ctrl+Left should move the cursor just before the last word. |
| 695 SendKeyEvent(ui::VKEY_LEFT, false, true); | 603 SendKeyEvent(ui::VKEY_LEFT, false, true); |
| 696 SendKeyEvent(ui::VKEY_T); | 604 SendKeyEvent(ui::VKEY_T); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 726 // Ctrl+Left to move the cursor to the beginning of the first word. | 634 // Ctrl+Left to move the cursor to the beginning of the first word. |
| 727 SendKeyEvent(ui::VKEY_LEFT, false, true); | 635 SendKeyEvent(ui::VKEY_LEFT, false, true); |
| 728 // Ctrl+Left again should move the cursor back to the very beginning. | 636 // Ctrl+Left again should move the cursor back to the very beginning. |
| 729 SendKeyEvent(ui::VKEY_LEFT, false, true); | 637 SendKeyEvent(ui::VKEY_LEFT, false, true); |
| 730 SendKeyEvent(ui::VKEY_DELETE); | 638 SendKeyEvent(ui::VKEY_DELETE); |
| 731 EXPECT_STR_EQ("one two", textfield_->text()); | 639 EXPECT_STR_EQ("one two", textfield_->text()); |
| 732 EXPECT_STR_EQ("one two", last_contents_); | 640 EXPECT_STR_EQ("one two", last_contents_); |
| 733 } | 641 } |
| 734 | 642 |
| 735 TEST_F(TextfieldTest, FocusTraversalTest) { | 643 TEST_F(TextfieldTest, FocusTraversalTest) { |
| 736 InitTextfields(Textfield::STYLE_DEFAULT, 3); | 644 InitTextfields(3); |
| 737 textfield_->RequestFocus(); | 645 textfield_->RequestFocus(); |
| 738 | 646 |
| 739 EXPECT_EQ(1, GetFocusedView()->id()); | 647 EXPECT_EQ(1, GetFocusedView()->id()); |
| 740 widget_->GetFocusManager()->AdvanceFocus(false); | 648 widget_->GetFocusManager()->AdvanceFocus(false); |
| 741 EXPECT_EQ(2, GetFocusedView()->id()); | 649 EXPECT_EQ(2, GetFocusedView()->id()); |
| 742 widget_->GetFocusManager()->AdvanceFocus(false); | 650 widget_->GetFocusManager()->AdvanceFocus(false); |
| 743 EXPECT_EQ(3, GetFocusedView()->id()); | 651 EXPECT_EQ(3, GetFocusedView()->id()); |
| 744 // Cycle back to the first textfield. | 652 // Cycle back to the first textfield. |
| 745 widget_->GetFocusManager()->AdvanceFocus(false); | 653 widget_->GetFocusManager()->AdvanceFocus(false); |
| 746 EXPECT_EQ(1, GetFocusedView()->id()); | 654 EXPECT_EQ(1, GetFocusedView()->id()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 762 // Test if clicking on textfield view sets the focus to textfield_. | 670 // Test if clicking on textfield view sets the focus to textfield_. |
| 763 widget_->GetFocusManager()->AdvanceFocus(true); | 671 widget_->GetFocusManager()->AdvanceFocus(true); |
| 764 EXPECT_EQ(3, GetFocusedView()->id()); | 672 EXPECT_EQ(3, GetFocusedView()->id()); |
| 765 ui::MouseEvent click(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 673 ui::MouseEvent click(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 766 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); | 674 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); |
| 767 textfield_->OnMousePressed(click); | 675 textfield_->OnMousePressed(click); |
| 768 EXPECT_EQ(1, GetFocusedView()->id()); | 676 EXPECT_EQ(1, GetFocusedView()->id()); |
| 769 } | 677 } |
| 770 | 678 |
| 771 TEST_F(TextfieldTest, ContextMenuDisplayTest) { | 679 TEST_F(TextfieldTest, ContextMenuDisplayTest) { |
| 772 InitTextfield(Textfield::STYLE_DEFAULT); | 680 InitTextfield(); |
| 773 EXPECT_TRUE(textfield_->context_menu_controller()); | 681 EXPECT_TRUE(textfield_->context_menu_controller()); |
| 774 textfield_->SetText(ASCIIToUTF16("hello world")); | 682 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 775 ui::Clipboard::GetForCurrentThread()->Clear(ui::CLIPBOARD_TYPE_COPY_PASTE); | 683 ui::Clipboard::GetForCurrentThread()->Clear(ui::CLIPBOARD_TYPE_COPY_PASTE); |
| 776 textfield_->ClearEditHistory(); | 684 textfield_->ClearEditHistory(); |
| 777 EXPECT_TRUE(GetContextMenuModel()); | 685 EXPECT_TRUE(GetContextMenuModel()); |
| 778 VerifyTextfieldContextMenuContents(false, false, GetContextMenuModel()); | 686 VerifyTextfieldContextMenuContents(false, false, GetContextMenuModel()); |
| 779 | 687 |
| 780 textfield_->SelectAll(false); | 688 textfield_->SelectAll(false); |
| 781 VerifyTextfieldContextMenuContents(true, false, GetContextMenuModel()); | 689 VerifyTextfieldContextMenuContents(true, false, GetContextMenuModel()); |
| 782 | 690 |
| 783 SendKeyEvent(ui::VKEY_T); | 691 SendKeyEvent(ui::VKEY_T); |
| 784 VerifyTextfieldContextMenuContents(false, true, GetContextMenuModel()); | 692 VerifyTextfieldContextMenuContents(false, true, GetContextMenuModel()); |
| 785 | 693 |
| 786 textfield_->SelectAll(false); | 694 textfield_->SelectAll(false); |
| 787 VerifyTextfieldContextMenuContents(true, true, GetContextMenuModel()); | 695 VerifyTextfieldContextMenuContents(true, true, GetContextMenuModel()); |
| 788 | 696 |
| 789 // Exercise the "paste enabled?" check in the verifier. | 697 // Exercise the "paste enabled?" check in the verifier. |
| 790 SetClipboardText("Test"); | 698 SetClipboardText("Test"); |
| 791 VerifyTextfieldContextMenuContents(true, true, GetContextMenuModel()); | 699 VerifyTextfieldContextMenuContents(true, true, GetContextMenuModel()); |
| 792 } | 700 } |
| 793 | 701 |
| 794 TEST_F(TextfieldTest, DoubleAndTripleClickTest) { | 702 TEST_F(TextfieldTest, DoubleAndTripleClickTest) { |
| 795 InitTextfield(Textfield::STYLE_DEFAULT); | 703 InitTextfield(); |
| 796 textfield_->SetText(ASCIIToUTF16("hello world")); | 704 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 797 ui::MouseEvent click(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 705 ui::MouseEvent click(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 798 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); | 706 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); |
| 799 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), | 707 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), |
| 800 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); | 708 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); |
| 801 ui::MouseEvent double_click( | 709 ui::MouseEvent double_click( |
| 802 ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 710 ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
| 803 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_IS_DOUBLE_CLICK, | 711 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_IS_DOUBLE_CLICK, |
| 804 ui::EF_LEFT_MOUSE_BUTTON); | 712 ui::EF_LEFT_MOUSE_BUTTON); |
| 805 | 713 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 816 textfield_->OnMouseReleased(release); | 724 textfield_->OnMouseReleased(release); |
| 817 EXPECT_STR_EQ("hello world", textfield_->GetSelectedText()); | 725 EXPECT_STR_EQ("hello world", textfield_->GetSelectedText()); |
| 818 | 726 |
| 819 // Another click should reset back to double click. | 727 // Another click should reset back to double click. |
| 820 textfield_->OnMousePressed(click); | 728 textfield_->OnMousePressed(click); |
| 821 textfield_->OnMouseReleased(release); | 729 textfield_->OnMouseReleased(release); |
| 822 EXPECT_STR_EQ("hello", textfield_->GetSelectedText()); | 730 EXPECT_STR_EQ("hello", textfield_->GetSelectedText()); |
| 823 } | 731 } |
| 824 | 732 |
| 825 TEST_F(TextfieldTest, DragToSelect) { | 733 TEST_F(TextfieldTest, DragToSelect) { |
| 826 InitTextfield(Textfield::STYLE_DEFAULT); | 734 InitTextfield(); |
| 827 textfield_->SetText(ASCIIToUTF16("hello world")); | 735 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 828 const int kStart = GetCursorPositionX(5); | 736 const int kStart = GetCursorPositionX(5); |
| 829 const int kEnd = 500; | 737 const int kEnd = 500; |
| 830 gfx::Point start_point(kStart, 0); | 738 gfx::Point start_point(kStart, 0); |
| 831 gfx::Point end_point(kEnd, 0); | 739 gfx::Point end_point(kEnd, 0); |
| 832 ui::MouseEvent click_a(ui::ET_MOUSE_PRESSED, start_point, start_point, | 740 ui::MouseEvent click_a(ui::ET_MOUSE_PRESSED, start_point, start_point, |
| 833 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); | 741 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); |
| 834 ui::MouseEvent click_b(ui::ET_MOUSE_PRESSED, end_point, end_point, | 742 ui::MouseEvent click_b(ui::ET_MOUSE_PRESSED, end_point, end_point, |
| 835 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); | 743 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); |
| 836 ui::MouseEvent drag_left(ui::ET_MOUSE_DRAGGED, gfx::Point(), gfx::Point(), | 744 ui::MouseEvent drag_left(ui::ET_MOUSE_DRAGGED, gfx::Point(), gfx::Point(), |
| (...skipping 17 matching lines...) Expand all Loading... |
| 854 EXPECT_EQ(text_right, textfield_->GetSelectedText()); | 762 EXPECT_EQ(text_right, textfield_->GetSelectedText()); |
| 855 // Check that dragging from beyond the text length works too. | 763 // Check that dragging from beyond the text length works too. |
| 856 textfield_->OnMousePressed(click_b); | 764 textfield_->OnMousePressed(click_b); |
| 857 textfield_->OnMouseDragged(drag_left); | 765 textfield_->OnMouseDragged(drag_left); |
| 858 textfield_->OnMouseReleased(release); | 766 textfield_->OnMouseReleased(release); |
| 859 EXPECT_EQ(textfield_->text(), textfield_->GetSelectedText()); | 767 EXPECT_EQ(textfield_->text(), textfield_->GetSelectedText()); |
| 860 } | 768 } |
| 861 | 769 |
| 862 #if defined(OS_WIN) | 770 #if defined(OS_WIN) |
| 863 TEST_F(TextfieldTest, DragAndDrop_AcceptDrop) { | 771 TEST_F(TextfieldTest, DragAndDrop_AcceptDrop) { |
| 864 InitTextfield(Textfield::STYLE_DEFAULT); | 772 InitTextfield(); |
| 865 textfield_->SetText(ASCIIToUTF16("hello world")); | 773 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 866 | 774 |
| 867 ui::OSExchangeData data; | 775 ui::OSExchangeData data; |
| 868 base::string16 string(ASCIIToUTF16("string ")); | 776 base::string16 string(ASCIIToUTF16("string ")); |
| 869 data.SetString(string); | 777 data.SetString(string); |
| 870 int formats = 0; | 778 int formats = 0; |
| 871 std::set<OSExchangeData::CustomFormat> custom_formats; | 779 std::set<OSExchangeData::CustomFormat> custom_formats; |
| 872 | 780 |
| 873 // Ensure that disabled textfields do not accept drops. | 781 // Ensure that disabled textfields do not accept drops. |
| 874 textfield_->SetEnabled(false); | 782 textfield_->SetEnabled(false); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 906 bad_data.SetPickledData(fmt, Pickle()); | 814 bad_data.SetPickledData(fmt, Pickle()); |
| 907 bad_data.SetFileContents(base::FilePath(L"x"), "x"); | 815 bad_data.SetFileContents(base::FilePath(L"x"), "x"); |
| 908 bad_data.SetHtml(base::string16(ASCIIToUTF16("x")), GURL("x.org")); | 816 bad_data.SetHtml(base::string16(ASCIIToUTF16("x")), GURL("x.org")); |
| 909 ui::OSExchangeData::DownloadFileInfo download(base::FilePath(), NULL); | 817 ui::OSExchangeData::DownloadFileInfo download(base::FilePath(), NULL); |
| 910 bad_data.SetDownloadFileInfo(download); | 818 bad_data.SetDownloadFileInfo(download); |
| 911 EXPECT_FALSE(textfield_->CanDrop(bad_data)); | 819 EXPECT_FALSE(textfield_->CanDrop(bad_data)); |
| 912 } | 820 } |
| 913 #endif | 821 #endif |
| 914 | 822 |
| 915 TEST_F(TextfieldTest, DragAndDrop_InitiateDrag) { | 823 TEST_F(TextfieldTest, DragAndDrop_InitiateDrag) { |
| 916 InitTextfield(Textfield::STYLE_DEFAULT); | 824 InitTextfield(); |
| 917 textfield_->SetText(ASCIIToUTF16("hello string world")); | 825 textfield_->SetText(ASCIIToUTF16("hello string world")); |
| 918 | 826 |
| 919 // Ensure the textfield will provide selected text for drag data. | 827 // Ensure the textfield will provide selected text for drag data. |
| 920 base::string16 string; | 828 base::string16 string; |
| 921 ui::OSExchangeData data; | 829 ui::OSExchangeData data; |
| 922 const gfx::Range kStringRange(6, 12); | 830 const gfx::Range kStringRange(6, 12); |
| 923 textfield_->SelectRange(kStringRange); | 831 textfield_->SelectRange(kStringRange); |
| 924 const gfx::Point kStringPoint(GetCursorPositionX(9), 0); | 832 const gfx::Point kStringPoint(GetCursorPositionX(9), 0); |
| 925 textfield_->WriteDragDataForView(NULL, kStringPoint, &data); | 833 textfield_->WriteDragDataForView(NULL, kStringPoint, &data); |
| 926 EXPECT_TRUE(data.GetString(&string)); | 834 EXPECT_TRUE(data.GetString(&string)); |
| 927 EXPECT_EQ(textfield_->GetSelectedText(), string); | 835 EXPECT_EQ(textfield_->GetSelectedText(), string); |
| 928 | 836 |
| 929 // Ensure that disabled textfields do not support drag operations. | 837 // Ensure that disabled textfields do not support drag operations. |
| 930 textfield_->SetEnabled(false); | 838 textfield_->SetEnabled(false); |
| 931 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, | 839 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, |
| 932 textfield_->GetDragOperationsForView(NULL, kStringPoint)); | 840 textfield_->GetDragOperationsForView(NULL, kStringPoint)); |
| 933 textfield_->SetEnabled(true); | 841 textfield_->SetEnabled(true); |
| 934 // Ensure that textfields without selections do not support drag operations. | 842 // Ensure that textfields without selections do not support drag operations. |
| 935 textfield_->ClearSelection(); | 843 textfield_->ClearSelection(); |
| 936 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, | 844 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, |
| 937 textfield_->GetDragOperationsForView(NULL, kStringPoint)); | 845 textfield_->GetDragOperationsForView(NULL, kStringPoint)); |
| 938 textfield_->SelectRange(kStringRange); | 846 textfield_->SelectRange(kStringRange); |
| 939 // Ensure that password textfields do not support drag operations. | 847 // Ensure that password textfields do not support drag operations. |
| 940 textfield_->SetObscured(true); | 848 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD); |
| 941 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, | 849 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, |
| 942 textfield_->GetDragOperationsForView(NULL, kStringPoint)); | 850 textfield_->GetDragOperationsForView(NULL, kStringPoint)); |
| 943 textfield_->SetObscured(false); | 851 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_TEXT); |
| 944 // Ensure that textfields only initiate drag operations inside the selection. | 852 // Ensure that textfields only initiate drag operations inside the selection. |
| 945 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, kStringPoint, kStringPoint, | 853 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, kStringPoint, kStringPoint, |
| 946 ui::EF_LEFT_MOUSE_BUTTON, | 854 ui::EF_LEFT_MOUSE_BUTTON, |
| 947 ui::EF_LEFT_MOUSE_BUTTON); | 855 ui::EF_LEFT_MOUSE_BUTTON); |
| 948 textfield_->OnMousePressed(press_event); | 856 textfield_->OnMousePressed(press_event); |
| 949 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, | 857 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, |
| 950 textfield_->GetDragOperationsForView(NULL, gfx::Point())); | 858 textfield_->GetDragOperationsForView(NULL, gfx::Point())); |
| 951 EXPECT_FALSE(textfield_->CanStartDragForView(NULL, gfx::Point(), | 859 EXPECT_FALSE(textfield_->CanStartDragForView(NULL, gfx::Point(), |
| 952 gfx::Point())); | 860 gfx::Point())); |
| 953 EXPECT_EQ(ui::DragDropTypes::DRAG_COPY, | 861 EXPECT_EQ(ui::DragDropTypes::DRAG_COPY, |
| 954 textfield_->GetDragOperationsForView(NULL, kStringPoint)); | 862 textfield_->GetDragOperationsForView(NULL, kStringPoint)); |
| 955 EXPECT_TRUE(textfield_->CanStartDragForView(NULL, kStringPoint, | 863 EXPECT_TRUE(textfield_->CanStartDragForView(NULL, kStringPoint, |
| 956 gfx::Point())); | 864 gfx::Point())); |
| 957 // Ensure that textfields support local moves. | 865 // Ensure that textfields support local moves. |
| 958 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE | ui::DragDropTypes::DRAG_COPY, | 866 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE | ui::DragDropTypes::DRAG_COPY, |
| 959 textfield_->GetDragOperationsForView(textfield_, kStringPoint)); | 867 textfield_->GetDragOperationsForView(textfield_, kStringPoint)); |
| 960 } | 868 } |
| 961 | 869 |
| 962 TEST_F(TextfieldTest, DragAndDrop_ToTheRight) { | 870 TEST_F(TextfieldTest, DragAndDrop_ToTheRight) { |
| 963 InitTextfield(Textfield::STYLE_DEFAULT); | 871 InitTextfield(); |
| 964 textfield_->SetText(ASCIIToUTF16("hello world")); | 872 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 965 | 873 |
| 966 base::string16 string; | 874 base::string16 string; |
| 967 ui::OSExchangeData data; | 875 ui::OSExchangeData data; |
| 968 int formats = 0; | 876 int formats = 0; |
| 969 int operations = 0; | 877 int operations = 0; |
| 970 std::set<OSExchangeData::CustomFormat> custom_formats; | 878 std::set<OSExchangeData::CustomFormat> custom_formats; |
| 971 | 879 |
| 972 // Start dragging "ello". | 880 // Start dragging "ello". |
| 973 textfield_->SelectRange(gfx::Range(1, 5)); | 881 textfield_->SelectRange(gfx::Range(1, 5)); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1006 EXPECT_STR_EQ("", textfield_->text()); | 914 EXPECT_STR_EQ("", textfield_->text()); |
| 1007 SendKeyEvent(ui::VKEY_Y, false, true); | 915 SendKeyEvent(ui::VKEY_Y, false, true); |
| 1008 EXPECT_STR_EQ("hello world", textfield_->text()); | 916 EXPECT_STR_EQ("hello world", textfield_->text()); |
| 1009 SendKeyEvent(ui::VKEY_Y, false, true); | 917 SendKeyEvent(ui::VKEY_Y, false, true); |
| 1010 EXPECT_STR_EQ("h welloorld", textfield_->text()); | 918 EXPECT_STR_EQ("h welloorld", textfield_->text()); |
| 1011 SendKeyEvent(ui::VKEY_Y, false, true); | 919 SendKeyEvent(ui::VKEY_Y, false, true); |
| 1012 EXPECT_STR_EQ("h welloorld", textfield_->text()); | 920 EXPECT_STR_EQ("h welloorld", textfield_->text()); |
| 1013 } | 921 } |
| 1014 | 922 |
| 1015 TEST_F(TextfieldTest, DragAndDrop_ToTheLeft) { | 923 TEST_F(TextfieldTest, DragAndDrop_ToTheLeft) { |
| 1016 InitTextfield(Textfield::STYLE_DEFAULT); | 924 InitTextfield(); |
| 1017 textfield_->SetText(ASCIIToUTF16("hello world")); | 925 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 1018 | 926 |
| 1019 base::string16 string; | 927 base::string16 string; |
| 1020 ui::OSExchangeData data; | 928 ui::OSExchangeData data; |
| 1021 int formats = 0; | 929 int formats = 0; |
| 1022 int operations = 0; | 930 int operations = 0; |
| 1023 std::set<OSExchangeData::CustomFormat> custom_formats; | 931 std::set<OSExchangeData::CustomFormat> custom_formats; |
| 1024 | 932 |
| 1025 // Start dragging " worl". | 933 // Start dragging " worl". |
| 1026 textfield_->SelectRange(gfx::Range(5, 10)); | 934 textfield_->SelectRange(gfx::Range(5, 10)); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1059 EXPECT_STR_EQ("", textfield_->text()); | 967 EXPECT_STR_EQ("", textfield_->text()); |
| 1060 SendKeyEvent(ui::VKEY_Y, false, true); | 968 SendKeyEvent(ui::VKEY_Y, false, true); |
| 1061 EXPECT_STR_EQ("hello world", textfield_->text()); | 969 EXPECT_STR_EQ("hello world", textfield_->text()); |
| 1062 SendKeyEvent(ui::VKEY_Y, false, true); | 970 SendKeyEvent(ui::VKEY_Y, false, true); |
| 1063 EXPECT_STR_EQ("h worlellod", textfield_->text()); | 971 EXPECT_STR_EQ("h worlellod", textfield_->text()); |
| 1064 SendKeyEvent(ui::VKEY_Y, false, true); | 972 SendKeyEvent(ui::VKEY_Y, false, true); |
| 1065 EXPECT_STR_EQ("h worlellod", textfield_->text()); | 973 EXPECT_STR_EQ("h worlellod", textfield_->text()); |
| 1066 } | 974 } |
| 1067 | 975 |
| 1068 TEST_F(TextfieldTest, DragAndDrop_Canceled) { | 976 TEST_F(TextfieldTest, DragAndDrop_Canceled) { |
| 1069 InitTextfield(Textfield::STYLE_DEFAULT); | 977 InitTextfield(); |
| 1070 textfield_->SetText(ASCIIToUTF16("hello world")); | 978 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 1071 | 979 |
| 1072 // Start dragging "worl". | 980 // Start dragging "worl". |
| 1073 textfield_->SelectRange(gfx::Range(6, 10)); | 981 textfield_->SelectRange(gfx::Range(6, 10)); |
| 1074 gfx::Point point(GetCursorPositionX(8), 0); | 982 gfx::Point point(GetCursorPositionX(8), 0); |
| 1075 ui::MouseEvent click(ui::ET_MOUSE_PRESSED, point, point, | 983 ui::MouseEvent click(ui::ET_MOUSE_PRESSED, point, point, |
| 1076 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); | 984 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); |
| 1077 textfield_->OnMousePressed(click); | 985 textfield_->OnMousePressed(click); |
| 1078 ui::OSExchangeData data; | 986 ui::OSExchangeData data; |
| 1079 textfield_->WriteDragDataForView(NULL, click.location(), &data); | 987 textfield_->WriteDragDataForView(NULL, click.location(), &data); |
| 1080 EXPECT_TRUE(textfield_->CanDrop(data)); | 988 EXPECT_TRUE(textfield_->CanDrop(data)); |
| 1081 // Drag the text over somewhere valid, outside the current selection. | 989 // Drag the text over somewhere valid, outside the current selection. |
| 1082 gfx::Point drop_point(GetCursorPositionX(2), 0); | 990 gfx::Point drop_point(GetCursorPositionX(2), 0); |
| 1083 ui::DropTargetEvent drop(data, drop_point, drop_point, | 991 ui::DropTargetEvent drop(data, drop_point, drop_point, |
| 1084 ui::DragDropTypes::DRAG_MOVE); | 992 ui::DragDropTypes::DRAG_MOVE); |
| 1085 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE, textfield_->OnDragUpdated(drop)); | 993 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE, textfield_->OnDragUpdated(drop)); |
| 1086 // "Cancel" the drag, via move and release over the selection, and OnDragDone. | 994 // "Cancel" the drag, via move and release over the selection, and OnDragDone. |
| 1087 gfx::Point drag_point(GetCursorPositionX(9), 0); | 995 gfx::Point drag_point(GetCursorPositionX(9), 0); |
| 1088 ui::MouseEvent drag(ui::ET_MOUSE_DRAGGED, drag_point, drag_point, | 996 ui::MouseEvent drag(ui::ET_MOUSE_DRAGGED, drag_point, drag_point, |
| 1089 ui::EF_LEFT_MOUSE_BUTTON, 0); | 997 ui::EF_LEFT_MOUSE_BUTTON, 0); |
| 1090 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, drag_point, drag_point, | 998 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, drag_point, drag_point, |
| 1091 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); | 999 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); |
| 1092 textfield_->OnMouseDragged(drag); | 1000 textfield_->OnMouseDragged(drag); |
| 1093 textfield_->OnMouseReleased(release); | 1001 textfield_->OnMouseReleased(release); |
| 1094 textfield_->OnDragDone(); | 1002 textfield_->OnDragDone(); |
| 1095 EXPECT_EQ(ASCIIToUTF16("hello world"), textfield_->text()); | 1003 EXPECT_EQ(ASCIIToUTF16("hello world"), textfield_->text()); |
| 1096 } | 1004 } |
| 1097 | 1005 |
| 1098 TEST_F(TextfieldTest, ReadOnlyTest) { | 1006 TEST_F(TextfieldTest, ReadOnlyTest) { |
| 1099 InitTextfield(Textfield::STYLE_DEFAULT); | 1007 InitTextfield(); |
| 1100 textfield_->SetText(ASCIIToUTF16("read only")); | 1008 textfield_->SetText(ASCIIToUTF16("read only")); |
| 1101 textfield_->SetReadOnly(true); | 1009 textfield_->SetReadOnly(true); |
| 1102 EXPECT_TRUE(textfield_->enabled()); | 1010 EXPECT_TRUE(textfield_->enabled()); |
| 1103 EXPECT_TRUE(textfield_->focusable()); | 1011 EXPECT_TRUE(textfield_->IsFocusable()); |
| 1104 | 1012 |
| 1105 SendKeyEvent(ui::VKEY_HOME); | 1013 SendKeyEvent(ui::VKEY_HOME); |
| 1106 EXPECT_EQ(0U, textfield_->GetCursorPosition()); | 1014 EXPECT_EQ(0U, textfield_->GetCursorPosition()); |
| 1107 SendKeyEvent(ui::VKEY_END); | 1015 SendKeyEvent(ui::VKEY_END); |
| 1108 EXPECT_EQ(9U, textfield_->GetCursorPosition()); | 1016 EXPECT_EQ(9U, textfield_->GetCursorPosition()); |
| 1109 | 1017 |
| 1110 SendKeyEvent(ui::VKEY_LEFT, false, false); | 1018 SendKeyEvent(ui::VKEY_LEFT, false, false); |
| 1111 EXPECT_EQ(8U, textfield_->GetCursorPosition()); | 1019 EXPECT_EQ(8U, textfield_->GetCursorPosition()); |
| 1112 SendKeyEvent(ui::VKEY_LEFT, false, true); | 1020 SendKeyEvent(ui::VKEY_LEFT, false, true); |
| 1113 EXPECT_EQ(5U, textfield_->GetCursorPosition()); | 1021 EXPECT_EQ(5U, textfield_->GetCursorPosition()); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1155 // Text field is unmodifiable and selection shouldn't change. | 1063 // Text field is unmodifiable and selection shouldn't change. |
| 1156 SendKeyEvent(ui::VKEY_DELETE); | 1064 SendKeyEvent(ui::VKEY_DELETE); |
| 1157 EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText()); | 1065 EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText()); |
| 1158 SendKeyEvent(ui::VKEY_BACK); | 1066 SendKeyEvent(ui::VKEY_BACK); |
| 1159 EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText()); | 1067 EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText()); |
| 1160 SendKeyEvent(ui::VKEY_T); | 1068 SendKeyEvent(ui::VKEY_T); |
| 1161 EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText()); | 1069 EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText()); |
| 1162 } | 1070 } |
| 1163 | 1071 |
| 1164 TEST_F(TextfieldTest, TextInputClientTest) { | 1072 TEST_F(TextfieldTest, TextInputClientTest) { |
| 1165 InitTextfield(Textfield::STYLE_DEFAULT); | 1073 InitTextfield(); |
| 1166 ui::TextInputClient* client = textfield_->GetTextInputClient(); | 1074 ui::TextInputClient* client = textfield_->GetTextInputClient(); |
| 1167 EXPECT_TRUE(client); | 1075 EXPECT_TRUE(client); |
| 1168 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, client->GetTextInputType()); | 1076 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, client->GetTextInputType()); |
| 1169 | 1077 |
| 1170 textfield_->SetText(ASCIIToUTF16("0123456789")); | 1078 textfield_->SetText(ASCIIToUTF16("0123456789")); |
| 1171 gfx::Range range; | 1079 gfx::Range range; |
| 1172 EXPECT_TRUE(client->GetTextRange(&range)); | 1080 EXPECT_TRUE(client->GetTextRange(&range)); |
| 1173 EXPECT_EQ(0U, range.start()); | 1081 EXPECT_EQ(0U, range.start()); |
| 1174 EXPECT_EQ(10U, range.end()); | 1082 EXPECT_EQ(10U, range.end()); |
| 1175 | 1083 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1254 EXPECT_EQ(0, on_before_user_action_); | 1162 EXPECT_EQ(0, on_before_user_action_); |
| 1255 EXPECT_EQ(0, on_after_user_action_); | 1163 EXPECT_EQ(0, on_after_user_action_); |
| 1256 | 1164 |
| 1257 input_method_->Clear(); | 1165 input_method_->Clear(); |
| 1258 textfield_->SetReadOnly(true); | 1166 textfield_->SetReadOnly(true); |
| 1259 EXPECT_TRUE(input_method_->text_input_type_changed()); | 1167 EXPECT_TRUE(input_method_->text_input_type_changed()); |
| 1260 EXPECT_FALSE(textfield_->GetTextInputClient()); | 1168 EXPECT_FALSE(textfield_->GetTextInputClient()); |
| 1261 | 1169 |
| 1262 textfield_->SetReadOnly(false); | 1170 textfield_->SetReadOnly(false); |
| 1263 input_method_->Clear(); | 1171 input_method_->Clear(); |
| 1264 textfield_->SetObscured(true); | 1172 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD); |
| 1265 EXPECT_TRUE(input_method_->text_input_type_changed()); | 1173 EXPECT_TRUE(input_method_->text_input_type_changed()); |
| 1266 EXPECT_TRUE(textfield_->GetTextInputClient()); | 1174 EXPECT_TRUE(textfield_->GetTextInputClient()); |
| 1267 } | 1175 } |
| 1268 | 1176 |
| 1269 TEST_F(TextfieldTest, UndoRedoTest) { | 1177 TEST_F(TextfieldTest, UndoRedoTest) { |
| 1270 InitTextfield(Textfield::STYLE_DEFAULT); | 1178 InitTextfield(); |
| 1271 SendKeyEvent(ui::VKEY_A); | 1179 SendKeyEvent(ui::VKEY_A); |
| 1272 EXPECT_STR_EQ("a", textfield_->text()); | 1180 EXPECT_STR_EQ("a", textfield_->text()); |
| 1273 SendKeyEvent(ui::VKEY_Z, false, true); | 1181 SendKeyEvent(ui::VKEY_Z, false, true); |
| 1274 EXPECT_STR_EQ("", textfield_->text()); | 1182 EXPECT_STR_EQ("", textfield_->text()); |
| 1275 SendKeyEvent(ui::VKEY_Z, false, true); | 1183 SendKeyEvent(ui::VKEY_Z, false, true); |
| 1276 EXPECT_STR_EQ("", textfield_->text()); | 1184 EXPECT_STR_EQ("", textfield_->text()); |
| 1277 SendKeyEvent(ui::VKEY_Y, false, true); | 1185 SendKeyEvent(ui::VKEY_Y, false, true); |
| 1278 EXPECT_STR_EQ("a", textfield_->text()); | 1186 EXPECT_STR_EQ("a", textfield_->text()); |
| 1279 SendKeyEvent(ui::VKEY_Y, false, true); | 1187 SendKeyEvent(ui::VKEY_Y, false, true); |
| 1280 EXPECT_STR_EQ("a", textfield_->text()); | 1188 EXPECT_STR_EQ("a", textfield_->text()); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1354 EXPECT_STR_EQ("ab", textfield_->text()); | 1262 EXPECT_STR_EQ("ab", textfield_->text()); |
| 1355 SendKeyEvent(ui::VKEY_Y, false, true); | 1263 SendKeyEvent(ui::VKEY_Y, false, true); |
| 1356 EXPECT_STR_EQ("b", textfield_->text()); | 1264 EXPECT_STR_EQ("b", textfield_->text()); |
| 1357 SendKeyEvent(ui::VKEY_Y, false, true); | 1265 SendKeyEvent(ui::VKEY_Y, false, true); |
| 1358 EXPECT_STR_EQ("", textfield_->text()); | 1266 EXPECT_STR_EQ("", textfield_->text()); |
| 1359 SendKeyEvent(ui::VKEY_Y, false, true); | 1267 SendKeyEvent(ui::VKEY_Y, false, true); |
| 1360 EXPECT_STR_EQ("", textfield_->text()); | 1268 EXPECT_STR_EQ("", textfield_->text()); |
| 1361 } | 1269 } |
| 1362 | 1270 |
| 1363 TEST_F(TextfieldTest, CutCopyPaste) { | 1271 TEST_F(TextfieldTest, CutCopyPaste) { |
| 1364 InitTextfield(Textfield::STYLE_DEFAULT); | 1272 InitTextfield(); |
| 1365 | 1273 |
| 1366 // Ensure IDS_APP_CUT cuts. | 1274 // Ensure IDS_APP_CUT cuts. |
| 1367 textfield_->SetText(ASCIIToUTF16("123")); | 1275 textfield_->SetText(ASCIIToUTF16("123")); |
| 1368 textfield_->SelectAll(false); | 1276 textfield_->SelectAll(false); |
| 1369 EXPECT_TRUE(textfield_->IsCommandIdEnabled(IDS_APP_CUT)); | 1277 EXPECT_TRUE(textfield_->IsCommandIdEnabled(IDS_APP_CUT)); |
| 1370 textfield_->ExecuteCommand(IDS_APP_CUT, 0); | 1278 textfield_->ExecuteCommand(IDS_APP_CUT, 0); |
| 1371 EXPECT_STR_EQ("123", base::string16(GetClipboardText())); | 1279 EXPECT_STR_EQ("123", base::string16(GetClipboardText())); |
| 1372 EXPECT_STR_EQ("", textfield_->text()); | 1280 EXPECT_STR_EQ("", textfield_->text()); |
| 1373 | 1281 |
| 1374 // Ensure [Ctrl]+[x] cuts and [Ctrl]+[Alt][x] does nothing. | 1282 // Ensure [Ctrl]+[x] cuts and [Ctrl]+[Alt][x] does nothing. |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1425 EXPECT_STR_EQ("abcabcabc", textfield_->text()); | 1333 EXPECT_STR_EQ("abcabcabc", textfield_->text()); |
| 1426 | 1334 |
| 1427 // Ensure [Ctrl]+[Shift]+[Insert] is a no-op. | 1335 // Ensure [Ctrl]+[Shift]+[Insert] is a no-op. |
| 1428 textfield_->SelectAll(false); | 1336 textfield_->SelectAll(false); |
| 1429 SendKeyEvent(ui::VKEY_INSERT, true, true); | 1337 SendKeyEvent(ui::VKEY_INSERT, true, true); |
| 1430 EXPECT_STR_EQ("abc", base::string16(GetClipboardText())); | 1338 EXPECT_STR_EQ("abc", base::string16(GetClipboardText())); |
| 1431 EXPECT_STR_EQ("abcabcabc", textfield_->text()); | 1339 EXPECT_STR_EQ("abcabcabc", textfield_->text()); |
| 1432 } | 1340 } |
| 1433 | 1341 |
| 1434 TEST_F(TextfieldTest, OvertypeMode) { | 1342 TEST_F(TextfieldTest, OvertypeMode) { |
| 1435 InitTextfield(Textfield::STYLE_DEFAULT); | 1343 InitTextfield(); |
| 1436 // Overtype mode should be disabled (no-op [Insert]). | 1344 // Overtype mode should be disabled (no-op [Insert]). |
| 1437 textfield_->SetText(ASCIIToUTF16("2")); | 1345 textfield_->SetText(ASCIIToUTF16("2")); |
| 1438 SendKeyEvent(ui::VKEY_HOME); | 1346 SendKeyEvent(ui::VKEY_HOME); |
| 1439 SendKeyEvent(ui::VKEY_INSERT); | 1347 SendKeyEvent(ui::VKEY_INSERT); |
| 1440 SendKeyEvent(ui::VKEY_1, false, false); | 1348 SendKeyEvent(ui::VKEY_1, false, false); |
| 1441 EXPECT_STR_EQ("12", textfield_->text()); | 1349 EXPECT_STR_EQ("12", textfield_->text()); |
| 1442 } | 1350 } |
| 1443 | 1351 |
| 1444 TEST_F(TextfieldTest, TextCursorDisplayTest) { | 1352 TEST_F(TextfieldTest, TextCursorDisplayTest) { |
| 1445 InitTextfield(Textfield::STYLE_DEFAULT); | 1353 InitTextfield(); |
| 1446 // LTR-RTL string in LTR context. | 1354 // LTR-RTL string in LTR context. |
| 1447 SendKeyEvent('a'); | 1355 SendKeyEvent('a'); |
| 1448 EXPECT_STR_EQ("a", textfield_->text()); | 1356 EXPECT_STR_EQ("a", textfield_->text()); |
| 1449 int x = GetCursorBounds().x(); | 1357 int x = GetCursorBounds().x(); |
| 1450 int prev_x = x; | 1358 int prev_x = x; |
| 1451 | 1359 |
| 1452 SendKeyEvent('b'); | 1360 SendKeyEvent('b'); |
| 1453 EXPECT_STR_EQ("ab", textfield_->text()); | 1361 EXPECT_STR_EQ("ab", textfield_->text()); |
| 1454 x = GetCursorBounds().x(); | 1362 x = GetCursorBounds().x(); |
| 1455 EXPECT_LT(prev_x, x); | 1363 EXPECT_LT(prev_x, x); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1490 SendKeyEvent('b'); | 1398 SendKeyEvent('b'); |
| 1491 EXPECT_EQ(WideToUTF16(L"\x05E1\x5E2" L"ab"), textfield_->text()); | 1399 EXPECT_EQ(WideToUTF16(L"\x05E1\x5E2" L"ab"), textfield_->text()); |
| 1492 x = GetCursorBounds().x(); | 1400 x = GetCursorBounds().x(); |
| 1493 EXPECT_LT(prev_x, x); | 1401 EXPECT_LT(prev_x, x); |
| 1494 } | 1402 } |
| 1495 | 1403 |
| 1496 TEST_F(TextfieldTest, TextCursorDisplayInRTLTest) { | 1404 TEST_F(TextfieldTest, TextCursorDisplayInRTLTest) { |
| 1497 std::string locale = l10n_util::GetApplicationLocale(""); | 1405 std::string locale = l10n_util::GetApplicationLocale(""); |
| 1498 base::i18n::SetICUDefaultLocale("he"); | 1406 base::i18n::SetICUDefaultLocale("he"); |
| 1499 | 1407 |
| 1500 InitTextfield(Textfield::STYLE_DEFAULT); | 1408 InitTextfield(); |
| 1501 // LTR-RTL string in RTL context. | 1409 // LTR-RTL string in RTL context. |
| 1502 SendKeyEvent('a'); | 1410 SendKeyEvent('a'); |
| 1503 EXPECT_STR_EQ("a", textfield_->text()); | 1411 EXPECT_STR_EQ("a", textfield_->text()); |
| 1504 int x = GetCursorBounds().x(); | 1412 int x = GetCursorBounds().x(); |
| 1505 EXPECT_EQ(GetDisplayRect().right() - 1, x); | 1413 EXPECT_EQ(GetDisplayRect().right() - 1, x); |
| 1506 int prev_x = x; | 1414 int prev_x = x; |
| 1507 | 1415 |
| 1508 SendKeyEvent('b'); | 1416 SendKeyEvent('b'); |
| 1509 EXPECT_STR_EQ("ab", textfield_->text()); | 1417 EXPECT_STR_EQ("ab", textfield_->text()); |
| 1510 x = GetCursorBounds().x(); | 1418 x = GetCursorBounds().x(); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1545 SendKeyEvent('b'); | 1453 SendKeyEvent('b'); |
| 1546 EXPECT_EQ(WideToUTF16(L"\x05E1\x5E2" L"ab"), textfield_->text()); | 1454 EXPECT_EQ(WideToUTF16(L"\x05E1\x5E2" L"ab"), textfield_->text()); |
| 1547 x = GetCursorBounds().x(); | 1455 x = GetCursorBounds().x(); |
| 1548 EXPECT_EQ(prev_x, x); | 1456 EXPECT_EQ(prev_x, x); |
| 1549 | 1457 |
| 1550 // Reset locale. | 1458 // Reset locale. |
| 1551 base::i18n::SetICUDefaultLocale(locale); | 1459 base::i18n::SetICUDefaultLocale(locale); |
| 1552 } | 1460 } |
| 1553 | 1461 |
| 1554 TEST_F(TextfieldTest, HitInsideTextAreaTest) { | 1462 TEST_F(TextfieldTest, HitInsideTextAreaTest) { |
| 1555 InitTextfield(Textfield::STYLE_DEFAULT); | 1463 InitTextfield(); |
| 1556 textfield_->SetText(WideToUTF16(L"ab\x05E1\x5E2")); | 1464 textfield_->SetText(WideToUTF16(L"ab\x05E1\x5E2")); |
| 1557 std::vector<gfx::Rect> cursor_bounds; | 1465 std::vector<gfx::Rect> cursor_bounds; |
| 1558 | 1466 |
| 1559 // Save each cursor bound. | 1467 // Save each cursor bound. |
| 1560 gfx::SelectionModel sel(0, gfx::CURSOR_FORWARD); | 1468 gfx::SelectionModel sel(0, gfx::CURSOR_FORWARD); |
| 1561 cursor_bounds.push_back(GetCursorBounds(sel)); | 1469 cursor_bounds.push_back(GetCursorBounds(sel)); |
| 1562 | 1470 |
| 1563 sel = gfx::SelectionModel(1, gfx::CURSOR_BACKWARD); | 1471 sel = gfx::SelectionModel(1, gfx::CURSOR_BACKWARD); |
| 1564 gfx::Rect bound = GetCursorBounds(sel); | 1472 gfx::Rect bound = GetCursorBounds(sel); |
| 1565 sel = gfx::SelectionModel(1, gfx::CURSOR_FORWARD); | 1473 sel = gfx::SelectionModel(1, gfx::CURSOR_FORWARD); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1600 NonClientMouseClick(); | 1508 NonClientMouseClick(); |
| 1601 | 1509 |
| 1602 MouseClick(cursor_bounds[i + 1], - (half_width / 2)); | 1510 MouseClick(cursor_bounds[i + 1], - (half_width / 2)); |
| 1603 EXPECT_EQ(cursor_pos_expected[index++], textfield_->GetCursorPosition()); | 1511 EXPECT_EQ(cursor_pos_expected[index++], textfield_->GetCursorPosition()); |
| 1604 | 1512 |
| 1605 NonClientMouseClick(); | 1513 NonClientMouseClick(); |
| 1606 } | 1514 } |
| 1607 } | 1515 } |
| 1608 | 1516 |
| 1609 TEST_F(TextfieldTest, HitOutsideTextAreaTest) { | 1517 TEST_F(TextfieldTest, HitOutsideTextAreaTest) { |
| 1610 InitTextfield(Textfield::STYLE_DEFAULT); | 1518 InitTextfield(); |
| 1611 | 1519 |
| 1612 // LTR-RTL string in LTR context. | 1520 // LTR-RTL string in LTR context. |
| 1613 textfield_->SetText(WideToUTF16(L"ab\x05E1\x5E2")); | 1521 textfield_->SetText(WideToUTF16(L"ab\x05E1\x5E2")); |
| 1614 | 1522 |
| 1615 SendKeyEvent(ui::VKEY_HOME); | 1523 SendKeyEvent(ui::VKEY_HOME); |
| 1616 gfx::Rect bound = GetCursorBounds(); | 1524 gfx::Rect bound = GetCursorBounds(); |
| 1617 MouseClick(bound, -10); | 1525 MouseClick(bound, -10); |
| 1618 EXPECT_EQ(bound, GetCursorBounds()); | 1526 EXPECT_EQ(bound, GetCursorBounds()); |
| 1619 | 1527 |
| 1620 SendKeyEvent(ui::VKEY_END); | 1528 SendKeyEvent(ui::VKEY_END); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1635 SendKeyEvent(ui::VKEY_END); | 1543 SendKeyEvent(ui::VKEY_END); |
| 1636 bound = GetCursorBounds(); | 1544 bound = GetCursorBounds(); |
| 1637 MouseClick(bound, -10); | 1545 MouseClick(bound, -10); |
| 1638 EXPECT_EQ(bound, GetCursorBounds()); | 1546 EXPECT_EQ(bound, GetCursorBounds()); |
| 1639 } | 1547 } |
| 1640 | 1548 |
| 1641 TEST_F(TextfieldTest, HitOutsideTextAreaInRTLTest) { | 1549 TEST_F(TextfieldTest, HitOutsideTextAreaInRTLTest) { |
| 1642 std::string locale = l10n_util::GetApplicationLocale(""); | 1550 std::string locale = l10n_util::GetApplicationLocale(""); |
| 1643 base::i18n::SetICUDefaultLocale("he"); | 1551 base::i18n::SetICUDefaultLocale("he"); |
| 1644 | 1552 |
| 1645 InitTextfield(Textfield::STYLE_DEFAULT); | 1553 InitTextfield(); |
| 1646 | 1554 |
| 1647 // RTL-LTR string in RTL context. | 1555 // RTL-LTR string in RTL context. |
| 1648 textfield_->SetText(WideToUTF16(L"\x05E1\x5E2" L"ab")); | 1556 textfield_->SetText(WideToUTF16(L"\x05E1\x5E2" L"ab")); |
| 1649 SendKeyEvent(ui::VKEY_HOME); | 1557 SendKeyEvent(ui::VKEY_HOME); |
| 1650 gfx::Rect bound = GetCursorBounds(); | 1558 gfx::Rect bound = GetCursorBounds(); |
| 1651 MouseClick(bound, 10); | 1559 MouseClick(bound, 10); |
| 1652 EXPECT_EQ(bound, GetCursorBounds()); | 1560 EXPECT_EQ(bound, GetCursorBounds()); |
| 1653 | 1561 |
| 1654 SendKeyEvent(ui::VKEY_END); | 1562 SendKeyEvent(ui::VKEY_END); |
| 1655 bound = GetCursorBounds(); | 1563 bound = GetCursorBounds(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1668 SendKeyEvent(ui::VKEY_END); | 1576 SendKeyEvent(ui::VKEY_END); |
| 1669 bound = GetCursorBounds(); | 1577 bound = GetCursorBounds(); |
| 1670 MouseClick(bound, 10); | 1578 MouseClick(bound, 10); |
| 1671 EXPECT_EQ(bound, GetCursorBounds()); | 1579 EXPECT_EQ(bound, GetCursorBounds()); |
| 1672 | 1580 |
| 1673 // Reset locale. | 1581 // Reset locale. |
| 1674 base::i18n::SetICUDefaultLocale(locale); | 1582 base::i18n::SetICUDefaultLocale(locale); |
| 1675 } | 1583 } |
| 1676 | 1584 |
| 1677 TEST_F(TextfieldTest, OverflowTest) { | 1585 TEST_F(TextfieldTest, OverflowTest) { |
| 1678 InitTextfield(Textfield::STYLE_DEFAULT); | 1586 InitTextfield(); |
| 1679 | 1587 |
| 1680 base::string16 str; | 1588 base::string16 str; |
| 1681 for (int i = 0; i < 500; ++i) | 1589 for (int i = 0; i < 500; ++i) |
| 1682 SendKeyEvent('a'); | 1590 SendKeyEvent('a'); |
| 1683 SendKeyEvent(kHebrewLetterSamekh); | 1591 SendKeyEvent(kHebrewLetterSamekh); |
| 1684 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds())); | 1592 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds())); |
| 1685 | 1593 |
| 1686 // Test mouse pointing. | 1594 // Test mouse pointing. |
| 1687 MouseClick(GetCursorBounds(), -1); | 1595 MouseClick(GetCursorBounds(), -1); |
| 1688 EXPECT_EQ(500U, textfield_->GetCursorPosition()); | 1596 EXPECT_EQ(500U, textfield_->GetCursorPosition()); |
| 1689 | 1597 |
| 1690 // Clear text. | 1598 // Clear text. |
| 1691 SendKeyEvent(ui::VKEY_A, false, true); | 1599 SendKeyEvent(ui::VKEY_A, false, true); |
| 1692 SendKeyEvent('\n'); | 1600 SendKeyEvent('\n'); |
| 1693 | 1601 |
| 1694 for (int i = 0; i < 500; ++i) | 1602 for (int i = 0; i < 500; ++i) |
| 1695 SendKeyEvent(kHebrewLetterSamekh); | 1603 SendKeyEvent(kHebrewLetterSamekh); |
| 1696 SendKeyEvent('a'); | 1604 SendKeyEvent('a'); |
| 1697 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds())); | 1605 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds())); |
| 1698 | 1606 |
| 1699 MouseClick(GetCursorBounds(), -1); | 1607 MouseClick(GetCursorBounds(), -1); |
| 1700 EXPECT_EQ(501U, textfield_->GetCursorPosition()); | 1608 EXPECT_EQ(501U, textfield_->GetCursorPosition()); |
| 1701 } | 1609 } |
| 1702 | 1610 |
| 1703 TEST_F(TextfieldTest, OverflowInRTLTest) { | 1611 TEST_F(TextfieldTest, OverflowInRTLTest) { |
| 1704 std::string locale = l10n_util::GetApplicationLocale(""); | 1612 std::string locale = l10n_util::GetApplicationLocale(""); |
| 1705 base::i18n::SetICUDefaultLocale("he"); | 1613 base::i18n::SetICUDefaultLocale("he"); |
| 1706 | 1614 |
| 1707 InitTextfield(Textfield::STYLE_DEFAULT); | 1615 InitTextfield(); |
| 1708 | 1616 |
| 1709 base::string16 str; | 1617 base::string16 str; |
| 1710 for (int i = 0; i < 500; ++i) | 1618 for (int i = 0; i < 500; ++i) |
| 1711 SendKeyEvent('a'); | 1619 SendKeyEvent('a'); |
| 1712 SendKeyEvent(kHebrewLetterSamekh); | 1620 SendKeyEvent(kHebrewLetterSamekh); |
| 1713 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds())); | 1621 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds())); |
| 1714 | 1622 |
| 1715 MouseClick(GetCursorBounds(), 1); | 1623 MouseClick(GetCursorBounds(), 1); |
| 1716 EXPECT_EQ(501U, textfield_->GetCursorPosition()); | 1624 EXPECT_EQ(501U, textfield_->GetCursorPosition()); |
| 1717 | 1625 |
| 1718 // Clear text. | 1626 // Clear text. |
| 1719 SendKeyEvent(ui::VKEY_A, false, true); | 1627 SendKeyEvent(ui::VKEY_A, false, true); |
| 1720 SendKeyEvent('\n'); | 1628 SendKeyEvent('\n'); |
| 1721 | 1629 |
| 1722 for (int i = 0; i < 500; ++i) | 1630 for (int i = 0; i < 500; ++i) |
| 1723 SendKeyEvent(kHebrewLetterSamekh); | 1631 SendKeyEvent(kHebrewLetterSamekh); |
| 1724 SendKeyEvent('a'); | 1632 SendKeyEvent('a'); |
| 1725 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds())); | 1633 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds())); |
| 1726 | 1634 |
| 1727 MouseClick(GetCursorBounds(), 1); | 1635 MouseClick(GetCursorBounds(), 1); |
| 1728 EXPECT_EQ(500U, textfield_->GetCursorPosition()); | 1636 EXPECT_EQ(500U, textfield_->GetCursorPosition()); |
| 1729 | 1637 |
| 1730 // Reset locale. | 1638 // Reset locale. |
| 1731 base::i18n::SetICUDefaultLocale(locale); | 1639 base::i18n::SetICUDefaultLocale(locale); |
| 1732 } | 1640 } |
| 1733 | 1641 |
| 1734 TEST_F(TextfieldTest, GetCompositionCharacterBoundsTest) { | 1642 TEST_F(TextfieldTest, GetCompositionCharacterBoundsTest) { |
| 1735 InitTextfield(Textfield::STYLE_DEFAULT); | 1643 InitTextfield(); |
| 1736 | 1644 |
| 1737 base::string16 str; | 1645 base::string16 str; |
| 1738 const uint32 char_count = 10UL; | 1646 const uint32 char_count = 10UL; |
| 1739 ui::CompositionText composition; | 1647 ui::CompositionText composition; |
| 1740 composition.text = UTF8ToUTF16("0123456789"); | 1648 composition.text = UTF8ToUTF16("0123456789"); |
| 1741 ui::TextInputClient* client = textfield_->GetTextInputClient(); | 1649 ui::TextInputClient* client = textfield_->GetTextInputClient(); |
| 1742 | 1650 |
| 1743 // Return false if there is no composition text. | 1651 // Return false if there is no composition text. |
| 1744 gfx::Rect rect; | 1652 gfx::Rect rect; |
| 1745 EXPECT_FALSE(client->GetCompositionCharacterBounds(0, &rect)); | 1653 EXPECT_FALSE(client->GetCompositionCharacterBounds(0, &rect)); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1769 EXPECT_EQ(char_rect_in_screen_coord[i], actual_rect) << " i=" << i; | 1677 EXPECT_EQ(char_rect_in_screen_coord[i], actual_rect) << " i=" << i; |
| 1770 } | 1678 } |
| 1771 | 1679 |
| 1772 // Return false if the index is out of range. | 1680 // Return false if the index is out of range. |
| 1773 EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count, &rect)); | 1681 EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count, &rect)); |
| 1774 EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count + 1, &rect)); | 1682 EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count + 1, &rect)); |
| 1775 EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count + 100, &rect)); | 1683 EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count + 100, &rect)); |
| 1776 } | 1684 } |
| 1777 | 1685 |
| 1778 TEST_F(TextfieldTest, GetCompositionCharacterBounds_ComplexText) { | 1686 TEST_F(TextfieldTest, GetCompositionCharacterBounds_ComplexText) { |
| 1779 InitTextfield(Textfield::STYLE_DEFAULT); | 1687 InitTextfield(); |
| 1780 | 1688 |
| 1781 const base::char16 kUtf16Chars[] = { | 1689 const base::char16 kUtf16Chars[] = { |
| 1782 // U+0020 SPACE | 1690 // U+0020 SPACE |
| 1783 0x0020, | 1691 0x0020, |
| 1784 // U+1F408 (CAT) as surrogate pair | 1692 // U+1F408 (CAT) as surrogate pair |
| 1785 0xd83d, 0xdc08, | 1693 0xd83d, 0xdc08, |
| 1786 // U+5642 as Ideographic Variation Sequences | 1694 // U+5642 as Ideographic Variation Sequences |
| 1787 0x5642, 0xDB40, 0xDD00, | 1695 0x5642, 0xDB40, 0xDD00, |
| 1788 // U+260E (BLACK TELEPHONE) as Emoji Variation Sequences | 1696 // U+260E (BLACK TELEPHONE) as Emoji Variation Sequences |
| 1789 0x260E, 0xFE0F, | 1697 0x260E, 0xFE0F, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1806 // Here we might expect the following results but it actually depends on how | 1714 // Here we might expect the following results but it actually depends on how |
| 1807 // Uniscribe or HarfBuzz treats them with given font. | 1715 // Uniscribe or HarfBuzz treats them with given font. |
| 1808 // - rects[1] == rects[2] | 1716 // - rects[1] == rects[2] |
| 1809 // - rects[3] == rects[4] == rects[5] | 1717 // - rects[3] == rects[4] == rects[5] |
| 1810 // - rects[6] == rects[7] | 1718 // - rects[6] == rects[7] |
| 1811 } | 1719 } |
| 1812 | 1720 |
| 1813 // The word we select by double clicking should remain selected regardless of | 1721 // The word we select by double clicking should remain selected regardless of |
| 1814 // where we drag the mouse afterwards without releasing the left button. | 1722 // where we drag the mouse afterwards without releasing the left button. |
| 1815 TEST_F(TextfieldTest, KeepInitiallySelectedWord) { | 1723 TEST_F(TextfieldTest, KeepInitiallySelectedWord) { |
| 1816 InitTextfield(Textfield::STYLE_DEFAULT); | 1724 InitTextfield(); |
| 1817 | 1725 |
| 1818 textfield_->SetText(ASCIIToUTF16("abc def ghi")); | 1726 textfield_->SetText(ASCIIToUTF16("abc def ghi")); |
| 1819 | 1727 |
| 1820 textfield_->SelectRange(gfx::Range(5, 5)); | 1728 textfield_->SelectRange(gfx::Range(5, 5)); |
| 1821 const gfx::Rect middle_cursor = GetCursorBounds(); | 1729 const gfx::Rect middle_cursor = GetCursorBounds(); |
| 1822 textfield_->SelectRange(gfx::Range(0, 0)); | 1730 textfield_->SelectRange(gfx::Range(0, 0)); |
| 1823 const gfx::Point beginning = GetCursorBounds().origin(); | 1731 const gfx::Point beginning = GetCursorBounds().origin(); |
| 1824 | 1732 |
| 1825 // Double click, but do not release the left button. | 1733 // Double click, but do not release the left button. |
| 1826 MouseClick(middle_cursor, 0); | 1734 MouseClick(middle_cursor, 0); |
| 1827 const gfx::Point middle(middle_cursor.x(), | 1735 const gfx::Point middle(middle_cursor.x(), |
| 1828 middle_cursor.y() + middle_cursor.height() / 2); | 1736 middle_cursor.y() + middle_cursor.height() / 2); |
| 1829 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, middle, middle, | 1737 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, middle, middle, |
| 1830 ui::EF_LEFT_MOUSE_BUTTON, | 1738 ui::EF_LEFT_MOUSE_BUTTON, |
| 1831 ui::EF_LEFT_MOUSE_BUTTON); | 1739 ui::EF_LEFT_MOUSE_BUTTON); |
| 1832 textfield_->OnMousePressed(press_event); | 1740 textfield_->OnMousePressed(press_event); |
| 1833 EXPECT_EQ(gfx::Range(4, 7), textfield_->GetSelectedRange()); | 1741 EXPECT_EQ(gfx::Range(4, 7), textfield_->GetSelectedRange()); |
| 1834 | 1742 |
| 1835 // Drag the mouse to the beginning of the textfield. | 1743 // Drag the mouse to the beginning of the textfield. |
| 1836 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, beginning, beginning, | 1744 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, beginning, beginning, |
| 1837 ui::EF_LEFT_MOUSE_BUTTON, 0); | 1745 ui::EF_LEFT_MOUSE_BUTTON, 0); |
| 1838 textfield_->OnMouseDragged(drag_event); | 1746 textfield_->OnMouseDragged(drag_event); |
| 1839 EXPECT_EQ(gfx::Range(7, 0), textfield_->GetSelectedRange()); | 1747 EXPECT_EQ(gfx::Range(7, 0), textfield_->GetSelectedRange()); |
| 1840 } | 1748 } |
| 1841 | 1749 |
| 1842 // Touch selection and dragging currently only works for chromeos. | 1750 // Touch selection and dragging currently only works for chromeos. |
| 1843 #if defined(OS_CHROMEOS) | 1751 #if defined(OS_CHROMEOS) |
| 1844 TEST_F(TextfieldTest, TouchSelectionAndDraggingTest) { | 1752 TEST_F(TextfieldTest, TouchSelectionAndDraggingTest) { |
| 1845 InitTextfield(Textfield::STYLE_DEFAULT); | 1753 InitTextfield(); |
| 1846 textfield_->SetText(ASCIIToUTF16("hello world")); | 1754 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 1847 EXPECT_FALSE(GetTouchSelectionController()); | 1755 EXPECT_FALSE(GetTouchSelectionController()); |
| 1848 const int x = GetCursorPositionX(2); | 1756 const int x = GetCursorPositionX(2); |
| 1849 GestureEventForTest tap(ui::ET_GESTURE_TAP, x, 0, 1.0f, 0.0f); | 1757 GestureEventForTest tap(ui::ET_GESTURE_TAP, x, 0, 1.0f, 0.0f); |
| 1850 GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, x, 0, 0.0f, 0.0f); | 1758 GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, x, 0, 0.0f, 0.0f); |
| 1851 GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, x, 0, 0.0f, 0.0f); | 1759 GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, x, 0, 0.0f, 0.0f); |
| 1852 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableTouchEditing); | 1760 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableTouchEditing); |
| 1853 | 1761 |
| 1854 // Tapping on the textfield should turn on the TouchSelectionController. | 1762 // Tapping on the textfield should turn on the TouchSelectionController. |
| 1855 textfield_->OnGestureEvent(&tap); | 1763 textfield_->OnGestureEvent(&tap); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1880 switches::kDisableTouchDragDrop); | 1788 switches::kDisableTouchDragDrop); |
| 1881 ASSERT_FALSE(switches::IsTouchDragDropEnabled()); | 1789 ASSERT_FALSE(switches::IsTouchDragDropEnabled()); |
| 1882 textfield_->OnGestureEvent(&tap_down); | 1790 textfield_->OnGestureEvent(&tap_down); |
| 1883 textfield_->OnGestureEvent(&long_press); | 1791 textfield_->OnGestureEvent(&long_press); |
| 1884 EXPECT_STR_EQ("hello", textfield_->GetSelectedText()); | 1792 EXPECT_STR_EQ("hello", textfield_->GetSelectedText()); |
| 1885 EXPECT_TRUE(GetTouchSelectionController()); | 1793 EXPECT_TRUE(GetTouchSelectionController()); |
| 1886 EXPECT_TRUE(long_press.handled()); | 1794 EXPECT_TRUE(long_press.handled()); |
| 1887 } | 1795 } |
| 1888 | 1796 |
| 1889 TEST_F(TextfieldTest, TouchScrubbingSelection) { | 1797 TEST_F(TextfieldTest, TouchScrubbingSelection) { |
| 1890 InitTextfield(Textfield::STYLE_DEFAULT); | 1798 InitTextfield(); |
| 1891 textfield_->SetText(ASCIIToUTF16("hello world")); | 1799 textfield_->SetText(ASCIIToUTF16("hello world")); |
| 1892 EXPECT_FALSE(GetTouchSelectionController()); | 1800 EXPECT_FALSE(GetTouchSelectionController()); |
| 1893 | 1801 |
| 1894 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableTouchEditing); | 1802 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableTouchEditing); |
| 1895 | 1803 |
| 1896 // Simulate touch-scrubbing. | 1804 // Simulate touch-scrubbing. |
| 1897 int scrubbing_start = GetCursorPositionX(1); | 1805 int scrubbing_start = GetCursorPositionX(1); |
| 1898 int scrubbing_end = GetCursorPositionX(6); | 1806 int scrubbing_end = GetCursorPositionX(6); |
| 1899 | 1807 |
| 1900 GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, scrubbing_start, 0, | 1808 GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, scrubbing_start, 0, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1922 | 1830 |
| 1923 // In the end, part of text should have been selected and handles should have | 1831 // In the end, part of text should have been selected and handles should have |
| 1924 // appeared. | 1832 // appeared. |
| 1925 EXPECT_STR_EQ("ello ", textfield_->GetSelectedText()); | 1833 EXPECT_STR_EQ("ello ", textfield_->GetSelectedText()); |
| 1926 EXPECT_TRUE(GetTouchSelectionController()); | 1834 EXPECT_TRUE(GetTouchSelectionController()); |
| 1927 } | 1835 } |
| 1928 #endif | 1836 #endif |
| 1929 | 1837 |
| 1930 // Long_Press gesture in Textfield can initiate a drag and drop now. | 1838 // Long_Press gesture in Textfield can initiate a drag and drop now. |
| 1931 TEST_F(TextfieldTest, TestLongPressInitiatesDragDrop) { | 1839 TEST_F(TextfieldTest, TestLongPressInitiatesDragDrop) { |
| 1932 InitTextfield(Textfield::STYLE_DEFAULT); | 1840 InitTextfield(); |
| 1933 textfield_->SetText(ASCIIToUTF16("Hello string world")); | 1841 textfield_->SetText(ASCIIToUTF16("Hello string world")); |
| 1934 | 1842 |
| 1935 // Ensure the textfield will provide selected text for drag data. | 1843 // Ensure the textfield will provide selected text for drag data. |
| 1936 textfield_->SelectRange(gfx::Range(6, 12)); | 1844 textfield_->SelectRange(gfx::Range(6, 12)); |
| 1937 const gfx::Point kStringPoint(GetCursorPositionX(9), 0); | 1845 const gfx::Point kStringPoint(GetCursorPositionX(9), 0); |
| 1938 | 1846 |
| 1939 // Enable touch-drag-drop to make long press effective. | 1847 // Enable touch-drag-drop to make long press effective. |
| 1940 CommandLine::ForCurrentProcess()->AppendSwitch( | 1848 CommandLine::ForCurrentProcess()->AppendSwitch( |
| 1941 switches::kEnableTouchDragDrop); | 1849 switches::kEnableTouchDragDrop); |
| 1942 | 1850 |
| 1943 // Create a long press event in the selected region should start a drag. | 1851 // Create a long press event in the selected region should start a drag. |
| 1944 GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, kStringPoint.x(), | 1852 GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, kStringPoint.x(), |
| 1945 kStringPoint.y(), 0.0f, 0.0f); | 1853 kStringPoint.y(), 0.0f, 0.0f); |
| 1946 textfield_->OnGestureEvent(&long_press); | 1854 textfield_->OnGestureEvent(&long_press); |
| 1947 EXPECT_TRUE(textfield_->CanStartDragForView(NULL, kStringPoint, | 1855 EXPECT_TRUE(textfield_->CanStartDragForView(NULL, kStringPoint, |
| 1948 kStringPoint)); | 1856 kStringPoint)); |
| 1949 } | 1857 } |
| 1950 | 1858 |
| 1951 TEST_F(TextfieldTest, GetTextfieldBaseline_FontFallbackTest) { | 1859 TEST_F(TextfieldTest, GetTextfieldBaseline_FontFallbackTest) { |
| 1952 InitTextfield(Textfield::STYLE_DEFAULT); | 1860 InitTextfield(); |
| 1953 textfield_->SetText(UTF8ToUTF16("abc")); | 1861 textfield_->SetText(UTF8ToUTF16("abc")); |
| 1954 const int old_baseline = textfield_->GetBaseline(); | 1862 const int old_baseline = textfield_->GetBaseline(); |
| 1955 | 1863 |
| 1956 // Set text which may fall back to a font which has taller baseline than | 1864 // Set text which may fall back to a font which has taller baseline than |
| 1957 // the default font. | 1865 // the default font. |
| 1958 textfield_->SetText(UTF8ToUTF16("\xE0\xB9\x91")); | 1866 textfield_->SetText(UTF8ToUTF16("\xE0\xB9\x91")); |
| 1959 const int new_baseline = textfield_->GetBaseline(); | 1867 const int new_baseline = textfield_->GetBaseline(); |
| 1960 | 1868 |
| 1961 // Regardless of the text, the baseline must be the same. | 1869 // Regardless of the text, the baseline must be the same. |
| 1962 EXPECT_EQ(new_baseline, old_baseline); | 1870 EXPECT_EQ(new_baseline, old_baseline); |
| 1963 } | 1871 } |
| 1964 | 1872 |
| 1965 } // namespace views | 1873 } // namespace views |
| OLD | NEW |