OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/auto_reset.h" | 5 #include "base/auto_reset.h" |
6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 #include "ui/base/clipboard/clipboard.h" | 10 #include "ui/base/clipboard/clipboard.h" |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 EXPECT_EQ(0U, fragments[0].range.start()); | 266 EXPECT_EQ(0U, fragments[0].range.start()); |
267 EXPECT_EQ(11U, fragments[0].range.end()); | 267 EXPECT_EQ(11U, fragments[0].range.end()); |
268 } | 268 } |
269 | 269 |
270 TEST_F(TextfieldViewsModelTest, SetText) { | 270 TEST_F(TextfieldViewsModelTest, SetText) { |
271 TextfieldViewsModel model(NULL); | 271 TextfieldViewsModel model(NULL); |
272 model.Append(ASCIIToUTF16("HELLO")); | 272 model.Append(ASCIIToUTF16("HELLO")); |
273 model.MoveCursorToEnd(false); | 273 model.MoveCursorToEnd(false); |
274 model.SetText(ASCIIToUTF16("GOODBYE")); | 274 model.SetText(ASCIIToUTF16("GOODBYE")); |
275 EXPECT_STR_EQ("GOODBYE", model.text()); | 275 EXPECT_STR_EQ("GOODBYE", model.text()); |
276 EXPECT_EQ(0U, model.cursor_pos()); | 276 // SetText won't reset the cursor posistion. |
| 277 EXPECT_EQ(5U, model.cursor_pos()); |
277 model.SelectAll(); | 278 model.SelectAll(); |
278 EXPECT_STR_EQ("GOODBYE", model.GetSelectedText()); | 279 EXPECT_STR_EQ("GOODBYE", model.GetSelectedText()); |
279 model.MoveCursorToEnd(false); | 280 model.MoveCursorToEnd(false); |
280 EXPECT_EQ(7U, model.cursor_pos()); | 281 EXPECT_EQ(7U, model.cursor_pos()); |
281 | 282 |
282 model.SetText(ASCIIToUTF16("BYE")); | 283 model.SetText(ASCIIToUTF16("BYE")); |
283 EXPECT_EQ(0U, model.cursor_pos()); | 284 // Setting shorter string moves the cursor to the end of the new string. |
| 285 EXPECT_EQ(3U, model.cursor_pos()); |
284 EXPECT_EQ(string16(), model.GetSelectedText()); | 286 EXPECT_EQ(string16(), model.GetSelectedText()); |
285 model.SetText(ASCIIToUTF16("")); | 287 model.SetText(ASCIIToUTF16("")); |
286 EXPECT_EQ(0U, model.cursor_pos()); | 288 EXPECT_EQ(0U, model.cursor_pos()); |
287 } | 289 } |
288 | 290 |
289 TEST_F(TextfieldViewsModelTest, Clipboard) { | 291 TEST_F(TextfieldViewsModelTest, Clipboard) { |
290 ui::Clipboard* clipboard | 292 ui::Clipboard* clipboard |
291 = views::ViewsDelegate::views_delegate->GetClipboard(); | 293 = views::ViewsDelegate::views_delegate->GetClipboard(); |
292 string16 initial_clipboard_text; | 294 string16 initial_clipboard_text; |
293 clipboard->ReadText(ui::Clipboard::BUFFER_STANDARD, &initial_clipboard_text); | 295 clipboard->ReadText(ui::Clipboard::BUFFER_STANDARD, &initial_clipboard_text); |
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
676 EXPECT_STR_EQ("", model.text()); | 678 EXPECT_STR_EQ("", model.text()); |
677 EXPECT_TRUE(model.Redo()); | 679 EXPECT_TRUE(model.Redo()); |
678 EXPECT_STR_EQ("a", model.text()); | 680 EXPECT_STR_EQ("a", model.text()); |
679 | 681 |
680 // Continuous inserts are treated as one edit. | 682 // Continuous inserts are treated as one edit. |
681 model.InsertChar('b'); | 683 model.InsertChar('b'); |
682 model.InsertChar('c'); | 684 model.InsertChar('c'); |
683 EXPECT_STR_EQ("abc", model.text()); | 685 EXPECT_STR_EQ("abc", model.text()); |
684 EXPECT_TRUE(model.Undo()); | 686 EXPECT_TRUE(model.Undo()); |
685 EXPECT_STR_EQ("a", model.text()); | 687 EXPECT_STR_EQ("a", model.text()); |
| 688 EXPECT_EQ(1U, model.cursor_pos()); |
686 EXPECT_TRUE(model.Undo()); | 689 EXPECT_TRUE(model.Undo()); |
687 EXPECT_STR_EQ("", model.text()); | 690 EXPECT_STR_EQ("", model.text()); |
| 691 EXPECT_EQ(0U, model.cursor_pos()); |
688 | 692 |
689 // Undoing further shouldn't change the text. | 693 // Undoing further shouldn't change the text. |
690 EXPECT_FALSE(model.Undo()); | 694 EXPECT_FALSE(model.Undo()); |
691 EXPECT_STR_EQ("", model.text()); | 695 EXPECT_STR_EQ("", model.text()); |
692 EXPECT_FALSE(model.Undo()); | 696 EXPECT_FALSE(model.Undo()); |
693 EXPECT_STR_EQ("", model.text()); | 697 EXPECT_STR_EQ("", model.text()); |
| 698 EXPECT_EQ(0U, model.cursor_pos()); |
694 | 699 |
695 // Redoing to the latest text. | 700 // Redoing to the latest text. |
696 EXPECT_TRUE(model.Redo()); | 701 EXPECT_TRUE(model.Redo()); |
697 EXPECT_STR_EQ("a", model.text()); | 702 EXPECT_STR_EQ("a", model.text()); |
| 703 EXPECT_EQ(1U, model.cursor_pos()); |
698 EXPECT_TRUE(model.Redo()); | 704 EXPECT_TRUE(model.Redo()); |
699 EXPECT_STR_EQ("abc", model.text()); | 705 EXPECT_STR_EQ("abc", model.text()); |
| 706 EXPECT_EQ(3U, model.cursor_pos()); |
700 | 707 |
701 // Backspace =============================== | 708 // Backspace =============================== |
702 EXPECT_TRUE(model.Backspace()); | 709 EXPECT_TRUE(model.Backspace()); |
703 EXPECT_STR_EQ("ab", model.text()); | 710 EXPECT_STR_EQ("ab", model.text()); |
704 EXPECT_TRUE(model.Undo()); | 711 EXPECT_TRUE(model.Undo()); |
705 EXPECT_STR_EQ("abc", model.text()); | 712 EXPECT_STR_EQ("abc", model.text()); |
| 713 EXPECT_EQ(3U, model.cursor_pos()); |
706 EXPECT_TRUE(model.Redo()); | 714 EXPECT_TRUE(model.Redo()); |
707 EXPECT_STR_EQ("ab", model.text()); | 715 EXPECT_STR_EQ("ab", model.text()); |
| 716 EXPECT_EQ(2U, model.cursor_pos()); |
708 // Continous backspaces are treated as one edit. | 717 // Continous backspaces are treated as one edit. |
709 EXPECT_TRUE(model.Backspace()); | 718 EXPECT_TRUE(model.Backspace()); |
710 EXPECT_TRUE(model.Backspace()); | 719 EXPECT_TRUE(model.Backspace()); |
711 EXPECT_STR_EQ("", model.text()); | 720 EXPECT_STR_EQ("", model.text()); |
712 // Extra backspace shouldn't affect the history. | 721 // Extra backspace shouldn't affect the history. |
713 EXPECT_FALSE(model.Backspace()); | 722 EXPECT_FALSE(model.Backspace()); |
714 EXPECT_TRUE(model.Undo()); | 723 EXPECT_TRUE(model.Undo()); |
715 EXPECT_STR_EQ("ab", model.text()); | 724 EXPECT_STR_EQ("ab", model.text()); |
| 725 EXPECT_EQ(2U, model.cursor_pos()); |
716 EXPECT_TRUE(model.Undo()); | 726 EXPECT_TRUE(model.Undo()); |
717 EXPECT_STR_EQ("abc", model.text()); | 727 EXPECT_STR_EQ("abc", model.text()); |
| 728 EXPECT_EQ(3U, model.cursor_pos()); |
718 EXPECT_TRUE(model.Undo()); | 729 EXPECT_TRUE(model.Undo()); |
719 EXPECT_STR_EQ("a", model.text()); | 730 EXPECT_STR_EQ("a", model.text()); |
| 731 EXPECT_EQ(1U, model.cursor_pos()); |
720 | 732 |
721 // Clear history | 733 // Clear history |
722 model.ClearEditHistory(); | 734 model.ClearEditHistory(); |
723 EXPECT_FALSE(model.Undo()); | 735 EXPECT_FALSE(model.Undo()); |
724 EXPECT_FALSE(model.Redo()); | 736 EXPECT_FALSE(model.Redo()); |
725 EXPECT_STR_EQ("a", model.text()); | 737 EXPECT_STR_EQ("a", model.text()); |
| 738 EXPECT_EQ(1U, model.cursor_pos()); |
726 | 739 |
727 // Delete =============================== | 740 // Delete =============================== |
728 model.SetText(ASCIIToUTF16("ABCDE")); | 741 model.SetText(ASCIIToUTF16("ABCDE")); |
729 model.ClearEditHistory(); | 742 model.ClearEditHistory(); |
730 model.MoveCursorTo(2, false); | 743 model.MoveCursorTo(2, false); |
731 EXPECT_TRUE(model.Delete()); | 744 EXPECT_TRUE(model.Delete()); |
732 EXPECT_STR_EQ("ABDE", model.text()); | 745 EXPECT_STR_EQ("ABDE", model.text()); |
733 model.MoveCursorToHome(false); | 746 model.MoveCursorToHome(false); |
734 EXPECT_TRUE(model.Delete()); | 747 EXPECT_TRUE(model.Delete()); |
735 EXPECT_STR_EQ("BDE", model.text()); | 748 EXPECT_STR_EQ("BDE", model.text()); |
736 EXPECT_TRUE(model.Undo()); | 749 EXPECT_TRUE(model.Undo()); |
737 EXPECT_STR_EQ("ABDE", model.text()); | 750 EXPECT_STR_EQ("ABDE", model.text()); |
| 751 EXPECT_EQ(0U, model.cursor_pos()); |
738 EXPECT_TRUE(model.Undo()); | 752 EXPECT_TRUE(model.Undo()); |
739 EXPECT_STR_EQ("ABCDE", model.text()); | 753 EXPECT_STR_EQ("ABCDE", model.text()); |
| 754 EXPECT_EQ(2U, model.cursor_pos()); |
740 EXPECT_TRUE(model.Redo()); | 755 EXPECT_TRUE(model.Redo()); |
741 EXPECT_STR_EQ("ABDE", model.text()); | 756 EXPECT_STR_EQ("ABDE", model.text()); |
| 757 EXPECT_EQ(2U, model.cursor_pos()); |
742 // Continous deletes are treated as one edit. | 758 // Continous deletes are treated as one edit. |
743 EXPECT_TRUE(model.Delete()); | 759 EXPECT_TRUE(model.Delete()); |
744 EXPECT_TRUE(model.Delete()); | 760 EXPECT_TRUE(model.Delete()); |
745 EXPECT_STR_EQ("AB", model.text()); | 761 EXPECT_STR_EQ("AB", model.text()); |
746 EXPECT_TRUE(model.Undo()); | 762 EXPECT_TRUE(model.Undo()); |
747 EXPECT_STR_EQ("ABDE", model.text()); | 763 EXPECT_STR_EQ("ABDE", model.text()); |
| 764 EXPECT_EQ(2U, model.cursor_pos()); |
748 EXPECT_TRUE(model.Redo()); | 765 EXPECT_TRUE(model.Redo()); |
749 EXPECT_STR_EQ("AB", model.text()); | 766 EXPECT_STR_EQ("AB", model.text()); |
| 767 EXPECT_EQ(2U, model.cursor_pos()); |
| 768 } |
| 769 |
| 770 TEST_F(TextfieldViewsModelTest, UndoRedo_SetText) { |
| 771 // This is to test the undo/redo behavior of omnibox. |
| 772 TextfieldViewsModel model(NULL); |
| 773 model.InsertChar('w'); |
| 774 EXPECT_STR_EQ("w", model.text()); |
| 775 EXPECT_EQ(1U, model.cursor_pos()); |
| 776 model.SetText(ASCIIToUTF16("www.google.com")); |
| 777 EXPECT_EQ(1U, model.cursor_pos()); |
| 778 EXPECT_STR_EQ("www.google.com", model.text()); |
| 779 model.SelectRange(ui::Range(14, 1)); |
| 780 model.InsertChar('w'); |
| 781 EXPECT_STR_EQ("ww", model.text()); |
| 782 model.SetText(ASCIIToUTF16("www.google.com")); |
| 783 model.SelectRange(ui::Range(14, 2)); |
| 784 model.InsertChar('w'); |
| 785 EXPECT_STR_EQ("www", model.text()); |
| 786 model.SetText(ASCIIToUTF16("www.google.com")); |
| 787 model.SelectRange(ui::Range(14, 3)); |
| 788 model.InsertChar('.'); |
| 789 EXPECT_STR_EQ("www.", model.text()); |
| 790 model.SetText(ASCIIToUTF16("www.google.com")); |
| 791 model.SelectRange(ui::Range(14, 4)); |
| 792 model.InsertChar('y'); |
| 793 EXPECT_STR_EQ("www.y", model.text()); |
| 794 model.SetText(ASCIIToUTF16("www.youtube.com")); |
| 795 EXPECT_STR_EQ("www.youtube.com", model.text()); |
| 796 EXPECT_EQ(5U, model.cursor_pos()); |
| 797 |
| 798 EXPECT_TRUE(model.Undo()); |
| 799 EXPECT_STR_EQ("www.google.com", model.text()); |
| 800 EXPECT_EQ(4U, model.cursor_pos()); |
| 801 EXPECT_TRUE(model.Undo()); |
| 802 EXPECT_STR_EQ("www.google.com", model.text()); |
| 803 EXPECT_EQ(3U, model.cursor_pos()); |
| 804 EXPECT_TRUE(model.Undo()); |
| 805 EXPECT_STR_EQ("www.google.com", model.text()); |
| 806 EXPECT_EQ(2U, model.cursor_pos()); |
| 807 EXPECT_TRUE(model.Undo()); |
| 808 EXPECT_STR_EQ("www.google.com", model.text()); |
| 809 EXPECT_EQ(1U, model.cursor_pos()); |
| 810 EXPECT_TRUE(model.Undo()); |
| 811 EXPECT_STR_EQ("", model.text()); |
| 812 EXPECT_EQ(0U, model.cursor_pos()); |
| 813 EXPECT_FALSE(model.Undo()); |
| 814 EXPECT_TRUE(model.Redo()); |
| 815 EXPECT_STR_EQ("www.google.com", model.text()); |
| 816 EXPECT_EQ(1U, model.cursor_pos()); |
| 817 EXPECT_TRUE(model.Redo()); |
| 818 EXPECT_STR_EQ("www.google.com", model.text()); |
| 819 EXPECT_EQ(2U, model.cursor_pos()); |
| 820 EXPECT_TRUE(model.Redo()); |
| 821 EXPECT_STR_EQ("www.google.com", model.text()); |
| 822 EXPECT_EQ(3U, model.cursor_pos()); |
| 823 EXPECT_TRUE(model.Redo()); |
| 824 EXPECT_STR_EQ("www.google.com", model.text()); |
| 825 EXPECT_EQ(4U, model.cursor_pos()); |
| 826 EXPECT_TRUE(model.Redo()); |
| 827 EXPECT_STR_EQ("www.youtube.com", model.text()); |
| 828 EXPECT_EQ(5U, model.cursor_pos()); |
| 829 EXPECT_FALSE(model.Redo()); |
750 } | 830 } |
751 | 831 |
752 TEST_F(TextfieldViewsModelTest, UndoRedo_CutCopyPasteTest) { | 832 TEST_F(TextfieldViewsModelTest, UndoRedo_CutCopyPasteTest) { |
753 TextfieldViewsModel model(NULL); | 833 TextfieldViewsModel model(NULL); |
754 model.SetText(ASCIIToUTF16("ABCDE")); | 834 model.SetText(ASCIIToUTF16("ABCDE")); |
755 EXPECT_FALSE(model.Redo()); // nothing to redo | 835 EXPECT_FALSE(model.Redo()); // nothing to redo |
756 // Cut | 836 // Cut |
757 model.MoveCursorTo(1, false); | 837 model.MoveCursorTo(1, false); |
758 model.MoveCursorTo(3, true); | 838 model.MoveCursorTo(3, true); |
759 model.Cut(); | 839 model.Cut(); |
760 EXPECT_STR_EQ("ADE", model.text()); | 840 EXPECT_STR_EQ("ADE", model.text()); |
| 841 EXPECT_EQ(1U, model.cursor_pos()); |
761 EXPECT_TRUE(model.Undo()); | 842 EXPECT_TRUE(model.Undo()); |
762 EXPECT_STR_EQ("ABCDE", model.text()); | 843 EXPECT_STR_EQ("ABCDE", model.text()); |
| 844 EXPECT_EQ(3U, model.cursor_pos()); |
763 EXPECT_TRUE(model.Undo()); | 845 EXPECT_TRUE(model.Undo()); |
764 EXPECT_STR_EQ("", model.text()); | 846 EXPECT_STR_EQ("", model.text()); |
| 847 EXPECT_EQ(0U, model.cursor_pos()); |
765 EXPECT_FALSE(model.Undo()); // no more undo | 848 EXPECT_FALSE(model.Undo()); // no more undo |
766 EXPECT_STR_EQ("", model.text()); | 849 EXPECT_STR_EQ("", model.text()); |
767 EXPECT_TRUE(model.Redo()); | 850 EXPECT_TRUE(model.Redo()); |
768 EXPECT_STR_EQ("ABCDE", model.text()); | 851 EXPECT_STR_EQ("ABCDE", model.text()); |
| 852 EXPECT_EQ(0U, model.cursor_pos()); |
769 EXPECT_TRUE(model.Redo()); | 853 EXPECT_TRUE(model.Redo()); |
770 EXPECT_STR_EQ("ADE", model.text()); | 854 EXPECT_STR_EQ("ADE", model.text()); |
| 855 EXPECT_EQ(1U, model.cursor_pos()); |
771 EXPECT_FALSE(model.Redo()); // no more redo | 856 EXPECT_FALSE(model.Redo()); // no more redo |
772 EXPECT_STR_EQ("ADE", model.text()); | 857 EXPECT_STR_EQ("ADE", model.text()); |
773 | 858 |
774 model.Paste(); | 859 model.Paste(); |
775 model.Paste(); | 860 model.Paste(); |
776 model.Paste(); | 861 model.Paste(); |
777 EXPECT_STR_EQ("ABCBCBCDE", model.text()); | 862 EXPECT_STR_EQ("ABCBCBCDE", model.text()); |
| 863 EXPECT_EQ(7U, model.cursor_pos()); |
778 EXPECT_TRUE(model.Undo()); | 864 EXPECT_TRUE(model.Undo()); |
779 EXPECT_STR_EQ("ABCBCDE", model.text()); | 865 EXPECT_STR_EQ("ABCBCDE", model.text()); |
| 866 EXPECT_EQ(5U, model.cursor_pos()); |
780 EXPECT_TRUE(model.Undo()); | 867 EXPECT_TRUE(model.Undo()); |
781 EXPECT_STR_EQ("ABCDE", model.text()); | 868 EXPECT_STR_EQ("ABCDE", model.text()); |
| 869 EXPECT_EQ(3U, model.cursor_pos()); |
782 EXPECT_TRUE(model.Undo()); | 870 EXPECT_TRUE(model.Undo()); |
783 EXPECT_STR_EQ("ADE", model.text()); | 871 EXPECT_STR_EQ("ADE", model.text()); |
| 872 EXPECT_EQ(1U, model.cursor_pos()); |
784 EXPECT_TRUE(model.Undo()); | 873 EXPECT_TRUE(model.Undo()); |
785 EXPECT_STR_EQ("ABCDE", model.text()); | 874 EXPECT_STR_EQ("ABCDE", model.text()); |
| 875 EXPECT_EQ(3U, model.cursor_pos()); |
786 EXPECT_TRUE(model.Undo()); | 876 EXPECT_TRUE(model.Undo()); |
787 EXPECT_STR_EQ("", model.text()); | 877 EXPECT_STR_EQ("", model.text()); |
| 878 EXPECT_EQ(0U, model.cursor_pos()); |
788 EXPECT_FALSE(model.Undo()); | 879 EXPECT_FALSE(model.Undo()); |
789 EXPECT_STR_EQ("", model.text()); | 880 EXPECT_STR_EQ("", model.text()); |
790 EXPECT_TRUE(model.Redo()); | 881 EXPECT_TRUE(model.Redo()); |
791 EXPECT_STR_EQ("ABCDE", model.text()); | 882 EXPECT_STR_EQ("ABCDE", model.text()); // Redoing SetText |
| 883 EXPECT_EQ(0U, model.cursor_pos()); |
| 884 |
792 // Redo | 885 // Redo |
793 EXPECT_TRUE(model.Redo()); | 886 EXPECT_TRUE(model.Redo()); |
794 EXPECT_STR_EQ("ADE", model.text()); | 887 EXPECT_STR_EQ("ADE", model.text()); |
| 888 EXPECT_EQ(1U, model.cursor_pos()); |
795 EXPECT_TRUE(model.Redo()); | 889 EXPECT_TRUE(model.Redo()); |
796 EXPECT_STR_EQ("ABCDE", model.text()); | 890 EXPECT_STR_EQ("ABCDE", model.text()); |
| 891 EXPECT_EQ(3U, model.cursor_pos()); |
797 EXPECT_TRUE(model.Redo()); | 892 EXPECT_TRUE(model.Redo()); |
798 EXPECT_STR_EQ("ABCBCDE", model.text()); | 893 EXPECT_STR_EQ("ABCBCDE", model.text()); |
| 894 EXPECT_EQ(5U, model.cursor_pos()); |
799 EXPECT_TRUE(model.Redo()); | 895 EXPECT_TRUE(model.Redo()); |
800 EXPECT_STR_EQ("ABCBCBCDE", model.text()); | 896 EXPECT_STR_EQ("ABCBCBCDE", model.text()); |
| 897 EXPECT_EQ(7U, model.cursor_pos()); |
801 EXPECT_FALSE(model.Redo()); | 898 EXPECT_FALSE(model.Redo()); |
802 | 899 |
803 // with SelectRange | 900 // with SelectRange |
804 model.SelectRange(ui::Range(1, 3)); | 901 model.SelectRange(ui::Range(1, 3)); |
805 EXPECT_TRUE(model.Cut()); | 902 EXPECT_TRUE(model.Cut()); |
806 EXPECT_STR_EQ("ABCBCDE", model.text()); | 903 EXPECT_STR_EQ("ABCBCDE", model.text()); |
| 904 EXPECT_EQ(1U, model.cursor_pos()); |
807 model.SelectRange(ui::Range(1, 1)); | 905 model.SelectRange(ui::Range(1, 1)); |
808 EXPECT_FALSE(model.Cut()); | 906 EXPECT_FALSE(model.Cut()); |
809 model.MoveCursorToEnd(false); | 907 model.MoveCursorToEnd(false); |
810 EXPECT_TRUE(model.Paste()); | 908 EXPECT_TRUE(model.Paste()); |
811 EXPECT_STR_EQ("ABCBCDEBC", model.text()); | 909 EXPECT_STR_EQ("ABCBCDEBC", model.text()); |
| 910 EXPECT_EQ(9U, model.cursor_pos()); |
812 EXPECT_TRUE(model.Undo()); | 911 EXPECT_TRUE(model.Undo()); |
813 EXPECT_STR_EQ("ABCBCDE", model.text()); | 912 EXPECT_STR_EQ("ABCBCDE", model.text()); |
| 913 EXPECT_EQ(7U, model.cursor_pos()); |
814 // empty cut shouldn't create an edit. | 914 // empty cut shouldn't create an edit. |
815 EXPECT_TRUE(model.Undo()); | 915 EXPECT_TRUE(model.Undo()); |
816 EXPECT_STR_EQ("ABCBCBCDE", model.text()); | 916 EXPECT_STR_EQ("ABCBCBCDE", model.text()); |
| 917 EXPECT_EQ(3U, model.cursor_pos()); |
817 | 918 |
818 // Copy | 919 // Copy |
819 ResetModel(&model); | 920 ResetModel(&model); |
820 model.SetText(ASCIIToUTF16("12345")); | 921 model.SetText(ASCIIToUTF16("12345")); |
821 EXPECT_STR_EQ("12345", model.text()); | 922 EXPECT_STR_EQ("12345", model.text()); |
| 923 EXPECT_EQ(0U, model.cursor_pos()); |
822 model.MoveCursorTo(1, false); | 924 model.MoveCursorTo(1, false); |
823 model.MoveCursorTo(3, true); | 925 model.MoveCursorTo(3, true); |
824 model.Copy(); | 926 model.Copy(); // Copy "23" |
825 EXPECT_STR_EQ("12345", model.text()); | 927 EXPECT_STR_EQ("12345", model.text()); |
826 model.Paste(); | 928 EXPECT_EQ(3U, model.cursor_pos()); |
| 929 model.Paste(); // Paste "23" into "23". |
827 EXPECT_STR_EQ("12345", model.text()); | 930 EXPECT_STR_EQ("12345", model.text()); |
| 931 EXPECT_EQ(3U, model.cursor_pos()); |
828 model.Paste(); | 932 model.Paste(); |
829 EXPECT_STR_EQ("1232345", model.text()); | 933 EXPECT_STR_EQ("1232345", model.text()); |
| 934 EXPECT_EQ(5U, model.cursor_pos()); |
830 EXPECT_TRUE(model.Undo()); | 935 EXPECT_TRUE(model.Undo()); |
831 EXPECT_STR_EQ("12345", model.text()); | 936 EXPECT_STR_EQ("12345", model.text()); |
832 EXPECT_FALSE(model.Undo()); // no text change | 937 EXPECT_EQ(3U, model.cursor_pos()); |
| 938 // TODO(oshima): We need to change the return type from bool to enum. |
| 939 EXPECT_FALSE(model.Undo()); // No text change. |
833 EXPECT_STR_EQ("12345", model.text()); | 940 EXPECT_STR_EQ("12345", model.text()); |
| 941 EXPECT_EQ(3U, model.cursor_pos()); |
834 EXPECT_TRUE(model.Undo()); | 942 EXPECT_TRUE(model.Undo()); |
835 EXPECT_STR_EQ("", model.text()); | 943 EXPECT_STR_EQ("", model.text()); |
836 EXPECT_FALSE(model.Undo()); | 944 EXPECT_FALSE(model.Undo()); |
837 // Redo | 945 // Redo |
838 EXPECT_TRUE(model.Redo()); | 946 EXPECT_TRUE(model.Redo()); |
839 EXPECT_STR_EQ("12345", model.text()); | 947 EXPECT_STR_EQ("12345", model.text()); |
840 EXPECT_FALSE(model.Redo()); // no text change. | 948 EXPECT_EQ(0U, model.cursor_pos()); |
841 EXPECT_STR_EQ("12345", model.text()); | 949 EXPECT_TRUE(model.Redo()); |
| 950 EXPECT_STR_EQ("12345", model.text()); // For 1st paste |
| 951 EXPECT_EQ(3U, model.cursor_pos()); |
842 EXPECT_TRUE(model.Redo()); | 952 EXPECT_TRUE(model.Redo()); |
843 EXPECT_STR_EQ("1232345", model.text()); | 953 EXPECT_STR_EQ("1232345", model.text()); |
| 954 EXPECT_EQ(5U, model.cursor_pos()); |
844 EXPECT_FALSE(model.Redo()); | 955 EXPECT_FALSE(model.Redo()); |
845 EXPECT_STR_EQ("1232345", model.text()); | 956 EXPECT_STR_EQ("1232345", model.text()); |
846 | 957 |
847 // with SelectRange | 958 // with SelectRange |
848 model.SelectRange(ui::Range(1, 3)); | 959 model.SelectRange(ui::Range(1, 3)); |
849 model.Copy(); | 960 model.Copy(); |
850 EXPECT_STR_EQ("1232345", model.text()); | 961 EXPECT_STR_EQ("1232345", model.text()); |
851 model.MoveCursorToEnd(false); | 962 model.MoveCursorToEnd(false); |
852 EXPECT_TRUE(model.Paste()); | 963 EXPECT_TRUE(model.Paste()); |
853 EXPECT_STR_EQ("123234523", model.text()); | 964 EXPECT_STR_EQ("123234523", model.text()); |
| 965 EXPECT_EQ(9U, model.cursor_pos()); |
854 EXPECT_TRUE(model.Undo()); | 966 EXPECT_TRUE(model.Undo()); |
855 EXPECT_STR_EQ("1232345", model.text()); | 967 EXPECT_STR_EQ("1232345", model.text()); |
| 968 EXPECT_EQ(7U, model.cursor_pos()); |
856 } | 969 } |
857 | 970 |
858 TEST_F(TextfieldViewsModelTest, UndoRedo_CursorTest) { | 971 TEST_F(TextfieldViewsModelTest, UndoRedo_CursorTest) { |
859 TextfieldViewsModel model(NULL); | 972 TextfieldViewsModel model(NULL); |
860 model.InsertChar('a'); | 973 model.InsertChar('a'); |
861 model.MoveCursorLeft(false); | 974 model.MoveCursorLeft(false); |
862 model.MoveCursorRight(false); | 975 model.MoveCursorRight(false); |
863 model.InsertChar('b'); | 976 model.InsertChar('b'); |
864 // Moving cursor shoudln't create a new edit. | 977 // Moving cursor shoudln't create a new edit. |
865 EXPECT_STR_EQ("ab", model.text()); | 978 EXPECT_STR_EQ("ab", model.text()); |
866 EXPECT_FALSE(model.Redo()); | 979 EXPECT_FALSE(model.Redo()); |
867 EXPECT_TRUE(model.Undo()); | 980 EXPECT_TRUE(model.Undo()); |
868 EXPECT_STR_EQ("", model.text()); | 981 EXPECT_STR_EQ("", model.text()); |
869 EXPECT_FALSE(model.Undo()); | 982 EXPECT_FALSE(model.Undo()); |
870 EXPECT_STR_EQ("", model.text()); | 983 EXPECT_STR_EQ("", model.text()); |
871 EXPECT_TRUE(model.Redo()); | 984 EXPECT_TRUE(model.Redo()); |
872 EXPECT_STR_EQ("ab", model.text()); | 985 EXPECT_STR_EQ("ab", model.text()); |
| 986 EXPECT_EQ(2U, model.cursor_pos()); |
873 EXPECT_FALSE(model.Redo()); | 987 EXPECT_FALSE(model.Redo()); |
874 } | 988 } |
875 | 989 |
876 void RunInsertReplaceTest(TextfieldViewsModel& model) { | 990 void RunInsertReplaceTest(TextfieldViewsModel& model) { |
| 991 ui::Range r; |
| 992 model.GetSelectedRange(&r); |
| 993 bool reverse = r.is_reversed(); |
| 994 |
877 model.InsertChar('1'); | 995 model.InsertChar('1'); |
878 model.InsertChar('2'); | 996 model.InsertChar('2'); |
879 model.InsertChar('3'); | 997 model.InsertChar('3'); |
880 EXPECT_STR_EQ("a123d", model.text()); | 998 EXPECT_STR_EQ("a123d", model.text()); |
| 999 EXPECT_EQ(4U, model.cursor_pos()); |
881 EXPECT_TRUE(model.Undo()); | 1000 EXPECT_TRUE(model.Undo()); |
882 EXPECT_STR_EQ("abcd", model.text()); | 1001 EXPECT_STR_EQ("abcd", model.text()); |
| 1002 EXPECT_EQ(reverse ? 1U : 3U, model.cursor_pos()); |
883 EXPECT_TRUE(model.Undo()); | 1003 EXPECT_TRUE(model.Undo()); |
884 EXPECT_STR_EQ("", model.text()); | 1004 EXPECT_STR_EQ("", model.text()); |
| 1005 EXPECT_EQ(0U, model.cursor_pos()); |
885 EXPECT_FALSE(model.Undo()); | 1006 EXPECT_FALSE(model.Undo()); |
886 EXPECT_TRUE(model.Redo()); | 1007 EXPECT_TRUE(model.Redo()); |
887 EXPECT_STR_EQ("abcd", model.text()); | 1008 EXPECT_STR_EQ("abcd", model.text()); |
| 1009 EXPECT_EQ(0U, model.cursor_pos()); // By SetText |
888 EXPECT_TRUE(model.Redo()); | 1010 EXPECT_TRUE(model.Redo()); |
889 EXPECT_STR_EQ("a123d", model.text()); | 1011 EXPECT_STR_EQ("a123d", model.text()); |
| 1012 EXPECT_EQ(4U, model.cursor_pos()); |
890 EXPECT_FALSE(model.Redo()); | 1013 EXPECT_FALSE(model.Redo()); |
891 } | 1014 } |
892 | 1015 |
893 void RunOverwriteReplaceTest(TextfieldViewsModel& model) { | 1016 void RunOverwriteReplaceTest(TextfieldViewsModel& model) { |
| 1017 ui::Range r; |
| 1018 model.GetSelectedRange(&r); |
| 1019 bool reverse = r.is_reversed(); |
| 1020 |
894 model.ReplaceChar('1'); | 1021 model.ReplaceChar('1'); |
895 model.ReplaceChar('2'); | 1022 model.ReplaceChar('2'); |
896 model.ReplaceChar('3'); | 1023 model.ReplaceChar('3'); |
897 model.ReplaceChar('4'); | 1024 model.ReplaceChar('4'); |
898 EXPECT_STR_EQ("a1234", model.text()); | 1025 EXPECT_STR_EQ("a1234", model.text()); |
| 1026 EXPECT_EQ(5U, model.cursor_pos()); |
899 EXPECT_TRUE(model.Undo()); | 1027 EXPECT_TRUE(model.Undo()); |
900 EXPECT_STR_EQ("abcd", model.text()); | 1028 EXPECT_STR_EQ("abcd", model.text()); |
| 1029 EXPECT_EQ(reverse ? 1U : 3U, model.cursor_pos()); |
901 EXPECT_TRUE(model.Undo()); | 1030 EXPECT_TRUE(model.Undo()); |
902 EXPECT_STR_EQ("", model.text()); | 1031 EXPECT_STR_EQ("", model.text()); |
| 1032 EXPECT_EQ(0U, model.cursor_pos()); |
903 EXPECT_FALSE(model.Undo()); | 1033 EXPECT_FALSE(model.Undo()); |
904 EXPECT_TRUE(model.Redo()); | 1034 EXPECT_TRUE(model.Redo()); |
905 EXPECT_STR_EQ("abcd", model.text()); | 1035 EXPECT_STR_EQ("abcd", model.text()); |
| 1036 EXPECT_EQ(0U, model.cursor_pos()); |
906 EXPECT_TRUE(model.Redo()); | 1037 EXPECT_TRUE(model.Redo()); |
907 EXPECT_STR_EQ("a1234", model.text()); | 1038 EXPECT_STR_EQ("a1234", model.text()); |
| 1039 EXPECT_EQ(5U, model.cursor_pos()); |
908 EXPECT_FALSE(model.Redo()); | 1040 EXPECT_FALSE(model.Redo()); |
909 } | 1041 } |
910 | 1042 |
911 TEST_F(TextfieldViewsModelTest, UndoRedo_ReplaceTest) { | 1043 TEST_F(TextfieldViewsModelTest, UndoRedo_ReplaceTest) { |
912 // By Cursor | 1044 // By Cursor |
913 { | 1045 { |
914 SCOPED_TRACE("forward & insert by cursor"); | 1046 SCOPED_TRACE("forward & insert by cursor"); |
915 TextfieldViewsModel model(NULL); | 1047 TextfieldViewsModel model(NULL); |
916 model.SetText(ASCIIToUTF16("abcd")); | 1048 model.SetText(ASCIIToUTF16("abcd")); |
917 model.MoveCursorTo(1, false); | 1049 model.MoveCursorTo(1, false); |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1254 model.ApplyTextStyle(strike, invalid); | 1386 model.ApplyTextStyle(strike, invalid); |
1255 model.GetFragments(&fragments); | 1387 model.GetFragments(&fragments); |
1256 EXPECT_EQ(1U, fragments.size()); | 1388 EXPECT_EQ(1U, fragments.size()); |
1257 | 1389 |
1258 EXPECT_EQ(0U, fragments[0].range.start()); | 1390 EXPECT_EQ(0U, fragments[0].range.start()); |
1259 EXPECT_EQ(10U, fragments[0].range.end()); | 1391 EXPECT_EQ(10U, fragments[0].range.end()); |
1260 EXPECT_EQ(black, fragments[0].style->foreground()); | 1392 EXPECT_EQ(black, fragments[0].style->foreground()); |
1261 } | 1393 } |
1262 | 1394 |
1263 } // namespace views | 1395 } // namespace views |
OLD | NEW |