Index: ui/views/focus/focus_manager_unittest.cc |
diff --git a/ui/views/focus/focus_manager_unittest.cc b/ui/views/focus/focus_manager_unittest.cc |
index 9bd988d4e0896d8adaa1886891094e59406e144f..3513e2b70a7a71118e479244cf5e538f02b6ba0b 100644 |
--- a/ui/views/focus/focus_manager_unittest.cc |
+++ b/ui/views/focus/focus_manager_unittest.cc |
@@ -2,17 +2,22 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include "ui/views/focus/focus_manager.h" |
+ |
#include <utility> |
#include <vector> |
+#include "base/command_line.h" |
#include "base/strings/utf_string_conversions.h" |
#include "ui/aura/client/focus_client.h" |
#include "ui/aura/window.h" |
#include "ui/base/accelerators/accelerator.h" |
+#include "ui/base/ime/dummy_text_input_client.h" |
+#include "ui/base/ime/text_input_focus_manager.h" |
+#include "ui/base/ui_base_switches.h" |
#include "ui/events/keycodes/keyboard_codes.h" |
#include "ui/views/accessible_pane_view.h" |
#include "ui/views/controls/button/label_button.h" |
-#include "ui/views/controls/textfield/textfield.h" |
#include "ui/views/focus/focus_manager_factory.h" |
#include "ui/views/focus/focus_manager_test.h" |
#include "ui/views/focus/widget_focus_manager.h" |
@@ -53,6 +58,8 @@ class SimpleTestView : public View { |
private: |
std::vector<FocusTestEvent>* event_list_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SimpleTestView); |
}; |
// Tests that the appropriate Focus related methods are called when a View |
@@ -767,16 +774,72 @@ TEST_F(FocusManagerTest, StoreFocusedView) { |
View view; |
GetFocusManager()->SetFocusedView(&view); |
GetFocusManager()->StoreFocusedView(false); |
+ EXPECT_EQ(NULL, GetFocusManager()->GetFocusedView()); |
EXPECT_TRUE(GetFocusManager()->RestoreFocusedView()); |
EXPECT_EQ(&view, GetFocusManager()->GetStoredFocusView()); |
// Repeat with |true|. |
GetFocusManager()->SetFocusedView(&view); |
GetFocusManager()->StoreFocusedView(true); |
+ EXPECT_EQ(NULL, GetFocusManager()->GetFocusedView()); |
EXPECT_TRUE(GetFocusManager()->RestoreFocusedView()); |
EXPECT_EQ(&view, GetFocusManager()->GetStoredFocusView()); |
} |
+class TextInputTestView : public View { |
+ public: |
+ TextInputTestView() {} |
+ |
+ virtual ui::TextInputClient* GetTextInputClient() OVERRIDE { |
+ return &text_input_client_; |
+ } |
+ |
+ private: |
+ ui::DummyTextInputClient text_input_client_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TextInputTestView); |
+}; |
+ |
+TEST_F(FocusManagerTest, TextInputClient) { |
+ base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); |
+ cmd_line->AppendSwitch(switches::kEnableTextInputFocusManager); |
+ |
+ View* view = new TextInputTestView; |
+ ui::TextInputClient* text_input_client = view->GetTextInputClient(); |
+ view->SetFocusable(true); |
+ GetContentsView()->AddChildView(view); |
+ ui::TextInputFocusManager* text_input_focus_manager = |
+ ui::TextInputFocusManager::GetInstance(); |
+ |
+ GetFocusManager()->SetFocusedView(view); |
+ EXPECT_EQ(view, GetFocusManager()->GetFocusedView()); |
+ EXPECT_EQ(text_input_client, |
+ text_input_focus_manager->GetFocusedTextInputClient()); |
+ GetFocusManager()->StoreFocusedView(false); |
+ EXPECT_TRUE(GetFocusManager()->RestoreFocusedView()); |
+ EXPECT_EQ(text_input_client, |
+ text_input_focus_manager->GetFocusedTextInputClient()); |
+ |
+ // Repeat with |true|. |
+ GetFocusManager()->SetFocusedView(view); |
+ EXPECT_EQ(view, GetFocusManager()->GetFocusedView()); |
+ EXPECT_EQ(text_input_client, |
+ text_input_focus_manager->GetFocusedTextInputClient()); |
+ GetFocusManager()->StoreFocusedView(true); |
+ EXPECT_TRUE(GetFocusManager()->RestoreFocusedView()); |
+ EXPECT_EQ(text_input_client, |
+ text_input_focus_manager->GetFocusedTextInputClient()); |
+ |
+ // Focus the view twice in a row. |
+ GetFocusManager()->SetFocusedView(view); |
+ EXPECT_EQ(text_input_client, |
+ text_input_focus_manager->GetFocusedTextInputClient()); |
+ ui::TextInputFocusManager::GetInstance()->FocusTextInputClient(NULL); |
+ GetFocusManager()->SetFocusedView(view); |
+ EXPECT_EQ(text_input_client, |
+ text_input_focus_manager->GetFocusedTextInputClient()); |
+} |
+ |
namespace { |
// Trivial WidgetDelegate implementation that allows setting return value of |