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

Unified Diff: ui/views/view_unittest.cc

Issue 2500623002: Add ViewObserver to View for view updates (Closed)
Patch Set: sadruls comments 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/devtools_observer.h ('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..cf728b68618acd93c041717504021aac286a0097 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* target,
+ View* old_parent,
+ View* new_parent) override {
+ ViewHierarchyChangedDetails details;
+ details.target = target;
+ details.old_parent = old_parent;
+ details.new_parent = new_parent;
+ view_hierarchy_changed_details_.push_back(details);
+ }
+
+ 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(View* target, View* old_parent, View* new_parent) {
+ for (auto& details : view_hierarchy_changed_details_) {
+ if (details.target == target && details.old_parent == old_parent &&
+ details.new_parent == new_parent)
+ return true;
+ }
+ return false;
+ }
+
+ void reset() {
+ view_hierarchy_changed_details_.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->set_devtools_observer(this);
+ return view;
+ }
+
+ int views_hierarchy_changed_times() const {
+ return static_cast<int>(view_hierarchy_changed_details_.size());
+ }
+ 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:
+ struct ViewHierarchyChangedDetails {
+ View* target;
+ View* old_parent;
+ View* new_parent;
+ };
+ std::vector<ViewHierarchyChangedDetails> view_hierarchy_changed_details_;
+ 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> child_view = NewView();
+
+ parent1->AddChildView(child_view.get());
+ EXPECT_EQ(1, views_hierarchy_changed_times());
+ EXPECT_TRUE(DidChangeHierarchy(child_view.get(), nullptr, parent1.get()));
+ reset();
+
+ // Removed from parent1, added to parent2
+ parent2->AddChildView(child_view.get());
+ EXPECT_EQ(2, views_hierarchy_changed_times());
+ EXPECT_TRUE(DidChangeHierarchy(child_view.get(), parent1.get(), nullptr));
+ EXPECT_TRUE(DidChangeHierarchy(child_view.get(), nullptr, parent2.get()));
+
+ reset();
+
+ parent2->RemoveChildView(child_view.get());
+ EXPECT_EQ(1, views_hierarchy_changed_times());
+ EXPECT_TRUE(DidChangeHierarchy(child_view.get(), parent2.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> child_view = NewView();
+ std::unique_ptr<View> child_view2 = NewView();
+ view->AddChildView(child_view.get());
+ view->AddChildView(child_view2.get());
+ view->ReorderChildView(child_view2.get(), 0);
+ EXPECT_EQ(child_view2.get(), view_reordered());
+}
+
} // namespace views
« ui/views/devtools_observer.h ('K') | « ui/views/view.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698