| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ui/views/controls/textfield/textfield_model.h" | 5 #include "ui/views/controls/textfield/textfield_model.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 WordAndCursor(const wchar_t* w, size_t c) : word(w), cursor(c) {} | 36 WordAndCursor(const wchar_t* w, size_t c) : word(w), cursor(c) {} |
| 37 | 37 |
| 38 const wchar_t* word; | 38 const wchar_t* word; |
| 39 size_t cursor; | 39 size_t cursor; |
| 40 }; | 40 }; |
| 41 | 41 |
| 42 void MoveCursorTo(views::TextfieldModel& model, size_t pos) { | 42 void MoveCursorTo(views::TextfieldModel& model, size_t pos) { |
| 43 model.MoveCursorTo(gfx::SelectionModel(pos, gfx::CURSOR_FORWARD)); | 43 model.MoveCursorTo(gfx::SelectionModel(pos, gfx::CURSOR_FORWARD)); |
| 44 } | 44 } |
| 45 | 45 |
| 46 gfx::Range GetSelectedRange(const views::TextfieldModel& model) { |
| 47 return model.render_text()->selection(); |
| 48 } |
| 49 |
| 46 } // namespace | 50 } // namespace |
| 47 | 51 |
| 48 namespace views { | 52 namespace views { |
| 49 | 53 |
| 50 class TextfieldModelTest : public ViewsTestBase, | 54 class TextfieldModelTest : public ViewsTestBase, |
| 51 public TextfieldModel::Delegate { | 55 public TextfieldModel::Delegate { |
| 52 public: | 56 public: |
| 53 TextfieldModelTest() | 57 TextfieldModelTest() |
| 54 : ViewsTestBase(), | 58 : ViewsTestBase(), |
| 55 composition_text_confirmed_or_cleared_(false) { | 59 composition_text_confirmed_or_cleared_(false) { |
| (...skipping 944 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1000 EXPECT_STR_EQ("", model.text()); | 1004 EXPECT_STR_EQ("", model.text()); |
| 1001 EXPECT_TRUE(model.Redo()); | 1005 EXPECT_TRUE(model.Redo()); |
| 1002 EXPECT_STR_EQ("a", model.text()); | 1006 EXPECT_STR_EQ("a", model.text()); |
| 1003 | 1007 |
| 1004 // Continuous inserts are treated as one edit. | 1008 // Continuous inserts are treated as one edit. |
| 1005 model.InsertChar('b'); | 1009 model.InsertChar('b'); |
| 1006 model.InsertChar('c'); | 1010 model.InsertChar('c'); |
| 1007 EXPECT_STR_EQ("abc", model.text()); | 1011 EXPECT_STR_EQ("abc", model.text()); |
| 1008 EXPECT_TRUE(model.Undo()); | 1012 EXPECT_TRUE(model.Undo()); |
| 1009 EXPECT_STR_EQ("a", model.text()); | 1013 EXPECT_STR_EQ("a", model.text()); |
| 1010 EXPECT_EQ(1U, model.GetCursorPosition()); | 1014 EXPECT_EQ(gfx::Range(1), GetSelectedRange(model)); |
| 1011 EXPECT_TRUE(model.Undo()); | 1015 EXPECT_TRUE(model.Undo()); |
| 1012 EXPECT_STR_EQ("", model.text()); | 1016 EXPECT_STR_EQ("", model.text()); |
| 1013 EXPECT_EQ(0U, model.GetCursorPosition()); | 1017 EXPECT_EQ(gfx::Range(0), GetSelectedRange(model)); |
| 1014 | 1018 |
| 1015 // Undoing further shouldn't change the text. | 1019 // Undoing further shouldn't change the text. |
| 1016 EXPECT_FALSE(model.Undo()); | 1020 EXPECT_FALSE(model.Undo()); |
| 1017 EXPECT_STR_EQ("", model.text()); | 1021 EXPECT_STR_EQ("", model.text()); |
| 1018 EXPECT_FALSE(model.Undo()); | 1022 EXPECT_FALSE(model.Undo()); |
| 1019 EXPECT_STR_EQ("", model.text()); | 1023 EXPECT_STR_EQ("", model.text()); |
| 1020 EXPECT_EQ(0U, model.GetCursorPosition()); | 1024 EXPECT_EQ(gfx::Range(0), GetSelectedRange(model)); |
| 1021 | 1025 |
| 1022 // Redoing to the latest text. | 1026 // Redoing to the latest text. |
| 1023 EXPECT_TRUE(model.Redo()); | 1027 EXPECT_TRUE(model.Redo()); |
| 1024 EXPECT_STR_EQ("a", model.text()); | 1028 EXPECT_STR_EQ("a", model.text()); |
| 1025 EXPECT_EQ(1U, model.GetCursorPosition()); | 1029 EXPECT_EQ(gfx::Range(1), GetSelectedRange(model)); |
| 1026 EXPECT_TRUE(model.Redo()); | 1030 EXPECT_TRUE(model.Redo()); |
| 1027 EXPECT_STR_EQ("abc", model.text()); | 1031 EXPECT_STR_EQ("abc", model.text()); |
| 1028 EXPECT_EQ(3U, model.GetCursorPosition()); | 1032 EXPECT_EQ(gfx::Range(3), GetSelectedRange(model)); |
| 1029 | 1033 |
| 1030 // Backspace =============================== | 1034 // Backspace =============================== |
| 1031 EXPECT_TRUE(model.Backspace()); | 1035 EXPECT_TRUE(model.Backspace()); |
| 1032 EXPECT_STR_EQ("ab", model.text()); | 1036 EXPECT_STR_EQ("ab", model.text()); |
| 1033 EXPECT_TRUE(model.Undo()); | 1037 EXPECT_TRUE(model.Undo()); |
| 1034 EXPECT_STR_EQ("abc", model.text()); | 1038 EXPECT_STR_EQ("abc", model.text()); |
| 1035 EXPECT_EQ(3U, model.GetCursorPosition()); | 1039 EXPECT_EQ(gfx::Range(3,2), GetSelectedRange(model)); |
| 1036 EXPECT_TRUE(model.Redo()); | 1040 EXPECT_TRUE(model.Redo()); |
| 1037 EXPECT_STR_EQ("ab", model.text()); | 1041 EXPECT_STR_EQ("ab", model.text()); |
| 1038 EXPECT_EQ(2U, model.GetCursorPosition()); | 1042 EXPECT_EQ(gfx::Range(2), GetSelectedRange(model)); |
| 1039 // Continous backspaces are treated as one edit. | 1043 // Continous backspaces are treated as one edit. |
| 1040 EXPECT_TRUE(model.Backspace()); | 1044 EXPECT_TRUE(model.Backspace()); |
| 1041 EXPECT_TRUE(model.Backspace()); | 1045 EXPECT_TRUE(model.Backspace()); |
| 1042 EXPECT_STR_EQ("", model.text()); | 1046 EXPECT_STR_EQ("", model.text()); |
| 1043 // Extra backspace shouldn't affect the history. | 1047 // Extra backspace shouldn't affect the history. |
| 1044 EXPECT_FALSE(model.Backspace()); | 1048 EXPECT_FALSE(model.Backspace()); |
| 1045 EXPECT_TRUE(model.Undo()); | 1049 EXPECT_TRUE(model.Undo()); |
| 1046 EXPECT_STR_EQ("ab", model.text()); | 1050 EXPECT_STR_EQ("ab", model.text()); |
| 1047 EXPECT_EQ(2U, model.GetCursorPosition()); | 1051 EXPECT_EQ(gfx::Range(2,0), GetSelectedRange(model)); |
| 1048 EXPECT_TRUE(model.Undo()); | 1052 EXPECT_TRUE(model.Undo()); |
| 1049 EXPECT_STR_EQ("abc", model.text()); | 1053 EXPECT_STR_EQ("abc", model.text()); |
| 1050 EXPECT_EQ(3U, model.GetCursorPosition()); | 1054 EXPECT_EQ(gfx::Range(3,2), GetSelectedRange(model)); |
| 1051 EXPECT_TRUE(model.Undo()); | 1055 EXPECT_TRUE(model.Undo()); |
| 1052 EXPECT_STR_EQ("a", model.text()); | 1056 EXPECT_STR_EQ("a", model.text()); |
| 1053 EXPECT_EQ(1U, model.GetCursorPosition()); | 1057 EXPECT_EQ(gfx::Range(1), GetSelectedRange(model)); |
| 1054 | 1058 |
| 1055 // Clear history | 1059 // Clear history |
| 1056 model.ClearEditHistory(); | 1060 model.ClearEditHistory(); |
| 1057 EXPECT_FALSE(model.Undo()); | 1061 EXPECT_FALSE(model.Undo()); |
| 1058 EXPECT_FALSE(model.Redo()); | 1062 EXPECT_FALSE(model.Redo()); |
| 1059 EXPECT_STR_EQ("a", model.text()); | 1063 EXPECT_STR_EQ("a", model.text()); |
| 1060 EXPECT_EQ(1U, model.GetCursorPosition()); | 1064 EXPECT_EQ(gfx::Range(1), GetSelectedRange(model)); |
| 1061 | 1065 |
| 1062 // Delete =============================== | 1066 // Delete =============================== |
| 1063 model.SetText(base::ASCIIToUTF16("ABCDE")); | 1067 model.SetText(base::ASCIIToUTF16("ABCDE")); |
| 1064 model.ClearEditHistory(); | 1068 model.ClearEditHistory(); |
| 1065 MoveCursorTo(model, 2); | 1069 MoveCursorTo(model, 2); |
| 1066 EXPECT_TRUE(model.Delete()); | 1070 EXPECT_TRUE(model.Delete()); |
| 1067 EXPECT_STR_EQ("ABDE", model.text()); | 1071 EXPECT_STR_EQ("ABDE", model.text()); |
| 1068 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_LEFT, false); | 1072 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_LEFT, false); |
| 1069 EXPECT_TRUE(model.Delete()); | 1073 EXPECT_TRUE(model.Delete()); |
| 1070 EXPECT_STR_EQ("BDE", model.text()); | 1074 EXPECT_STR_EQ("BDE", model.text()); |
| 1071 EXPECT_TRUE(model.Undo()); | 1075 EXPECT_TRUE(model.Undo()); |
| 1072 EXPECT_STR_EQ("ABDE", model.text()); | 1076 EXPECT_STR_EQ("ABDE", model.text()); |
| 1073 EXPECT_EQ(0U, model.GetCursorPosition()); | 1077 EXPECT_EQ(gfx::Range(0, 1), GetSelectedRange(model)); |
| 1074 EXPECT_TRUE(model.Undo()); | 1078 EXPECT_TRUE(model.Undo()); |
| 1075 EXPECT_STR_EQ("ABCDE", model.text()); | 1079 EXPECT_STR_EQ("ABCDE", model.text()); |
| 1076 EXPECT_EQ(2U, model.GetCursorPosition()); | 1080 EXPECT_EQ(gfx::Range(2,3), GetSelectedRange(model)); |
| 1077 EXPECT_TRUE(model.Redo()); | 1081 EXPECT_TRUE(model.Redo()); |
| 1078 EXPECT_STR_EQ("ABDE", model.text()); | 1082 EXPECT_STR_EQ("ABDE", model.text()); |
| 1079 EXPECT_EQ(2U, model.GetCursorPosition()); | 1083 EXPECT_EQ(gfx::Range(2), GetSelectedRange(model)); |
| 1080 // Continous deletes are treated as one edit. | 1084 // Continous deletes are treated as one edit. |
| 1081 EXPECT_TRUE(model.Delete()); | 1085 EXPECT_TRUE(model.Delete()); |
| 1082 EXPECT_TRUE(model.Delete()); | 1086 EXPECT_TRUE(model.Delete()); |
| 1083 EXPECT_STR_EQ("AB", model.text()); | 1087 EXPECT_STR_EQ("AB", model.text()); |
| 1084 EXPECT_TRUE(model.Undo()); | 1088 EXPECT_TRUE(model.Undo()); |
| 1085 EXPECT_STR_EQ("ABDE", model.text()); | 1089 EXPECT_STR_EQ("ABDE", model.text()); |
| 1086 EXPECT_EQ(2U, model.GetCursorPosition()); | 1090 EXPECT_EQ(gfx::Range(2,4), GetSelectedRange(model)); |
| 1087 EXPECT_TRUE(model.Redo()); | 1091 EXPECT_TRUE(model.Redo()); |
| 1088 EXPECT_STR_EQ("AB", model.text()); | 1092 EXPECT_STR_EQ("AB", model.text()); |
| 1089 EXPECT_EQ(2U, model.GetCursorPosition()); | 1093 EXPECT_EQ(gfx::Range(2), GetSelectedRange(model)); |
| 1090 } | 1094 } |
| 1091 | 1095 |
| 1092 TEST_F(TextfieldModelTest, UndoRedo_SetText) { | 1096 TEST_F(TextfieldModelTest, UndoRedo_SetText) { |
| 1093 // This is to test the undo/redo behavior of omnibox. | 1097 // This is to test the undo/redo behavior of omnibox. |
| 1094 TextfieldModel model(NULL); | 1098 TextfieldModel model(NULL); |
| 1095 model.InsertChar('w'); | 1099 model.InsertChar('w'); |
| 1096 EXPECT_STR_EQ("w", model.text()); | 1100 EXPECT_STR_EQ("w", model.text()); |
| 1097 EXPECT_EQ(1U, model.GetCursorPosition()); | 1101 EXPECT_EQ(gfx::Range(1), GetSelectedRange(model)); |
| 1098 model.SetText(base::ASCIIToUTF16("www.google.com")); | 1102 model.SetText(base::ASCIIToUTF16("www.google.com")); |
| 1099 EXPECT_EQ(14U, model.GetCursorPosition()); | 1103 EXPECT_EQ(gfx::Range(14U), GetSelectedRange(model)); |
| 1100 EXPECT_STR_EQ("www.google.com", model.text()); | 1104 EXPECT_STR_EQ("www.google.com", model.text()); |
| 1101 model.SelectRange(gfx::Range(14, 1)); | 1105 model.SelectRange(gfx::Range(14, 1)); |
| 1102 model.InsertChar('w'); | 1106 model.InsertChar('w'); |
| 1103 EXPECT_STR_EQ("ww", model.text()); | 1107 EXPECT_STR_EQ("ww", model.text()); |
| 1104 model.SetText(base::ASCIIToUTF16("www.google.com")); | 1108 model.SetText(base::ASCIIToUTF16("www.google.com")); |
| 1105 model.SelectRange(gfx::Range(14, 2)); | 1109 model.SelectRange(gfx::Range(14, 2)); |
| 1106 model.InsertChar('w'); | 1110 model.InsertChar('w'); |
| 1107 EXPECT_STR_EQ("www", model.text()); | 1111 EXPECT_STR_EQ("www", model.text()); |
| 1108 model.SetText(base::ASCIIToUTF16("www.google.com")); | 1112 model.SetText(base::ASCIIToUTF16("www.google.com")); |
| 1109 model.SelectRange(gfx::Range(14, 3)); | 1113 model.SelectRange(gfx::Range(14, 3)); |
| 1110 model.InsertChar('.'); | 1114 model.InsertChar('.'); |
| 1111 EXPECT_STR_EQ("www.", model.text()); | 1115 EXPECT_STR_EQ("www.", model.text()); |
| 1112 model.SetText(base::ASCIIToUTF16("www.google.com")); | 1116 model.SetText(base::ASCIIToUTF16("www.google.com")); |
| 1113 model.SelectRange(gfx::Range(14, 4)); | 1117 model.SelectRange(gfx::Range(14, 4)); |
| 1114 model.InsertChar('y'); | 1118 model.InsertChar('y'); |
| 1115 EXPECT_STR_EQ("www.y", model.text()); | 1119 EXPECT_STR_EQ("www.y", model.text()); |
| 1116 model.SetText(base::ASCIIToUTF16("www.youtube.com")); | 1120 model.SetText(base::ASCIIToUTF16("www.youtube.com")); |
| 1117 EXPECT_STR_EQ("www.youtube.com", model.text()); | 1121 EXPECT_STR_EQ("www.youtube.com", model.text()); |
| 1118 EXPECT_EQ(15U, model.GetCursorPosition()); | 1122 EXPECT_EQ(gfx::Range(15U), GetSelectedRange(model)); |
| 1119 | 1123 |
| 1120 EXPECT_TRUE(model.Undo()); | 1124 EXPECT_TRUE(model.Undo()); |
| 1121 EXPECT_STR_EQ("www.google.com", model.text()); | 1125 EXPECT_STR_EQ("www.google.com", model.text()); |
| 1122 EXPECT_EQ(4U, model.GetCursorPosition()); | 1126 EXPECT_EQ(gfx::Range(4), GetSelectedRange(model)); |
| 1123 EXPECT_TRUE(model.Undo()); | 1127 EXPECT_TRUE(model.Undo()); |
| 1124 EXPECT_STR_EQ("www.google.com", model.text()); | 1128 EXPECT_STR_EQ("www.google.com", model.text()); |
| 1125 EXPECT_EQ(3U, model.GetCursorPosition()); | 1129 EXPECT_EQ(gfx::Range(3), GetSelectedRange(model)); |
| 1126 EXPECT_TRUE(model.Undo()); | 1130 EXPECT_TRUE(model.Undo()); |
| 1127 EXPECT_STR_EQ("www.google.com", model.text()); | 1131 EXPECT_STR_EQ("www.google.com", model.text()); |
| 1128 EXPECT_EQ(2U, model.GetCursorPosition()); | 1132 EXPECT_EQ(gfx::Range(2), GetSelectedRange(model)); |
| 1129 EXPECT_TRUE(model.Undo()); | 1133 EXPECT_TRUE(model.Undo()); |
| 1130 EXPECT_STR_EQ("www.google.com", model.text()); | 1134 EXPECT_STR_EQ("www.google.com", model.text()); |
| 1131 EXPECT_EQ(1U, model.GetCursorPosition()); | 1135 EXPECT_EQ(gfx::Range(1), GetSelectedRange(model)); |
| 1132 EXPECT_TRUE(model.Undo()); | 1136 EXPECT_TRUE(model.Undo()); |
| 1133 EXPECT_STR_EQ("", model.text()); | 1137 EXPECT_STR_EQ("", model.text()); |
| 1134 EXPECT_EQ(0U, model.GetCursorPosition()); | 1138 EXPECT_EQ(gfx::Range(0), GetSelectedRange(model)); |
| 1135 EXPECT_FALSE(model.Undo()); | 1139 EXPECT_FALSE(model.Undo()); |
| 1136 EXPECT_TRUE(model.Redo()); | 1140 EXPECT_TRUE(model.Redo()); |
| 1137 EXPECT_STR_EQ("www.google.com", model.text()); | 1141 EXPECT_STR_EQ("www.google.com", model.text()); |
| 1138 EXPECT_EQ(1U, model.GetCursorPosition()); | 1142 EXPECT_EQ(gfx::Range(1), GetSelectedRange(model)); |
| 1139 EXPECT_TRUE(model.Redo()); | 1143 EXPECT_TRUE(model.Redo()); |
| 1140 EXPECT_STR_EQ("www.google.com", model.text()); | 1144 EXPECT_STR_EQ("www.google.com", model.text()); |
| 1141 EXPECT_EQ(2U, model.GetCursorPosition()); | 1145 EXPECT_EQ(gfx::Range(2), GetSelectedRange(model)); |
| 1142 EXPECT_TRUE(model.Redo()); | 1146 EXPECT_TRUE(model.Redo()); |
| 1143 EXPECT_STR_EQ("www.google.com", model.text()); | 1147 EXPECT_STR_EQ("www.google.com", model.text()); |
| 1144 EXPECT_EQ(3U, model.GetCursorPosition()); | 1148 EXPECT_EQ(gfx::Range(3), GetSelectedRange(model)); |
| 1145 EXPECT_TRUE(model.Redo()); | 1149 EXPECT_TRUE(model.Redo()); |
| 1146 EXPECT_STR_EQ("www.google.com", model.text()); | 1150 EXPECT_STR_EQ("www.google.com", model.text()); |
| 1147 EXPECT_EQ(4U, model.GetCursorPosition()); | 1151 EXPECT_EQ(gfx::Range(4), GetSelectedRange(model)); |
| 1148 EXPECT_TRUE(model.Redo()); | 1152 EXPECT_TRUE(model.Redo()); |
| 1149 EXPECT_STR_EQ("www.youtube.com", model.text()); | 1153 EXPECT_STR_EQ("www.youtube.com", model.text()); |
| 1150 EXPECT_EQ(5U, model.GetCursorPosition()); | 1154 EXPECT_EQ(gfx::Range(5), GetSelectedRange(model)); |
| 1151 EXPECT_FALSE(model.Redo()); | 1155 EXPECT_FALSE(model.Redo()); |
| 1152 } | 1156 } |
| 1153 | 1157 |
| 1154 TEST_F(TextfieldModelTest, UndoRedo_BackspaceThenSetText) { | 1158 TEST_F(TextfieldModelTest, UndoRedo_BackspaceThenSetText) { |
| 1155 // This is to test the undo/redo behavior of omnibox. | 1159 // This is to test the undo/redo behavior of omnibox. |
| 1156 TextfieldModel model(NULL); | 1160 TextfieldModel model(NULL); |
| 1157 model.InsertChar('w'); | 1161 model.InsertChar('w'); |
| 1158 EXPECT_STR_EQ("w", model.text()); | 1162 EXPECT_STR_EQ("w", model.text()); |
| 1159 EXPECT_EQ(1U, model.GetCursorPosition()); | 1163 EXPECT_EQ(1U, model.GetCursorPosition()); |
| 1160 model.SetText(base::ASCIIToUTF16("www.google.com")); | 1164 model.SetText(base::ASCIIToUTF16("www.google.com")); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1176 } | 1180 } |
| 1177 | 1181 |
| 1178 TEST_F(TextfieldModelTest, UndoRedo_CutCopyPasteTest) { | 1182 TEST_F(TextfieldModelTest, UndoRedo_CutCopyPasteTest) { |
| 1179 TextfieldModel model(NULL); | 1183 TextfieldModel model(NULL); |
| 1180 model.SetText(base::ASCIIToUTF16("ABCDE")); | 1184 model.SetText(base::ASCIIToUTF16("ABCDE")); |
| 1181 EXPECT_FALSE(model.Redo()); // There is nothing to redo. | 1185 EXPECT_FALSE(model.Redo()); // There is nothing to redo. |
| 1182 // Test Cut. | 1186 // Test Cut. |
| 1183 model.SelectRange(gfx::Range(1, 3)); | 1187 model.SelectRange(gfx::Range(1, 3)); |
| 1184 model.Cut(); | 1188 model.Cut(); |
| 1185 EXPECT_STR_EQ("ADE", model.text()); | 1189 EXPECT_STR_EQ("ADE", model.text()); |
| 1186 EXPECT_EQ(1U, model.GetCursorPosition()); | 1190 EXPECT_EQ(gfx::Range(1), GetSelectedRange(model)); |
| 1187 EXPECT_TRUE(model.Undo()); | 1191 EXPECT_TRUE(model.Undo()); |
| 1188 EXPECT_STR_EQ("ABCDE", model.text()); | 1192 EXPECT_STR_EQ("ABCDE", model.text()); |
| 1189 EXPECT_EQ(3U, model.GetCursorPosition()); | 1193 EXPECT_EQ(gfx::Range(1,3), GetSelectedRange(model)); |
| 1190 EXPECT_TRUE(model.Undo()); | 1194 EXPECT_TRUE(model.Undo()); |
| 1191 EXPECT_STR_EQ("", model.text()); | 1195 EXPECT_STR_EQ("", model.text()); |
| 1192 EXPECT_EQ(0U, model.GetCursorPosition()); | 1196 EXPECT_EQ(gfx::Range(0), GetSelectedRange(model)); |
| 1193 EXPECT_FALSE(model.Undo()); // There is no more to undo. | 1197 EXPECT_FALSE(model.Undo()); // There is no more to undo. |
| 1194 EXPECT_STR_EQ("", model.text()); | 1198 EXPECT_STR_EQ("", model.text()); |
| 1195 EXPECT_TRUE(model.Redo()); | 1199 EXPECT_TRUE(model.Redo()); |
| 1196 EXPECT_STR_EQ("ABCDE", model.text()); | 1200 EXPECT_STR_EQ("ABCDE", model.text()); |
| 1197 EXPECT_EQ(5U, model.GetCursorPosition()); | 1201 EXPECT_EQ(gfx::Range(5), GetSelectedRange(model)); |
| 1198 EXPECT_TRUE(model.Redo()); | 1202 EXPECT_TRUE(model.Redo()); |
| 1199 EXPECT_STR_EQ("ADE", model.text()); | 1203 EXPECT_STR_EQ("ADE", model.text()); |
| 1200 EXPECT_EQ(1U, model.GetCursorPosition()); | 1204 EXPECT_EQ(gfx::Range(1), GetSelectedRange(model)); |
| 1201 EXPECT_FALSE(model.Redo()); // There is no more to redo. | 1205 EXPECT_FALSE(model.Redo()); // There is no more to redo. |
| 1202 EXPECT_STR_EQ("ADE", model.text()); | 1206 EXPECT_STR_EQ("ADE", model.text()); |
| 1203 | 1207 |
| 1204 model.Paste(); | 1208 model.Paste(); |
| 1205 model.Paste(); | 1209 model.Paste(); |
| 1206 model.Paste(); | 1210 model.Paste(); |
| 1207 EXPECT_STR_EQ("ABCBCBCDE", model.text()); | 1211 EXPECT_STR_EQ("ABCBCBCDE", model.text()); |
| 1208 EXPECT_EQ(7U, model.GetCursorPosition()); | 1212 EXPECT_EQ(gfx::Range(7), GetSelectedRange(model)); |
| 1209 EXPECT_TRUE(model.Undo()); | 1213 EXPECT_TRUE(model.Undo()); |
| 1210 EXPECT_STR_EQ("ABCBCDE", model.text()); | 1214 EXPECT_STR_EQ("ABCBCDE", model.text()); |
| 1211 EXPECT_EQ(5U, model.GetCursorPosition()); | 1215 EXPECT_EQ(gfx::Range(5), GetSelectedRange(model)); |
| 1212 EXPECT_TRUE(model.Undo()); | 1216 EXPECT_TRUE(model.Undo()); |
| 1213 EXPECT_STR_EQ("ABCDE", model.text()); | 1217 EXPECT_STR_EQ("ABCDE", model.text()); |
| 1214 EXPECT_EQ(3U, model.GetCursorPosition()); | 1218 EXPECT_EQ(gfx::Range(3), GetSelectedRange(model)); |
| 1215 EXPECT_TRUE(model.Undo()); | 1219 EXPECT_TRUE(model.Undo()); |
| 1216 EXPECT_STR_EQ("ADE", model.text()); | 1220 EXPECT_STR_EQ("ADE", model.text()); |
| 1217 EXPECT_EQ(1U, model.GetCursorPosition()); | 1221 EXPECT_EQ(gfx::Range(1), GetSelectedRange(model)); |
| 1218 EXPECT_TRUE(model.Undo()); | 1222 EXPECT_TRUE(model.Undo()); |
| 1219 EXPECT_STR_EQ("ABCDE", model.text()); | 1223 EXPECT_STR_EQ("ABCDE", model.text()); |
| 1220 EXPECT_EQ(3U, model.GetCursorPosition()); | 1224 EXPECT_EQ(gfx::Range(1,3), GetSelectedRange(model)); |
| 1221 EXPECT_TRUE(model.Undo()); | 1225 EXPECT_TRUE(model.Undo()); |
| 1222 EXPECT_STR_EQ("", model.text()); | 1226 EXPECT_STR_EQ("", model.text()); |
| 1223 EXPECT_EQ(0U, model.GetCursorPosition()); | 1227 EXPECT_EQ(gfx::Range(0), GetSelectedRange(model)); |
| 1224 EXPECT_FALSE(model.Undo()); | 1228 EXPECT_FALSE(model.Undo()); |
| 1225 EXPECT_STR_EQ("", model.text()); | 1229 EXPECT_STR_EQ("", model.text()); |
| 1226 EXPECT_TRUE(model.Redo()); | 1230 EXPECT_TRUE(model.Redo()); |
| 1227 EXPECT_STR_EQ("ABCDE", model.text()); | 1231 EXPECT_STR_EQ("ABCDE", model.text()); |
| 1228 EXPECT_EQ(5U, model.GetCursorPosition()); | 1232 EXPECT_EQ(gfx::Range(5), GetSelectedRange(model)); |
| 1229 | 1233 |
| 1230 // Test Redo. | 1234 // Test Redo. |
| 1231 EXPECT_TRUE(model.Redo()); | 1235 EXPECT_TRUE(model.Redo()); |
| 1232 EXPECT_STR_EQ("ADE", model.text()); | 1236 EXPECT_STR_EQ("ADE", model.text()); |
| 1233 EXPECT_EQ(1U, model.GetCursorPosition()); | 1237 EXPECT_EQ(gfx::Range(1), GetSelectedRange(model)); |
| 1234 EXPECT_TRUE(model.Redo()); | 1238 EXPECT_TRUE(model.Redo()); |
| 1235 EXPECT_STR_EQ("ABCDE", model.text()); | 1239 EXPECT_STR_EQ("ABCDE", model.text()); |
| 1236 EXPECT_EQ(3U, model.GetCursorPosition()); | 1240 EXPECT_EQ(gfx::Range(3), GetSelectedRange(model)); |
| 1237 EXPECT_TRUE(model.Redo()); | 1241 EXPECT_TRUE(model.Redo()); |
| 1238 EXPECT_STR_EQ("ABCBCDE", model.text()); | 1242 EXPECT_STR_EQ("ABCBCDE", model.text()); |
| 1239 EXPECT_EQ(5U, model.GetCursorPosition()); | 1243 EXPECT_EQ(gfx::Range(5), GetSelectedRange(model)); |
| 1240 EXPECT_TRUE(model.Redo()); | 1244 EXPECT_TRUE(model.Redo()); |
| 1241 EXPECT_STR_EQ("ABCBCBCDE", model.text()); | 1245 EXPECT_STR_EQ("ABCBCBCDE", model.text()); |
| 1242 EXPECT_EQ(7U, model.GetCursorPosition()); | 1246 EXPECT_EQ(gfx::Range(7), GetSelectedRange(model)); |
| 1243 EXPECT_FALSE(model.Redo()); | 1247 EXPECT_FALSE(model.Redo()); |
| 1244 | 1248 |
| 1245 // Test using SelectRange. | 1249 // Test using SelectRange. |
| 1246 model.SelectRange(gfx::Range(1, 3)); | 1250 model.SelectRange(gfx::Range(1, 3)); |
| 1247 EXPECT_TRUE(model.Cut()); | 1251 EXPECT_TRUE(model.Cut()); |
| 1248 EXPECT_STR_EQ("ABCBCDE", model.text()); | 1252 EXPECT_STR_EQ("ABCBCDE", model.text()); |
| 1249 EXPECT_EQ(1U, model.GetCursorPosition()); | 1253 EXPECT_EQ(gfx::Range(1), GetSelectedRange(model)); |
| 1250 model.SelectRange(gfx::Range(1, 1)); | 1254 model.SelectRange(gfx::Range(1, 1)); |
| 1251 EXPECT_FALSE(model.Cut()); | 1255 EXPECT_FALSE(model.Cut()); |
| 1252 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); | 1256 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); |
| 1253 EXPECT_TRUE(model.Paste()); | 1257 EXPECT_TRUE(model.Paste()); |
| 1254 EXPECT_STR_EQ("ABCBCDEBC", model.text()); | 1258 EXPECT_STR_EQ("ABCBCDEBC", model.text()); |
| 1255 EXPECT_EQ(9U, model.GetCursorPosition()); | 1259 EXPECT_EQ(gfx::Range(9), GetSelectedRange(model)); |
| 1256 EXPECT_TRUE(model.Undo()); | 1260 EXPECT_TRUE(model.Undo()); |
| 1257 EXPECT_STR_EQ("ABCBCDE", model.text()); | 1261 EXPECT_STR_EQ("ABCBCDE", model.text()); |
| 1258 EXPECT_EQ(7U, model.GetCursorPosition()); | 1262 EXPECT_EQ(gfx::Range(7), GetSelectedRange(model)); |
| 1259 // An empty cut shouldn't create an edit. | 1263 // An empty cut shouldn't create an edit. |
| 1260 EXPECT_TRUE(model.Undo()); | 1264 EXPECT_TRUE(model.Undo()); |
| 1261 EXPECT_STR_EQ("ABCBCBCDE", model.text()); | 1265 EXPECT_STR_EQ("ABCBCBCDE", model.text()); |
| 1262 EXPECT_EQ(3U, model.GetCursorPosition()); | 1266 EXPECT_EQ(gfx::Range(1,3), GetSelectedRange(model)); |
| 1263 | 1267 |
| 1264 // Test Copy. | 1268 // Test Copy. |
| 1265 ResetModel(&model); | 1269 ResetModel(&model); |
| 1266 model.SetText(base::ASCIIToUTF16("12345")); | 1270 model.SetText(base::ASCIIToUTF16("12345")); |
| 1267 EXPECT_STR_EQ("12345", model.text()); | 1271 EXPECT_STR_EQ("12345", model.text()); |
| 1268 EXPECT_EQ(5U, model.GetCursorPosition()); | 1272 EXPECT_EQ(gfx::Range(5), GetSelectedRange(model)); |
| 1269 model.SelectRange(gfx::Range(1, 3)); | 1273 model.SelectRange(gfx::Range(1, 3)); |
| 1270 model.Copy(); // Copy "23". | 1274 model.Copy(); // Copy "23". |
| 1271 EXPECT_STR_EQ("12345", model.text()); | 1275 EXPECT_STR_EQ("12345", model.text()); |
| 1272 EXPECT_EQ(3U, model.GetCursorPosition()); | 1276 EXPECT_EQ(gfx::Range(1, 3), GetSelectedRange(model)); |
| 1273 model.Paste(); // Paste "23" into "23". | 1277 model.Paste(); // Paste "23" into "23". |
| 1274 EXPECT_STR_EQ("12345", model.text()); | 1278 EXPECT_STR_EQ("12345", model.text()); |
| 1275 EXPECT_EQ(3U, model.GetCursorPosition()); | 1279 EXPECT_EQ(gfx::Range(3), GetSelectedRange(model)); |
| 1276 model.Paste(); | 1280 model.Paste(); |
| 1277 EXPECT_STR_EQ("1232345", model.text()); | 1281 EXPECT_STR_EQ("1232345", model.text()); |
| 1278 EXPECT_EQ(5U, model.GetCursorPosition()); | 1282 EXPECT_EQ(gfx::Range(5), GetSelectedRange(model)); |
| 1279 EXPECT_TRUE(model.Undo()); | 1283 EXPECT_TRUE(model.Undo()); |
| 1280 EXPECT_STR_EQ("12345", model.text()); | 1284 EXPECT_STR_EQ("12345", model.text()); |
| 1281 EXPECT_EQ(3U, model.GetCursorPosition()); | 1285 EXPECT_EQ(gfx::Range(3), GetSelectedRange(model)); |
| 1282 // TODO(oshima): Change the return type from bool to enum. | 1286 // TODO(oshima): Change the return type from bool to enum. |
| 1283 EXPECT_FALSE(model.Undo()); // No text change. | 1287 EXPECT_FALSE(model.Undo()); // No text change. |
| 1284 EXPECT_STR_EQ("12345", model.text()); | 1288 EXPECT_STR_EQ("12345", model.text()); |
| 1285 EXPECT_EQ(3U, model.GetCursorPosition()); | 1289 EXPECT_EQ(gfx::Range(1,3), GetSelectedRange(model)); |
| 1286 EXPECT_TRUE(model.Undo()); | 1290 EXPECT_TRUE(model.Undo()); |
| 1287 EXPECT_STR_EQ("", model.text()); | 1291 EXPECT_STR_EQ("", model.text()); |
| 1288 EXPECT_FALSE(model.Undo()); | 1292 EXPECT_FALSE(model.Undo()); |
| 1289 // Test Redo. | 1293 // Test Redo. |
| 1290 EXPECT_TRUE(model.Redo()); | 1294 EXPECT_TRUE(model.Redo()); |
| 1291 EXPECT_STR_EQ("12345", model.text()); | 1295 EXPECT_STR_EQ("12345", model.text()); |
| 1292 EXPECT_EQ(5U, model.GetCursorPosition()); | 1296 EXPECT_EQ(gfx::Range(5), GetSelectedRange(model)); |
| 1293 EXPECT_TRUE(model.Redo()); | 1297 EXPECT_TRUE(model.Redo()); |
| 1294 EXPECT_STR_EQ("12345", model.text()); // For 1st paste | 1298 EXPECT_STR_EQ("12345", model.text()); // For 1st paste |
| 1295 EXPECT_EQ(3U, model.GetCursorPosition()); | 1299 EXPECT_EQ(gfx::Range(3), GetSelectedRange(model)); |
| 1296 EXPECT_TRUE(model.Redo()); | 1300 EXPECT_TRUE(model.Redo()); |
| 1297 EXPECT_STR_EQ("1232345", model.text()); | 1301 EXPECT_STR_EQ("1232345", model.text()); |
| 1298 EXPECT_EQ(5U, model.GetCursorPosition()); | 1302 EXPECT_EQ(gfx::Range(5), GetSelectedRange(model)); |
| 1299 EXPECT_FALSE(model.Redo()); | 1303 EXPECT_FALSE(model.Redo()); |
| 1300 EXPECT_STR_EQ("1232345", model.text()); | 1304 EXPECT_STR_EQ("1232345", model.text()); |
| 1301 | 1305 |
| 1302 // Test using SelectRange. | 1306 // Test using SelectRange. |
| 1303 model.SelectRange(gfx::Range(1, 3)); | 1307 model.SelectRange(gfx::Range(1, 3)); |
| 1304 model.Copy(); | 1308 model.Copy(); |
| 1305 EXPECT_STR_EQ("1232345", model.text()); | 1309 EXPECT_STR_EQ("1232345", model.text()); |
| 1306 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); | 1310 model.MoveCursor(gfx::LINE_BREAK, gfx::CURSOR_RIGHT, false); |
| 1307 EXPECT_TRUE(model.Paste()); | 1311 EXPECT_TRUE(model.Paste()); |
| 1308 EXPECT_STR_EQ("123234523", model.text()); | 1312 EXPECT_STR_EQ("123234523", model.text()); |
| 1309 EXPECT_EQ(9U, model.GetCursorPosition()); | 1313 EXPECT_EQ(gfx::Range(9), GetSelectedRange(model)); |
| 1310 EXPECT_TRUE(model.Undo()); | 1314 EXPECT_TRUE(model.Undo()); |
| 1311 EXPECT_STR_EQ("1232345", model.text()); | 1315 EXPECT_STR_EQ("1232345", model.text()); |
| 1312 EXPECT_EQ(7U, model.GetCursorPosition()); | 1316 EXPECT_EQ(gfx::Range(7), GetSelectedRange(model)); |
| 1313 } | 1317 } |
| 1314 | 1318 |
| 1315 TEST_F(TextfieldModelTest, UndoRedo_CursorTest) { | 1319 TEST_F(TextfieldModelTest, UndoRedo_CursorTest) { |
| 1316 TextfieldModel model(NULL); | 1320 TextfieldModel model(NULL); |
| 1317 model.InsertChar('a'); | 1321 model.InsertChar('a'); |
| 1318 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, false); | 1322 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_LEFT, false); |
| 1319 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); | 1323 model.MoveCursor(gfx::CHARACTER_BREAK, gfx::CURSOR_RIGHT, false); |
| 1320 model.InsertChar('b'); | 1324 model.InsertChar('b'); |
| 1321 // Moving the cursor shouldn't create a new edit. | 1325 // Moving the cursor shouldn't create a new edit. |
| 1322 EXPECT_STR_EQ("ab", model.text()); | 1326 EXPECT_STR_EQ("ab", model.text()); |
| 1323 EXPECT_FALSE(model.Redo()); | 1327 EXPECT_FALSE(model.Redo()); |
| 1324 EXPECT_TRUE(model.Undo()); | 1328 EXPECT_TRUE(model.Undo()); |
| 1325 EXPECT_STR_EQ("", model.text()); | 1329 EXPECT_STR_EQ("", model.text()); |
| 1326 EXPECT_FALSE(model.Undo()); | 1330 EXPECT_FALSE(model.Undo()); |
| 1327 EXPECT_STR_EQ("", model.text()); | 1331 EXPECT_STR_EQ("", model.text()); |
| 1328 EXPECT_TRUE(model.Redo()); | 1332 EXPECT_TRUE(model.Redo()); |
| 1329 EXPECT_STR_EQ("ab", model.text()); | 1333 EXPECT_STR_EQ("ab", model.text()); |
| 1330 EXPECT_EQ(2U, model.GetCursorPosition()); | 1334 EXPECT_EQ(2U, model.GetCursorPosition()); |
| 1331 EXPECT_FALSE(model.Redo()); | 1335 EXPECT_FALSE(model.Redo()); |
| 1332 } | 1336 } |
| 1333 | 1337 |
| 1334 void RunInsertReplaceTest(TextfieldModel& model) { | 1338 void RunInsertReplaceTest(TextfieldModel& model) { |
| 1335 const bool reverse = model.render_text()->selection().is_reversed(); | 1339 const bool reverse = model.render_text()->selection().is_reversed(); |
| 1336 model.InsertChar('1'); | 1340 model.InsertChar('1'); |
| 1337 model.InsertChar('2'); | 1341 model.InsertChar('2'); |
| 1338 model.InsertChar('3'); | 1342 model.InsertChar('3'); |
| 1339 EXPECT_STR_EQ("a123d", model.text()); | 1343 EXPECT_STR_EQ("a123d", model.text()); |
| 1340 EXPECT_EQ(4U, model.GetCursorPosition()); | 1344 EXPECT_EQ(gfx::Range(4), GetSelectedRange(model)); |
| 1341 EXPECT_TRUE(model.Undo()); | 1345 EXPECT_TRUE(model.Undo()); |
| 1342 EXPECT_STR_EQ("abcd", model.text()); | 1346 EXPECT_STR_EQ("abcd", model.text()); |
| 1343 EXPECT_EQ(reverse ? 1U : 3U, model.GetCursorPosition()); | 1347 EXPECT_EQ(reverse ? gfx::Range(3,1) : gfx::Range(1,3), GetSelectedRange(model)
); |
| 1344 EXPECT_TRUE(model.Undo()); | 1348 EXPECT_TRUE(model.Undo()); |
| 1345 EXPECT_STR_EQ("", model.text()); | 1349 EXPECT_STR_EQ("", model.text()); |
| 1346 EXPECT_EQ(0U, model.GetCursorPosition()); | 1350 EXPECT_EQ(gfx::Range(0), GetSelectedRange(model)); |
| 1347 EXPECT_FALSE(model.Undo()); | 1351 EXPECT_FALSE(model.Undo()); |
| 1348 EXPECT_TRUE(model.Redo()); | 1352 EXPECT_TRUE(model.Redo()); |
| 1349 EXPECT_STR_EQ("abcd", model.text()); | 1353 EXPECT_STR_EQ("abcd", model.text()); |
| 1350 EXPECT_EQ(4U, model.GetCursorPosition()); | 1354 EXPECT_EQ(gfx::Range(4), GetSelectedRange(model)); |
| 1351 EXPECT_TRUE(model.Redo()); | 1355 EXPECT_TRUE(model.Redo()); |
| 1352 EXPECT_STR_EQ("a123d", model.text()); | 1356 EXPECT_STR_EQ("a123d", model.text()); |
| 1353 EXPECT_EQ(4U, model.GetCursorPosition()); | 1357 EXPECT_EQ(gfx::Range(4), GetSelectedRange(model)); |
| 1354 EXPECT_FALSE(model.Redo()); | 1358 EXPECT_FALSE(model.Redo()); |
| 1355 } | 1359 } |
| 1356 | 1360 |
| 1357 void RunOverwriteReplaceTest(TextfieldModel& model) { | 1361 void RunOverwriteReplaceTest(TextfieldModel& model) { |
| 1358 const bool reverse = model.render_text()->selection().is_reversed(); | 1362 const bool reverse = model.render_text()->selection().is_reversed(); |
| 1359 model.ReplaceChar('1'); | 1363 model.ReplaceChar('1'); |
| 1360 model.ReplaceChar('2'); | 1364 model.ReplaceChar('2'); |
| 1361 model.ReplaceChar('3'); | 1365 model.ReplaceChar('3'); |
| 1362 model.ReplaceChar('4'); | 1366 model.ReplaceChar('4'); |
| 1363 EXPECT_STR_EQ("a1234", model.text()); | 1367 EXPECT_STR_EQ("a1234", model.text()); |
| 1364 EXPECT_EQ(5U, model.GetCursorPosition()); | 1368 EXPECT_EQ(gfx::Range(5), GetSelectedRange(model)); |
| 1365 EXPECT_TRUE(model.Undo()); | 1369 EXPECT_TRUE(model.Undo()); |
| 1366 EXPECT_STR_EQ("abcd", model.text()); | 1370 EXPECT_STR_EQ("abcd", model.text()); |
| 1367 EXPECT_EQ(reverse ? 1U : 3U, model.GetCursorPosition()); | 1371 EXPECT_EQ(reverse ? gfx::Range(4,1) : gfx::Range(1,4), GetSelectedRange(model
)); |
| 1368 EXPECT_TRUE(model.Undo()); | 1372 EXPECT_TRUE(model.Undo()); |
| 1369 EXPECT_STR_EQ("", model.text()); | 1373 EXPECT_STR_EQ("", model.text()); |
| 1370 EXPECT_EQ(0U, model.GetCursorPosition()); | 1374 EXPECT_EQ(gfx::Range(0), GetSelectedRange(model)); |
| 1371 EXPECT_FALSE(model.Undo()); | 1375 EXPECT_FALSE(model.Undo()); |
| 1372 EXPECT_TRUE(model.Redo()); | 1376 EXPECT_TRUE(model.Redo()); |
| 1373 EXPECT_STR_EQ("abcd", model.text()); | 1377 EXPECT_STR_EQ("abcd", model.text()); |
| 1374 EXPECT_EQ(4U, model.GetCursorPosition()); | 1378 EXPECT_EQ(gfx::Range(4), GetSelectedRange(model)); |
| 1375 EXPECT_TRUE(model.Redo()); | 1379 EXPECT_TRUE(model.Redo()); |
| 1376 EXPECT_STR_EQ("a1234", model.text()); | 1380 EXPECT_STR_EQ("a1234", model.text()); |
| 1377 EXPECT_EQ(5U, model.GetCursorPosition()); | 1381 EXPECT_EQ(gfx::Range(5), GetSelectedRange(model)); |
| 1378 EXPECT_FALSE(model.Redo()); | 1382 EXPECT_FALSE(model.Redo()); |
| 1379 } | 1383 } |
| 1380 | 1384 |
| 1381 TEST_F(TextfieldModelTest, UndoRedo_ReplaceTest) { | 1385 TEST_F(TextfieldModelTest, UndoRedo_ReplaceTest) { |
| 1382 { | 1386 { |
| 1383 SCOPED_TRACE("Select forwards and insert."); | 1387 SCOPED_TRACE("Select forwards and insert."); |
| 1384 TextfieldModel model(NULL); | 1388 TextfieldModel model(NULL); |
| 1385 model.SetText(base::ASCIIToUTF16("abcd")); | 1389 model.SetText(base::ASCIIToUTF16("abcd")); |
| 1386 model.SelectRange(gfx::Range(1, 3)); | 1390 model.SelectRange(gfx::Range(1, 3)); |
| 1387 RunInsertReplaceTest(model); | 1391 RunInsertReplaceTest(model); |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1583 // Test 7 | 1587 // Test 7 |
| 1584 // Clipboard text with lots of spaces between words should have all spaces | 1588 // Clipboard text with lots of spaces between words should have all spaces |
| 1585 // replaced with a single space. | 1589 // replaced with a single space. |
| 1586 ui::ScopedClipboardWriter(ui::CLIPBOARD_TYPE_COPY_PASTE) | 1590 ui::ScopedClipboardWriter(ui::CLIPBOARD_TYPE_COPY_PASTE) |
| 1587 .WriteText(base::ASCIIToUTF16("FOO BAR")); | 1591 .WriteText(base::ASCIIToUTF16("FOO BAR")); |
| 1588 EXPECT_TRUE(model.Paste()); | 1592 EXPECT_TRUE(model.Paste()); |
| 1589 EXPECT_STR_EQ("FOO BAR", model.text()); | 1593 EXPECT_STR_EQ("FOO BAR", model.text()); |
| 1590 } | 1594 } |
| 1591 | 1595 |
| 1592 } // namespace views | 1596 } // namespace views |
| OLD | NEW |