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

Side by Side Diff: views/controls/textfield/textfield_views_model_unittest.cc

Issue 5857002: no native implementation of Textfield. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: view -> views rename Created 10 years 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
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698