Chromium Code Reviews| 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..1333caf1226482bb929976a37598748a63c44867 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,84 @@ 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) { |
|
msw
2011/06/02 10:16:42
nit: perhaps comment that this is meant to simulat
oshima
2011/06/02 19:11:42
Done.
|
| + 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 +837,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 +859,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 +961,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 +982,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()); |
| } |