Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(992)

Unified Diff: ui/views/view_unittest.cc

Issue 2500623002: Add ViewObserver to View for view updates (Closed)
Patch Set: Add DevToolsobserver to View for view updates Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« ui/views/view.cc ('K') | « ui/views/view.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« ui/views/view.cc ('K') | « ui/views/view.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698