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

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) {
msw 2011/06/02 10:16:42 nit: perhaps comment that this is meant to simulat
oshima 2011/06/02 19:11:42 Done.
771 TextfieldViewsModel model(NULL);
772 model.InsertChar('w');
773 EXPECT_STR_EQ("w", model.text());
774 EXPECT_EQ(1U, model.cursor_pos());
775 model.SetText(ASCIIToUTF16("www.google.com"));
776 EXPECT_EQ(1U, model.cursor_pos());
777 EXPECT_STR_EQ("www.google.com", model.text());
778 model.SelectRange(ui::Range(14, 1));
779 model.InsertChar('w');
780 EXPECT_STR_EQ("ww", model.text());
781 model.SetText(ASCIIToUTF16("www.google.com"));
782 model.SelectRange(ui::Range(14, 2));
783 model.InsertChar('w');
784 EXPECT_STR_EQ("www", model.text());
785 model.SetText(ASCIIToUTF16("www.google.com"));
786 model.SelectRange(ui::Range(14, 3));
787 model.InsertChar('.');
788 EXPECT_STR_EQ("www.", model.text());
789 model.SetText(ASCIIToUTF16("www.google.com"));
790 model.SelectRange(ui::Range(14, 4));
791 model.InsertChar('y');
792 EXPECT_STR_EQ("www.y", model.text());
793 model.SetText(ASCIIToUTF16("www.youtube.com"));
794 EXPECT_STR_EQ("www.youtube.com", model.text());
795 EXPECT_EQ(5U, model.cursor_pos());
796
797 EXPECT_TRUE(model.Undo());
798 EXPECT_STR_EQ("www.google.com", model.text());
799 EXPECT_EQ(4U, model.cursor_pos());
800 EXPECT_TRUE(model.Undo());
801 EXPECT_STR_EQ("www.google.com", model.text());
802 EXPECT_EQ(3U, model.cursor_pos());
803 EXPECT_TRUE(model.Undo());
804 EXPECT_STR_EQ("www.google.com", model.text());
805 EXPECT_EQ(2U, model.cursor_pos());
806 EXPECT_TRUE(model.Undo());
807 EXPECT_STR_EQ("www.google.com", model.text());
808 EXPECT_EQ(1U, model.cursor_pos());
809 EXPECT_TRUE(model.Undo());
810 EXPECT_STR_EQ("", model.text());
811 EXPECT_EQ(0U, model.cursor_pos());
812 EXPECT_FALSE(model.Undo());
813 EXPECT_TRUE(model.Redo());
814 EXPECT_STR_EQ("www.google.com", model.text());
815 EXPECT_EQ(1U, model.cursor_pos());
816 EXPECT_TRUE(model.Redo());
817 EXPECT_STR_EQ("www.google.com", model.text());
818 EXPECT_EQ(2U, model.cursor_pos());
819 EXPECT_TRUE(model.Redo());
820 EXPECT_STR_EQ("www.google.com", model.text());
821 EXPECT_EQ(3U, model.cursor_pos());
822 EXPECT_TRUE(model.Redo());
823 EXPECT_STR_EQ("www.google.com", model.text());
824 EXPECT_EQ(4U, model.cursor_pos());
825 EXPECT_TRUE(model.Redo());
826 EXPECT_STR_EQ("www.youtube.com", model.text());
827 EXPECT_EQ(5U, model.cursor_pos());
828 EXPECT_FALSE(model.Redo());
750 } 829 }
751 830
752 TEST_F(TextfieldViewsModelTest, UndoRedo_CutCopyPasteTest) { 831 TEST_F(TextfieldViewsModelTest, UndoRedo_CutCopyPasteTest) {
753 TextfieldViewsModel model(NULL); 832 TextfieldViewsModel model(NULL);
754 model.SetText(ASCIIToUTF16("ABCDE")); 833 model.SetText(ASCIIToUTF16("ABCDE"));
755 EXPECT_FALSE(model.Redo()); // nothing to redo 834 EXPECT_FALSE(model.Redo()); // nothing to redo
756 // Cut 835 // Cut
757 model.MoveCursorTo(1, false); 836 model.MoveCursorTo(1, false);
758 model.MoveCursorTo(3, true); 837 model.MoveCursorTo(3, true);
759 model.Cut(); 838 model.Cut();
760 EXPECT_STR_EQ("ADE", model.text()); 839 EXPECT_STR_EQ("ADE", model.text());
840 EXPECT_EQ(1U, model.cursor_pos());
761 EXPECT_TRUE(model.Undo()); 841 EXPECT_TRUE(model.Undo());
762 EXPECT_STR_EQ("ABCDE", model.text()); 842 EXPECT_STR_EQ("ABCDE", model.text());
843 EXPECT_EQ(3U, model.cursor_pos());
763 EXPECT_TRUE(model.Undo()); 844 EXPECT_TRUE(model.Undo());
764 EXPECT_STR_EQ("", model.text()); 845 EXPECT_STR_EQ("", model.text());
846 EXPECT_EQ(0U, model.cursor_pos());
765 EXPECT_FALSE(model.Undo()); // no more undo 847 EXPECT_FALSE(model.Undo()); // no more undo
766 EXPECT_STR_EQ("", model.text()); 848 EXPECT_STR_EQ("", model.text());
767 EXPECT_TRUE(model.Redo()); 849 EXPECT_TRUE(model.Redo());
768 EXPECT_STR_EQ("ABCDE", model.text()); 850 EXPECT_STR_EQ("ABCDE", model.text());
851 EXPECT_EQ(0U, model.cursor_pos());
769 EXPECT_TRUE(model.Redo()); 852 EXPECT_TRUE(model.Redo());
770 EXPECT_STR_EQ("ADE", model.text()); 853 EXPECT_STR_EQ("ADE", model.text());
854 EXPECT_EQ(1U, model.cursor_pos());
771 EXPECT_FALSE(model.Redo()); // no more redo 855 EXPECT_FALSE(model.Redo()); // no more redo
772 EXPECT_STR_EQ("ADE", model.text()); 856 EXPECT_STR_EQ("ADE", model.text());
773 857
774 model.Paste(); 858 model.Paste();
775 model.Paste(); 859 model.Paste();
776 model.Paste(); 860 model.Paste();
777 EXPECT_STR_EQ("ABCBCBCDE", model.text()); 861 EXPECT_STR_EQ("ABCBCBCDE", model.text());
862 EXPECT_EQ(7U, model.cursor_pos());
778 EXPECT_TRUE(model.Undo()); 863 EXPECT_TRUE(model.Undo());
779 EXPECT_STR_EQ("ABCBCDE", model.text()); 864 EXPECT_STR_EQ("ABCBCDE", model.text());
865 EXPECT_EQ(5U, model.cursor_pos());
780 EXPECT_TRUE(model.Undo()); 866 EXPECT_TRUE(model.Undo());
781 EXPECT_STR_EQ("ABCDE", model.text()); 867 EXPECT_STR_EQ("ABCDE", model.text());
868 EXPECT_EQ(3U, model.cursor_pos());
782 EXPECT_TRUE(model.Undo()); 869 EXPECT_TRUE(model.Undo());
783 EXPECT_STR_EQ("ADE", model.text()); 870 EXPECT_STR_EQ("ADE", model.text());
871 EXPECT_EQ(1U, model.cursor_pos());
784 EXPECT_TRUE(model.Undo()); 872 EXPECT_TRUE(model.Undo());
785 EXPECT_STR_EQ("ABCDE", model.text()); 873 EXPECT_STR_EQ("ABCDE", model.text());
874 EXPECT_EQ(3U, model.cursor_pos());
786 EXPECT_TRUE(model.Undo()); 875 EXPECT_TRUE(model.Undo());
787 EXPECT_STR_EQ("", model.text()); 876 EXPECT_STR_EQ("", model.text());
877 EXPECT_EQ(0U, model.cursor_pos());
788 EXPECT_FALSE(model.Undo()); 878 EXPECT_FALSE(model.Undo());
789 EXPECT_STR_EQ("", model.text()); 879 EXPECT_STR_EQ("", model.text());
790 EXPECT_TRUE(model.Redo()); 880 EXPECT_TRUE(model.Redo());
791 EXPECT_STR_EQ("ABCDE", model.text()); 881 EXPECT_STR_EQ("ABCDE", model.text()); // Redoing SetText
882 EXPECT_EQ(0U, model.cursor_pos());
883
792 // Redo 884 // Redo
793 EXPECT_TRUE(model.Redo()); 885 EXPECT_TRUE(model.Redo());
794 EXPECT_STR_EQ("ADE", model.text()); 886 EXPECT_STR_EQ("ADE", model.text());
887 EXPECT_EQ(1U, model.cursor_pos());
795 EXPECT_TRUE(model.Redo()); 888 EXPECT_TRUE(model.Redo());
796 EXPECT_STR_EQ("ABCDE", model.text()); 889 EXPECT_STR_EQ("ABCDE", model.text());
890 EXPECT_EQ(3U, model.cursor_pos());
797 EXPECT_TRUE(model.Redo()); 891 EXPECT_TRUE(model.Redo());
798 EXPECT_STR_EQ("ABCBCDE", model.text()); 892 EXPECT_STR_EQ("ABCBCDE", model.text());
893 EXPECT_EQ(5U, model.cursor_pos());
799 EXPECT_TRUE(model.Redo()); 894 EXPECT_TRUE(model.Redo());
800 EXPECT_STR_EQ("ABCBCBCDE", model.text()); 895 EXPECT_STR_EQ("ABCBCBCDE", model.text());
896 EXPECT_EQ(7U, model.cursor_pos());
801 EXPECT_FALSE(model.Redo()); 897 EXPECT_FALSE(model.Redo());
802 898
803 // with SelectRange 899 // with SelectRange
804 model.SelectRange(ui::Range(1, 3)); 900 model.SelectRange(ui::Range(1, 3));
805 EXPECT_TRUE(model.Cut()); 901 EXPECT_TRUE(model.Cut());
806 EXPECT_STR_EQ("ABCBCDE", model.text()); 902 EXPECT_STR_EQ("ABCBCDE", model.text());
903 EXPECT_EQ(1U, model.cursor_pos());
807 model.SelectRange(ui::Range(1, 1)); 904 model.SelectRange(ui::Range(1, 1));
808 EXPECT_FALSE(model.Cut()); 905 EXPECT_FALSE(model.Cut());
809 model.MoveCursorToEnd(false); 906 model.MoveCursorToEnd(false);
810 EXPECT_TRUE(model.Paste()); 907 EXPECT_TRUE(model.Paste());
811 EXPECT_STR_EQ("ABCBCDEBC", model.text()); 908 EXPECT_STR_EQ("ABCBCDEBC", model.text());
909 EXPECT_EQ(9U, model.cursor_pos());
812 EXPECT_TRUE(model.Undo()); 910 EXPECT_TRUE(model.Undo());
813 EXPECT_STR_EQ("ABCBCDE", model.text()); 911 EXPECT_STR_EQ("ABCBCDE", model.text());
912 EXPECT_EQ(7U, model.cursor_pos());
814 // empty cut shouldn't create an edit. 913 // empty cut shouldn't create an edit.
815 EXPECT_TRUE(model.Undo()); 914 EXPECT_TRUE(model.Undo());
816 EXPECT_STR_EQ("ABCBCBCDE", model.text()); 915 EXPECT_STR_EQ("ABCBCBCDE", model.text());
916 EXPECT_EQ(3U, model.cursor_pos());
817 917
818 // Copy 918 // Copy
819 ResetModel(&model); 919 ResetModel(&model);
820 model.SetText(ASCIIToUTF16("12345")); 920 model.SetText(ASCIIToUTF16("12345"));
821 EXPECT_STR_EQ("12345", model.text()); 921 EXPECT_STR_EQ("12345", model.text());
922 EXPECT_EQ(0U, model.cursor_pos());
822 model.MoveCursorTo(1, false); 923 model.MoveCursorTo(1, false);
823 model.MoveCursorTo(3, true); 924 model.MoveCursorTo(3, true);
824 model.Copy(); 925 model.Copy(); // Copy "23"
825 EXPECT_STR_EQ("12345", model.text()); 926 EXPECT_STR_EQ("12345", model.text());
826 model.Paste(); 927 EXPECT_EQ(3U, model.cursor_pos());
928 model.Paste(); // Paste "23" into "23".
827 EXPECT_STR_EQ("12345", model.text()); 929 EXPECT_STR_EQ("12345", model.text());
930 EXPECT_EQ(3U, model.cursor_pos());
828 model.Paste(); 931 model.Paste();
829 EXPECT_STR_EQ("1232345", model.text()); 932 EXPECT_STR_EQ("1232345", model.text());
933 EXPECT_EQ(5U, model.cursor_pos());
830 EXPECT_TRUE(model.Undo()); 934 EXPECT_TRUE(model.Undo());
831 EXPECT_STR_EQ("12345", model.text()); 935 EXPECT_STR_EQ("12345", model.text());
832 EXPECT_FALSE(model.Undo()); // no text change 936 EXPECT_EQ(3U, model.cursor_pos());
937 // TODO(oshima): We need to change the return type from bool to enum.
938 EXPECT_FALSE(model.Undo()); // No text change.
833 EXPECT_STR_EQ("12345", model.text()); 939 EXPECT_STR_EQ("12345", model.text());
940 EXPECT_EQ(3U, model.cursor_pos());
834 EXPECT_TRUE(model.Undo()); 941 EXPECT_TRUE(model.Undo());
835 EXPECT_STR_EQ("", model.text()); 942 EXPECT_STR_EQ("", model.text());
836 EXPECT_FALSE(model.Undo()); 943 EXPECT_FALSE(model.Undo());
837 // Redo 944 // Redo
838 EXPECT_TRUE(model.Redo()); 945 EXPECT_TRUE(model.Redo());
839 EXPECT_STR_EQ("12345", model.text()); 946 EXPECT_STR_EQ("12345", model.text());
840 EXPECT_FALSE(model.Redo()); // no text change. 947 EXPECT_EQ(0U, model.cursor_pos());
841 EXPECT_STR_EQ("12345", model.text()); 948 EXPECT_TRUE(model.Redo());
949 EXPECT_STR_EQ("12345", model.text()); // For 1st paste
950 EXPECT_EQ(3U, model.cursor_pos());
842 EXPECT_TRUE(model.Redo()); 951 EXPECT_TRUE(model.Redo());
843 EXPECT_STR_EQ("1232345", model.text()); 952 EXPECT_STR_EQ("1232345", model.text());
953 EXPECT_EQ(5U, model.cursor_pos());
844 EXPECT_FALSE(model.Redo()); 954 EXPECT_FALSE(model.Redo());
845 EXPECT_STR_EQ("1232345", model.text()); 955 EXPECT_STR_EQ("1232345", model.text());
846 956
847 // with SelectRange 957 // with SelectRange
848 model.SelectRange(ui::Range(1, 3)); 958 model.SelectRange(ui::Range(1, 3));
849 model.Copy(); 959 model.Copy();
850 EXPECT_STR_EQ("1232345", model.text()); 960 EXPECT_STR_EQ("1232345", model.text());
851 model.MoveCursorToEnd(false); 961 model.MoveCursorToEnd(false);
852 EXPECT_TRUE(model.Paste()); 962 EXPECT_TRUE(model.Paste());
853 EXPECT_STR_EQ("123234523", model.text()); 963 EXPECT_STR_EQ("123234523", model.text());
964 EXPECT_EQ(9U, model.cursor_pos());
854 EXPECT_TRUE(model.Undo()); 965 EXPECT_TRUE(model.Undo());
855 EXPECT_STR_EQ("1232345", model.text()); 966 EXPECT_STR_EQ("1232345", model.text());
967 EXPECT_EQ(7U, model.cursor_pos());
856 } 968 }
857 969
858 TEST_F(TextfieldViewsModelTest, UndoRedo_CursorTest) { 970 TEST_F(TextfieldViewsModelTest, UndoRedo_CursorTest) {
859 TextfieldViewsModel model(NULL); 971 TextfieldViewsModel model(NULL);
860 model.InsertChar('a'); 972 model.InsertChar('a');
861 model.MoveCursorLeft(false); 973 model.MoveCursorLeft(false);
862 model.MoveCursorRight(false); 974 model.MoveCursorRight(false);
863 model.InsertChar('b'); 975 model.InsertChar('b');
864 // Moving cursor shoudln't create a new edit. 976 // Moving cursor shoudln't create a new edit.
865 EXPECT_STR_EQ("ab", model.text()); 977 EXPECT_STR_EQ("ab", model.text());
866 EXPECT_FALSE(model.Redo()); 978 EXPECT_FALSE(model.Redo());
867 EXPECT_TRUE(model.Undo()); 979 EXPECT_TRUE(model.Undo());
868 EXPECT_STR_EQ("", model.text()); 980 EXPECT_STR_EQ("", model.text());
869 EXPECT_FALSE(model.Undo()); 981 EXPECT_FALSE(model.Undo());
870 EXPECT_STR_EQ("", model.text()); 982 EXPECT_STR_EQ("", model.text());
871 EXPECT_TRUE(model.Redo()); 983 EXPECT_TRUE(model.Redo());
872 EXPECT_STR_EQ("ab", model.text()); 984 EXPECT_STR_EQ("ab", model.text());
985 EXPECT_EQ(2U, model.cursor_pos());
873 EXPECT_FALSE(model.Redo()); 986 EXPECT_FALSE(model.Redo());
874 } 987 }
875 988
876 void RunInsertReplaceTest(TextfieldViewsModel& model) { 989 void RunInsertReplaceTest(TextfieldViewsModel& model) {
990 ui::Range r;
991 model.GetSelectedRange(&r);
992 bool reverse = r.is_reversed();
993
877 model.InsertChar('1'); 994 model.InsertChar('1');
878 model.InsertChar('2'); 995 model.InsertChar('2');
879 model.InsertChar('3'); 996 model.InsertChar('3');
880 EXPECT_STR_EQ("a123d", model.text()); 997 EXPECT_STR_EQ("a123d", model.text());
998 EXPECT_EQ(4U, model.cursor_pos());
881 EXPECT_TRUE(model.Undo()); 999 EXPECT_TRUE(model.Undo());
882 EXPECT_STR_EQ("abcd", model.text()); 1000 EXPECT_STR_EQ("abcd", model.text());
1001 EXPECT_EQ(reverse ? 1U : 3U, model.cursor_pos());
883 EXPECT_TRUE(model.Undo()); 1002 EXPECT_TRUE(model.Undo());
884 EXPECT_STR_EQ("", model.text()); 1003 EXPECT_STR_EQ("", model.text());
1004 EXPECT_EQ(0U, model.cursor_pos());
885 EXPECT_FALSE(model.Undo()); 1005 EXPECT_FALSE(model.Undo());
886 EXPECT_TRUE(model.Redo()); 1006 EXPECT_TRUE(model.Redo());
887 EXPECT_STR_EQ("abcd", model.text()); 1007 EXPECT_STR_EQ("abcd", model.text());
1008 EXPECT_EQ(0U, model.cursor_pos()); // By SetText
888 EXPECT_TRUE(model.Redo()); 1009 EXPECT_TRUE(model.Redo());
889 EXPECT_STR_EQ("a123d", model.text()); 1010 EXPECT_STR_EQ("a123d", model.text());
1011 EXPECT_EQ(4U, model.cursor_pos());
890 EXPECT_FALSE(model.Redo()); 1012 EXPECT_FALSE(model.Redo());
891 } 1013 }
892 1014
893 void RunOverwriteReplaceTest(TextfieldViewsModel& model) { 1015 void RunOverwriteReplaceTest(TextfieldViewsModel& model) {
1016 ui::Range r;
1017 model.GetSelectedRange(&r);
1018 bool reverse = r.is_reversed();
1019
894 model.ReplaceChar('1'); 1020 model.ReplaceChar('1');
895 model.ReplaceChar('2'); 1021 model.ReplaceChar('2');
896 model.ReplaceChar('3'); 1022 model.ReplaceChar('3');
897 model.ReplaceChar('4'); 1023 model.ReplaceChar('4');
898 EXPECT_STR_EQ("a1234", model.text()); 1024 EXPECT_STR_EQ("a1234", model.text());
1025 EXPECT_EQ(5U, model.cursor_pos());
899 EXPECT_TRUE(model.Undo()); 1026 EXPECT_TRUE(model.Undo());
900 EXPECT_STR_EQ("abcd", model.text()); 1027 EXPECT_STR_EQ("abcd", model.text());
1028 EXPECT_EQ(reverse ? 1U : 3U, model.cursor_pos());
901 EXPECT_TRUE(model.Undo()); 1029 EXPECT_TRUE(model.Undo());
902 EXPECT_STR_EQ("", model.text()); 1030 EXPECT_STR_EQ("", model.text());
1031 EXPECT_EQ(0U, model.cursor_pos());
903 EXPECT_FALSE(model.Undo()); 1032 EXPECT_FALSE(model.Undo());
904 EXPECT_TRUE(model.Redo()); 1033 EXPECT_TRUE(model.Redo());
905 EXPECT_STR_EQ("abcd", model.text()); 1034 EXPECT_STR_EQ("abcd", model.text());
1035 EXPECT_EQ(0U, model.cursor_pos());
906 EXPECT_TRUE(model.Redo()); 1036 EXPECT_TRUE(model.Redo());
907 EXPECT_STR_EQ("a1234", model.text()); 1037 EXPECT_STR_EQ("a1234", model.text());
1038 EXPECT_EQ(5U, model.cursor_pos());
908 EXPECT_FALSE(model.Redo()); 1039 EXPECT_FALSE(model.Redo());
909 } 1040 }
910 1041
911 TEST_F(TextfieldViewsModelTest, UndoRedo_ReplaceTest) { 1042 TEST_F(TextfieldViewsModelTest, UndoRedo_ReplaceTest) {
912 // By Cursor 1043 // By Cursor
913 { 1044 {
914 SCOPED_TRACE("forward & insert by cursor"); 1045 SCOPED_TRACE("forward & insert by cursor");
915 TextfieldViewsModel model(NULL); 1046 TextfieldViewsModel model(NULL);
916 model.SetText(ASCIIToUTF16("abcd")); 1047 model.SetText(ASCIIToUTF16("abcd"));
917 model.MoveCursorTo(1, false); 1048 model.MoveCursorTo(1, false);
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
1254 model.ApplyTextStyle(strike, invalid); 1385 model.ApplyTextStyle(strike, invalid);
1255 model.GetFragments(&fragments); 1386 model.GetFragments(&fragments);
1256 EXPECT_EQ(1U, fragments.size()); 1387 EXPECT_EQ(1U, fragments.size());
1257 1388
1258 EXPECT_EQ(0U, fragments[0].range.start()); 1389 EXPECT_EQ(0U, fragments[0].range.start());
1259 EXPECT_EQ(10U, fragments[0].range.end()); 1390 EXPECT_EQ(10U, fragments[0].range.end());
1260 EXPECT_EQ(black, fragments[0].style->foreground()); 1391 EXPECT_EQ(black, fragments[0].style->foreground());
1261 } 1392 }
1262 1393
1263 } // namespace views 1394 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698