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 9057b7474c9f12415586c7159370b9bd7d95ce95..efa7eb12c32dbd72957fd3cf76afcf73096b15be 100644 |
--- a/views/controls/textfield/native_textfield_views_unittest.cc |
+++ b/views/controls/textfield/native_textfield_views_unittest.cc |
@@ -10,6 +10,7 @@ |
#include "views/controls/textfield/textfield.h" |
#include "views/controls/textfield/textfield_views_model.h" |
#include "views/event.h" |
+#include "views/focus/focus_manager.h" |
#include "views/widget/widget.h" |
namespace views { |
@@ -56,6 +57,10 @@ class NativeTextfieldViewsTest : public ::testing::Test, |
} |
void InitTextfield(Textfield::StyleFlags style) { |
+ InitTextfields(style, 1); |
+ } |
+ |
+ void InitTextfields(Textfield::StyleFlags style, int count) { |
ASSERT_FALSE(textfield_); |
textfield_ = new Textfield(style); |
textfield_->SetController(this); |
@@ -65,13 +70,25 @@ class NativeTextfieldViewsTest : public ::testing::Test, |
Widget::DeleteOnDestroy, |
Widget::DontMirrorOriginInRTL); |
widget_->Init(NULL, gfx::Rect()); |
- widget_->SetContentsView(textfield_); |
+ |
+ View* container = new View(); |
+ widget_->SetContentsView(container); |
+ container->AddChildView(textfield_); |
textfield_view_ |
= static_cast<NativeTextfieldViews*>(textfield_->native_wrapper()); |
+ textfield_->SetID(1); |
+ |
+ for (int i = 1; i < count; i++) { |
+ Textfield* textfield = new Textfield(style); |
+ container->AddChildView(textfield); |
+ textfield->SetID(i + 1); |
+ } |
+ |
DCHECK(textfield_view_); |
model_ = textfield_view_->model_.get(); |
} |
+ protected: |
bool SendKeyEventToTextfieldViews(app::KeyboardCode key_code, |
bool shift, |
bool control, |
@@ -80,7 +97,7 @@ class NativeTextfieldViewsTest : public ::testing::Test, |
(control ? KeyEvent::EF_CONTROL_DOWN : 0) | |
(capslock ? KeyEvent::EF_CAPS_LOCK_DOWN : 0); |
KeyEvent event(KeyEvent::ET_KEY_PRESSED, key_code, flags, 1, 0); |
- return textfield_view_->OnKeyPressed(event); |
+ return textfield_->OnKeyPressed(event); |
} |
bool SendKeyEventToTextfieldViews(app::KeyboardCode key_code, |
@@ -93,7 +110,10 @@ class NativeTextfieldViewsTest : public ::testing::Test, |
return SendKeyEventToTextfieldViews(key_code, false, false); |
} |
- protected: |
+ View* GetFocusedView() { |
+ return widget_->GetFocusManager()->GetFocusedView(); |
+ } |
+ |
// We need widget to populate wrapper class. |
Widget* widget_; |
@@ -241,7 +261,7 @@ TEST_F(NativeTextfieldViewsTest, PasswordTest) { |
EXPECT_STR_EQ("my password", last_contents_); |
} |
-TEST_F(NativeTextfieldViewsTest, TestOnKeyPressReturnValue) { |
+TEST_F(NativeTextfieldViewsTest, OnKeyPressReturnValueTest) { |
InitTextfield(Textfield::STYLE_DEFAULT); |
EXPECT_TRUE(SendKeyEventToTextfieldViews(app::VKEY_A)); |
// F24, up/down key won't be handled. |
@@ -300,4 +320,32 @@ TEST_F(NativeTextfieldViewsTest, CursorMovement) { |
EXPECT_STR_EQ("one two", last_contents_); |
} |
+TEST_F(NativeTextfieldViewsTest, FocusTraversalTest) { |
+ InitTextfields(Textfield::STYLE_DEFAULT, 3); |
+ textfield_->RequestFocus(); |
+ |
+ EXPECT_EQ(1, GetFocusedView()->GetID()); |
+ widget_->GetFocusManager()->AdvanceFocus(false); |
+ EXPECT_EQ(2, GetFocusedView()->GetID()); |
+ widget_->GetFocusManager()->AdvanceFocus(false); |
+ EXPECT_EQ(3, GetFocusedView()->GetID()); |
+ // Cycle back to the first textfield. |
+ widget_->GetFocusManager()->AdvanceFocus(false); |
+ EXPECT_EQ(1, GetFocusedView()->GetID()); |
+ |
+ widget_->GetFocusManager()->AdvanceFocus(true); |
+ EXPECT_EQ(3, GetFocusedView()->GetID()); |
+ widget_->GetFocusManager()->AdvanceFocus(true); |
+ EXPECT_EQ(2, GetFocusedView()->GetID()); |
+ widget_->GetFocusManager()->AdvanceFocus(true); |
+ EXPECT_EQ(1, GetFocusedView()->GetID()); |
+ // Cycle back to the last textfield. |
+ widget_->GetFocusManager()->AdvanceFocus(true); |
+ EXPECT_EQ(3, GetFocusedView()->GetID()); |
+ |
+ // Request focus should still work. |
+ textfield_->RequestFocus(); |
+ EXPECT_EQ(1, GetFocusedView()->GetID()); |
+} |
+ |
} // namespace views |