Index: views/controls/textfield/native_textfield_views_unittest.cc |
diff --git a/views/controls/textfield/native_textfield_views_unittest.cc b/views/controls/textfield/native_textfield_views_unittest.cc |
index 9e946abaede6bb17dec433452eb968f6319fe398..d8bffbe7a909a71138dcf0fce3f52d8e994081ed 100644 |
--- a/views/controls/textfield/native_textfield_views_unittest.cc |
+++ b/views/controls/textfield/native_textfield_views_unittest.cc |
@@ -7,6 +7,7 @@ |
#include "base/utf_string_conversions.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "ui/base/clipboard/clipboard.h" |
+#include "ui/base/clipboard/scoped_clipboard_writer.h" |
#include "ui/base/keycodes/keyboard_codes.h" |
#include "views/controls/menu/menu_2.h" |
#include "views/controls/textfield/native_textfield_views.h" |
@@ -21,8 +22,12 @@ |
namespace views { |
+// Convert to Wide so that the printed string will be readable when |
+// check fails. |
#define EXPECT_STR_EQ(ascii, utf16) \ |
EXPECT_EQ(ASCIIToWide(ascii), UTF16ToWide(utf16)) |
+#define EXPECT_STR_NE(ascii, utf16) \ |
+ EXPECT_NE(ASCIIToWide(ascii), UTF16ToWide(utf16)) |
// TODO(oshima): Move tests that are independent of TextfieldViews to |
// textfield_unittests.cc once we move the test utility functions |
@@ -404,8 +409,8 @@ void VerifyTextfieldContextMenuContents(bool textfield_has_selection, |
EXPECT_EQ(textfield_has_selection, menu_model->IsEnabledAt(1 /* COPY */)); |
EXPECT_EQ(textfield_has_selection, menu_model->IsEnabledAt(3 /* DELETE */)); |
string16 str; |
- views::ViewsDelegate::views_delegate->GetClipboard() |
- ->ReadText(ui::Clipboard::BUFFER_STANDARD, &str); |
+ views::ViewsDelegate::views_delegate->GetClipboard()-> |
+ ReadText(ui::Clipboard::BUFFER_STANDARD, &str); |
EXPECT_NE(str.empty(), menu_model->IsEnabledAt(2 /* PASTE */)); |
} |
@@ -423,4 +428,65 @@ TEST_F(NativeTextfieldViewsTest, ContextMenuDisplayTest) { |
VerifyTextfieldContextMenuContents(true, GetContextMenu()->model()); |
} |
+TEST_F(NativeTextfieldViewsTest, ReadOnlyTest) { |
+ scoped_ptr<TestViewsDelegate> test_views_delegate(new TestViewsDelegate()); |
+ AutoReset<views::ViewsDelegate*> auto_reset( |
+ &views::ViewsDelegate::views_delegate, test_views_delegate.get()); |
+ |
+ InitTextfield(Textfield::STYLE_DEFAULT); |
+ textfield_->SetText(ASCIIToUTF16(" one two three ")); |
+ textfield_->SetReadOnly(true); |
+ SendKeyEventToTextfieldViews(ui::VKEY_HOME); |
+ EXPECT_EQ(0U, textfield_->GetCursorPosition()); |
+ |
+ SendKeyEventToTextfieldViews(ui::VKEY_END); |
+ EXPECT_EQ(15U, textfield_->GetCursorPosition()); |
+ |
+ SendKeyEventToTextfieldViews(ui::VKEY_LEFT, false, false); |
+ EXPECT_EQ(14U, textfield_->GetCursorPosition()); |
+ |
+ SendKeyEventToTextfieldViews(ui::VKEY_LEFT, false, true); |
+ EXPECT_EQ(9U, textfield_->GetCursorPosition()); |
+ |
+ SendKeyEventToTextfieldViews(ui::VKEY_LEFT, true, true); |
+ EXPECT_EQ(5U, textfield_->GetCursorPosition()); |
+ EXPECT_STR_EQ("two ", textfield_->GetSelectedText()); |
+ |
+ textfield_->SelectAll(); |
+ EXPECT_STR_EQ(" one two three ", textfield_->GetSelectedText()); |
+ |
+ // CUT&PASTE does not work, but COPY works |
+ SendKeyEventToTextfieldViews(ui::VKEY_X, false, true); |
+ EXPECT_STR_EQ(" one two three ", textfield_->GetSelectedText()); |
+ string16 str; |
+ views::ViewsDelegate::views_delegate->GetClipboard()-> |
+ ReadText(ui::Clipboard::BUFFER_STANDARD, &str); |
+ EXPECT_STR_NE(" one two three ", str); |
+ |
+ SendKeyEventToTextfieldViews(ui::VKEY_C, false, true); |
+ views::ViewsDelegate::views_delegate->GetClipboard()-> |
+ ReadText(ui::Clipboard::BUFFER_STANDARD, &str); |
+ EXPECT_STR_EQ(" one two three ", str); |
+ |
+ // SetText should work even in read only mode. |
+ textfield_->SetText(ASCIIToUTF16(" four five six ")); |
+ EXPECT_STR_EQ(" four five six ", textfield_->text()); |
+ |
+ // Paste shouldn't work. |
+ SendKeyEventToTextfieldViews(ui::VKEY_V, false, true); |
+ EXPECT_STR_EQ(" four five six ", textfield_->text()); |
+ EXPECT_TRUE(textfield_->GetSelectedText().empty()); |
+ |
+ textfield_->SelectAll(); |
+ EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText()); |
+ |
+ // Text field is unmodifiable and selection shouldn't change. |
+ SendKeyEventToTextfieldViews(ui::VKEY_DELETE); |
+ EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText()); |
+ SendKeyEventToTextfieldViews(ui::VKEY_BACK); |
+ EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText()); |
+ SendKeyEventToTextfieldViews(ui::VKEY_T); |
+ EXPECT_STR_EQ(" four five six ", textfield_->GetSelectedText()); |
+} |
+ |
} // namespace views |