OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/strings/string16.h" | 10 #include "base/strings/string16.h" |
11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
13 #include "ui/base/clipboard/clipboard.h" | 13 #include "ui/base/clipboard/clipboard.h" |
14 #include "ui/base/clipboard/scoped_clipboard_writer.h" | 14 #include "ui/base/clipboard/scoped_clipboard_writer.h" |
15 #include "ui/base/range/range.h" | 15 #include "ui/gfx/range/range.h" |
16 #include "ui/gfx/render_text.h" | 16 #include "ui/gfx/render_text.h" |
17 #include "ui/views/controls/textfield/textfield.h" | 17 #include "ui/views/controls/textfield/textfield.h" |
18 #include "ui/views/controls/textfield/textfield_views_model.h" | 18 #include "ui/views/controls/textfield/textfield_views_model.h" |
19 #include "ui/views/test/test_views_delegate.h" | 19 #include "ui/views/test/test_views_delegate.h" |
20 #include "ui/views/test/views_test_base.h" | 20 #include "ui/views/test/views_test_base.h" |
21 | 21 |
22 #if defined(OS_WIN) | 22 #if defined(OS_WIN) |
23 #include "base/win/windows_version.h" | 23 #include "base/win/windows_version.h" |
24 #endif | 24 #endif |
25 | 25 |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_LEFT, true); | 269 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_LEFT, true); |
270 EXPECT_STR_EQ("H", model.GetSelectedText()); | 270 EXPECT_STR_EQ("H", model.GetSelectedText()); |
271 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, true); | 271 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, true); |
272 EXPECT_STR_EQ("ELLO", model.GetSelectedText()); | 272 EXPECT_STR_EQ("ELLO", model.GetSelectedText()); |
273 model.ClearSelection(); | 273 model.ClearSelection(); |
274 EXPECT_EQ(string16(), model.GetSelectedText()); | 274 EXPECT_EQ(string16(), model.GetSelectedText()); |
275 | 275 |
276 // SelectAll(false) selects towards the end. | 276 // SelectAll(false) selects towards the end. |
277 model.SelectAll(false); | 277 model.SelectAll(false); |
278 EXPECT_STR_EQ("HELLO", model.GetSelectedText()); | 278 EXPECT_STR_EQ("HELLO", model.GetSelectedText()); |
279 EXPECT_EQ(ui::Range(0, 5), model.render_text()->selection()); | 279 EXPECT_EQ(gfx::Range(0, 5), model.render_text()->selection()); |
280 | 280 |
281 // SelectAll(true) selects towards the beginning. | 281 // SelectAll(true) selects towards the beginning. |
282 model.SelectAll(true); | 282 model.SelectAll(true); |
283 EXPECT_STR_EQ("HELLO", model.GetSelectedText()); | 283 EXPECT_STR_EQ("HELLO", model.GetSelectedText()); |
284 EXPECT_EQ(ui::Range(5, 0), model.render_text()->selection()); | 284 EXPECT_EQ(gfx::Range(5, 0), model.render_text()->selection()); |
285 | 285 |
286 // Select and move cursor. | 286 // Select and move cursor. |
287 model.SelectRange(ui::Range(1U, 3U)); | 287 model.SelectRange(gfx::Range(1U, 3U)); |
288 EXPECT_STR_EQ("EL", model.GetSelectedText()); | 288 EXPECT_STR_EQ("EL", model.GetSelectedText()); |
289 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, false); | 289 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, false); |
290 EXPECT_EQ(1U, model.GetCursorPosition()); | 290 EXPECT_EQ(1U, model.GetCursorPosition()); |
291 model.SelectRange(ui::Range(1U, 3U)); | 291 model.SelectRange(gfx::Range(1U, 3U)); |
292 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); | 292 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); |
293 EXPECT_EQ(3U, model.GetCursorPosition()); | 293 EXPECT_EQ(3U, model.GetCursorPosition()); |
294 | 294 |
295 // Select all and move cursor. | 295 // Select all and move cursor. |
296 model.SelectAll(false); | 296 model.SelectAll(false); |
297 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, false); | 297 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, false); |
298 EXPECT_EQ(0U, model.GetCursorPosition()); | 298 EXPECT_EQ(0U, model.GetCursorPosition()); |
299 model.SelectAll(false); | 299 model.SelectAll(false); |
300 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); | 300 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); |
301 EXPECT_EQ(5U, model.GetCursorPosition()); | 301 EXPECT_EQ(5U, model.GetCursorPosition()); |
302 } | 302 } |
303 | 303 |
304 TEST_F(TextfieldViewsModelTest, Selection_BidiWithNonSpacingMarks) { | 304 TEST_F(TextfieldViewsModelTest, Selection_BidiWithNonSpacingMarks) { |
305 // Selection is a logical operation. And it should work with the arrow | 305 // Selection is a logical operation. And it should work with the arrow |
306 // keys doing visual movements, while the selection is logical between | 306 // keys doing visual movements, while the selection is logical between |
307 // the (logical) start and end points. Selection is simply defined as | 307 // the (logical) start and end points. Selection is simply defined as |
308 // the portion of text between the logical positions of the start and end | 308 // the portion of text between the logical positions of the start and end |
309 // caret positions. | 309 // caret positions. |
310 TextfieldViewsModel model(NULL); | 310 TextfieldViewsModel model(NULL); |
311 // TODO(xji): temporarily disable in platform Win since the complex script | 311 // TODO(xji): temporarily disable in platform Win since the complex script |
312 // characters turned into empty square due to font regression. So, not able | 312 // characters turned into empty square due to font regression. So, not able |
313 // to test 2 characters belong to the same grapheme. | 313 // to test 2 characters belong to the same grapheme. |
314 #if defined(OS_LINUX) | 314 #if defined(OS_LINUX) |
315 model.Append(WideToUTF16( | 315 model.Append(WideToUTF16( |
316 L"abc\x05E9\x05BC\x05C1\x05B8\x05E0\x05B8" L"def")); | 316 L"abc\x05E9\x05BC\x05C1\x05B8\x05E0\x05B8" L"def")); |
317 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); | 317 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); |
318 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); | 318 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); |
319 | 319 |
320 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); | 320 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); |
321 EXPECT_EQ(ui::Range(2, 3), model.render_text()->selection()); | 321 EXPECT_EQ(gfx::Range(2, 3), model.render_text()->selection()); |
322 EXPECT_EQ(WideToUTF16(L"c"), model.GetSelectedText()); | 322 EXPECT_EQ(WideToUTF16(L"c"), model.GetSelectedText()); |
323 | 323 |
324 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); | 324 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); |
325 EXPECT_EQ(ui::Range(2, 7), model.render_text()->selection()); | 325 EXPECT_EQ(gfx::Range(2, 7), model.render_text()->selection()); |
326 EXPECT_EQ(WideToUTF16(L"c\x05E9\x05BC\x05C1\x05B8"), | 326 EXPECT_EQ(WideToUTF16(L"c\x05E9\x05BC\x05C1\x05B8"), |
327 model.GetSelectedText()); | 327 model.GetSelectedText()); |
328 | 328 |
329 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); | 329 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); |
330 EXPECT_EQ(ui::Range(2, 3), model.render_text()->selection()); | 330 EXPECT_EQ(gfx::Range(2, 3), model.render_text()->selection()); |
331 EXPECT_EQ(WideToUTF16(L"c"), model.GetSelectedText()); | 331 EXPECT_EQ(WideToUTF16(L"c"), model.GetSelectedText()); |
332 | 332 |
333 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); | 333 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); |
334 EXPECT_EQ(ui::Range(2, 10), model.render_text()->selection()); | 334 EXPECT_EQ(gfx::Range(2, 10), model.render_text()->selection()); |
335 EXPECT_EQ(WideToUTF16(L"c\x05E9\x05BC\x05C1\x05B8\x05E0\x05B8" L"d"), | 335 EXPECT_EQ(WideToUTF16(L"c\x05E9\x05BC\x05C1\x05B8\x05E0\x05B8" L"d"), |
336 model.GetSelectedText()); | 336 model.GetSelectedText()); |
337 | 337 |
338 model.ClearSelection(); | 338 model.ClearSelection(); |
339 EXPECT_EQ(string16(), model.GetSelectedText()); | 339 EXPECT_EQ(string16(), model.GetSelectedText()); |
340 model.SelectAll(false); | 340 model.SelectAll(false); |
341 EXPECT_EQ(WideToUTF16(L"abc\x05E9\x05BC\x05C1\x05B8\x05E0\x05B8" L"def"), | 341 EXPECT_EQ(WideToUTF16(L"abc\x05E9\x05BC\x05C1\x05B8\x05E0\x05B8" L"def"), |
342 model.GetSelectedText()); | 342 model.GetSelectedText()); |
343 #endif | 343 #endif |
344 | 344 |
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
627 SelectWordTestVerifier(model, WideToUTF16(word_and_cursor[i].word), | 627 SelectWordTestVerifier(model, WideToUTF16(word_and_cursor[i].word), |
628 word_and_cursor[i].cursor); | 628 word_and_cursor[i].cursor); |
629 } | 629 } |
630 } | 630 } |
631 #endif | 631 #endif |
632 | 632 |
633 TEST_F(TextfieldViewsModelTest, RangeTest) { | 633 TEST_F(TextfieldViewsModelTest, RangeTest) { |
634 TextfieldViewsModel model(NULL); | 634 TextfieldViewsModel model(NULL); |
635 model.Append(ASCIIToUTF16("HELLO WORLD")); | 635 model.Append(ASCIIToUTF16("HELLO WORLD")); |
636 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_LEFT, false); | 636 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_LEFT, false); |
637 ui::Range range = model.render_text()->selection(); | 637 gfx::Range range = model.render_text()->selection(); |
638 EXPECT_TRUE(range.is_empty()); | 638 EXPECT_TRUE(range.is_empty()); |
639 EXPECT_EQ(0U, range.start()); | 639 EXPECT_EQ(0U, range.start()); |
640 EXPECT_EQ(0U, range.end()); | 640 EXPECT_EQ(0U, range.end()); |
641 | 641 |
642 model.MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, true); | 642 model.MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, true); |
643 range = model.render_text()->selection(); | 643 range = model.render_text()->selection(); |
644 EXPECT_FALSE(range.is_empty()); | 644 EXPECT_FALSE(range.is_empty()); |
645 EXPECT_FALSE(range.is_reversed()); | 645 EXPECT_FALSE(range.is_reversed()); |
646 EXPECT_EQ(0U, range.start()); | 646 EXPECT_EQ(0U, range.start()); |
647 EXPECT_EQ(5U, range.end()); | 647 EXPECT_EQ(5U, range.end()); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
690 range = model.render_text()->selection(); | 690 range = model.render_text()->selection(); |
691 EXPECT_FALSE(range.is_empty()); | 691 EXPECT_FALSE(range.is_empty()); |
692 EXPECT_TRUE(range.is_reversed()); | 692 EXPECT_TRUE(range.is_reversed()); |
693 EXPECT_EQ(11U, range.start()); | 693 EXPECT_EQ(11U, range.start()); |
694 EXPECT_EQ(0U, range.end()); | 694 EXPECT_EQ(0U, range.end()); |
695 } | 695 } |
696 | 696 |
697 TEST_F(TextfieldViewsModelTest, SelectRangeTest) { | 697 TEST_F(TextfieldViewsModelTest, SelectRangeTest) { |
698 TextfieldViewsModel model(NULL); | 698 TextfieldViewsModel model(NULL); |
699 model.Append(ASCIIToUTF16("HELLO WORLD")); | 699 model.Append(ASCIIToUTF16("HELLO WORLD")); |
700 ui::Range range(0, 6); | 700 gfx::Range range(0, 6); |
701 EXPECT_FALSE(range.is_reversed()); | 701 EXPECT_FALSE(range.is_reversed()); |
702 model.SelectRange(range); | 702 model.SelectRange(range); |
703 EXPECT_STR_EQ("HELLO ", model.GetSelectedText()); | 703 EXPECT_STR_EQ("HELLO ", model.GetSelectedText()); |
704 | 704 |
705 range = ui::Range(6, 1); | 705 range = gfx::Range(6, 1); |
706 EXPECT_TRUE(range.is_reversed()); | 706 EXPECT_TRUE(range.is_reversed()); |
707 model.SelectRange(range); | 707 model.SelectRange(range); |
708 EXPECT_STR_EQ("ELLO ", model.GetSelectedText()); | 708 EXPECT_STR_EQ("ELLO ", model.GetSelectedText()); |
709 | 709 |
710 range = ui::Range(2, 1000); | 710 range = gfx::Range(2, 1000); |
711 EXPECT_FALSE(range.is_reversed()); | 711 EXPECT_FALSE(range.is_reversed()); |
712 model.SelectRange(range); | 712 model.SelectRange(range); |
713 EXPECT_STR_EQ("LLO WORLD", model.GetSelectedText()); | 713 EXPECT_STR_EQ("LLO WORLD", model.GetSelectedText()); |
714 | 714 |
715 range = ui::Range(1000, 3); | 715 range = gfx::Range(1000, 3); |
716 EXPECT_TRUE(range.is_reversed()); | 716 EXPECT_TRUE(range.is_reversed()); |
717 model.SelectRange(range); | 717 model.SelectRange(range); |
718 EXPECT_STR_EQ("LO WORLD", model.GetSelectedText()); | 718 EXPECT_STR_EQ("LO WORLD", model.GetSelectedText()); |
719 | 719 |
720 range = ui::Range(0, 0); | 720 range = gfx::Range(0, 0); |
721 EXPECT_TRUE(range.is_empty()); | 721 EXPECT_TRUE(range.is_empty()); |
722 model.SelectRange(range); | 722 model.SelectRange(range); |
723 EXPECT_TRUE(model.GetSelectedText().empty()); | 723 EXPECT_TRUE(model.GetSelectedText().empty()); |
724 | 724 |
725 range = ui::Range(3, 3); | 725 range = gfx::Range(3, 3); |
726 EXPECT_TRUE(range.is_empty()); | 726 EXPECT_TRUE(range.is_empty()); |
727 model.SelectRange(range); | 727 model.SelectRange(range); |
728 EXPECT_TRUE(model.GetSelectedText().empty()); | 728 EXPECT_TRUE(model.GetSelectedText().empty()); |
729 | 729 |
730 range = ui::Range(1000, 100); | 730 range = gfx::Range(1000, 100); |
731 EXPECT_FALSE(range.is_empty()); | 731 EXPECT_FALSE(range.is_empty()); |
732 model.SelectRange(range); | 732 model.SelectRange(range); |
733 EXPECT_TRUE(model.GetSelectedText().empty()); | 733 EXPECT_TRUE(model.GetSelectedText().empty()); |
734 | 734 |
735 range = ui::Range(1000, 1000); | 735 range = gfx::Range(1000, 1000); |
736 EXPECT_TRUE(range.is_empty()); | 736 EXPECT_TRUE(range.is_empty()); |
737 model.SelectRange(range); | 737 model.SelectRange(range); |
738 EXPECT_TRUE(model.GetSelectedText().empty()); | 738 EXPECT_TRUE(model.GetSelectedText().empty()); |
739 } | 739 } |
740 | 740 |
741 TEST_F(TextfieldViewsModelTest, SelectionTest) { | 741 TEST_F(TextfieldViewsModelTest, SelectionTest) { |
742 TextfieldViewsModel model(NULL); | 742 TextfieldViewsModel model(NULL); |
743 model.Append(ASCIIToUTF16("HELLO WORLD")); | 743 model.Append(ASCIIToUTF16("HELLO WORLD")); |
744 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_LEFT, false); | 744 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_LEFT, false); |
745 ui::Range selection = model.render_text()->selection(); | 745 gfx::Range selection = model.render_text()->selection(); |
746 EXPECT_EQ(ui::Range(0), selection); | 746 EXPECT_EQ(gfx::Range(0), selection); |
747 | 747 |
748 model.MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, true); | 748 model.MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, true); |
749 selection = model.render_text()->selection(); | 749 selection = model.render_text()->selection(); |
750 EXPECT_EQ(ui::Range(0, 5), selection); | 750 EXPECT_EQ(gfx::Range(0, 5), selection); |
751 | 751 |
752 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, true); | 752 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, true); |
753 selection = model.render_text()->selection(); | 753 selection = model.render_text()->selection(); |
754 EXPECT_EQ(ui::Range(0, 4), selection); | 754 EXPECT_EQ(gfx::Range(0, 4), selection); |
755 | 755 |
756 model.MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, true); | 756 model.MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, true); |
757 selection = model.render_text()->selection(); | 757 selection = model.render_text()->selection(); |
758 EXPECT_EQ(ui::Range(0), selection); | 758 EXPECT_EQ(gfx::Range(0), selection); |
759 | 759 |
760 // now from the end. | 760 // now from the end. |
761 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); | 761 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); |
762 selection = model.render_text()->selection(); | 762 selection = model.render_text()->selection(); |
763 EXPECT_EQ(ui::Range(11), selection); | 763 EXPECT_EQ(gfx::Range(11), selection); |
764 | 764 |
765 model.MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, true); | 765 model.MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_LEFT, true); |
766 selection = model.render_text()->selection(); | 766 selection = model.render_text()->selection(); |
767 EXPECT_EQ(ui::Range(11, 6), selection); | 767 EXPECT_EQ(gfx::Range(11, 6), selection); |
768 | 768 |
769 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); | 769 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, true); |
770 selection = model.render_text()->selection(); | 770 selection = model.render_text()->selection(); |
771 EXPECT_EQ(ui::Range(11, 7), selection); | 771 EXPECT_EQ(gfx::Range(11, 7), selection); |
772 | 772 |
773 model.MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, true); | 773 model.MoveCursor(gfx::WORD_BREAK, gfx::CURSOR_RIGHT, true); |
774 selection = model.render_text()->selection(); | 774 selection = model.render_text()->selection(); |
775 EXPECT_EQ(ui::Range(11), selection); | 775 EXPECT_EQ(gfx::Range(11), selection); |
776 | 776 |
777 // Select All | 777 // Select All |
778 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_LEFT, true); | 778 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_LEFT, true); |
779 selection = model.render_text()->selection(); | 779 selection = model.render_text()->selection(); |
780 EXPECT_EQ(ui::Range(11, 0), selection); | 780 EXPECT_EQ(gfx::Range(11, 0), selection); |
781 } | 781 } |
782 | 782 |
783 TEST_F(TextfieldViewsModelTest, SelectSelectionModelTest) { | 783 TEST_F(TextfieldViewsModelTest, SelectSelectionModelTest) { |
784 TextfieldViewsModel model(NULL); | 784 TextfieldViewsModel model(NULL); |
785 model.Append(ASCIIToUTF16("HELLO WORLD")); | 785 model.Append(ASCIIToUTF16("HELLO WORLD")); |
786 model.SelectSelectionModel(gfx::SelectionModel(ui::Range(0, 6), | 786 model.SelectSelectionModel(gfx::SelectionModel(gfx::Range(0, 6), |
787 gfx::CURSOR_BACKWARD)); | 787 gfx::CURSOR_BACKWARD)); |
788 EXPECT_STR_EQ("HELLO ", model.GetSelectedText()); | 788 EXPECT_STR_EQ("HELLO ", model.GetSelectedText()); |
789 | 789 |
790 model.SelectSelectionModel(gfx::SelectionModel(ui::Range(6, 1), | 790 model.SelectSelectionModel(gfx::SelectionModel(gfx::Range(6, 1), |
791 gfx::CURSOR_FORWARD)); | 791 gfx::CURSOR_FORWARD)); |
792 EXPECT_STR_EQ("ELLO ", model.GetSelectedText()); | 792 EXPECT_STR_EQ("ELLO ", model.GetSelectedText()); |
793 | 793 |
794 model.SelectSelectionModel(gfx::SelectionModel(ui::Range(2, 1000), | 794 model.SelectSelectionModel(gfx::SelectionModel(gfx::Range(2, 1000), |
795 gfx::CURSOR_BACKWARD)); | 795 gfx::CURSOR_BACKWARD)); |
796 EXPECT_STR_EQ("LLO WORLD", model.GetSelectedText()); | 796 EXPECT_STR_EQ("LLO WORLD", model.GetSelectedText()); |
797 | 797 |
798 model.SelectSelectionModel(gfx::SelectionModel(ui::Range(1000, 3), | 798 model.SelectSelectionModel(gfx::SelectionModel(gfx::Range(1000, 3), |
799 gfx::CURSOR_FORWARD)); | 799 gfx::CURSOR_FORWARD)); |
800 EXPECT_STR_EQ("LO WORLD", model.GetSelectedText()); | 800 EXPECT_STR_EQ("LO WORLD", model.GetSelectedText()); |
801 | 801 |
802 model.SelectSelectionModel(gfx::SelectionModel(0, gfx::CURSOR_FORWARD)); | 802 model.SelectSelectionModel(gfx::SelectionModel(0, gfx::CURSOR_FORWARD)); |
803 EXPECT_TRUE(model.GetSelectedText().empty()); | 803 EXPECT_TRUE(model.GetSelectedText().empty()); |
804 | 804 |
805 model.SelectSelectionModel(gfx::SelectionModel(3, gfx::CURSOR_FORWARD)); | 805 model.SelectSelectionModel(gfx::SelectionModel(3, gfx::CURSOR_FORWARD)); |
806 EXPECT_TRUE(model.GetSelectedText().empty()); | 806 EXPECT_TRUE(model.GetSelectedText().empty()); |
807 | 807 |
808 model.SelectSelectionModel(gfx::SelectionModel(ui::Range(1000, 100), | 808 model.SelectSelectionModel(gfx::SelectionModel(gfx::Range(1000, 100), |
809 gfx::CURSOR_FORWARD)); | 809 gfx::CURSOR_FORWARD)); |
810 EXPECT_TRUE(model.GetSelectedText().empty()); | 810 EXPECT_TRUE(model.GetSelectedText().empty()); |
811 | 811 |
812 model.SelectSelectionModel(gfx::SelectionModel(1000, gfx::CURSOR_BACKWARD)); | 812 model.SelectSelectionModel(gfx::SelectionModel(1000, gfx::CURSOR_BACKWARD)); |
813 EXPECT_TRUE(model.GetSelectedText().empty()); | 813 EXPECT_TRUE(model.GetSelectedText().empty()); |
814 } | 814 } |
815 | 815 |
816 TEST_F(TextfieldViewsModelTest, CompositionTextTest) { | 816 TEST_F(TextfieldViewsModelTest, CompositionTextTest) { |
817 TextfieldViewsModel model(this); | 817 TextfieldViewsModel model(this); |
818 model.Append(ASCIIToUTF16("1234590")); | 818 model.Append(ASCIIToUTF16("1234590")); |
819 model.SelectRange(ui::Range(5, 5)); | 819 model.SelectRange(gfx::Range(5, 5)); |
820 EXPECT_FALSE(model.HasSelection()); | 820 EXPECT_FALSE(model.HasSelection()); |
821 EXPECT_EQ(5U, model.GetCursorPosition()); | 821 EXPECT_EQ(5U, model.GetCursorPosition()); |
822 | 822 |
823 ui::Range range; | 823 gfx::Range range; |
824 model.GetTextRange(&range); | 824 model.GetTextRange(&range); |
825 EXPECT_EQ(ui::Range(0, 7), range); | 825 EXPECT_EQ(gfx::Range(0, 7), range); |
826 | 826 |
827 ui::CompositionText composition; | 827 ui::CompositionText composition; |
828 composition.text = ASCIIToUTF16("678"); | 828 composition.text = ASCIIToUTF16("678"); |
829 composition.underlines.push_back(ui::CompositionUnderline(0, 3, 0, false)); | 829 composition.underlines.push_back(ui::CompositionUnderline(0, 3, 0, false)); |
830 | 830 |
831 // Cursor should be at the end of composition when characters are just typed. | 831 // Cursor should be at the end of composition when characters are just typed. |
832 composition.selection = ui::Range(3, 3); | 832 composition.selection = gfx::Range(3, 3); |
833 model.SetCompositionText(composition); | 833 model.SetCompositionText(composition); |
834 EXPECT_TRUE(model.HasCompositionText()); | 834 EXPECT_TRUE(model.HasCompositionText()); |
835 EXPECT_FALSE(model.HasSelection()); | 835 EXPECT_FALSE(model.HasSelection()); |
836 | 836 |
837 // Cancel composition | 837 // Cancel composition |
838 model.CancelCompositionText(); | 838 model.CancelCompositionText(); |
839 composition_text_confirmed_or_cleared_ = false; | 839 composition_text_confirmed_or_cleared_ = false; |
840 | 840 |
841 // Restart composition with targeting "67" in "678". | 841 // Restart composition with targeting "67" in "678". |
842 composition.selection = ui::Range(0, 2); | 842 composition.selection = gfx::Range(0, 2); |
843 composition.underlines.clear(); | 843 composition.underlines.clear(); |
844 composition.underlines.push_back(ui::CompositionUnderline(0, 2, 0, true)); | 844 composition.underlines.push_back(ui::CompositionUnderline(0, 2, 0, true)); |
845 composition.underlines.push_back(ui::CompositionUnderline(2, 3, 0, false)); | 845 composition.underlines.push_back(ui::CompositionUnderline(2, 3, 0, false)); |
846 model.SetCompositionText(composition); | 846 model.SetCompositionText(composition); |
847 EXPECT_TRUE(model.HasCompositionText()); | 847 EXPECT_TRUE(model.HasCompositionText()); |
848 EXPECT_TRUE(model.HasSelection()); | 848 EXPECT_TRUE(model.HasSelection()); |
849 EXPECT_EQ(ui::Range(5, 7), model.render_text()->selection()); | 849 EXPECT_EQ(gfx::Range(5, 7), model.render_text()->selection()); |
850 | 850 |
851 model.GetTextRange(&range); | 851 model.GetTextRange(&range); |
852 EXPECT_EQ(10U, range.end()); | 852 EXPECT_EQ(10U, range.end()); |
853 EXPECT_STR_EQ("1234567890", model.GetText()); | 853 EXPECT_STR_EQ("1234567890", model.GetText()); |
854 | 854 |
855 model.GetCompositionTextRange(&range); | 855 model.GetCompositionTextRange(&range); |
856 EXPECT_EQ(ui::Range(5, 8), range); | 856 EXPECT_EQ(gfx::Range(5, 8), range); |
857 // composition text | 857 // composition text |
858 EXPECT_STR_EQ("456", model.GetTextFromRange(ui::Range(3, 6))); | 858 EXPECT_STR_EQ("456", model.GetTextFromRange(gfx::Range(3, 6))); |
859 EXPECT_EQ(ui::Range(5, 7), model.render_text()->selection()); | 859 EXPECT_EQ(gfx::Range(5, 7), model.render_text()->selection()); |
860 | 860 |
861 EXPECT_FALSE(composition_text_confirmed_or_cleared_); | 861 EXPECT_FALSE(composition_text_confirmed_or_cleared_); |
862 model.CancelCompositionText(); | 862 model.CancelCompositionText(); |
863 EXPECT_TRUE(composition_text_confirmed_or_cleared_); | 863 EXPECT_TRUE(composition_text_confirmed_or_cleared_); |
864 composition_text_confirmed_or_cleared_ = false; | 864 composition_text_confirmed_or_cleared_ = false; |
865 EXPECT_FALSE(model.HasCompositionText()); | 865 EXPECT_FALSE(model.HasCompositionText()); |
866 EXPECT_FALSE(model.HasSelection()); | 866 EXPECT_FALSE(model.HasSelection()); |
867 EXPECT_EQ(5U, model.GetCursorPosition()); | 867 EXPECT_EQ(5U, model.GetCursorPosition()); |
868 | 868 |
869 model.SetCompositionText(composition); | 869 model.SetCompositionText(composition); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
947 EXPECT_STR_EQ("678678", model.GetText()); | 947 EXPECT_STR_EQ("678678", model.GetText()); |
948 | 948 |
949 model.SetCompositionText(composition); | 949 model.SetCompositionText(composition); |
950 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); | 950 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); |
951 EXPECT_TRUE(composition_text_confirmed_or_cleared_); | 951 EXPECT_TRUE(composition_text_confirmed_or_cleared_); |
952 composition_text_confirmed_or_cleared_ = false; | 952 composition_text_confirmed_or_cleared_ = false; |
953 EXPECT_STR_EQ("678", model.GetText()); | 953 EXPECT_STR_EQ("678", model.GetText()); |
954 | 954 |
955 model.SetCompositionText(composition); | 955 model.SetCompositionText(composition); |
956 gfx::SelectionModel sel( | 956 gfx::SelectionModel sel( |
957 ui::Range(model.render_text()->selection().start(), 0), | 957 gfx::Range(model.render_text()->selection().start(), 0), |
958 gfx::CURSOR_FORWARD); | 958 gfx::CURSOR_FORWARD); |
959 model.MoveCursorTo(sel); | 959 model.MoveCursorTo(sel); |
960 EXPECT_TRUE(composition_text_confirmed_or_cleared_); | 960 EXPECT_TRUE(composition_text_confirmed_or_cleared_); |
961 composition_text_confirmed_or_cleared_ = false; | 961 composition_text_confirmed_or_cleared_ = false; |
962 EXPECT_STR_EQ("678678", model.GetText()); | 962 EXPECT_STR_EQ("678678", model.GetText()); |
963 | 963 |
964 model.SetCompositionText(composition); | 964 model.SetCompositionText(composition); |
965 model.SelectRange(ui::Range(0, 3)); | 965 model.SelectRange(gfx::Range(0, 3)); |
966 EXPECT_TRUE(composition_text_confirmed_or_cleared_); | 966 EXPECT_TRUE(composition_text_confirmed_or_cleared_); |
967 composition_text_confirmed_or_cleared_ = false; | 967 composition_text_confirmed_or_cleared_ = false; |
968 EXPECT_STR_EQ("678", model.GetText()); | 968 EXPECT_STR_EQ("678", model.GetText()); |
969 | 969 |
970 model.SetCompositionText(composition); | 970 model.SetCompositionText(composition); |
971 model.SelectAll(false); | 971 model.SelectAll(false); |
972 EXPECT_TRUE(composition_text_confirmed_or_cleared_); | 972 EXPECT_TRUE(composition_text_confirmed_or_cleared_); |
973 composition_text_confirmed_or_cleared_ = false; | 973 composition_text_confirmed_or_cleared_ = false; |
974 EXPECT_STR_EQ("678", model.GetText()); | 974 EXPECT_STR_EQ("678", model.GetText()); |
975 | 975 |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1088 | 1088 |
1089 TEST_F(TextfieldViewsModelTest, UndoRedo_SetText) { | 1089 TEST_F(TextfieldViewsModelTest, UndoRedo_SetText) { |
1090 // This is to test the undo/redo behavior of omnibox. | 1090 // This is to test the undo/redo behavior of omnibox. |
1091 TextfieldViewsModel model(NULL); | 1091 TextfieldViewsModel model(NULL); |
1092 model.InsertChar('w'); | 1092 model.InsertChar('w'); |
1093 EXPECT_STR_EQ("w", model.GetText()); | 1093 EXPECT_STR_EQ("w", model.GetText()); |
1094 EXPECT_EQ(1U, model.GetCursorPosition()); | 1094 EXPECT_EQ(1U, model.GetCursorPosition()); |
1095 model.SetText(ASCIIToUTF16("www.google.com")); | 1095 model.SetText(ASCIIToUTF16("www.google.com")); |
1096 EXPECT_EQ(14U, model.GetCursorPosition()); | 1096 EXPECT_EQ(14U, model.GetCursorPosition()); |
1097 EXPECT_STR_EQ("www.google.com", model.GetText()); | 1097 EXPECT_STR_EQ("www.google.com", model.GetText()); |
1098 model.SelectRange(ui::Range(14, 1)); | 1098 model.SelectRange(gfx::Range(14, 1)); |
1099 model.InsertChar('w'); | 1099 model.InsertChar('w'); |
1100 EXPECT_STR_EQ("ww", model.GetText()); | 1100 EXPECT_STR_EQ("ww", model.GetText()); |
1101 model.SetText(ASCIIToUTF16("www.google.com")); | 1101 model.SetText(ASCIIToUTF16("www.google.com")); |
1102 model.SelectRange(ui::Range(14, 2)); | 1102 model.SelectRange(gfx::Range(14, 2)); |
1103 model.InsertChar('w'); | 1103 model.InsertChar('w'); |
1104 EXPECT_STR_EQ("www", model.GetText()); | 1104 EXPECT_STR_EQ("www", model.GetText()); |
1105 model.SetText(ASCIIToUTF16("www.google.com")); | 1105 model.SetText(ASCIIToUTF16("www.google.com")); |
1106 model.SelectRange(ui::Range(14, 3)); | 1106 model.SelectRange(gfx::Range(14, 3)); |
1107 model.InsertChar('.'); | 1107 model.InsertChar('.'); |
1108 EXPECT_STR_EQ("www.", model.GetText()); | 1108 EXPECT_STR_EQ("www.", model.GetText()); |
1109 model.SetText(ASCIIToUTF16("www.google.com")); | 1109 model.SetText(ASCIIToUTF16("www.google.com")); |
1110 model.SelectRange(ui::Range(14, 4)); | 1110 model.SelectRange(gfx::Range(14, 4)); |
1111 model.InsertChar('y'); | 1111 model.InsertChar('y'); |
1112 EXPECT_STR_EQ("www.y", model.GetText()); | 1112 EXPECT_STR_EQ("www.y", model.GetText()); |
1113 model.SetText(ASCIIToUTF16("www.youtube.com")); | 1113 model.SetText(ASCIIToUTF16("www.youtube.com")); |
1114 EXPECT_STR_EQ("www.youtube.com", model.GetText()); | 1114 EXPECT_STR_EQ("www.youtube.com", model.GetText()); |
1115 EXPECT_EQ(15U, model.GetCursorPosition()); | 1115 EXPECT_EQ(15U, model.GetCursorPosition()); |
1116 | 1116 |
1117 EXPECT_TRUE(model.Undo()); | 1117 EXPECT_TRUE(model.Undo()); |
1118 EXPECT_STR_EQ("www.google.com", model.GetText()); | 1118 EXPECT_STR_EQ("www.google.com", model.GetText()); |
1119 EXPECT_EQ(4U, model.GetCursorPosition()); | 1119 EXPECT_EQ(4U, model.GetCursorPosition()); |
1120 EXPECT_TRUE(model.Undo()); | 1120 EXPECT_TRUE(model.Undo()); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1170 EXPECT_STR_EQ("www.google.c", model.GetText()); | 1170 EXPECT_STR_EQ("www.google.c", model.GetText()); |
1171 EXPECT_TRUE(model.Undo()); | 1171 EXPECT_TRUE(model.Undo()); |
1172 EXPECT_STR_EQ("www.google.com", model.GetText()); | 1172 EXPECT_STR_EQ("www.google.com", model.GetText()); |
1173 } | 1173 } |
1174 | 1174 |
1175 TEST_F(TextfieldViewsModelTest, UndoRedo_CutCopyPasteTest) { | 1175 TEST_F(TextfieldViewsModelTest, UndoRedo_CutCopyPasteTest) { |
1176 TextfieldViewsModel model(NULL); | 1176 TextfieldViewsModel model(NULL); |
1177 model.SetText(ASCIIToUTF16("ABCDE")); | 1177 model.SetText(ASCIIToUTF16("ABCDE")); |
1178 EXPECT_FALSE(model.Redo()); // nothing to redo | 1178 EXPECT_FALSE(model.Redo()); // nothing to redo |
1179 // Cut | 1179 // Cut |
1180 model.SelectRange(ui::Range(1, 3)); | 1180 model.SelectRange(gfx::Range(1, 3)); |
1181 model.Cut(); | 1181 model.Cut(); |
1182 EXPECT_STR_EQ("ADE", model.GetText()); | 1182 EXPECT_STR_EQ("ADE", model.GetText()); |
1183 EXPECT_EQ(1U, model.GetCursorPosition()); | 1183 EXPECT_EQ(1U, model.GetCursorPosition()); |
1184 EXPECT_TRUE(model.Undo()); | 1184 EXPECT_TRUE(model.Undo()); |
1185 EXPECT_STR_EQ("ABCDE", model.GetText()); | 1185 EXPECT_STR_EQ("ABCDE", model.GetText()); |
1186 EXPECT_EQ(3U, model.GetCursorPosition()); | 1186 EXPECT_EQ(3U, model.GetCursorPosition()); |
1187 EXPECT_TRUE(model.Undo()); | 1187 EXPECT_TRUE(model.Undo()); |
1188 EXPECT_STR_EQ("", model.GetText()); | 1188 EXPECT_STR_EQ("", model.GetText()); |
1189 EXPECT_EQ(0U, model.GetCursorPosition()); | 1189 EXPECT_EQ(0U, model.GetCursorPosition()); |
1190 EXPECT_FALSE(model.Undo()); // no more undo | 1190 EXPECT_FALSE(model.Undo()); // no more undo |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1233 EXPECT_EQ(3U, model.GetCursorPosition()); | 1233 EXPECT_EQ(3U, model.GetCursorPosition()); |
1234 EXPECT_TRUE(model.Redo()); | 1234 EXPECT_TRUE(model.Redo()); |
1235 EXPECT_STR_EQ("ABCBCDE", model.GetText()); | 1235 EXPECT_STR_EQ("ABCBCDE", model.GetText()); |
1236 EXPECT_EQ(5U, model.GetCursorPosition()); | 1236 EXPECT_EQ(5U, model.GetCursorPosition()); |
1237 EXPECT_TRUE(model.Redo()); | 1237 EXPECT_TRUE(model.Redo()); |
1238 EXPECT_STR_EQ("ABCBCBCDE", model.GetText()); | 1238 EXPECT_STR_EQ("ABCBCBCDE", model.GetText()); |
1239 EXPECT_EQ(7U, model.GetCursorPosition()); | 1239 EXPECT_EQ(7U, model.GetCursorPosition()); |
1240 EXPECT_FALSE(model.Redo()); | 1240 EXPECT_FALSE(model.Redo()); |
1241 | 1241 |
1242 // with SelectRange | 1242 // with SelectRange |
1243 model.SelectRange(ui::Range(1, 3)); | 1243 model.SelectRange(gfx::Range(1, 3)); |
1244 EXPECT_TRUE(model.Cut()); | 1244 EXPECT_TRUE(model.Cut()); |
1245 EXPECT_STR_EQ("ABCBCDE", model.GetText()); | 1245 EXPECT_STR_EQ("ABCBCDE", model.GetText()); |
1246 EXPECT_EQ(1U, model.GetCursorPosition()); | 1246 EXPECT_EQ(1U, model.GetCursorPosition()); |
1247 model.SelectRange(ui::Range(1, 1)); | 1247 model.SelectRange(gfx::Range(1, 1)); |
1248 EXPECT_FALSE(model.Cut()); | 1248 EXPECT_FALSE(model.Cut()); |
1249 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); | 1249 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); |
1250 EXPECT_TRUE(model.Paste()); | 1250 EXPECT_TRUE(model.Paste()); |
1251 EXPECT_STR_EQ("ABCBCDEBC", model.GetText()); | 1251 EXPECT_STR_EQ("ABCBCDEBC", model.GetText()); |
1252 EXPECT_EQ(9U, model.GetCursorPosition()); | 1252 EXPECT_EQ(9U, model.GetCursorPosition()); |
1253 EXPECT_TRUE(model.Undo()); | 1253 EXPECT_TRUE(model.Undo()); |
1254 EXPECT_STR_EQ("ABCBCDE", model.GetText()); | 1254 EXPECT_STR_EQ("ABCBCDE", model.GetText()); |
1255 EXPECT_EQ(7U, model.GetCursorPosition()); | 1255 EXPECT_EQ(7U, model.GetCursorPosition()); |
1256 // empty cut shouldn't create an edit. | 1256 // empty cut shouldn't create an edit. |
1257 EXPECT_TRUE(model.Undo()); | 1257 EXPECT_TRUE(model.Undo()); |
1258 EXPECT_STR_EQ("ABCBCBCDE", model.GetText()); | 1258 EXPECT_STR_EQ("ABCBCBCDE", model.GetText()); |
1259 EXPECT_EQ(3U, model.GetCursorPosition()); | 1259 EXPECT_EQ(3U, model.GetCursorPosition()); |
1260 | 1260 |
1261 // Copy | 1261 // Copy |
1262 ResetModel(&model); | 1262 ResetModel(&model); |
1263 model.SetText(ASCIIToUTF16("12345")); | 1263 model.SetText(ASCIIToUTF16("12345")); |
1264 EXPECT_STR_EQ("12345", model.GetText()); | 1264 EXPECT_STR_EQ("12345", model.GetText()); |
1265 EXPECT_EQ(5U, model.GetCursorPosition()); | 1265 EXPECT_EQ(5U, model.GetCursorPosition()); |
1266 model.SelectRange(ui::Range(1, 3)); | 1266 model.SelectRange(gfx::Range(1, 3)); |
1267 model.Copy(); // Copy "23" | 1267 model.Copy(); // Copy "23" |
1268 EXPECT_STR_EQ("12345", model.GetText()); | 1268 EXPECT_STR_EQ("12345", model.GetText()); |
1269 EXPECT_EQ(3U, model.GetCursorPosition()); | 1269 EXPECT_EQ(3U, model.GetCursorPosition()); |
1270 model.Paste(); // Paste "23" into "23". | 1270 model.Paste(); // Paste "23" into "23". |
1271 EXPECT_STR_EQ("12345", model.GetText()); | 1271 EXPECT_STR_EQ("12345", model.GetText()); |
1272 EXPECT_EQ(3U, model.GetCursorPosition()); | 1272 EXPECT_EQ(3U, model.GetCursorPosition()); |
1273 model.Paste(); | 1273 model.Paste(); |
1274 EXPECT_STR_EQ("1232345", model.GetText()); | 1274 EXPECT_STR_EQ("1232345", model.GetText()); |
1275 EXPECT_EQ(5U, model.GetCursorPosition()); | 1275 EXPECT_EQ(5U, model.GetCursorPosition()); |
1276 EXPECT_TRUE(model.Undo()); | 1276 EXPECT_TRUE(model.Undo()); |
(...skipping 13 matching lines...) Expand all Loading... |
1290 EXPECT_TRUE(model.Redo()); | 1290 EXPECT_TRUE(model.Redo()); |
1291 EXPECT_STR_EQ("12345", model.GetText()); // For 1st paste | 1291 EXPECT_STR_EQ("12345", model.GetText()); // For 1st paste |
1292 EXPECT_EQ(3U, model.GetCursorPosition()); | 1292 EXPECT_EQ(3U, model.GetCursorPosition()); |
1293 EXPECT_TRUE(model.Redo()); | 1293 EXPECT_TRUE(model.Redo()); |
1294 EXPECT_STR_EQ("1232345", model.GetText()); | 1294 EXPECT_STR_EQ("1232345", model.GetText()); |
1295 EXPECT_EQ(5U, model.GetCursorPosition()); | 1295 EXPECT_EQ(5U, model.GetCursorPosition()); |
1296 EXPECT_FALSE(model.Redo()); | 1296 EXPECT_FALSE(model.Redo()); |
1297 EXPECT_STR_EQ("1232345", model.GetText()); | 1297 EXPECT_STR_EQ("1232345", model.GetText()); |
1298 | 1298 |
1299 // Test using SelectRange | 1299 // Test using SelectRange |
1300 model.SelectRange(ui::Range(1, 3)); | 1300 model.SelectRange(gfx::Range(1, 3)); |
1301 model.Copy(); | 1301 model.Copy(); |
1302 EXPECT_STR_EQ("1232345", model.GetText()); | 1302 EXPECT_STR_EQ("1232345", model.GetText()); |
1303 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); | 1303 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); |
1304 EXPECT_TRUE(model.Paste()); | 1304 EXPECT_TRUE(model.Paste()); |
1305 EXPECT_STR_EQ("123234523", model.GetText()); | 1305 EXPECT_STR_EQ("123234523", model.GetText()); |
1306 EXPECT_EQ(9U, model.GetCursorPosition()); | 1306 EXPECT_EQ(9U, model.GetCursorPosition()); |
1307 EXPECT_TRUE(model.Undo()); | 1307 EXPECT_TRUE(model.Undo()); |
1308 EXPECT_STR_EQ("1232345", model.GetText()); | 1308 EXPECT_STR_EQ("1232345", model.GetText()); |
1309 EXPECT_EQ(7U, model.GetCursorPosition()); | 1309 EXPECT_EQ(7U, model.GetCursorPosition()); |
1310 } | 1310 } |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1374 EXPECT_EQ(5U, model.GetCursorPosition()); | 1374 EXPECT_EQ(5U, model.GetCursorPosition()); |
1375 EXPECT_FALSE(model.Redo()); | 1375 EXPECT_FALSE(model.Redo()); |
1376 } | 1376 } |
1377 | 1377 |
1378 TEST_F(TextfieldViewsModelTest, UndoRedo_ReplaceTest) { | 1378 TEST_F(TextfieldViewsModelTest, UndoRedo_ReplaceTest) { |
1379 // By Cursor | 1379 // By Cursor |
1380 { | 1380 { |
1381 SCOPED_TRACE("forward & insert by cursor"); | 1381 SCOPED_TRACE("forward & insert by cursor"); |
1382 TextfieldViewsModel model(NULL); | 1382 TextfieldViewsModel model(NULL); |
1383 model.SetText(ASCIIToUTF16("abcd")); | 1383 model.SetText(ASCIIToUTF16("abcd")); |
1384 model.SelectRange(ui::Range(1, 3)); | 1384 model.SelectRange(gfx::Range(1, 3)); |
1385 RunInsertReplaceTest(model); | 1385 RunInsertReplaceTest(model); |
1386 } | 1386 } |
1387 { | 1387 { |
1388 SCOPED_TRACE("backward & insert by cursor"); | 1388 SCOPED_TRACE("backward & insert by cursor"); |
1389 TextfieldViewsModel model(NULL); | 1389 TextfieldViewsModel model(NULL); |
1390 model.SetText(ASCIIToUTF16("abcd")); | 1390 model.SetText(ASCIIToUTF16("abcd")); |
1391 model.SelectRange(ui::Range(3, 1)); | 1391 model.SelectRange(gfx::Range(3, 1)); |
1392 RunInsertReplaceTest(model); | 1392 RunInsertReplaceTest(model); |
1393 } | 1393 } |
1394 { | 1394 { |
1395 SCOPED_TRACE("forward & overwrite by cursor"); | 1395 SCOPED_TRACE("forward & overwrite by cursor"); |
1396 TextfieldViewsModel model(NULL); | 1396 TextfieldViewsModel model(NULL); |
1397 model.SetText(ASCIIToUTF16("abcd")); | 1397 model.SetText(ASCIIToUTF16("abcd")); |
1398 model.SelectRange(ui::Range(1, 3)); | 1398 model.SelectRange(gfx::Range(1, 3)); |
1399 RunOverwriteReplaceTest(model); | 1399 RunOverwriteReplaceTest(model); |
1400 } | 1400 } |
1401 { | 1401 { |
1402 SCOPED_TRACE("backward & overwrite by cursor"); | 1402 SCOPED_TRACE("backward & overwrite by cursor"); |
1403 TextfieldViewsModel model(NULL); | 1403 TextfieldViewsModel model(NULL); |
1404 model.SetText(ASCIIToUTF16("abcd")); | 1404 model.SetText(ASCIIToUTF16("abcd")); |
1405 model.SelectRange(ui::Range(3, 1)); | 1405 model.SelectRange(gfx::Range(3, 1)); |
1406 RunOverwriteReplaceTest(model); | 1406 RunOverwriteReplaceTest(model); |
1407 } | 1407 } |
1408 // By SelectRange API | 1408 // By SelectRange API |
1409 { | 1409 { |
1410 SCOPED_TRACE("forward & insert by SelectRange"); | 1410 SCOPED_TRACE("forward & insert by SelectRange"); |
1411 TextfieldViewsModel model(NULL); | 1411 TextfieldViewsModel model(NULL); |
1412 model.SetText(ASCIIToUTF16("abcd")); | 1412 model.SetText(ASCIIToUTF16("abcd")); |
1413 model.SelectRange(ui::Range(1, 3)); | 1413 model.SelectRange(gfx::Range(1, 3)); |
1414 RunInsertReplaceTest(model); | 1414 RunInsertReplaceTest(model); |
1415 } | 1415 } |
1416 { | 1416 { |
1417 SCOPED_TRACE("backward & insert by SelectRange"); | 1417 SCOPED_TRACE("backward & insert by SelectRange"); |
1418 TextfieldViewsModel model(NULL); | 1418 TextfieldViewsModel model(NULL); |
1419 model.SetText(ASCIIToUTF16("abcd")); | 1419 model.SetText(ASCIIToUTF16("abcd")); |
1420 model.SelectRange(ui::Range(3, 1)); | 1420 model.SelectRange(gfx::Range(3, 1)); |
1421 RunInsertReplaceTest(model); | 1421 RunInsertReplaceTest(model); |
1422 } | 1422 } |
1423 { | 1423 { |
1424 SCOPED_TRACE("forward & overwrite by SelectRange"); | 1424 SCOPED_TRACE("forward & overwrite by SelectRange"); |
1425 TextfieldViewsModel model(NULL); | 1425 TextfieldViewsModel model(NULL); |
1426 model.SetText(ASCIIToUTF16("abcd")); | 1426 model.SetText(ASCIIToUTF16("abcd")); |
1427 model.SelectRange(ui::Range(1, 3)); | 1427 model.SelectRange(gfx::Range(1, 3)); |
1428 RunOverwriteReplaceTest(model); | 1428 RunOverwriteReplaceTest(model); |
1429 } | 1429 } |
1430 { | 1430 { |
1431 SCOPED_TRACE("backward & overwrite by SelectRange"); | 1431 SCOPED_TRACE("backward & overwrite by SelectRange"); |
1432 TextfieldViewsModel model(NULL); | 1432 TextfieldViewsModel model(NULL); |
1433 model.SetText(ASCIIToUTF16("abcd")); | 1433 model.SetText(ASCIIToUTF16("abcd")); |
1434 model.SelectRange(ui::Range(3, 1)); | 1434 model.SelectRange(gfx::Range(3, 1)); |
1435 RunOverwriteReplaceTest(model); | 1435 RunOverwriteReplaceTest(model); |
1436 } | 1436 } |
1437 } | 1437 } |
1438 | 1438 |
1439 TEST_F(TextfieldViewsModelTest, UndoRedo_CompositionText) { | 1439 TEST_F(TextfieldViewsModelTest, UndoRedo_CompositionText) { |
1440 TextfieldViewsModel model(NULL); | 1440 TextfieldViewsModel model(NULL); |
1441 | 1441 |
1442 ui::CompositionText composition; | 1442 ui::CompositionText composition; |
1443 composition.text = ASCIIToUTF16("abc"); | 1443 composition.text = ASCIIToUTF16("abc"); |
1444 composition.underlines.push_back(ui::CompositionUnderline(0, 3, 0, false)); | 1444 composition.underlines.push_back(ui::CompositionUnderline(0, 3, 0, false)); |
1445 composition.selection = ui::Range(2, 3); | 1445 composition.selection = gfx::Range(2, 3); |
1446 | 1446 |
1447 model.SetText(ASCIIToUTF16("ABCDE")); | 1447 model.SetText(ASCIIToUTF16("ABCDE")); |
1448 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); | 1448 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); |
1449 model.InsertChar('x'); | 1449 model.InsertChar('x'); |
1450 EXPECT_STR_EQ("ABCDEx", model.GetText()); | 1450 EXPECT_STR_EQ("ABCDEx", model.GetText()); |
1451 EXPECT_TRUE(model.Undo()); // set composition should forget undone edit. | 1451 EXPECT_TRUE(model.Undo()); // set composition should forget undone edit. |
1452 model.SetCompositionText(composition); | 1452 model.SetCompositionText(composition); |
1453 EXPECT_TRUE(model.HasCompositionText()); | 1453 EXPECT_TRUE(model.HasCompositionText()); |
1454 EXPECT_TRUE(model.HasSelection()); | 1454 EXPECT_TRUE(model.HasSelection()); |
1455 EXPECT_STR_EQ("ABCDEabc", model.GetText()); | 1455 EXPECT_STR_EQ("ABCDEabc", model.GetText()); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1507 EXPECT_TRUE(model.Undo()); | 1507 EXPECT_TRUE(model.Undo()); |
1508 EXPECT_STR_EQ("ABCDE", model.GetText()); | 1508 EXPECT_STR_EQ("ABCDE", model.GetText()); |
1509 EXPECT_TRUE(model.Redo()); | 1509 EXPECT_TRUE(model.Redo()); |
1510 EXPECT_STR_EQ("1234", model.GetText()); | 1510 EXPECT_STR_EQ("1234", model.GetText()); |
1511 EXPECT_FALSE(model.Redo()); | 1511 EXPECT_FALSE(model.Redo()); |
1512 | 1512 |
1513 // TODO(oshima): We need MockInputMethod to test the behavior with IME. | 1513 // TODO(oshima): We need MockInputMethod to test the behavior with IME. |
1514 } | 1514 } |
1515 | 1515 |
1516 } // namespace views | 1516 } // namespace views |
OLD | NEW |