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

Unified Diff: ui/views/view_unittest.cc

Issue 2713643002: Add View::AddedToWidget and RemovedFromWidget. (Closed)
Patch Set: Created 3 years, 10 months 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 e1b6710554409fd3a4dce25fd321645b93530eff..3f3a7af9a81cefa3b89b1627664867d89551e36e 100644
--- a/ui/views/view_unittest.cc
+++ b/ui/views/view_unittest.cc
@@ -3335,6 +3335,93 @@ TEST_F(ViewTest, ViewHierarchyChanged) {
EXPECT_EQ(v2.get(), v4->add_details().move_view);
}
+class WidgetObserverView : public View {
+ public:
+ WidgetObserverView();
+ ~WidgetObserverView() override;
+
+ void ResetTestState();
+
+ bool was_added_to_widget() { return was_added_to_widget_; }
+ bool was_removed_from_widget() { return was_removed_from_widget_; }
+
+ private:
+ void AddedToWidget() override;
+ void RemovedFromWidget() override;
+
+ bool was_added_to_widget_;
sky 2017/02/22 17:21:33 Make these counts, so you know if called more ofte
+ bool was_removed_from_widget_;
+};
sky 2017/02/22 17:21:33 DISALLOW...
+
+WidgetObserverView::WidgetObserverView() {
+ ResetTestState();
+}
+
+WidgetObserverView::~WidgetObserverView() {}
+
+void WidgetObserverView::ResetTestState() {
+ was_added_to_widget_ = false;
+ was_removed_from_widget_ = false;
+}
+
+void WidgetObserverView::AddedToWidget() {
+ was_added_to_widget_ = true;
+}
+
+void WidgetObserverView::RemovedFromWidget() {
+ was_removed_from_widget_ = true;
+}
+
+// Verifies that AddedToWidget and RemovedFromWidget are called for a view when
+// it is added to hierarchy.
+// The tree looks like this:
+// widget
+// +-- root
+//
+// then v1 is added to root:
+//
+// v1
+// +-- v2
+//
+// finally v1 is removed from root.
+TEST_F(ViewTest, AddedToRemovedFromWidget) {
+ std::unique_ptr<Widget> widget(new Widget);
sky 2017/02/22 17:21:33 No need for a unique_ptr here, create on stack.
+ Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
+ params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.bounds = gfx::Rect(50, 50, 650, 650);
+ widget->Init(params);
+
+ View* root = widget->GetRootView();
+
+ WidgetObserverView v1;
+ WidgetObserverView v2;
+ v1.set_owned_by_client();
+ v2.set_owned_by_client();
+
+ v1.AddChildView(&v2);
+ EXPECT_FALSE(v2.was_added_to_widget());
+ EXPECT_FALSE(v2.was_removed_from_widget());
+
+ root->AddChildView(&v1);
+ EXPECT_TRUE(v1.was_added_to_widget());
+ EXPECT_FALSE(v1.was_removed_from_widget());
+ EXPECT_TRUE(v2.was_added_to_widget());
+ EXPECT_FALSE(v2.was_removed_from_widget());
+
+ v1.ResetTestState();
+ v2.ResetTestState();
+
+ root->RemoveChildView(&v1);
+ EXPECT_FALSE(v1.was_added_to_widget());
+ EXPECT_TRUE(v1.was_removed_from_widget());
+ EXPECT_FALSE(v2.was_added_to_widget());
+ EXPECT_TRUE(v2.was_removed_from_widget());
+
+ v2.ResetTestState();
+ v1.RemoveChildView(&v2);
+ EXPECT_FALSE(v2.was_removed_from_widget());
+}
+
// Verifies if the child views added under the root are all deleted when calling
// RemoveAllChildViews.
// The tree looks like this:
« 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