Chromium Code Reviews| Index: ui/views/view_unittest.cc |
| diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc |
| index e9af12ad5a964d0a67207326d15e99dbd2163f12..d1865c77cd4b7960a3e8ee7e66775b50e0bba0a3 100644 |
| --- a/ui/views/view_unittest.cc |
| +++ b/ui/views/view_unittest.cc |
| @@ -39,6 +39,7 @@ |
| #include "ui/views/controls/native/native_view_host.h" |
| #include "ui/views/controls/scroll_view.h" |
| #include "ui/views/controls/textfield/textfield.h" |
| +#include "ui/views/devtools_observer.h" |
| #include "ui/views/focus/view_storage.h" |
| #include "ui/views/test/views_test_base.h" |
| #include "ui/views/widget/native_widget.h" |
| @@ -4577,4 +4578,146 @@ TEST_F(ViewTest, CrashOnAddFromFromOnNativeThemeChanged) { |
| EXPECT_TRUE(v->on_native_theme_changed_called()); |
| } |
| +//////////////////////////////////////////////////////////////////////////////// |
| +// DevTools observer tests. |
| +//////////////////////////////////////////////////////////////////////////////// |
| + |
| +class DevToolsObserverTest : public ViewTest, public DevToolsObserver { |
| + public: |
| + DevToolsObserverTest() |
| + : view_visibility_changed_(nullptr), |
| + view_enabled_changed_(nullptr), |
| + view_bounds_changed_(nullptr), |
| + view_reordered_(nullptr) {} |
| + |
| + ~DevToolsObserverTest() override {} |
| + |
| + void OnViewHierarchyChanged( |
| + View* view, |
| + const View::ViewHierarchyChangedDetails& details) override { |
| + views_hierarchy_changed_.push_back(view); |
| + view_hierarchy_changed_details_ = details; |
|
sadrul
2016/11/15 17:21:49
I think we want to check that this isn't called mo
Sarmad Hashmi
2016/11/15 17:54:56
Done.
|
| + } |
| + |
| + void OnViewVisibilityChanged(View* view, bool visible) override { |
| + view_visibility_changed_ = view; |
| + } |
| + |
| + void OnViewEnabledChanged(View* view, int index) override { |
| + view_enabled_changed_ = view; |
| + } |
| + |
| + void OnViewBoundsChanged(View* view, const gfx::Rect& new_bounds) override { |
| + view_bounds_changed_ = view; |
| + } |
| + |
| + void OnChildViewReordered(View* view, int index) override { |
| + view_reordered_ = view; |
| + } |
| + |
| + bool DidChangeHierarchy(bool is_add, |
| + View* parent, |
| + View* child, |
| + View* move_view) { |
| + return view_hierarchy_changed_details_.is_add == is_add && |
| + view_hierarchy_changed_details_.parent == parent && |
| + view_hierarchy_changed_details_.child == child && |
| + view_hierarchy_changed_details_.move_view == move_view; |
| + } |
| + |
| + bool DidChangeHierarchy(View* view) { |
| + return std::find(views_hierarchy_changed_.begin(), |
| + views_hierarchy_changed_.end(), |
| + view) != views_hierarchy_changed_.end(); |
| + } |
| + |
| + void reset() { |
| + views_hierarchy_changed_.clear(); |
| + view_visibility_changed_ = nullptr; |
| + view_enabled_changed_ = nullptr; |
| + view_bounds_changed_ = nullptr; |
| + view_reordered_ = nullptr; |
| + } |
| + |
| + std::unique_ptr<View> NewView() { |
| + auto view = base::MakeUnique<View>(); |
| + view->SetDevToolsObserver(this); |
| + return view; |
| + } |
| + |
| + const View* view_visibility_changed() const { |
| + return view_visibility_changed_; |
| + } |
| + const View* view_enabled_changed() const { return view_enabled_changed_; } |
| + const View* view_bounds_changed() const { return view_bounds_changed_; } |
| + const View* view_reordered() const { return view_reordered_; } |
| + |
| + private: |
| + View::ViewHierarchyChangedDetails view_hierarchy_changed_details_; |
| + |
| + std::vector<View*> views_hierarchy_changed_; |
| + View* view_visibility_changed_; |
| + View* view_enabled_changed_; |
| + View* view_bounds_changed_; |
| + View* view_reordered_; |
| +}; |
| + |
| +TEST_F(DevToolsObserverTest, DevToolsObserverViewHierarchyChanged) { |
| + std::unique_ptr<View> parent1 = NewView(); |
| + std::unique_ptr<View> parent2 = NewView(); |
| + std::unique_ptr<View> childView = NewView(); |
| + |
| + parent1->AddChildView(childView.get()); |
| + EXPECT_TRUE(DidChangeHierarchy(parent1.get())); |
| + EXPECT_TRUE( |
| + DidChangeHierarchy(true, parent1.get(), childView.get(), nullptr)); |
| + |
| + reset(); |
| + |
| + parent2->AddChildView(childView.get()); |
| + EXPECT_TRUE(DidChangeHierarchy(parent2.get())); |
| + EXPECT_TRUE( |
| + DidChangeHierarchy(true, parent2.get(), childView.get(), parent1.get())); |
| + |
| + reset(); |
| + |
| + parent2->RemoveChildView(childView.get()); |
| + EXPECT_TRUE(DidChangeHierarchy(parent2.get())); |
| + EXPECT_TRUE( |
| + DidChangeHierarchy(false, parent2.get(), childView.get(), nullptr)); |
| +} |
| + |
| +TEST_F(DevToolsObserverTest, DevToolsObserverViewVisibilityChanged) { |
| + std::unique_ptr<View> view = NewView(); |
| + view->SetVisible(false); |
| + EXPECT_EQ(view.get(), view_visibility_changed()); |
| +} |
| + |
| +TEST_F(DevToolsObserverTest, DevToolsObserverViewEnabledChanged) { |
| + std::unique_ptr<View> view = NewView(); |
| + view->SetEnabled(false); |
| + EXPECT_EQ(view.get(), view_enabled_changed()); |
| +} |
| + |
| +TEST_F(DevToolsObserverTest, DevToolsObserverViewBoundsChanged) { |
| + std::unique_ptr<View> view = NewView(); |
| + view->SetBounds(2, 2, 2, 2); |
| + EXPECT_EQ(view.get(), view_bounds_changed()); |
| + |
| + reset(); |
| + |
| + view->SetBoundsRect(gfx::Rect(1, 1, 1, 1)); |
| + EXPECT_EQ(view.get(), view_bounds_changed()); |
| +} |
| + |
| +TEST_F(DevToolsObserverTest, DevToolsObserverChildViewReordered) { |
| + std::unique_ptr<View> view = NewView(); |
| + std::unique_ptr<View> childView = NewView(); |
| + std::unique_ptr<View> childView2 = NewView(); |
| + view->AddChildView(childView.get()); |
| + view->AddChildView(childView2.get()); |
| + view->ReorderChildView(childView2.get(), 0); |
| + EXPECT_EQ(childView2.get(), view_reordered()); |
| +} |
| + |
| } // namespace views |