| 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..ae4dd54f3babb02cd9f8c0bdc85ed99bd657fb3b
|
| --- /dev/null
|
| +++ b/views/controls/textfield/textfield_views_model_unittest.cc
|
| @@ -0,0 +1,263 @@
|
| +// 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(5, model.cursor_pos());
|
| + EXPECT_TRUE(model.Delete());
|
| + EXPECT_STR_EQ("HELLOORLD", model.text());
|
| + EXPECT_TRUE(model.Backspace());
|
| + EXPECT_EQ(4, 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(0, model.cursor_pos());
|
| + model.MoveCursorRight(true);
|
| + EXPECT_EQ(0, 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());
|
| +}
|
| +
|
| +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(1, 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(0, model.cursor_pos());
|
| +
|
| + model.SelectAll();
|
| + EXPECT_STR_EQ("ELLO", model.GetSelectedText());
|
| + EXPECT_EQ(0, 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(3, model.cursor_pos());
|
| + model.MoveCursorToNextWord(false);
|
| + EXPECT_EQ(10, model.cursor_pos());
|
| + model.MoveCursorToNextWord(false);
|
| + model.MoveCursorToNextWord(false);
|
| + EXPECT_EQ(18, model.cursor_pos());
|
| +
|
| + // Should passes the non word char ','
|
| + model.MoveCursorToNextWord(true);
|
| + EXPECT_EQ(23, 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(19, model.cursor_pos());
|
| +
|
| + // Now backwards.
|
| + model.MoveCursorLeft(false); // leave 2.
|
| + model.MoveCursorToPreviousWord(true);
|
| + EXPECT_EQ(14, 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.PopulateFragments(&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.PopulateFragments(&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.PopulateFragments(&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.PopulateFragments(&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.PopulateFragments(&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(5, model.cursor_pos());
|
| + model.SelectAll();
|
| + EXPECT_STR_EQ("GOODBYE", model.GetSelectedText());
|
| + EXPECT_EQ(5, model.cursor_pos());
|
| +
|
| + model.SetText(ASCIIToUTF16("BYE"));
|
| + EXPECT_EQ(3, model.cursor_pos());
|
| + EXPECT_EQ(string16(), model.GetSelectedText());
|
| + model.SetText(ASCIIToUTF16(""));
|
| + EXPECT_EQ(0, model.cursor_pos());
|
| +}
|
| +
|
| +} // namespace views
|
|
|