OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "base/utf_string_conversions.h" |
| 6 #include "testing/gtest/include/gtest/gtest.h" |
| 7 #include "views/controls/textfield/textfield_views_model.h" |
| 8 |
| 9 namespace views { |
| 10 |
| 11 #define EXPECT_STR_EQ(ascii, utf16) \ |
| 12 EXPECT_EQ(ASCIIToWide(ascii), UTF16ToWide(utf16)) |
| 13 |
| 14 TEST(TextfieldViewsModelTest, EditString) { |
| 15 TextfieldViewsModel model; |
| 16 // append two strings |
| 17 model.Append(ASCIIToUTF16("HILL")); |
| 18 EXPECT_STR_EQ("HILL", model.text()); |
| 19 model.Append(ASCIIToUTF16("WORLD")); |
| 20 EXPECT_STR_EQ("HILLWORLD", model.text()); |
| 21 |
| 22 // Insert "E" to make hello |
| 23 model.MoveCursorRight(false); |
| 24 model.Insert('E'); |
| 25 EXPECT_STR_EQ("HEILLWORLD", model.text()); |
| 26 // Replace "I" with "L" |
| 27 model.Replace('L'); |
| 28 EXPECT_STR_EQ("HELLLWORLD", model.text()); |
| 29 model.Replace('L'); |
| 30 model.Replace('O'); |
| 31 EXPECT_STR_EQ("HELLOWORLD", model.text()); |
| 32 |
| 33 // Delete 6th char "W", then delete 5th char O" |
| 34 EXPECT_EQ(5U, model.cursor_pos()); |
| 35 EXPECT_TRUE(model.Delete()); |
| 36 EXPECT_STR_EQ("HELLOORLD", model.text()); |
| 37 EXPECT_TRUE(model.Backspace()); |
| 38 EXPECT_EQ(4U, model.cursor_pos()); |
| 39 EXPECT_STR_EQ("HELLORLD", model.text()); |
| 40 |
| 41 // Move the cursor to start. backspace should fail. |
| 42 model.MoveCursorToStart(false); |
| 43 EXPECT_FALSE(model.Backspace()); |
| 44 EXPECT_STR_EQ("HELLORLD", model.text()); |
| 45 // Move the cursor to the end. delete should fail. |
| 46 model.MoveCursorToEnd(false); |
| 47 EXPECT_FALSE(model.Delete()); |
| 48 EXPECT_STR_EQ("HELLORLD", model.text()); |
| 49 // but backspace should work. |
| 50 EXPECT_TRUE(model.Backspace()); |
| 51 EXPECT_STR_EQ("HELLORL", model.text()); |
| 52 } |
| 53 |
| 54 TEST(TextfieldViewsModelTest, EmptyString) { |
| 55 TextfieldViewsModel model; |
| 56 EXPECT_EQ(string16(), model.text()); |
| 57 EXPECT_EQ(string16(), model.GetSelectedText()); |
| 58 EXPECT_EQ(string16(), model.GetVisibleText()); |
| 59 |
| 60 model.MoveCursorLeft(true); |
| 61 EXPECT_EQ(0U, model.cursor_pos()); |
| 62 model.MoveCursorRight(true); |
| 63 EXPECT_EQ(0U, model.cursor_pos()); |
| 64 |
| 65 EXPECT_EQ(string16(), model.GetSelectedText()); |
| 66 |
| 67 EXPECT_FALSE(model.Delete()); |
| 68 EXPECT_FALSE(model.Backspace()); |
| 69 } |
| 70 |
| 71 TEST(TextfieldViewsModelTest, Selection) { |
| 72 TextfieldViewsModel model; |
| 73 model.Append(ASCIIToUTF16("HELLO")); |
| 74 model.MoveCursorRight(false); |
| 75 model.MoveCursorRight(true); |
| 76 EXPECT_STR_EQ("E", model.GetSelectedText()); |
| 77 model.MoveCursorRight(true); |
| 78 EXPECT_STR_EQ("EL", model.GetSelectedText()); |
| 79 |
| 80 model.MoveCursorToStart(true); |
| 81 EXPECT_STR_EQ("H", model.GetSelectedText()); |
| 82 model.MoveCursorToEnd(true); |
| 83 EXPECT_STR_EQ("ELLO", model.GetSelectedText()); |
| 84 model.ClearSelection(); |
| 85 EXPECT_EQ(string16(), model.GetSelectedText()); |
| 86 model.SelectAll(); |
| 87 EXPECT_STR_EQ("HELLO", model.GetSelectedText()); |
| 88 |
| 89 // Select and move cursor |
| 90 model.MoveCursorTo(1U, false); |
| 91 model.MoveCursorTo(3U, true); |
| 92 EXPECT_STR_EQ("EL", model.GetSelectedText()); |
| 93 model.MoveCursorLeft(false); |
| 94 EXPECT_EQ(1U, model.cursor_pos()); |
| 95 model.MoveCursorTo(1U, false); |
| 96 model.MoveCursorTo(3U, true); |
| 97 model.MoveCursorRight(false); |
| 98 EXPECT_EQ(3U, model.cursor_pos()); |
| 99 |
| 100 // Select all and move cursor |
| 101 model.SelectAll(); |
| 102 model.MoveCursorLeft(false); |
| 103 EXPECT_EQ(0U, model.cursor_pos()); |
| 104 model.SelectAll(); |
| 105 model.MoveCursorRight(false); |
| 106 EXPECT_EQ(5U, model.cursor_pos()); |
| 107 } |
| 108 |
| 109 TEST(TextfieldViewsModelTest, SelectionAndEdit) { |
| 110 TextfieldViewsModel model; |
| 111 model.Append(ASCIIToUTF16("HELLO")); |
| 112 model.MoveCursorRight(false); |
| 113 model.MoveCursorRight(true); |
| 114 model.MoveCursorRight(true); // select "EL" |
| 115 EXPECT_TRUE(model.Backspace()); |
| 116 EXPECT_STR_EQ("HLO", model.text()); |
| 117 |
| 118 model.Append(ASCIIToUTF16("ILL")); |
| 119 model.MoveCursorRight(true); |
| 120 model.MoveCursorRight(true); // select "LO" |
| 121 EXPECT_TRUE(model.Delete()); |
| 122 EXPECT_STR_EQ("HILL", model.text()); |
| 123 EXPECT_EQ(1U, model.cursor_pos()); |
| 124 model.MoveCursorRight(true); // select "I" |
| 125 model.Insert('E'); |
| 126 EXPECT_STR_EQ("HELL", model.text()); |
| 127 model.MoveCursorToStart(false); |
| 128 model.MoveCursorRight(true); // select "H" |
| 129 model.Replace('B'); |
| 130 EXPECT_STR_EQ("BELL", model.text()); |
| 131 model.MoveCursorToEnd(false); |
| 132 model.MoveCursorLeft(true); |
| 133 model.MoveCursorLeft(true); // select ">LL" |
| 134 model.Replace('E'); |
| 135 EXPECT_STR_EQ("BEE", model.text()); |
| 136 } |
| 137 |
| 138 TEST(TextfieldViewsModelTest, Password) { |
| 139 TextfieldViewsModel model; |
| 140 model.set_is_password(true); |
| 141 model.Append(ASCIIToUTF16("HELLO")); |
| 142 EXPECT_STR_EQ("*****", model.GetVisibleText()); |
| 143 EXPECT_STR_EQ("HELLO", model.text()); |
| 144 EXPECT_TRUE(model.Delete()); |
| 145 |
| 146 EXPECT_STR_EQ("****", model.GetVisibleText()); |
| 147 EXPECT_STR_EQ("ELLO", model.text()); |
| 148 EXPECT_EQ(0U, model.cursor_pos()); |
| 149 |
| 150 model.SelectAll(); |
| 151 EXPECT_STR_EQ("ELLO", model.GetSelectedText()); |
| 152 EXPECT_EQ(0U, model.cursor_pos()); |
| 153 |
| 154 model.Insert('X'); |
| 155 EXPECT_STR_EQ("*", model.GetVisibleText()); |
| 156 EXPECT_STR_EQ("X", model.text()); |
| 157 } |
| 158 |
| 159 TEST(TextfieldViewsModelTest, Word) { |
| 160 TextfieldViewsModel model; |
| 161 model.Append( |
| 162 ASCIIToUTF16("The answer to Life, the Universe, and Everything")); |
| 163 model.MoveCursorToNextWord(false); |
| 164 EXPECT_EQ(3U, model.cursor_pos()); |
| 165 model.MoveCursorToNextWord(false); |
| 166 EXPECT_EQ(10U, model.cursor_pos()); |
| 167 model.MoveCursorToNextWord(false); |
| 168 model.MoveCursorToNextWord(false); |
| 169 EXPECT_EQ(18U, model.cursor_pos()); |
| 170 |
| 171 // Should passes the non word char ',' |
| 172 model.MoveCursorToNextWord(true); |
| 173 EXPECT_EQ(23U, model.cursor_pos()); |
| 174 EXPECT_STR_EQ(", the", model.GetSelectedText()); |
| 175 |
| 176 // Move to the end. |
| 177 model.MoveCursorToNextWord(true); |
| 178 model.MoveCursorToNextWord(true); |
| 179 model.MoveCursorToNextWord(true); |
| 180 EXPECT_STR_EQ(", the Universe, and Everything", model.GetSelectedText()); |
| 181 // Should be safe to go next word at the end. |
| 182 model.MoveCursorToNextWord(true); |
| 183 EXPECT_STR_EQ(", the Universe, and Everything", model.GetSelectedText()); |
| 184 model.Insert('2'); |
| 185 EXPECT_EQ(19U, model.cursor_pos()); |
| 186 |
| 187 // Now backwards. |
| 188 model.MoveCursorLeft(false); // leave 2. |
| 189 model.MoveCursorToPreviousWord(true); |
| 190 EXPECT_EQ(14U, model.cursor_pos()); |
| 191 EXPECT_STR_EQ("Life", model.GetSelectedText()); |
| 192 model.MoveCursorToPreviousWord(true); |
| 193 EXPECT_STR_EQ("to Life", model.GetSelectedText()); |
| 194 model.MoveCursorToPreviousWord(true); |
| 195 model.MoveCursorToPreviousWord(true); |
| 196 model.MoveCursorToPreviousWord(true); // Select to the begining. |
| 197 EXPECT_STR_EQ("The answer to Life", model.GetSelectedText()); |
| 198 // Should be safe to go pervious word at the begining. |
| 199 model.MoveCursorToPreviousWord(true); |
| 200 EXPECT_STR_EQ("The answer to Life", model.GetSelectedText()); |
| 201 model.Replace('4'); |
| 202 EXPECT_EQ(string16(), model.GetSelectedText()); |
| 203 EXPECT_STR_EQ("42", model.GetVisibleText()); |
| 204 } |
| 205 |
| 206 TEST(TextfieldViewsModelTest, TextFragment) { |
| 207 TextfieldViewsModel model; |
| 208 TextfieldViewsModel::TextFragments fragments; |
| 209 // Empty string |
| 210 model.GetFragments(&fragments); |
| 211 EXPECT_EQ(1U, fragments.size()); |
| 212 fragments.clear(); |
| 213 EXPECT_EQ(0U, fragments[0].begin); |
| 214 EXPECT_EQ(0U, fragments[0].end); |
| 215 EXPECT_FALSE(fragments[0].selected); |
| 216 |
| 217 // Some string |
| 218 model.Append(ASCIIToUTF16("Hello world")); |
| 219 model.GetFragments(&fragments); |
| 220 EXPECT_EQ(1U, fragments.size()); |
| 221 EXPECT_EQ(0U, fragments[0].begin); |
| 222 EXPECT_EQ(11U, fragments[0].end); |
| 223 EXPECT_FALSE(fragments[0].selected); |
| 224 |
| 225 // Select 1st word |
| 226 model.MoveCursorToNextWord(true); |
| 227 model.GetFragments(&fragments); |
| 228 EXPECT_EQ(2U, fragments.size()); |
| 229 EXPECT_EQ(0U, fragments[0].begin); |
| 230 EXPECT_EQ(5U, fragments[0].end); |
| 231 EXPECT_TRUE(fragments[0].selected); |
| 232 EXPECT_EQ(5U, fragments[1].begin); |
| 233 EXPECT_EQ(11U, fragments[1].end); |
| 234 EXPECT_FALSE(fragments[1].selected); |
| 235 |
| 236 // Select empty string |
| 237 model.ClearSelection(); |
| 238 model.MoveCursorRight(true); |
| 239 model.GetFragments(&fragments); |
| 240 EXPECT_EQ(3U, fragments.size()); |
| 241 EXPECT_EQ(0U, fragments[0].begin); |
| 242 EXPECT_EQ(5U, fragments[0].end); |
| 243 EXPECT_FALSE(fragments[0].selected); |
| 244 EXPECT_EQ(5U, fragments[1].begin); |
| 245 EXPECT_EQ(6U, fragments[1].end); |
| 246 EXPECT_TRUE(fragments[1].selected); |
| 247 |
| 248 EXPECT_EQ(6U, fragments[2].begin); |
| 249 EXPECT_EQ(11U, fragments[2].end); |
| 250 EXPECT_FALSE(fragments[2].selected); |
| 251 |
| 252 // Select to the end. |
| 253 model.MoveCursorToEnd(true); |
| 254 model.GetFragments(&fragments); |
| 255 EXPECT_EQ(2U, fragments.size()); |
| 256 EXPECT_EQ(0U, fragments[0].begin); |
| 257 EXPECT_EQ(5U, fragments[0].end); |
| 258 EXPECT_FALSE(fragments[0].selected); |
| 259 EXPECT_EQ(5U, fragments[1].begin); |
| 260 EXPECT_EQ(11U, fragments[1].end); |
| 261 EXPECT_TRUE(fragments[1].selected); |
| 262 } |
| 263 |
| 264 TEST(TextfieldViewsModelTest, SetText) { |
| 265 TextfieldViewsModel model; |
| 266 model.Append(ASCIIToUTF16("HELLO")); |
| 267 model.MoveCursorToEnd(false); |
| 268 model.SetText(ASCIIToUTF16("GOODBYE")); |
| 269 EXPECT_STR_EQ("GOODBYE", model.text()); |
| 270 EXPECT_EQ(5U, model.cursor_pos()); |
| 271 model.SelectAll(); |
| 272 EXPECT_STR_EQ("GOODBYE", model.GetSelectedText()); |
| 273 // Selection move the current pos to the begining. |
| 274 EXPECT_EQ(0U, model.cursor_pos()); |
| 275 model.MoveCursorToEnd(false); |
| 276 EXPECT_EQ(7U, model.cursor_pos()); |
| 277 |
| 278 model.SetText(ASCIIToUTF16("BYE")); |
| 279 EXPECT_EQ(3U, model.cursor_pos()); |
| 280 EXPECT_EQ(string16(), model.GetSelectedText()); |
| 281 model.SetText(ASCIIToUTF16("")); |
| 282 EXPECT_EQ(0U, model.cursor_pos()); |
| 283 } |
| 284 |
| 285 } // namespace views |
OLD | NEW |