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

Side by Side Diff: ui/views/view_unittest.cc

Issue 2713643002: Add View::AddedToWidget and RemovedFromWidget. (Closed)
Patch Set: Use existing propagation code instead of adding more tree walking. Created 3 years, 9 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 unified diff | Download patch
« ui/views/view.cc ('K') | « ui/views/view.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/view.h" 5 #include "ui/views/view.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <map> 9 #include <map>
10 #include <memory> 10 #include <memory>
(...skipping 3317 matching lines...) Expand 10 before | Expand all | Expand 10 after
3328 EXPECT_TRUE(v4->has_remove_details()); 3328 EXPECT_TRUE(v4->has_remove_details());
3329 EXPECT_TRUE(v4->has_add_details()); 3329 EXPECT_TRUE(v4->has_add_details());
3330 EXPECT_EQ(v2.get(), v4->remove_details().parent); 3330 EXPECT_EQ(v2.get(), v4->remove_details().parent);
3331 EXPECT_EQ(&v1, v4->add_details().parent); 3331 EXPECT_EQ(&v1, v4->add_details().parent);
3332 EXPECT_EQ(v4, v4->add_details().child); 3332 EXPECT_EQ(v4, v4->add_details().child);
3333 EXPECT_EQ(v4, v4->remove_details().child); 3333 EXPECT_EQ(v4, v4->remove_details().child);
3334 EXPECT_EQ(&v1, v4->remove_details().move_view); 3334 EXPECT_EQ(&v1, v4->remove_details().move_view);
3335 EXPECT_EQ(v2.get(), v4->add_details().move_view); 3335 EXPECT_EQ(v2.get(), v4->add_details().move_view);
3336 } 3336 }
3337 3337
3338 class WidgetObserverView : public View {
3339 public:
3340 WidgetObserverView();
3341 ~WidgetObserverView() override;
3342
3343 void ResetTestState();
3344
3345 int added_to_widget_count() { return added_to_widget_count_; }
3346 int removed_from_widget_count() { return removed_from_widget_count_; }
3347
3348 private:
3349 void AddedToWidget() override;
3350 void RemovedFromWidget() override;
3351
3352 int added_to_widget_count_;
sky 2017/03/01 20:26:51 Either set in member initializer, or initialize to
msimonides 2017/03/02 07:48:56 Done.
3353 int removed_from_widget_count_;
3354
3355 DISALLOW_COPY_AND_ASSIGN(WidgetObserverView);
3356 };
3357
3358 WidgetObserverView::WidgetObserverView() {
3359 ResetTestState();
3360 }
3361
3362 WidgetObserverView::~WidgetObserverView() {}
3363
3364 void WidgetObserverView::ResetTestState() {
3365 added_to_widget_count_ = 0;
3366 removed_from_widget_count_ = 0;
3367 }
3368
3369 void WidgetObserverView::AddedToWidget() {
3370 ++added_to_widget_count_;
3371 }
3372
3373 void WidgetObserverView::RemovedFromWidget() {
3374 ++removed_from_widget_count_;
3375 }
3376
3377 // Verifies that AddedToWidget and RemovedFromWidget are called for a view when
3378 // it is added to hierarchy.
3379 // The tree looks like this:
3380 // widget
3381 // +-- root
3382 //
3383 // then v1 is added to root:
3384 //
3385 // v1
3386 // +-- v2
3387 //
3388 // finally v1 is removed from root.
3389 TEST_F(ViewTest, AddedToRemovedFromWidget) {
3390 Widget widget;
3391 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
3392 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
3393 params.bounds = gfx::Rect(50, 50, 650, 650);
3394 widget.Init(params);
3395
3396 View* root = widget.GetRootView();
3397
3398 WidgetObserverView v1;
3399 WidgetObserverView v2;
3400 WidgetObserverView v3;
3401 v1.set_owned_by_client();
3402 v2.set_owned_by_client();
3403 v3.set_owned_by_client();
3404
3405 v1.AddChildView(&v2);
3406 EXPECT_EQ(0, v2.added_to_widget_count());
3407 EXPECT_EQ(0, v2.removed_from_widget_count());
3408
3409 root->AddChildView(&v1);
3410 EXPECT_EQ(1, v1.added_to_widget_count());
3411 EXPECT_EQ(0, v1.removed_from_widget_count());
3412 EXPECT_EQ(1, v2.added_to_widget_count());
3413 EXPECT_EQ(0, v2.removed_from_widget_count());
3414
3415 v2.AddChildView(&v3);
3416 EXPECT_EQ(1, v2.added_to_widget_count());
3417
sky 2017/03/01 20:26:51 Add assertions that v1's counts haven't changed (m
msimonides 2017/03/02 07:48:56 Done.
3418 v1.ResetTestState();
3419 v2.ResetTestState();
3420
3421 root->RemoveChildView(&v1);
3422 EXPECT_EQ(0, v1.added_to_widget_count());
3423 EXPECT_EQ(1, v1.removed_from_widget_count());
3424 EXPECT_EQ(0, v2.added_to_widget_count());
3425 EXPECT_EQ(1, v2.removed_from_widget_count());
3426
3427 v2.ResetTestState();
3428 v1.RemoveChildView(&v2);
3429 EXPECT_EQ(0, v2.removed_from_widget_count());
3430
3431 // Test move between parents in a single Widget.
3432 v2.RemoveChildView(&v3);
3433 v1.ResetTestState();
3434 v2.ResetTestState();
3435 v3.ResetTestState();
3436
3437 v1.AddChildView(&v2);
3438 root->AddChildView(&v1);
3439 root->AddChildView(&v3);
3440 EXPECT_EQ(1, v1.added_to_widget_count());
3441 EXPECT_EQ(1, v2.added_to_widget_count());
3442 EXPECT_EQ(1, v3.added_to_widget_count());
3443
3444 v3.AddChildView(&v1);
3445 EXPECT_EQ(1, v1.added_to_widget_count());
3446 EXPECT_EQ(0, v1.removed_from_widget_count());
3447 EXPECT_EQ(1, v2.added_to_widget_count());
3448 EXPECT_EQ(0, v2.removed_from_widget_count());
3449 EXPECT_EQ(1, v3.added_to_widget_count());
3450 EXPECT_EQ(0, v3.removed_from_widget_count());
3451
3452 // Test move between widgets.
3453 Widget second_widget;
3454 params.bounds = gfx::Rect(150, 150, 650, 650);
3455 second_widget.Init(params);
3456
3457 View* second_root = second_widget.GetRootView();
3458
3459 v1.ResetTestState();
3460 v2.ResetTestState();
3461 v3.ResetTestState();
3462
3463 second_root->AddChildView(&v1);
3464 EXPECT_EQ(1, v1.removed_from_widget_count());
3465 EXPECT_EQ(1, v1.added_to_widget_count());
3466 EXPECT_EQ(1, v2.added_to_widget_count());
3467 EXPECT_EQ(1, v2.removed_from_widget_count());
3468 EXPECT_EQ(0, v3.added_to_widget_count());
3469 EXPECT_EQ(0, v3.removed_from_widget_count());
3470 }
3471
3338 // Verifies if the child views added under the root are all deleted when calling 3472 // Verifies if the child views added under the root are all deleted when calling
3339 // RemoveAllChildViews. 3473 // RemoveAllChildViews.
3340 // The tree looks like this: 3474 // The tree looks like this:
3341 // root 3475 // root
3342 // +-- child1 3476 // +-- child1
3343 // +-- foo 3477 // +-- foo
3344 // +-- bar0 3478 // +-- bar0
3345 // +-- bar1 3479 // +-- bar1
3346 // +-- bar2 3480 // +-- bar2
3347 // +-- child2 3481 // +-- child2
(...skipping 1514 matching lines...) Expand 10 before | Expand all | Expand 10 after
4862 std::unique_ptr<View> view = NewView(); 4996 std::unique_ptr<View> view = NewView();
4863 std::unique_ptr<View> child_view = NewView(); 4997 std::unique_ptr<View> child_view = NewView();
4864 std::unique_ptr<View> child_view2 = NewView(); 4998 std::unique_ptr<View> child_view2 = NewView();
4865 view->AddChildView(child_view.get()); 4999 view->AddChildView(child_view.get());
4866 view->AddChildView(child_view2.get()); 5000 view->AddChildView(child_view2.get());
4867 view->ReorderChildView(child_view2.get(), 0); 5001 view->ReorderChildView(child_view2.get(), 0);
4868 EXPECT_EQ(child_view2.get(), view_reordered()); 5002 EXPECT_EQ(child_view2.get(), view_reordered());
4869 } 5003 }
4870 5004
4871 } // namespace views 5005 } // namespace views
OLDNEW
« 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