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

Side by Side Diff: ui/views/controls/textfield/textfield_unittest.cc

Issue 138363004: Views Textfield fixes and cleanup. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove the unused controller accessor. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 bad_data.SetFileContents(base::FilePath(L"x"), "x"); 816 bad_data.SetFileContents(base::FilePath(L"x"), "x");
909 bad_data.SetHtml(base::string16(ASCIIToUTF16("x")), GURL("x.org")); 817 bad_data.SetHtml(base::string16(ASCIIToUTF16("x")), GURL("x.org"));
910 ui::OSExchangeData::DownloadFileInfo download(base::FilePath(), NULL); 818 ui::OSExchangeData::DownloadFileInfo download(base::FilePath(), NULL);
911 bad_data.SetDownloadFileInfo(download); 819 bad_data.SetDownloadFileInfo(download);
912 #endif 820 #endif
913 EXPECT_FALSE(textfield_->CanDrop(bad_data)); 821 EXPECT_FALSE(textfield_->CanDrop(bad_data));
914 } 822 }
915 #endif 823 #endif
916 824
917 TEST_F(TextfieldTest, DragAndDrop_InitiateDrag) { 825 TEST_F(TextfieldTest, DragAndDrop_InitiateDrag) {
918 InitTextfield(Textfield::STYLE_DEFAULT); 826 InitTextfield();
919 textfield_->SetText(ASCIIToUTF16("hello string world")); 827 textfield_->SetText(ASCIIToUTF16("hello string world"));
920 828
921 // Ensure the textfield will provide selected text for drag data. 829 // Ensure the textfield will provide selected text for drag data.
922 base::string16 string; 830 base::string16 string;
923 ui::OSExchangeData data; 831 ui::OSExchangeData data;
924 const gfx::Range kStringRange(6, 12); 832 const gfx::Range kStringRange(6, 12);
925 textfield_->SelectRange(kStringRange); 833 textfield_->SelectRange(kStringRange);
926 const gfx::Point kStringPoint(GetCursorPositionX(9), 0); 834 const gfx::Point kStringPoint(GetCursorPositionX(9), 0);
927 textfield_->WriteDragDataForView(NULL, kStringPoint, &data); 835 textfield_->WriteDragDataForView(NULL, kStringPoint, &data);
928 EXPECT_TRUE(data.GetString(&string)); 836 EXPECT_TRUE(data.GetString(&string));
929 EXPECT_EQ(textfield_->GetSelectedText(), string); 837 EXPECT_EQ(textfield_->GetSelectedText(), string);
930 838
931 // Ensure that disabled textfields do not support drag operations. 839 // Ensure that disabled textfields do not support drag operations.
932 textfield_->SetEnabled(false); 840 textfield_->SetEnabled(false);
933 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, 841 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE,
934 textfield_->GetDragOperationsForView(NULL, kStringPoint)); 842 textfield_->GetDragOperationsForView(NULL, kStringPoint));
935 textfield_->SetEnabled(true); 843 textfield_->SetEnabled(true);
936 // Ensure that textfields without selections do not support drag operations. 844 // Ensure that textfields without selections do not support drag operations.
937 textfield_->ClearSelection(); 845 textfield_->ClearSelection();
938 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, 846 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE,
939 textfield_->GetDragOperationsForView(NULL, kStringPoint)); 847 textfield_->GetDragOperationsForView(NULL, kStringPoint));
940 textfield_->SelectRange(kStringRange); 848 textfield_->SelectRange(kStringRange);
941 // Ensure that password textfields do not support drag operations. 849 // Ensure that password textfields do not support drag operations.
942 textfield_->SetObscured(true); 850 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD);
943 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, 851 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE,
944 textfield_->GetDragOperationsForView(NULL, kStringPoint)); 852 textfield_->GetDragOperationsForView(NULL, kStringPoint));
945 textfield_->SetObscured(false); 853 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_TEXT);
946 // Ensure that textfields only initiate drag operations inside the selection. 854 // Ensure that textfields only initiate drag operations inside the selection.
947 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, kStringPoint, kStringPoint, 855 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, kStringPoint, kStringPoint,
948 ui::EF_LEFT_MOUSE_BUTTON, 856 ui::EF_LEFT_MOUSE_BUTTON,
949 ui::EF_LEFT_MOUSE_BUTTON); 857 ui::EF_LEFT_MOUSE_BUTTON);
950 textfield_->OnMousePressed(press_event); 858 textfield_->OnMousePressed(press_event);
951 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE, 859 EXPECT_EQ(ui::DragDropTypes::DRAG_NONE,
952 textfield_->GetDragOperationsForView(NULL, gfx::Point())); 860 textfield_->GetDragOperationsForView(NULL, gfx::Point()));
953 EXPECT_FALSE(textfield_->CanStartDragForView(NULL, gfx::Point(), 861 EXPECT_FALSE(textfield_->CanStartDragForView(NULL, gfx::Point(),
954 gfx::Point())); 862 gfx::Point()));
955 EXPECT_EQ(ui::DragDropTypes::DRAG_COPY, 863 EXPECT_EQ(ui::DragDropTypes::DRAG_COPY,
956 textfield_->GetDragOperationsForView(NULL, kStringPoint)); 864 textfield_->GetDragOperationsForView(NULL, kStringPoint));
957 EXPECT_TRUE(textfield_->CanStartDragForView(NULL, kStringPoint, 865 EXPECT_TRUE(textfield_->CanStartDragForView(NULL, kStringPoint,
958 gfx::Point())); 866 gfx::Point()));
959 // Ensure that textfields support local moves. 867 // Ensure that textfields support local moves.
960 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE | ui::DragDropTypes::DRAG_COPY, 868 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE | ui::DragDropTypes::DRAG_COPY,
961 textfield_->GetDragOperationsForView(textfield_, kStringPoint)); 869 textfield_->GetDragOperationsForView(textfield_, kStringPoint));
962 } 870 }
963 871
964 TEST_F(TextfieldTest, DragAndDrop_ToTheRight) { 872 TEST_F(TextfieldTest, DragAndDrop_ToTheRight) {
965 InitTextfield(Textfield::STYLE_DEFAULT); 873 InitTextfield();
966 textfield_->SetText(ASCIIToUTF16("hello world")); 874 textfield_->SetText(ASCIIToUTF16("hello world"));
967 875
968 base::string16 string; 876 base::string16 string;
969 ui::OSExchangeData data; 877 ui::OSExchangeData data;
970 int formats = 0; 878 int formats = 0;
971 int operations = 0; 879 int operations = 0;
972 std::set<OSExchangeData::CustomFormat> custom_formats; 880 std::set<OSExchangeData::CustomFormat> custom_formats;
973 881
974 // Start dragging "ello". 882 // Start dragging "ello".
975 textfield_->SelectRange(gfx::Range(1, 5)); 883 textfield_->SelectRange(gfx::Range(1, 5));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1008 EXPECT_STR_EQ("", textfield_->text()); 916 EXPECT_STR_EQ("", textfield_->text());
1009 SendKeyEvent(ui::VKEY_Y, false, true); 917 SendKeyEvent(ui::VKEY_Y, false, true);
1010 EXPECT_STR_EQ("hello world", textfield_->text()); 918 EXPECT_STR_EQ("hello world", 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 SendKeyEvent(ui::VKEY_Y, false, true); 921 SendKeyEvent(ui::VKEY_Y, false, true);
1014 EXPECT_STR_EQ("h welloorld", textfield_->text()); 922 EXPECT_STR_EQ("h welloorld", textfield_->text());
1015 } 923 }
1016 924
1017 TEST_F(TextfieldTest, DragAndDrop_ToTheLeft) { 925 TEST_F(TextfieldTest, DragAndDrop_ToTheLeft) {
1018 InitTextfield(Textfield::STYLE_DEFAULT); 926 InitTextfield();
1019 textfield_->SetText(ASCIIToUTF16("hello world")); 927 textfield_->SetText(ASCIIToUTF16("hello world"));
1020 928
1021 base::string16 string; 929 base::string16 string;
1022 ui::OSExchangeData data; 930 ui::OSExchangeData data;
1023 int formats = 0; 931 int formats = 0;
1024 int operations = 0; 932 int operations = 0;
1025 std::set<OSExchangeData::CustomFormat> custom_formats; 933 std::set<OSExchangeData::CustomFormat> custom_formats;
1026 934
1027 // Start dragging " worl". 935 // Start dragging " worl".
1028 textfield_->SelectRange(gfx::Range(5, 10)); 936 textfield_->SelectRange(gfx::Range(5, 10));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 EXPECT_STR_EQ("", textfield_->text()); 969 EXPECT_STR_EQ("", textfield_->text());
1062 SendKeyEvent(ui::VKEY_Y, false, true); 970 SendKeyEvent(ui::VKEY_Y, false, true);
1063 EXPECT_STR_EQ("hello world", textfield_->text()); 971 EXPECT_STR_EQ("hello world", 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 SendKeyEvent(ui::VKEY_Y, false, true); 974 SendKeyEvent(ui::VKEY_Y, false, true);
1067 EXPECT_STR_EQ("h worlellod", textfield_->text()); 975 EXPECT_STR_EQ("h worlellod", textfield_->text());
1068 } 976 }
1069 977
1070 TEST_F(TextfieldTest, DragAndDrop_Canceled) { 978 TEST_F(TextfieldTest, DragAndDrop_Canceled) {
1071 InitTextfield(Textfield::STYLE_DEFAULT); 979 InitTextfield();
1072 textfield_->SetText(ASCIIToUTF16("hello world")); 980 textfield_->SetText(ASCIIToUTF16("hello world"));
1073 981
1074 // Start dragging "worl". 982 // Start dragging "worl".
1075 textfield_->SelectRange(gfx::Range(6, 10)); 983 textfield_->SelectRange(gfx::Range(6, 10));
1076 gfx::Point point(GetCursorPositionX(8), 0); 984 gfx::Point point(GetCursorPositionX(8), 0);
1077 ui::MouseEvent click(ui::ET_MOUSE_PRESSED, point, point, 985 ui::MouseEvent click(ui::ET_MOUSE_PRESSED, point, point,
1078 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); 986 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON);
1079 textfield_->OnMousePressed(click); 987 textfield_->OnMousePressed(click);
1080 ui::OSExchangeData data; 988 ui::OSExchangeData data;
1081 textfield_->WriteDragDataForView(NULL, click.location(), &data); 989 textfield_->WriteDragDataForView(NULL, click.location(), &data);
1082 EXPECT_TRUE(textfield_->CanDrop(data)); 990 EXPECT_TRUE(textfield_->CanDrop(data));
1083 // Drag the text over somewhere valid, outside the current selection. 991 // Drag the text over somewhere valid, outside the current selection.
1084 gfx::Point drop_point(GetCursorPositionX(2), 0); 992 gfx::Point drop_point(GetCursorPositionX(2), 0);
1085 ui::DropTargetEvent drop(data, drop_point, drop_point, 993 ui::DropTargetEvent drop(data, drop_point, drop_point,
1086 ui::DragDropTypes::DRAG_MOVE); 994 ui::DragDropTypes::DRAG_MOVE);
1087 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE, textfield_->OnDragUpdated(drop)); 995 EXPECT_EQ(ui::DragDropTypes::DRAG_MOVE, textfield_->OnDragUpdated(drop));
1088 // "Cancel" the drag, via move and release over the selection, and OnDragDone. 996 // "Cancel" the drag, via move and release over the selection, and OnDragDone.
1089 gfx::Point drag_point(GetCursorPositionX(9), 0); 997 gfx::Point drag_point(GetCursorPositionX(9), 0);
1090 ui::MouseEvent drag(ui::ET_MOUSE_DRAGGED, drag_point, drag_point, 998 ui::MouseEvent drag(ui::ET_MOUSE_DRAGGED, drag_point, drag_point,
1091 ui::EF_LEFT_MOUSE_BUTTON, 0); 999 ui::EF_LEFT_MOUSE_BUTTON, 0);
1092 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, drag_point, drag_point, 1000 ui::MouseEvent release(ui::ET_MOUSE_RELEASED, drag_point, drag_point,
1093 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); 1001 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON);
1094 textfield_->OnMouseDragged(drag); 1002 textfield_->OnMouseDragged(drag);
1095 textfield_->OnMouseReleased(release); 1003 textfield_->OnMouseReleased(release);
1096 textfield_->OnDragDone(); 1004 textfield_->OnDragDone();
1097 EXPECT_EQ(ASCIIToUTF16("hello world"), textfield_->text()); 1005 EXPECT_EQ(ASCIIToUTF16("hello world"), textfield_->text());
1098 } 1006 }
1099 1007
1100 TEST_F(TextfieldTest, ReadOnlyTest) { 1008 TEST_F(TextfieldTest, ReadOnlyTest) {
1101 InitTextfield(Textfield::STYLE_DEFAULT); 1009 InitTextfield();
1102 textfield_->SetText(ASCIIToUTF16("read only")); 1010 textfield_->SetText(ASCIIToUTF16("read only"));
1103 textfield_->SetReadOnly(true); 1011 textfield_->SetReadOnly(true);
1104 EXPECT_TRUE(textfield_->enabled()); 1012 EXPECT_TRUE(textfield_->enabled());
1105 EXPECT_TRUE(textfield_->focusable()); 1013 EXPECT_TRUE(textfield_->IsFocusable());
1106 1014
1107 SendKeyEvent(ui::VKEY_HOME); 1015 SendKeyEvent(ui::VKEY_HOME);
1108 EXPECT_EQ(0U, textfield_->GetCursorPosition()); 1016 EXPECT_EQ(0U, textfield_->GetCursorPosition());
1109 SendKeyEvent(ui::VKEY_END); 1017 SendKeyEvent(ui::VKEY_END);
1110 EXPECT_EQ(9U, textfield_->GetCursorPosition()); 1018 EXPECT_EQ(9U, textfield_->GetCursorPosition());
1111 1019
1112 SendKeyEvent(ui::VKEY_LEFT, false, false); 1020 SendKeyEvent(ui::VKEY_LEFT, false, false);
1113 EXPECT_EQ(8U, textfield_->GetCursorPosition()); 1021 EXPECT_EQ(8U, textfield_->GetCursorPosition());
1114 SendKeyEvent(ui::VKEY_LEFT, false, true); 1022 SendKeyEvent(ui::VKEY_LEFT, false, true);
1115 EXPECT_EQ(5U, textfield_->GetCursorPosition()); 1023 EXPECT_EQ(5U, textfield_->GetCursorPosition());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1157 // Text field is unmodifiable and selection shouldn't change. 1065 // Text field is unmodifiable and selection shouldn't change.
1158 SendKeyEvent(ui::VKEY_DELETE); 1066 SendKeyEvent(ui::VKEY_DELETE);
1159 EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText()); 1067 EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText());
1160 SendKeyEvent(ui::VKEY_BACK); 1068 SendKeyEvent(ui::VKEY_BACK);
1161 EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText()); 1069 EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText());
1162 SendKeyEvent(ui::VKEY_T); 1070 SendKeyEvent(ui::VKEY_T);
1163 EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText()); 1071 EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText());
1164 } 1072 }
1165 1073
1166 TEST_F(TextfieldTest, TextInputClientTest) { 1074 TEST_F(TextfieldTest, TextInputClientTest) {
1167 InitTextfield(Textfield::STYLE_DEFAULT); 1075 InitTextfield();
1168 ui::TextInputClient* client = textfield_->GetTextInputClient(); 1076 ui::TextInputClient* client = textfield_->GetTextInputClient();
1169 EXPECT_TRUE(client); 1077 EXPECT_TRUE(client);
1170 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, client->GetTextInputType()); 1078 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, client->GetTextInputType());
1171 1079
1172 textfield_->SetText(ASCIIToUTF16("0123456789")); 1080 textfield_->SetText(ASCIIToUTF16("0123456789"));
1173 gfx::Range range; 1081 gfx::Range range;
1174 EXPECT_TRUE(client->GetTextRange(&range)); 1082 EXPECT_TRUE(client->GetTextRange(&range));
1175 EXPECT_EQ(0U, range.start()); 1083 EXPECT_EQ(0U, range.start());
1176 EXPECT_EQ(10U, range.end()); 1084 EXPECT_EQ(10U, range.end());
1177 1085
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1256 EXPECT_EQ(0, on_before_user_action_); 1164 EXPECT_EQ(0, on_before_user_action_);
1257 EXPECT_EQ(0, on_after_user_action_); 1165 EXPECT_EQ(0, on_after_user_action_);
1258 1166
1259 input_method_->Clear(); 1167 input_method_->Clear();
1260 textfield_->SetReadOnly(true); 1168 textfield_->SetReadOnly(true);
1261 EXPECT_TRUE(input_method_->text_input_type_changed()); 1169 EXPECT_TRUE(input_method_->text_input_type_changed());
1262 EXPECT_FALSE(textfield_->GetTextInputClient()); 1170 EXPECT_FALSE(textfield_->GetTextInputClient());
1263 1171
1264 textfield_->SetReadOnly(false); 1172 textfield_->SetReadOnly(false);
1265 input_method_->Clear(); 1173 input_method_->Clear();
1266 textfield_->SetObscured(true); 1174 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD);
1267 EXPECT_TRUE(input_method_->text_input_type_changed()); 1175 EXPECT_TRUE(input_method_->text_input_type_changed());
1268 EXPECT_TRUE(textfield_->GetTextInputClient()); 1176 EXPECT_TRUE(textfield_->GetTextInputClient());
1269 } 1177 }
1270 1178
1271 TEST_F(TextfieldTest, UndoRedoTest) { 1179 TEST_F(TextfieldTest, UndoRedoTest) {
1272 InitTextfield(Textfield::STYLE_DEFAULT); 1180 InitTextfield();
1273 SendKeyEvent(ui::VKEY_A); 1181 SendKeyEvent(ui::VKEY_A);
1274 EXPECT_STR_EQ("a", textfield_->text()); 1182 EXPECT_STR_EQ("a", 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_Z, false, true); 1185 SendKeyEvent(ui::VKEY_Z, false, true);
1278 EXPECT_STR_EQ("", textfield_->text()); 1186 EXPECT_STR_EQ("", 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());
1281 SendKeyEvent(ui::VKEY_Y, false, true); 1189 SendKeyEvent(ui::VKEY_Y, false, true);
1282 EXPECT_STR_EQ("a", textfield_->text()); 1190 EXPECT_STR_EQ("a", textfield_->text());
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1356 EXPECT_STR_EQ("ab", textfield_->text()); 1264 EXPECT_STR_EQ("ab", textfield_->text());
1357 SendKeyEvent(ui::VKEY_Y, false, true); 1265 SendKeyEvent(ui::VKEY_Y, false, true);
1358 EXPECT_STR_EQ("b", textfield_->text()); 1266 EXPECT_STR_EQ("b", 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 SendKeyEvent(ui::VKEY_Y, false, true); 1269 SendKeyEvent(ui::VKEY_Y, false, true);
1362 EXPECT_STR_EQ("", textfield_->text()); 1270 EXPECT_STR_EQ("", textfield_->text());
1363 } 1271 }
1364 1272
1365 TEST_F(TextfieldTest, CutCopyPaste) { 1273 TEST_F(TextfieldTest, CutCopyPaste) {
1366 InitTextfield(Textfield::STYLE_DEFAULT); 1274 InitTextfield();
1367 1275
1368 // Ensure IDS_APP_CUT cuts. 1276 // Ensure IDS_APP_CUT cuts.
1369 textfield_->SetText(ASCIIToUTF16("123")); 1277 textfield_->SetText(ASCIIToUTF16("123"));
1370 textfield_->SelectAll(false); 1278 textfield_->SelectAll(false);
1371 EXPECT_TRUE(textfield_->IsCommandIdEnabled(IDS_APP_CUT)); 1279 EXPECT_TRUE(textfield_->IsCommandIdEnabled(IDS_APP_CUT));
1372 textfield_->ExecuteCommand(IDS_APP_CUT, 0); 1280 textfield_->ExecuteCommand(IDS_APP_CUT, 0);
1373 EXPECT_STR_EQ("123", base::string16(GetClipboardText())); 1281 EXPECT_STR_EQ("123", base::string16(GetClipboardText()));
1374 EXPECT_STR_EQ("", textfield_->text()); 1282 EXPECT_STR_EQ("", textfield_->text());
1375 1283
1376 // Ensure [Ctrl]+[x] cuts and [Ctrl]+[Alt][x] does nothing. 1284 // Ensure [Ctrl]+[x] cuts and [Ctrl]+[Alt][x] does nothing.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 EXPECT_STR_EQ("abcabcabc", textfield_->text()); 1335 EXPECT_STR_EQ("abcabcabc", textfield_->text());
1428 1336
1429 // Ensure [Ctrl]+[Shift]+[Insert] is a no-op. 1337 // Ensure [Ctrl]+[Shift]+[Insert] is a no-op.
1430 textfield_->SelectAll(false); 1338 textfield_->SelectAll(false);
1431 SendKeyEvent(ui::VKEY_INSERT, true, true); 1339 SendKeyEvent(ui::VKEY_INSERT, true, true);
1432 EXPECT_STR_EQ("abc", base::string16(GetClipboardText())); 1340 EXPECT_STR_EQ("abc", base::string16(GetClipboardText()));
1433 EXPECT_STR_EQ("abcabcabc", textfield_->text()); 1341 EXPECT_STR_EQ("abcabcabc", textfield_->text());
1434 } 1342 }
1435 1343
1436 TEST_F(TextfieldTest, OvertypeMode) { 1344 TEST_F(TextfieldTest, OvertypeMode) {
1437 InitTextfield(Textfield::STYLE_DEFAULT); 1345 InitTextfield();
1438 // Overtype mode should be disabled (no-op [Insert]). 1346 // Overtype mode should be disabled (no-op [Insert]).
1439 textfield_->SetText(ASCIIToUTF16("2")); 1347 textfield_->SetText(ASCIIToUTF16("2"));
1440 SendKeyEvent(ui::VKEY_HOME); 1348 SendKeyEvent(ui::VKEY_HOME);
1441 SendKeyEvent(ui::VKEY_INSERT); 1349 SendKeyEvent(ui::VKEY_INSERT);
1442 SendKeyEvent(ui::VKEY_1, false, false); 1350 SendKeyEvent(ui::VKEY_1, false, false);
1443 EXPECT_STR_EQ("12", textfield_->text()); 1351 EXPECT_STR_EQ("12", textfield_->text());
1444 } 1352 }
1445 1353
1446 TEST_F(TextfieldTest, TextCursorDisplayTest) { 1354 TEST_F(TextfieldTest, TextCursorDisplayTest) {
1447 InitTextfield(Textfield::STYLE_DEFAULT); 1355 InitTextfield();
1448 // LTR-RTL string in LTR context. 1356 // LTR-RTL string in LTR context.
1449 SendKeyEvent('a'); 1357 SendKeyEvent('a');
1450 EXPECT_STR_EQ("a", textfield_->text()); 1358 EXPECT_STR_EQ("a", textfield_->text());
1451 int x = GetCursorBounds().x(); 1359 int x = GetCursorBounds().x();
1452 int prev_x = x; 1360 int prev_x = x;
1453 1361
1454 SendKeyEvent('b'); 1362 SendKeyEvent('b');
1455 EXPECT_STR_EQ("ab", textfield_->text()); 1363 EXPECT_STR_EQ("ab", textfield_->text());
1456 x = GetCursorBounds().x(); 1364 x = GetCursorBounds().x();
1457 EXPECT_LT(prev_x, x); 1365 EXPECT_LT(prev_x, x);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1492 SendKeyEvent('b'); 1400 SendKeyEvent('b');
1493 EXPECT_EQ(WideToUTF16(L"\x05E1\x5E2" L"ab"), textfield_->text()); 1401 EXPECT_EQ(WideToUTF16(L"\x05E1\x5E2" L"ab"), textfield_->text());
1494 x = GetCursorBounds().x(); 1402 x = GetCursorBounds().x();
1495 EXPECT_LT(prev_x, x); 1403 EXPECT_LT(prev_x, x);
1496 } 1404 }
1497 1405
1498 TEST_F(TextfieldTest, TextCursorDisplayInRTLTest) { 1406 TEST_F(TextfieldTest, TextCursorDisplayInRTLTest) {
1499 std::string locale = l10n_util::GetApplicationLocale(""); 1407 std::string locale = l10n_util::GetApplicationLocale("");
1500 base::i18n::SetICUDefaultLocale("he"); 1408 base::i18n::SetICUDefaultLocale("he");
1501 1409
1502 InitTextfield(Textfield::STYLE_DEFAULT); 1410 InitTextfield();
1503 // LTR-RTL string in RTL context. 1411 // LTR-RTL string in RTL context.
1504 SendKeyEvent('a'); 1412 SendKeyEvent('a');
1505 EXPECT_STR_EQ("a", textfield_->text()); 1413 EXPECT_STR_EQ("a", textfield_->text());
1506 int x = GetCursorBounds().x(); 1414 int x = GetCursorBounds().x();
1507 EXPECT_EQ(GetDisplayRect().right() - 1, x); 1415 EXPECT_EQ(GetDisplayRect().right() - 1, x);
1508 int prev_x = x; 1416 int prev_x = x;
1509 1417
1510 SendKeyEvent('b'); 1418 SendKeyEvent('b');
1511 EXPECT_STR_EQ("ab", textfield_->text()); 1419 EXPECT_STR_EQ("ab", textfield_->text());
1512 x = GetCursorBounds().x(); 1420 x = GetCursorBounds().x();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 SendKeyEvent('b'); 1455 SendKeyEvent('b');
1548 EXPECT_EQ(WideToUTF16(L"\x05E1\x5E2" L"ab"), textfield_->text()); 1456 EXPECT_EQ(WideToUTF16(L"\x05E1\x5E2" L"ab"), textfield_->text());
1549 x = GetCursorBounds().x(); 1457 x = GetCursorBounds().x();
1550 EXPECT_EQ(prev_x, x); 1458 EXPECT_EQ(prev_x, x);
1551 1459
1552 // Reset locale. 1460 // Reset locale.
1553 base::i18n::SetICUDefaultLocale(locale); 1461 base::i18n::SetICUDefaultLocale(locale);
1554 } 1462 }
1555 1463
1556 TEST_F(TextfieldTest, HitInsideTextAreaTest) { 1464 TEST_F(TextfieldTest, HitInsideTextAreaTest) {
1557 InitTextfield(Textfield::STYLE_DEFAULT); 1465 InitTextfield();
1558 textfield_->SetText(WideToUTF16(L"ab\x05E1\x5E2")); 1466 textfield_->SetText(WideToUTF16(L"ab\x05E1\x5E2"));
1559 std::vector<gfx::Rect> cursor_bounds; 1467 std::vector<gfx::Rect> cursor_bounds;
1560 1468
1561 // Save each cursor bound. 1469 // Save each cursor bound.
1562 gfx::SelectionModel sel(0, gfx::CURSOR_FORWARD); 1470 gfx::SelectionModel sel(0, gfx::CURSOR_FORWARD);
1563 cursor_bounds.push_back(GetCursorBounds(sel)); 1471 cursor_bounds.push_back(GetCursorBounds(sel));
1564 1472
1565 sel = gfx::SelectionModel(1, gfx::CURSOR_BACKWARD); 1473 sel = gfx::SelectionModel(1, gfx::CURSOR_BACKWARD);
1566 gfx::Rect bound = GetCursorBounds(sel); 1474 gfx::Rect bound = GetCursorBounds(sel);
1567 sel = gfx::SelectionModel(1, gfx::CURSOR_FORWARD); 1475 sel = gfx::SelectionModel(1, gfx::CURSOR_FORWARD);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1602 NonClientMouseClick(); 1510 NonClientMouseClick();
1603 1511
1604 MouseClick(cursor_bounds[i + 1], - (half_width / 2)); 1512 MouseClick(cursor_bounds[i + 1], - (half_width / 2));
1605 EXPECT_EQ(cursor_pos_expected[index++], textfield_->GetCursorPosition()); 1513 EXPECT_EQ(cursor_pos_expected[index++], textfield_->GetCursorPosition());
1606 1514
1607 NonClientMouseClick(); 1515 NonClientMouseClick();
1608 } 1516 }
1609 } 1517 }
1610 1518
1611 TEST_F(TextfieldTest, HitOutsideTextAreaTest) { 1519 TEST_F(TextfieldTest, HitOutsideTextAreaTest) {
1612 InitTextfield(Textfield::STYLE_DEFAULT); 1520 InitTextfield();
1613 1521
1614 // LTR-RTL string in LTR context. 1522 // LTR-RTL string in LTR context.
1615 textfield_->SetText(WideToUTF16(L"ab\x05E1\x5E2")); 1523 textfield_->SetText(WideToUTF16(L"ab\x05E1\x5E2"));
1616 1524
1617 SendKeyEvent(ui::VKEY_HOME); 1525 SendKeyEvent(ui::VKEY_HOME);
1618 gfx::Rect bound = GetCursorBounds(); 1526 gfx::Rect bound = GetCursorBounds();
1619 MouseClick(bound, -10); 1527 MouseClick(bound, -10);
1620 EXPECT_EQ(bound, GetCursorBounds()); 1528 EXPECT_EQ(bound, GetCursorBounds());
1621 1529
1622 SendKeyEvent(ui::VKEY_END); 1530 SendKeyEvent(ui::VKEY_END);
(...skipping 14 matching lines...) Expand all
1637 SendKeyEvent(ui::VKEY_END); 1545 SendKeyEvent(ui::VKEY_END);
1638 bound = GetCursorBounds(); 1546 bound = GetCursorBounds();
1639 MouseClick(bound, -10); 1547 MouseClick(bound, -10);
1640 EXPECT_EQ(bound, GetCursorBounds()); 1548 EXPECT_EQ(bound, GetCursorBounds());
1641 } 1549 }
1642 1550
1643 TEST_F(TextfieldTest, HitOutsideTextAreaInRTLTest) { 1551 TEST_F(TextfieldTest, HitOutsideTextAreaInRTLTest) {
1644 std::string locale = l10n_util::GetApplicationLocale(""); 1552 std::string locale = l10n_util::GetApplicationLocale("");
1645 base::i18n::SetICUDefaultLocale("he"); 1553 base::i18n::SetICUDefaultLocale("he");
1646 1554
1647 InitTextfield(Textfield::STYLE_DEFAULT); 1555 InitTextfield();
1648 1556
1649 // RTL-LTR string in RTL context. 1557 // RTL-LTR string in RTL context.
1650 textfield_->SetText(WideToUTF16(L"\x05E1\x5E2" L"ab")); 1558 textfield_->SetText(WideToUTF16(L"\x05E1\x5E2" L"ab"));
1651 SendKeyEvent(ui::VKEY_HOME); 1559 SendKeyEvent(ui::VKEY_HOME);
1652 gfx::Rect bound = GetCursorBounds(); 1560 gfx::Rect bound = GetCursorBounds();
1653 MouseClick(bound, 10); 1561 MouseClick(bound, 10);
1654 EXPECT_EQ(bound, GetCursorBounds()); 1562 EXPECT_EQ(bound, GetCursorBounds());
1655 1563
1656 SendKeyEvent(ui::VKEY_END); 1564 SendKeyEvent(ui::VKEY_END);
1657 bound = GetCursorBounds(); 1565 bound = GetCursorBounds();
(...skipping 12 matching lines...) Expand all
1670 SendKeyEvent(ui::VKEY_END); 1578 SendKeyEvent(ui::VKEY_END);
1671 bound = GetCursorBounds(); 1579 bound = GetCursorBounds();
1672 MouseClick(bound, 10); 1580 MouseClick(bound, 10);
1673 EXPECT_EQ(bound, GetCursorBounds()); 1581 EXPECT_EQ(bound, GetCursorBounds());
1674 1582
1675 // Reset locale. 1583 // Reset locale.
1676 base::i18n::SetICUDefaultLocale(locale); 1584 base::i18n::SetICUDefaultLocale(locale);
1677 } 1585 }
1678 1586
1679 TEST_F(TextfieldTest, OverflowTest) { 1587 TEST_F(TextfieldTest, OverflowTest) {
1680 InitTextfield(Textfield::STYLE_DEFAULT); 1588 InitTextfield();
1681 1589
1682 base::string16 str; 1590 base::string16 str;
1683 for (int i = 0; i < 500; ++i) 1591 for (int i = 0; i < 500; ++i)
1684 SendKeyEvent('a'); 1592 SendKeyEvent('a');
1685 SendKeyEvent(kHebrewLetterSamekh); 1593 SendKeyEvent(kHebrewLetterSamekh);
1686 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds())); 1594 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds()));
1687 1595
1688 // Test mouse pointing. 1596 // Test mouse pointing.
1689 MouseClick(GetCursorBounds(), -1); 1597 MouseClick(GetCursorBounds(), -1);
1690 EXPECT_EQ(500U, textfield_->GetCursorPosition()); 1598 EXPECT_EQ(500U, textfield_->GetCursorPosition());
1691 1599
1692 // Clear text. 1600 // Clear text.
1693 SendKeyEvent(ui::VKEY_A, false, true); 1601 SendKeyEvent(ui::VKEY_A, false, true);
1694 SendKeyEvent('\n'); 1602 SendKeyEvent('\n');
1695 1603
1696 for (int i = 0; i < 500; ++i) 1604 for (int i = 0; i < 500; ++i)
1697 SendKeyEvent(kHebrewLetterSamekh); 1605 SendKeyEvent(kHebrewLetterSamekh);
1698 SendKeyEvent('a'); 1606 SendKeyEvent('a');
1699 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds())); 1607 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds()));
1700 1608
1701 MouseClick(GetCursorBounds(), -1); 1609 MouseClick(GetCursorBounds(), -1);
1702 EXPECT_EQ(501U, textfield_->GetCursorPosition()); 1610 EXPECT_EQ(501U, textfield_->GetCursorPosition());
1703 } 1611 }
1704 1612
1705 TEST_F(TextfieldTest, OverflowInRTLTest) { 1613 TEST_F(TextfieldTest, OverflowInRTLTest) {
1706 std::string locale = l10n_util::GetApplicationLocale(""); 1614 std::string locale = l10n_util::GetApplicationLocale("");
1707 base::i18n::SetICUDefaultLocale("he"); 1615 base::i18n::SetICUDefaultLocale("he");
1708 1616
1709 InitTextfield(Textfield::STYLE_DEFAULT); 1617 InitTextfield();
1710 1618
1711 base::string16 str; 1619 base::string16 str;
1712 for (int i = 0; i < 500; ++i) 1620 for (int i = 0; i < 500; ++i)
1713 SendKeyEvent('a'); 1621 SendKeyEvent('a');
1714 SendKeyEvent(kHebrewLetterSamekh); 1622 SendKeyEvent(kHebrewLetterSamekh);
1715 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds())); 1623 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds()));
1716 1624
1717 MouseClick(GetCursorBounds(), 1); 1625 MouseClick(GetCursorBounds(), 1);
1718 EXPECT_EQ(501U, textfield_->GetCursorPosition()); 1626 EXPECT_EQ(501U, textfield_->GetCursorPosition());
1719 1627
1720 // Clear text. 1628 // Clear text.
1721 SendKeyEvent(ui::VKEY_A, false, true); 1629 SendKeyEvent(ui::VKEY_A, false, true);
1722 SendKeyEvent('\n'); 1630 SendKeyEvent('\n');
1723 1631
1724 for (int i = 0; i < 500; ++i) 1632 for (int i = 0; i < 500; ++i)
1725 SendKeyEvent(kHebrewLetterSamekh); 1633 SendKeyEvent(kHebrewLetterSamekh);
1726 SendKeyEvent('a'); 1634 SendKeyEvent('a');
1727 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds())); 1635 EXPECT_TRUE(GetDisplayRect().Contains(GetCursorBounds()));
1728 1636
1729 MouseClick(GetCursorBounds(), 1); 1637 MouseClick(GetCursorBounds(), 1);
1730 EXPECT_EQ(500U, textfield_->GetCursorPosition()); 1638 EXPECT_EQ(500U, textfield_->GetCursorPosition());
1731 1639
1732 // Reset locale. 1640 // Reset locale.
1733 base::i18n::SetICUDefaultLocale(locale); 1641 base::i18n::SetICUDefaultLocale(locale);
1734 } 1642 }
1735 1643
1736 TEST_F(TextfieldTest, GetCompositionCharacterBoundsTest) { 1644 TEST_F(TextfieldTest, GetCompositionCharacterBoundsTest) {
1737 InitTextfield(Textfield::STYLE_DEFAULT); 1645 InitTextfield();
1738 1646
1739 base::string16 str; 1647 base::string16 str;
1740 const uint32 char_count = 10UL; 1648 const uint32 char_count = 10UL;
1741 ui::CompositionText composition; 1649 ui::CompositionText composition;
1742 composition.text = UTF8ToUTF16("0123456789"); 1650 composition.text = UTF8ToUTF16("0123456789");
1743 ui::TextInputClient* client = textfield_->GetTextInputClient(); 1651 ui::TextInputClient* client = textfield_->GetTextInputClient();
1744 1652
1745 // Return false if there is no composition text. 1653 // Return false if there is no composition text.
1746 gfx::Rect rect; 1654 gfx::Rect rect;
1747 EXPECT_FALSE(client->GetCompositionCharacterBounds(0, &rect)); 1655 EXPECT_FALSE(client->GetCompositionCharacterBounds(0, &rect));
(...skipping 23 matching lines...) Expand all
1771 EXPECT_EQ(char_rect_in_screen_coord[i], actual_rect) << " i=" << i; 1679 EXPECT_EQ(char_rect_in_screen_coord[i], actual_rect) << " i=" << i;
1772 } 1680 }
1773 1681
1774 // Return false if the index is out of range. 1682 // Return false if the index is out of range.
1775 EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count, &rect)); 1683 EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count, &rect));
1776 EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count + 1, &rect)); 1684 EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count + 1, &rect));
1777 EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count + 100, &rect)); 1685 EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count + 100, &rect));
1778 } 1686 }
1779 1687
1780 TEST_F(TextfieldTest, GetCompositionCharacterBounds_ComplexText) { 1688 TEST_F(TextfieldTest, GetCompositionCharacterBounds_ComplexText) {
1781 InitTextfield(Textfield::STYLE_DEFAULT); 1689 InitTextfield();
1782 1690
1783 const base::char16 kUtf16Chars[] = { 1691 const base::char16 kUtf16Chars[] = {
1784 // U+0020 SPACE 1692 // U+0020 SPACE
1785 0x0020, 1693 0x0020,
1786 // U+1F408 (CAT) as surrogate pair 1694 // U+1F408 (CAT) as surrogate pair
1787 0xd83d, 0xdc08, 1695 0xd83d, 0xdc08,
1788 // U+5642 as Ideographic Variation Sequences 1696 // U+5642 as Ideographic Variation Sequences
1789 0x5642, 0xDB40, 0xDD00, 1697 0x5642, 0xDB40, 0xDD00,
1790 // U+260E (BLACK TELEPHONE) as Emoji Variation Sequences 1698 // U+260E (BLACK TELEPHONE) as Emoji Variation Sequences
1791 0x260E, 0xFE0F, 1699 0x260E, 0xFE0F,
(...skipping 16 matching lines...) Expand all
1808 // Here we might expect the following results but it actually depends on how 1716 // Here we might expect the following results but it actually depends on how
1809 // Uniscribe or HarfBuzz treats them with given font. 1717 // Uniscribe or HarfBuzz treats them with given font.
1810 // - rects[1] == rects[2] 1718 // - rects[1] == rects[2]
1811 // - rects[3] == rects[4] == rects[5] 1719 // - rects[3] == rects[4] == rects[5]
1812 // - rects[6] == rects[7] 1720 // - rects[6] == rects[7]
1813 } 1721 }
1814 1722
1815 // The word we select by double clicking should remain selected regardless of 1723 // The word we select by double clicking should remain selected regardless of
1816 // where we drag the mouse afterwards without releasing the left button. 1724 // where we drag the mouse afterwards without releasing the left button.
1817 TEST_F(TextfieldTest, KeepInitiallySelectedWord) { 1725 TEST_F(TextfieldTest, KeepInitiallySelectedWord) {
1818 InitTextfield(Textfield::STYLE_DEFAULT); 1726 InitTextfield();
1819 1727
1820 textfield_->SetText(ASCIIToUTF16("abc def ghi")); 1728 textfield_->SetText(ASCIIToUTF16("abc def ghi"));
1821 1729
1822 textfield_->SelectRange(gfx::Range(5, 5)); 1730 textfield_->SelectRange(gfx::Range(5, 5));
1823 const gfx::Rect middle_cursor = GetCursorBounds(); 1731 const gfx::Rect middle_cursor = GetCursorBounds();
1824 textfield_->SelectRange(gfx::Range(0, 0)); 1732 textfield_->SelectRange(gfx::Range(0, 0));
1825 const gfx::Point beginning = GetCursorBounds().origin(); 1733 const gfx::Point beginning = GetCursorBounds().origin();
1826 1734
1827 // Double click, but do not release the left button. 1735 // Double click, but do not release the left button.
1828 MouseClick(middle_cursor, 0); 1736 MouseClick(middle_cursor, 0);
1829 const gfx::Point middle(middle_cursor.x(), 1737 const gfx::Point middle(middle_cursor.x(),
1830 middle_cursor.y() + middle_cursor.height() / 2); 1738 middle_cursor.y() + middle_cursor.height() / 2);
1831 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, middle, middle, 1739 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, middle, middle,
1832 ui::EF_LEFT_MOUSE_BUTTON, 1740 ui::EF_LEFT_MOUSE_BUTTON,
1833 ui::EF_LEFT_MOUSE_BUTTON); 1741 ui::EF_LEFT_MOUSE_BUTTON);
1834 textfield_->OnMousePressed(press_event); 1742 textfield_->OnMousePressed(press_event);
1835 EXPECT_EQ(gfx::Range(4, 7), textfield_->GetSelectedRange()); 1743 EXPECT_EQ(gfx::Range(4, 7), textfield_->GetSelectedRange());
1836 1744
1837 // Drag the mouse to the beginning of the textfield. 1745 // Drag the mouse to the beginning of the textfield.
1838 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, beginning, beginning, 1746 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, beginning, beginning,
1839 ui::EF_LEFT_MOUSE_BUTTON, 0); 1747 ui::EF_LEFT_MOUSE_BUTTON, 0);
1840 textfield_->OnMouseDragged(drag_event); 1748 textfield_->OnMouseDragged(drag_event);
1841 EXPECT_EQ(gfx::Range(7, 0), textfield_->GetSelectedRange()); 1749 EXPECT_EQ(gfx::Range(7, 0), textfield_->GetSelectedRange());
1842 } 1750 }
1843 1751
1844 // Touch selection and dragging currently only works for chromeos. 1752 // Touch selection and dragging currently only works for chromeos.
1845 #if defined(OS_CHROMEOS) 1753 #if defined(OS_CHROMEOS)
1846 TEST_F(TextfieldTest, TouchSelectionAndDraggingTest) { 1754 TEST_F(TextfieldTest, TouchSelectionAndDraggingTest) {
1847 InitTextfield(Textfield::STYLE_DEFAULT); 1755 InitTextfield();
1848 textfield_->SetText(ASCIIToUTF16("hello world")); 1756 textfield_->SetText(ASCIIToUTF16("hello world"));
1849 EXPECT_FALSE(GetTouchSelectionController()); 1757 EXPECT_FALSE(GetTouchSelectionController());
1850 const int x = GetCursorPositionX(2); 1758 const int x = GetCursorPositionX(2);
1851 GestureEventForTest tap(ui::ET_GESTURE_TAP, x, 0, 1.0f, 0.0f); 1759 GestureEventForTest tap(ui::ET_GESTURE_TAP, x, 0, 1.0f, 0.0f);
1852 GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, x, 0, 0.0f, 0.0f); 1760 GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, x, 0, 0.0f, 0.0f);
1853 GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, x, 0, 0.0f, 0.0f); 1761 GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, x, 0, 0.0f, 0.0f);
1854 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableTouchEditing); 1762 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableTouchEditing);
1855 1763
1856 // Tapping on the textfield should turn on the TouchSelectionController. 1764 // Tapping on the textfield should turn on the TouchSelectionController.
1857 textfield_->OnGestureEvent(&tap); 1765 textfield_->OnGestureEvent(&tap);
(...skipping 24 matching lines...) Expand all
1882 switches::kDisableTouchDragDrop); 1790 switches::kDisableTouchDragDrop);
1883 ASSERT_FALSE(switches::IsTouchDragDropEnabled()); 1791 ASSERT_FALSE(switches::IsTouchDragDropEnabled());
1884 textfield_->OnGestureEvent(&tap_down); 1792 textfield_->OnGestureEvent(&tap_down);
1885 textfield_->OnGestureEvent(&long_press); 1793 textfield_->OnGestureEvent(&long_press);
1886 EXPECT_STR_EQ("hello", textfield_->GetSelectedText()); 1794 EXPECT_STR_EQ("hello", textfield_->GetSelectedText());
1887 EXPECT_TRUE(GetTouchSelectionController()); 1795 EXPECT_TRUE(GetTouchSelectionController());
1888 EXPECT_TRUE(long_press.handled()); 1796 EXPECT_TRUE(long_press.handled());
1889 } 1797 }
1890 1798
1891 TEST_F(TextfieldTest, TouchScrubbingSelection) { 1799 TEST_F(TextfieldTest, TouchScrubbingSelection) {
1892 InitTextfield(Textfield::STYLE_DEFAULT); 1800 InitTextfield();
1893 textfield_->SetText(ASCIIToUTF16("hello world")); 1801 textfield_->SetText(ASCIIToUTF16("hello world"));
1894 EXPECT_FALSE(GetTouchSelectionController()); 1802 EXPECT_FALSE(GetTouchSelectionController());
1895 1803
1896 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableTouchEditing); 1804 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableTouchEditing);
1897 1805
1898 // Simulate touch-scrubbing. 1806 // Simulate touch-scrubbing.
1899 int scrubbing_start = GetCursorPositionX(1); 1807 int scrubbing_start = GetCursorPositionX(1);
1900 int scrubbing_end = GetCursorPositionX(6); 1808 int scrubbing_end = GetCursorPositionX(6);
1901 1809
1902 GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, scrubbing_start, 0, 1810 GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, scrubbing_start, 0,
(...skipping 21 matching lines...) Expand all
1924 1832
1925 // In the end, part of text should have been selected and handles should have 1833 // In the end, part of text should have been selected and handles should have
1926 // appeared. 1834 // appeared.
1927 EXPECT_STR_EQ("ello ", textfield_->GetSelectedText()); 1835 EXPECT_STR_EQ("ello ", textfield_->GetSelectedText());
1928 EXPECT_TRUE(GetTouchSelectionController()); 1836 EXPECT_TRUE(GetTouchSelectionController());
1929 } 1837 }
1930 #endif 1838 #endif
1931 1839
1932 // Long_Press gesture in Textfield can initiate a drag and drop now. 1840 // Long_Press gesture in Textfield can initiate a drag and drop now.
1933 TEST_F(TextfieldTest, TestLongPressInitiatesDragDrop) { 1841 TEST_F(TextfieldTest, TestLongPressInitiatesDragDrop) {
1934 InitTextfield(Textfield::STYLE_DEFAULT); 1842 InitTextfield();
1935 textfield_->SetText(ASCIIToUTF16("Hello string world")); 1843 textfield_->SetText(ASCIIToUTF16("Hello string world"));
1936 1844
1937 // Ensure the textfield will provide selected text for drag data. 1845 // Ensure the textfield will provide selected text for drag data.
1938 textfield_->SelectRange(gfx::Range(6, 12)); 1846 textfield_->SelectRange(gfx::Range(6, 12));
1939 const gfx::Point kStringPoint(GetCursorPositionX(9), 0); 1847 const gfx::Point kStringPoint(GetCursorPositionX(9), 0);
1940 1848
1941 // Enable touch-drag-drop to make long press effective. 1849 // Enable touch-drag-drop to make long press effective.
1942 CommandLine::ForCurrentProcess()->AppendSwitch( 1850 CommandLine::ForCurrentProcess()->AppendSwitch(
1943 switches::kEnableTouchDragDrop); 1851 switches::kEnableTouchDragDrop);
1944 1852
1945 // Create a long press event in the selected region should start a drag. 1853 // Create a long press event in the selected region should start a drag.
1946 GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, kStringPoint.x(), 1854 GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, kStringPoint.x(),
1947 kStringPoint.y(), 0.0f, 0.0f); 1855 kStringPoint.y(), 0.0f, 0.0f);
1948 textfield_->OnGestureEvent(&long_press); 1856 textfield_->OnGestureEvent(&long_press);
1949 EXPECT_TRUE(textfield_->CanStartDragForView(NULL, kStringPoint, 1857 EXPECT_TRUE(textfield_->CanStartDragForView(NULL, kStringPoint,
1950 kStringPoint)); 1858 kStringPoint));
1951 } 1859 }
1952 1860
1953 TEST_F(TextfieldTest, GetTextfieldBaseline_FontFallbackTest) { 1861 TEST_F(TextfieldTest, GetTextfieldBaseline_FontFallbackTest) {
1954 InitTextfield(Textfield::STYLE_DEFAULT); 1862 InitTextfield();
1955 textfield_->SetText(UTF8ToUTF16("abc")); 1863 textfield_->SetText(UTF8ToUTF16("abc"));
1956 const int old_baseline = textfield_->GetBaseline(); 1864 const int old_baseline = textfield_->GetBaseline();
1957 1865
1958 // Set text which may fall back to a font which has taller baseline than 1866 // Set text which may fall back to a font which has taller baseline than
1959 // the default font. 1867 // the default font.
1960 textfield_->SetText(UTF8ToUTF16("\xE0\xB9\x91")); 1868 textfield_->SetText(UTF8ToUTF16("\xE0\xB9\x91"));
1961 const int new_baseline = textfield_->GetBaseline(); 1869 const int new_baseline = textfield_->GetBaseline();
1962 1870
1963 // Regardless of the text, the baseline must be the same. 1871 // Regardless of the text, the baseline must be the same.
1964 EXPECT_EQ(new_baseline, old_baseline); 1872 EXPECT_EQ(new_baseline, old_baseline);
1965 } 1873 }
1966 1874
1967 } // namespace views 1875 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698