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

Side by Side Diff: views/controls/textfield/textfield_views_model_unittest.cc

Issue 7067015: An edit for SetText needs to be merged with previous edit for omnibox. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " Created 9 years, 6 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 (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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698