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

Unified 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: fix comment 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « views/controls/textfield/textfield_views_model.cc ('k') | views/event.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
new file mode 100644
index 0000000000000000000000000000000000000000..fa09efa745fda63c7676143574b4f0622d282434
--- /dev/null
+++ b/views/controls/textfield/textfield_views_model_unittest.cc
@@ -0,0 +1,285 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/utf_string_conversions.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "views/controls/textfield/textfield_views_model.h"
+
+namespace views {
+
+#define EXPECT_STR_EQ(ascii, utf16) \
+ EXPECT_EQ(ASCIIToWide(ascii), UTF16ToWide(utf16))
+
+TEST(TextfieldViewsModelTest, EditString) {
+ TextfieldViewsModel model;
+ // append two strings
+ model.Append(ASCIIToUTF16("HILL"));
+ EXPECT_STR_EQ("HILL", model.text());
+ model.Append(ASCIIToUTF16("WORLD"));
+ EXPECT_STR_EQ("HILLWORLD", model.text());
+
+ // Insert "E" to make hello
+ model.MoveCursorRight(false);
+ model.Insert('E');
+ EXPECT_STR_EQ("HEILLWORLD", model.text());
+ // Replace "I" with "L"
+ model.Replace('L');
+ EXPECT_STR_EQ("HELLLWORLD", model.text());
+ model.Replace('L');
+ model.Replace('O');
+ EXPECT_STR_EQ("HELLOWORLD", model.text());
+
+ // Delete 6th char "W", then delete 5th char O"
+ EXPECT_EQ(5U, model.cursor_pos());
+ EXPECT_TRUE(model.Delete());
+ EXPECT_STR_EQ("HELLOORLD", model.text());
+ EXPECT_TRUE(model.Backspace());
+ EXPECT_EQ(4U, model.cursor_pos());
+ EXPECT_STR_EQ("HELLORLD", model.text());
+
+ // Move the cursor to start. backspace should fail.
+ model.MoveCursorToStart(false);
+ EXPECT_FALSE(model.Backspace());
+ EXPECT_STR_EQ("HELLORLD", model.text());
+ // Move the cursor to the end. delete should fail.
+ model.MoveCursorToEnd(false);
+ EXPECT_FALSE(model.Delete());
+ EXPECT_STR_EQ("HELLORLD", model.text());
+ // but backspace should work.
+ EXPECT_TRUE(model.Backspace());
+ EXPECT_STR_EQ("HELLORL", model.text());
+}
+
+TEST(TextfieldViewsModelTest, EmptyString) {
+ TextfieldViewsModel model;
+ EXPECT_EQ(string16(), model.text());
+ EXPECT_EQ(string16(), model.GetSelectedText());
+ EXPECT_EQ(string16(), model.GetVisibleText());
+
+ model.MoveCursorLeft(true);
+ EXPECT_EQ(0U, model.cursor_pos());
+ model.MoveCursorRight(true);
+ EXPECT_EQ(0U, model.cursor_pos());
+
+ EXPECT_EQ(string16(), model.GetSelectedText());
+
+ EXPECT_FALSE(model.Delete());
+ EXPECT_FALSE(model.Backspace());
+}
+
+TEST(TextfieldViewsModelTest, Selection) {
+ TextfieldViewsModel model;
+ model.Append(ASCIIToUTF16("HELLO"));
+ model.MoveCursorRight(false);
+ model.MoveCursorRight(true);
+ EXPECT_STR_EQ("E", model.GetSelectedText());
+ model.MoveCursorRight(true);
+ EXPECT_STR_EQ("EL", model.GetSelectedText());
+
+ model.MoveCursorToStart(true);
+ EXPECT_STR_EQ("H", model.GetSelectedText());
+ model.MoveCursorToEnd(true);
+ EXPECT_STR_EQ("ELLO", model.GetSelectedText());
+ model.ClearSelection();
+ EXPECT_EQ(string16(), model.GetSelectedText());
+ model.SelectAll();
+ EXPECT_STR_EQ("HELLO", model.GetSelectedText());
+
+ // Select and move cursor
+ model.MoveCursorTo(1U, false);
+ model.MoveCursorTo(3U, true);
+ EXPECT_STR_EQ("EL", model.GetSelectedText());
+ model.MoveCursorLeft(false);
+ EXPECT_EQ(1U, model.cursor_pos());
+ model.MoveCursorTo(1U, false);
+ model.MoveCursorTo(3U, true);
+ model.MoveCursorRight(false);
+ EXPECT_EQ(3U, model.cursor_pos());
+
+ // Select all and move cursor
+ model.SelectAll();
+ model.MoveCursorLeft(false);
+ EXPECT_EQ(0U, model.cursor_pos());
+ model.SelectAll();
+ model.MoveCursorRight(false);
+ EXPECT_EQ(5U, model.cursor_pos());
+}
+
+TEST(TextfieldViewsModelTest, SelectionAndEdit) {
+ TextfieldViewsModel model;
+ model.Append(ASCIIToUTF16("HELLO"));
+ model.MoveCursorRight(false);
+ model.MoveCursorRight(true);
+ model.MoveCursorRight(true); // select "EL"
+ EXPECT_TRUE(model.Backspace());
+ EXPECT_STR_EQ("HLO", model.text());
+
+ model.Append(ASCIIToUTF16("ILL"));
+ model.MoveCursorRight(true);
+ model.MoveCursorRight(true); // select "LO"
+ EXPECT_TRUE(model.Delete());
+ EXPECT_STR_EQ("HILL", model.text());
+ EXPECT_EQ(1U, model.cursor_pos());
+ model.MoveCursorRight(true); // select "I"
+ model.Insert('E');
+ EXPECT_STR_EQ("HELL", model.text());
+ model.MoveCursorToStart(false);
+ model.MoveCursorRight(true); // select "H"
+ model.Replace('B');
+ EXPECT_STR_EQ("BELL", model.text());
+ model.MoveCursorToEnd(false);
+ model.MoveCursorLeft(true);
+ model.MoveCursorLeft(true); // select ">LL"
+ model.Replace('E');
+ EXPECT_STR_EQ("BEE", model.text());
+}
+
+TEST(TextfieldViewsModelTest, Password) {
+ TextfieldViewsModel model;
+ model.set_is_password(true);
+ model.Append(ASCIIToUTF16("HELLO"));
+ EXPECT_STR_EQ("*****", model.GetVisibleText());
+ EXPECT_STR_EQ("HELLO", model.text());
+ EXPECT_TRUE(model.Delete());
+
+ EXPECT_STR_EQ("****", model.GetVisibleText());
+ EXPECT_STR_EQ("ELLO", model.text());
+ EXPECT_EQ(0U, model.cursor_pos());
+
+ model.SelectAll();
+ EXPECT_STR_EQ("ELLO", model.GetSelectedText());
+ EXPECT_EQ(0U, model.cursor_pos());
+
+ model.Insert('X');
+ EXPECT_STR_EQ("*", model.GetVisibleText());
+ EXPECT_STR_EQ("X", model.text());
+}
+
+TEST(TextfieldViewsModelTest, Word) {
+ TextfieldViewsModel model;
+ model.Append(
+ ASCIIToUTF16("The answer to Life, the Universe, and Everything"));
+ model.MoveCursorToNextWord(false);
+ EXPECT_EQ(3U, model.cursor_pos());
+ model.MoveCursorToNextWord(false);
+ EXPECT_EQ(10U, model.cursor_pos());
+ model.MoveCursorToNextWord(false);
+ model.MoveCursorToNextWord(false);
+ EXPECT_EQ(18U, model.cursor_pos());
+
+ // Should passes the non word char ','
+ model.MoveCursorToNextWord(true);
+ EXPECT_EQ(23U, model.cursor_pos());
+ EXPECT_STR_EQ(", the", model.GetSelectedText());
+
+ // Move to the end.
+ model.MoveCursorToNextWord(true);
+ model.MoveCursorToNextWord(true);
+ model.MoveCursorToNextWord(true);
+ EXPECT_STR_EQ(", the Universe, and Everything", model.GetSelectedText());
+ // Should be safe to go next word at the end.
+ model.MoveCursorToNextWord(true);
+ EXPECT_STR_EQ(", the Universe, and Everything", model.GetSelectedText());
+ model.Insert('2');
+ EXPECT_EQ(19U, model.cursor_pos());
+
+ // Now backwards.
+ model.MoveCursorLeft(false); // leave 2.
+ model.MoveCursorToPreviousWord(true);
+ EXPECT_EQ(14U, model.cursor_pos());
+ EXPECT_STR_EQ("Life", model.GetSelectedText());
+ model.MoveCursorToPreviousWord(true);
+ EXPECT_STR_EQ("to Life", model.GetSelectedText());
+ model.MoveCursorToPreviousWord(true);
+ model.MoveCursorToPreviousWord(true);
+ model.MoveCursorToPreviousWord(true); // Select to the begining.
+ EXPECT_STR_EQ("The answer to Life", model.GetSelectedText());
+ // Should be safe to go pervious word at the begining.
+ model.MoveCursorToPreviousWord(true);
+ EXPECT_STR_EQ("The answer to Life", model.GetSelectedText());
+ model.Replace('4');
+ EXPECT_EQ(string16(), model.GetSelectedText());
+ EXPECT_STR_EQ("42", model.GetVisibleText());
+}
+
+TEST(TextfieldViewsModelTest, TextFragment) {
+ TextfieldViewsModel model;
+ TextfieldViewsModel::TextFragments fragments;
+ // Empty string
+ model.GetFragments(&fragments);
+ EXPECT_EQ(1U, fragments.size());
+ fragments.clear();
+ EXPECT_EQ(0U, fragments[0].begin);
+ EXPECT_EQ(0U, fragments[0].end);
+ EXPECT_FALSE(fragments[0].selected);
+
+ // Some string
+ model.Append(ASCIIToUTF16("Hello world"));
+ model.GetFragments(&fragments);
+ EXPECT_EQ(1U, fragments.size());
+ EXPECT_EQ(0U, fragments[0].begin);
+ EXPECT_EQ(11U, fragments[0].end);
+ EXPECT_FALSE(fragments[0].selected);
+
+ // Select 1st word
+ model.MoveCursorToNextWord(true);
+ model.GetFragments(&fragments);
+ EXPECT_EQ(2U, fragments.size());
+ EXPECT_EQ(0U, fragments[0].begin);
+ EXPECT_EQ(5U, fragments[0].end);
+ EXPECT_TRUE(fragments[0].selected);
+ EXPECT_EQ(5U, fragments[1].begin);
+ EXPECT_EQ(11U, fragments[1].end);
+ EXPECT_FALSE(fragments[1].selected);
+
+ // Select empty string
+ model.ClearSelection();
+ model.MoveCursorRight(true);
+ model.GetFragments(&fragments);
+ EXPECT_EQ(3U, fragments.size());
+ EXPECT_EQ(0U, fragments[0].begin);
+ EXPECT_EQ(5U, fragments[0].end);
+ EXPECT_FALSE(fragments[0].selected);
+ EXPECT_EQ(5U, fragments[1].begin);
+ EXPECT_EQ(6U, fragments[1].end);
+ EXPECT_TRUE(fragments[1].selected);
+
+ EXPECT_EQ(6U, fragments[2].begin);
+ EXPECT_EQ(11U, fragments[2].end);
+ EXPECT_FALSE(fragments[2].selected);
+
+ // Select to the end.
+ model.MoveCursorToEnd(true);
+ model.GetFragments(&fragments);
+ EXPECT_EQ(2U, fragments.size());
+ EXPECT_EQ(0U, fragments[0].begin);
+ EXPECT_EQ(5U, fragments[0].end);
+ EXPECT_FALSE(fragments[0].selected);
+ EXPECT_EQ(5U, fragments[1].begin);
+ EXPECT_EQ(11U, fragments[1].end);
+ EXPECT_TRUE(fragments[1].selected);
+}
+
+TEST(TextfieldViewsModelTest, SetText) {
+ TextfieldViewsModel model;
+ model.Append(ASCIIToUTF16("HELLO"));
+ model.MoveCursorToEnd(false);
+ model.SetText(ASCIIToUTF16("GOODBYE"));
+ EXPECT_STR_EQ("GOODBYE", model.text());
+ EXPECT_EQ(5U, model.cursor_pos());
+ model.SelectAll();
+ EXPECT_STR_EQ("GOODBYE", model.GetSelectedText());
+ // Selection move the current pos to the begining.
+ EXPECT_EQ(0U, model.cursor_pos());
+ model.MoveCursorToEnd(false);
+ EXPECT_EQ(7U, model.cursor_pos());
+
+ model.SetText(ASCIIToUTF16("BYE"));
+ EXPECT_EQ(3U, model.cursor_pos());
+ EXPECT_EQ(string16(), model.GetSelectedText());
+ model.SetText(ASCIIToUTF16(""));
+ EXPECT_EQ(0U, model.cursor_pos());
+}
+
+} // namespace views
« no previous file with comments | « views/controls/textfield/textfield_views_model.cc ('k') | views/event.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698