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

Unified Diff: views/controls/textfield/textfield_views_model_unittest.cc

Issue 7067015: An edit for SetText needs to be merged with previous edit for omnibox. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " Created 9 years, 7 months 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 side-by-side diff with in-line comments
Download patch
Index: views/controls/textfield/textfield_views_model_unittest.cc
diff --git a/views/controls/textfield/textfield_views_model_unittest.cc b/views/controls/textfield/textfield_views_model_unittest.cc
index d9d5721711de5f89fc77be8b85d30e1f85b4b7cd..7e2f7e64e8221db8a285d4e5a7eb55467567260d 100644
--- a/views/controls/textfield/textfield_views_model_unittest.cc
+++ b/views/controls/textfield/textfield_views_model_unittest.cc
@@ -273,14 +273,16 @@ TEST_F(TextfieldViewsModelTest, SetText) {
model.MoveCursorToEnd(false);
model.SetText(ASCIIToUTF16("GOODBYE"));
EXPECT_STR_EQ("GOODBYE", model.text());
- EXPECT_EQ(0U, model.cursor_pos());
+ // SetText won't reset the cursor posistion.
+ EXPECT_EQ(5U, model.cursor_pos());
model.SelectAll();
EXPECT_STR_EQ("GOODBYE", model.GetSelectedText());
model.MoveCursorToEnd(false);
EXPECT_EQ(7U, model.cursor_pos());
model.SetText(ASCIIToUTF16("BYE"));
- EXPECT_EQ(0U, model.cursor_pos());
+ // Setting shorter string moves the cursor to the end of the new string.
+ EXPECT_EQ(3U, model.cursor_pos());
EXPECT_EQ(string16(), model.GetSelectedText());
model.SetText(ASCIIToUTF16(""));
EXPECT_EQ(0U, model.cursor_pos());
@@ -683,28 +685,35 @@ TEST_F(TextfieldViewsModelTest, UndoRedo_BasicTest) {
EXPECT_STR_EQ("abc", model.text());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("a", model.text());
+ EXPECT_EQ(1U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("", model.text());
+ EXPECT_EQ(0U, model.cursor_pos());
// Undoing further shouldn't change the text.
EXPECT_FALSE(model.Undo());
EXPECT_STR_EQ("", model.text());
EXPECT_FALSE(model.Undo());
EXPECT_STR_EQ("", model.text());
+ EXPECT_EQ(0U, model.cursor_pos());
// Redoing to the latest text.
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("a", model.text());
+ EXPECT_EQ(1U, model.cursor_pos());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("abc", model.text());
+ EXPECT_EQ(3U, model.cursor_pos());
// Backspace ===============================
EXPECT_TRUE(model.Backspace());
EXPECT_STR_EQ("ab", model.text());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("abc", model.text());
+ EXPECT_EQ(3U, model.cursor_pos());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("ab", model.text());
+ EXPECT_EQ(2U, model.cursor_pos());
// Continous backspaces are treated as one edit.
EXPECT_TRUE(model.Backspace());
EXPECT_TRUE(model.Backspace());
@@ -713,16 +722,20 @@ TEST_F(TextfieldViewsModelTest, UndoRedo_BasicTest) {
EXPECT_FALSE(model.Backspace());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("ab", model.text());
+ EXPECT_EQ(2U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("abc", model.text());
+ EXPECT_EQ(3U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("a", model.text());
+ EXPECT_EQ(1U, model.cursor_pos());
// Clear history
model.ClearEditHistory();
EXPECT_FALSE(model.Undo());
EXPECT_FALSE(model.Redo());
EXPECT_STR_EQ("a", model.text());
+ EXPECT_EQ(1U, model.cursor_pos());
// Delete ===============================
model.SetText(ASCIIToUTF16("ABCDE"));
@@ -735,18 +748,85 @@ TEST_F(TextfieldViewsModelTest, UndoRedo_BasicTest) {
EXPECT_STR_EQ("BDE", model.text());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("ABDE", model.text());
+ EXPECT_EQ(0U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("ABCDE", model.text());
+ EXPECT_EQ(2U, model.cursor_pos());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("ABDE", model.text());
+ EXPECT_EQ(2U, model.cursor_pos());
// Continous deletes are treated as one edit.
EXPECT_TRUE(model.Delete());
EXPECT_TRUE(model.Delete());
EXPECT_STR_EQ("AB", model.text());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("ABDE", model.text());
+ EXPECT_EQ(2U, model.cursor_pos());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("AB", model.text());
+ EXPECT_EQ(2U, model.cursor_pos());
+}
+
+TEST_F(TextfieldViewsModelTest, UndoRedo_SetText) {
+ // This is to test the undo/redo behavior of omnibox.
+ TextfieldViewsModel model(NULL);
+ model.InsertChar('w');
+ EXPECT_STR_EQ("w", model.text());
+ EXPECT_EQ(1U, model.cursor_pos());
+ model.SetText(ASCIIToUTF16("www.google.com"));
+ EXPECT_EQ(1U, model.cursor_pos());
+ EXPECT_STR_EQ("www.google.com", model.text());
+ model.SelectRange(ui::Range(14, 1));
+ model.InsertChar('w');
+ EXPECT_STR_EQ("ww", model.text());
+ model.SetText(ASCIIToUTF16("www.google.com"));
+ model.SelectRange(ui::Range(14, 2));
+ model.InsertChar('w');
+ EXPECT_STR_EQ("www", model.text());
+ model.SetText(ASCIIToUTF16("www.google.com"));
+ model.SelectRange(ui::Range(14, 3));
+ model.InsertChar('.');
+ EXPECT_STR_EQ("www.", model.text());
+ model.SetText(ASCIIToUTF16("www.google.com"));
+ model.SelectRange(ui::Range(14, 4));
+ model.InsertChar('y');
+ EXPECT_STR_EQ("www.y", model.text());
+ model.SetText(ASCIIToUTF16("www.youtube.com"));
+ EXPECT_STR_EQ("www.youtube.com", model.text());
+ EXPECT_EQ(5U, model.cursor_pos());
+
+ EXPECT_TRUE(model.Undo());
+ EXPECT_STR_EQ("www.google.com", model.text());
+ EXPECT_EQ(4U, model.cursor_pos());
+ EXPECT_TRUE(model.Undo());
+ EXPECT_STR_EQ("www.google.com", model.text());
+ EXPECT_EQ(3U, model.cursor_pos());
+ EXPECT_TRUE(model.Undo());
+ EXPECT_STR_EQ("www.google.com", model.text());
+ EXPECT_EQ(2U, model.cursor_pos());
+ EXPECT_TRUE(model.Undo());
+ EXPECT_STR_EQ("www.google.com", model.text());
+ EXPECT_EQ(1U, model.cursor_pos());
+ EXPECT_TRUE(model.Undo());
+ EXPECT_STR_EQ("", model.text());
+ EXPECT_EQ(0U, model.cursor_pos());
+ EXPECT_FALSE(model.Undo());
+ EXPECT_TRUE(model.Redo());
+ EXPECT_STR_EQ("www.google.com", model.text());
+ EXPECT_EQ(1U, model.cursor_pos());
+ EXPECT_TRUE(model.Redo());
+ EXPECT_STR_EQ("www.google.com", model.text());
+ EXPECT_EQ(2U, model.cursor_pos());
+ EXPECT_TRUE(model.Redo());
+ EXPECT_STR_EQ("www.google.com", model.text());
+ EXPECT_EQ(3U, model.cursor_pos());
+ EXPECT_TRUE(model.Redo());
+ EXPECT_STR_EQ("www.google.com", model.text());
+ EXPECT_EQ(4U, model.cursor_pos());
+ EXPECT_TRUE(model.Redo());
+ EXPECT_STR_EQ("www.youtube.com", model.text());
+ EXPECT_EQ(5U, model.cursor_pos());
+ EXPECT_FALSE(model.Redo());
}
TEST_F(TextfieldViewsModelTest, UndoRedo_CutCopyPasteTest) {
@@ -758,16 +838,21 @@ TEST_F(TextfieldViewsModelTest, UndoRedo_CutCopyPasteTest) {
model.MoveCursorTo(3, true);
model.Cut();
EXPECT_STR_EQ("ADE", model.text());
+ EXPECT_EQ(1U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("ABCDE", model.text());
+ EXPECT_EQ(3U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("", model.text());
+ EXPECT_EQ(0U, model.cursor_pos());
EXPECT_FALSE(model.Undo()); // no more undo
EXPECT_STR_EQ("", model.text());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("ABCDE", model.text());
+ EXPECT_EQ(0U, model.cursor_pos());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("ADE", model.text());
+ EXPECT_EQ(1U, model.cursor_pos());
EXPECT_FALSE(model.Redo()); // no more redo
EXPECT_STR_EQ("ADE", model.text());
@@ -775,72 +860,98 @@ TEST_F(TextfieldViewsModelTest, UndoRedo_CutCopyPasteTest) {
model.Paste();
model.Paste();
EXPECT_STR_EQ("ABCBCBCDE", model.text());
+ EXPECT_EQ(7U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("ABCBCDE", model.text());
+ EXPECT_EQ(5U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("ABCDE", model.text());
+ EXPECT_EQ(3U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("ADE", model.text());
+ EXPECT_EQ(1U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("ABCDE", model.text());
+ EXPECT_EQ(3U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("", model.text());
+ EXPECT_EQ(0U, model.cursor_pos());
EXPECT_FALSE(model.Undo());
EXPECT_STR_EQ("", model.text());
EXPECT_TRUE(model.Redo());
- EXPECT_STR_EQ("ABCDE", model.text());
+ EXPECT_STR_EQ("ABCDE", model.text()); // Redoing SetText
+ EXPECT_EQ(0U, model.cursor_pos());
+
// Redo
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("ADE", model.text());
+ EXPECT_EQ(1U, model.cursor_pos());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("ABCDE", model.text());
+ EXPECT_EQ(3U, model.cursor_pos());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("ABCBCDE", model.text());
+ EXPECT_EQ(5U, model.cursor_pos());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("ABCBCBCDE", model.text());
+ EXPECT_EQ(7U, model.cursor_pos());
EXPECT_FALSE(model.Redo());
// with SelectRange
model.SelectRange(ui::Range(1, 3));
EXPECT_TRUE(model.Cut());
EXPECT_STR_EQ("ABCBCDE", model.text());
+ EXPECT_EQ(1U, model.cursor_pos());
model.SelectRange(ui::Range(1, 1));
EXPECT_FALSE(model.Cut());
model.MoveCursorToEnd(false);
EXPECT_TRUE(model.Paste());
EXPECT_STR_EQ("ABCBCDEBC", model.text());
+ EXPECT_EQ(9U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("ABCBCDE", model.text());
+ EXPECT_EQ(7U, model.cursor_pos());
// empty cut shouldn't create an edit.
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("ABCBCBCDE", model.text());
+ EXPECT_EQ(3U, model.cursor_pos());
// Copy
ResetModel(&model);
model.SetText(ASCIIToUTF16("12345"));
EXPECT_STR_EQ("12345", model.text());
+ EXPECT_EQ(0U, model.cursor_pos());
model.MoveCursorTo(1, false);
model.MoveCursorTo(3, true);
- model.Copy();
+ model.Copy(); // Copy "23"
EXPECT_STR_EQ("12345", model.text());
- model.Paste();
+ EXPECT_EQ(3U, model.cursor_pos());
+ model.Paste(); // Paste "23" into "23".
EXPECT_STR_EQ("12345", model.text());
+ EXPECT_EQ(3U, model.cursor_pos());
model.Paste();
EXPECT_STR_EQ("1232345", model.text());
+ EXPECT_EQ(5U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("12345", model.text());
- EXPECT_FALSE(model.Undo()); // no text change
+ EXPECT_EQ(3U, model.cursor_pos());
+ // TODO(oshima): We need to change the return type from bool to enum.
+ EXPECT_FALSE(model.Undo()); // No text change.
EXPECT_STR_EQ("12345", model.text());
+ EXPECT_EQ(3U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("", model.text());
EXPECT_FALSE(model.Undo());
// Redo
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("12345", model.text());
- EXPECT_FALSE(model.Redo()); // no text change.
- EXPECT_STR_EQ("12345", model.text());
+ EXPECT_EQ(0U, model.cursor_pos());
+ EXPECT_TRUE(model.Redo());
+ EXPECT_STR_EQ("12345", model.text()); // For 1st paste
+ EXPECT_EQ(3U, model.cursor_pos());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("1232345", model.text());
+ EXPECT_EQ(5U, model.cursor_pos());
EXPECT_FALSE(model.Redo());
EXPECT_STR_EQ("1232345", model.text());
@@ -851,8 +962,10 @@ TEST_F(TextfieldViewsModelTest, UndoRedo_CutCopyPasteTest) {
model.MoveCursorToEnd(false);
EXPECT_TRUE(model.Paste());
EXPECT_STR_EQ("123234523", model.text());
+ EXPECT_EQ(9U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("1232345", model.text());
+ EXPECT_EQ(7U, model.cursor_pos());
}
TEST_F(TextfieldViewsModelTest, UndoRedo_CursorTest) {
@@ -870,41 +983,60 @@ TEST_F(TextfieldViewsModelTest, UndoRedo_CursorTest) {
EXPECT_STR_EQ("", model.text());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("ab", model.text());
+ EXPECT_EQ(2U, model.cursor_pos());
EXPECT_FALSE(model.Redo());
}
void RunInsertReplaceTest(TextfieldViewsModel& model) {
+ ui::Range r;
+ model.GetSelectedRange(&r);
+ bool reverse = r.is_reversed();
+
model.InsertChar('1');
model.InsertChar('2');
model.InsertChar('3');
EXPECT_STR_EQ("a123d", model.text());
+ EXPECT_EQ(4U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("abcd", model.text());
+ EXPECT_EQ(reverse ? 1U : 3U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("", model.text());
+ EXPECT_EQ(0U, model.cursor_pos());
EXPECT_FALSE(model.Undo());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("abcd", model.text());
+ EXPECT_EQ(0U, model.cursor_pos()); // By SetText
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("a123d", model.text());
+ EXPECT_EQ(4U, model.cursor_pos());
EXPECT_FALSE(model.Redo());
}
void RunOverwriteReplaceTest(TextfieldViewsModel& model) {
+ ui::Range r;
+ model.GetSelectedRange(&r);
+ bool reverse = r.is_reversed();
+
model.ReplaceChar('1');
model.ReplaceChar('2');
model.ReplaceChar('3');
model.ReplaceChar('4');
EXPECT_STR_EQ("a1234", model.text());
+ EXPECT_EQ(5U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("abcd", model.text());
+ EXPECT_EQ(reverse ? 1U : 3U, model.cursor_pos());
EXPECT_TRUE(model.Undo());
EXPECT_STR_EQ("", model.text());
+ EXPECT_EQ(0U, model.cursor_pos());
EXPECT_FALSE(model.Undo());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("abcd", model.text());
+ EXPECT_EQ(0U, model.cursor_pos());
EXPECT_TRUE(model.Redo());
EXPECT_STR_EQ("a1234", model.text());
+ EXPECT_EQ(5U, model.cursor_pos());
EXPECT_FALSE(model.Redo());
}

Powered by Google App Engine
This is Rietveld 408576698