| // Copyright 2014 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. |
| |
| #ifndef UI_VIEWS_TEST_FOCUS_MANAGER_TEST_H_ |
| #define UI_VIEWS_TEST_FOCUS_MANAGER_TEST_H_ |
| |
| #include "ui/views/focus/focus_manager.h" |
| #include "ui/views/focus/widget_focus_manager.h" |
| #include "ui/views/test/views_test_base.h" |
| #include "ui/views/widget/widget_delegate.h" |
| |
| namespace views { |
| |
| class FocusChangeListener; |
| |
| class FocusManagerTest : public ViewsTestBase, public WidgetDelegate { |
| public: |
| FocusManagerTest(); |
| virtual ~FocusManagerTest(); |
| |
| // Convenience to obtain the focus manager for the test's hosting widget. |
| FocusManager* GetFocusManager(); |
| |
| // Overridden from ViewsTestBase: |
| virtual void SetUp() override; |
| virtual void TearDown() override; |
| |
| // Overridden from WidgetDelegate: |
| virtual View* GetContentsView() override; |
| virtual Widget* GetWidget() override; |
| virtual const Widget* GetWidget() const override; |
| virtual void GetAccessiblePanes(std::vector<View*>* panes) override; |
| |
| protected: |
| // Called after the Widget is initialized and the content view is added. |
| // Override to add controls to the layout. |
| virtual void InitContentView(); |
| |
| void AddFocusChangeListener(FocusChangeListener* listener); |
| void AddWidgetFocusChangeListener(WidgetFocusChangeListener* listener); |
| |
| // For testing FocusManager::RotatePaneFocus(). |
| void SetAccessiblePanes(const std::vector<View*>& panes); |
| |
| private: |
| View* contents_view_; |
| FocusChangeListener* focus_change_listener_; |
| WidgetFocusChangeListener* widget_focus_change_listener_; |
| std::vector<View*> accessible_panes_; |
| |
| DISALLOW_COPY_AND_ASSIGN(FocusManagerTest); |
| }; |
| |
| typedef std::pair<View*, View*> ViewPair; |
| |
| // Use to record focus change notifications. |
| class TestFocusChangeListener : public FocusChangeListener { |
| public: |
| TestFocusChangeListener(); |
| virtual ~TestFocusChangeListener(); |
| |
| const std::vector<ViewPair>& focus_changes() const { return focus_changes_; } |
| void ClearFocusChanges(); |
| |
| // Overridden from FocusChangeListener: |
| virtual void OnWillChangeFocus(View* focused_before, |
| View* focused_now) override; |
| virtual void OnDidChangeFocus(View* focused_before, |
| View* focused_now) override; |
| |
| private: |
| // A vector of which views lost/gained focus. |
| std::vector<ViewPair> focus_changes_; |
| |
| DISALLOW_COPY_AND_ASSIGN(TestFocusChangeListener); |
| }; |
| |
| typedef std::pair<gfx::NativeView, gfx::NativeView> NativeViewPair; |
| |
| // Use to record widget focus change notifications. |
| class TestWidgetFocusChangeListener : public WidgetFocusChangeListener { |
| public: |
| TestWidgetFocusChangeListener(); |
| virtual ~TestWidgetFocusChangeListener(); |
| |
| const std::vector<NativeViewPair>& focus_changes() const { |
| return focus_changes_; |
| } |
| void ClearFocusChanges(); |
| |
| // Overridden from WidgetFocusChangeListener: |
| virtual void OnNativeFocusChange(gfx::NativeView focused_before, |
| gfx::NativeView focused_now) override; |
| |
| private: |
| // Pairs of (focused_before, focused_now) parameters we've received via calls |
| // to OnNativeFocusChange(), in oldest-to-newest-received order. |
| std::vector<NativeViewPair> focus_changes_; |
| |
| DISALLOW_COPY_AND_ASSIGN(TestWidgetFocusChangeListener); |
| }; |
| |
| } // namespace views |
| |
| #endif // UI_VIEWS_TEST_FOCUS_MANAGER_TEST_H_ |