| 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 |