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(5, model.cursor_pos()); |
| 35 EXPECT_TRUE(model.Delete()); |
| 36 EXPECT_STR_EQ("HELLOORLD", model.text()); |
| 37 EXPECT_TRUE(model.Backspace()); |
| 38 EXPECT_EQ(4, 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(0, model.cursor_pos()); |
| 62 model.MoveCursorRight(true); |
| 63 EXPECT_EQ(0, 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 |
| 90 TEST(TextfieldViewsModelTest, SelectionAndEdit) { |
| 91 TextfieldViewsModel model; |
| 92 model.Append(ASCIIToUTF16("HELLO")); |
| 93 model.MoveCursorRight(false); |
| 94 model.MoveCursorRight(true); |
| 95 model.MoveCursorRight(true); // select "EL" |
| 96 EXPECT_TRUE(model.Backspace()); |
| 97 EXPECT_STR_EQ("HLO", model.text()); |
| 98 |
| 99 model.Append(ASCIIToUTF16("ILL")); |
| 100 model.MoveCursorRight(true); |
| 101 model.MoveCursorRight(true); // select "LO" |
| 102 EXPECT_TRUE(model.Delete()); |
| 103 EXPECT_STR_EQ("HILL", model.text()); |
| 104 EXPECT_EQ(1, model.cursor_pos()); |
| 105 model.MoveCursorRight(true); // select "I" |
| 106 model.Insert('E'); |
| 107 EXPECT_STR_EQ("HELL", model.text()); |
| 108 model.MoveCursorToStart(false); |
| 109 model.MoveCursorRight(true); // select "H" |
| 110 model.Replace('B'); |
| 111 EXPECT_STR_EQ("BELL", model.text()); |
| 112 model.MoveCursorToEnd(false); |
| 113 model.MoveCursorLeft(true); |
| 114 model.MoveCursorLeft(true); // select ">LL" |
| 115 model.Replace('E'); |
| 116 EXPECT_STR_EQ("BEE", model.text()); |
| 117 } |
| 118 |
| 119 TEST(TextfieldViewsModelTest, Password) { |
| 120 TextfieldViewsModel model; |
| 121 model.set_is_password(true); |
| 122 model.Append(ASCIIToUTF16("HELLO")); |
| 123 EXPECT_STR_EQ("*****", model.GetVisibleText()); |
| 124 EXPECT_STR_EQ("HELLO", model.text()); |
| 125 EXPECT_TRUE(model.Delete()); |
| 126 |
| 127 EXPECT_STR_EQ("****", model.GetVisibleText()); |
| 128 EXPECT_STR_EQ("ELLO", model.text()); |
| 129 EXPECT_EQ(0, model.cursor_pos()); |
| 130 |
| 131 model.SelectAll(); |
| 132 EXPECT_STR_EQ("ELLO", model.GetSelectedText()); |
| 133 EXPECT_EQ(0, model.cursor_pos()); |
| 134 |
| 135 model.Insert('X'); |
| 136 EXPECT_STR_EQ("*", model.GetVisibleText()); |
| 137 EXPECT_STR_EQ("X", model.text()); |
| 138 } |
| 139 |
| 140 TEST(TextfieldViewsModelTest, Word) { |
| 141 TextfieldViewsModel model; |
| 142 model.Append( |
| 143 ASCIIToUTF16("The answer to Life, the Universe, and Everything")); |
| 144 model.MoveCursorToNextWord(false); |
| 145 EXPECT_EQ(3, model.cursor_pos()); |
| 146 model.MoveCursorToNextWord(false); |
| 147 EXPECT_EQ(10, model.cursor_pos()); |
| 148 model.MoveCursorToNextWord(false); |
| 149 model.MoveCursorToNextWord(false); |
| 150 EXPECT_EQ(18, model.cursor_pos()); |
| 151 |
| 152 // Should passes the non word char ',' |
| 153 model.MoveCursorToNextWord(true); |
| 154 EXPECT_EQ(23, model.cursor_pos()); |
| 155 EXPECT_STR_EQ(", the", model.GetSelectedText()); |
| 156 |
| 157 // Move to the end. |
| 158 model.MoveCursorToNextWord(true); |
| 159 model.MoveCursorToNextWord(true); |
| 160 model.MoveCursorToNextWord(true); |
| 161 EXPECT_STR_EQ(", the Universe, and Everything", model.GetSelectedText()); |
| 162 // Should be safe to go next word at the end. |
| 163 model.MoveCursorToNextWord(true); |
| 164 EXPECT_STR_EQ(", the Universe, and Everything", model.GetSelectedText()); |
| 165 model.Insert('2'); |
| 166 EXPECT_EQ(19, model.cursor_pos()); |
| 167 |
| 168 // Now backwards. |
| 169 model.MoveCursorLeft(false); // leave 2. |
| 170 model.MoveCursorToPreviousWord(true); |
| 171 EXPECT_EQ(14, model.cursor_pos()); |
| 172 EXPECT_STR_EQ("Life", model.GetSelectedText()); |
| 173 model.MoveCursorToPreviousWord(true); |
| 174 EXPECT_STR_EQ("to Life", model.GetSelectedText()); |
| 175 model.MoveCursorToPreviousWord(true); |
| 176 model.MoveCursorToPreviousWord(true); |
| 177 model.MoveCursorToPreviousWord(true); // Select to the begining. |
| 178 EXPECT_STR_EQ("The answer to Life", model.GetSelectedText()); |
| 179 // Should be safe to go pervious word at the begining. |
| 180 model.MoveCursorToPreviousWord(true); |
| 181 EXPECT_STR_EQ("The answer to Life", model.GetSelectedText()); |
| 182 model.Replace('4'); |
| 183 EXPECT_EQ(string16(), model.GetSelectedText()); |
| 184 EXPECT_STR_EQ("42", model.GetVisibleText()); |
| 185 } |
| 186 |
| 187 TEST(TextfieldViewsModelTest, TextFragment) { |
| 188 TextfieldViewsModel model; |
| 189 TextfieldViewsModel::TextFragments fragments; |
| 190 // Empty string |
| 191 model.PopulateFragments(&fragments); |
| 192 EXPECT_EQ(1U, fragments.size()); |
| 193 fragments.clear(); |
| 194 EXPECT_EQ(0U, fragments[0].begin); |
| 195 EXPECT_EQ(0U, fragments[0].end); |
| 196 EXPECT_FALSE(fragments[0].selected); |
| 197 |
| 198 // Some string |
| 199 model.Append(ASCIIToUTF16("Hello world")); |
| 200 model.PopulateFragments(&fragments); |
| 201 EXPECT_EQ(1U, fragments.size()); |
| 202 EXPECT_EQ(0U, fragments[0].begin); |
| 203 EXPECT_EQ(11U, fragments[0].end); |
| 204 EXPECT_FALSE(fragments[0].selected); |
| 205 |
| 206 // Select 1st word |
| 207 model.MoveCursorToNextWord(true); |
| 208 model.PopulateFragments(&fragments); |
| 209 EXPECT_EQ(2U, fragments.size()); |
| 210 EXPECT_EQ(0U, fragments[0].begin); |
| 211 EXPECT_EQ(5U, fragments[0].end); |
| 212 EXPECT_TRUE(fragments[0].selected); |
| 213 EXPECT_EQ(5U, fragments[1].begin); |
| 214 EXPECT_EQ(11U, fragments[1].end); |
| 215 EXPECT_FALSE(fragments[1].selected); |
| 216 |
| 217 // Select empty string |
| 218 model.ClearSelection(); |
| 219 model.MoveCursorRight(true); |
| 220 model.PopulateFragments(&fragments); |
| 221 EXPECT_EQ(3U, fragments.size()); |
| 222 EXPECT_EQ(0U, fragments[0].begin); |
| 223 EXPECT_EQ(5U, fragments[0].end); |
| 224 EXPECT_FALSE(fragments[0].selected); |
| 225 EXPECT_EQ(5U, fragments[1].begin); |
| 226 EXPECT_EQ(6U, fragments[1].end); |
| 227 EXPECT_TRUE(fragments[1].selected); |
| 228 |
| 229 EXPECT_EQ(6U, fragments[2].begin); |
| 230 EXPECT_EQ(11U, fragments[2].end); |
| 231 EXPECT_FALSE(fragments[2].selected); |
| 232 |
| 233 // Select to the end. |
| 234 model.MoveCursorToEnd(true); |
| 235 model.PopulateFragments(&fragments); |
| 236 EXPECT_EQ(2U, fragments.size()); |
| 237 EXPECT_EQ(0U, fragments[0].begin); |
| 238 EXPECT_EQ(5U, fragments[0].end); |
| 239 EXPECT_FALSE(fragments[0].selected); |
| 240 EXPECT_EQ(5U, fragments[1].begin); |
| 241 EXPECT_EQ(11U, fragments[1].end); |
| 242 EXPECT_TRUE(fragments[1].selected); |
| 243 } |
| 244 |
| 245 TEST(TextfieldViewsModelTest, SetText) { |
| 246 TextfieldViewsModel model; |
| 247 model.Append(ASCIIToUTF16("HELLO")); |
| 248 model.MoveCursorToEnd(false); |
| 249 model.SetText(ASCIIToUTF16("GOODBYE")); |
| 250 EXPECT_STR_EQ("GOODBYE", model.text()); |
| 251 EXPECT_EQ(5, model.cursor_pos()); |
| 252 model.SelectAll(); |
| 253 EXPECT_STR_EQ("GOODBYE", model.GetSelectedText()); |
| 254 EXPECT_EQ(5, model.cursor_pos()); |
| 255 |
| 256 model.SetText(ASCIIToUTF16("BYE")); |
| 257 EXPECT_EQ(3, model.cursor_pos()); |
| 258 EXPECT_EQ(string16(), model.GetSelectedText()); |
| 259 model.SetText(ASCIIToUTF16("")); |
| 260 EXPECT_EQ(0, model.cursor_pos()); |
| 261 } |
| 262 |
| 263 } // namespace views |
OLD | NEW |