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

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

Issue 2713643002: Add View::AddedToWidget and RemovedFromWidget. (Closed)
Patch Set: Review fixes. 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
« no previous file with comments | « 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_ = 0;
3353 int removed_from_widget_count_ = 0;
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 v1.ResetTestState();
3416 v2.ResetTestState();
3417
3418 v2.AddChildView(&v3);
3419 EXPECT_EQ(0, v1.added_to_widget_count());
3420 EXPECT_EQ(0, v1.removed_from_widget_count());
3421 EXPECT_EQ(0, v2.added_to_widget_count());
3422 EXPECT_EQ(0, v2.removed_from_widget_count());
3423
3424 v1.ResetTestState();
3425 v2.ResetTestState();
3426
3427 root->RemoveChildView(&v1);
3428 EXPECT_EQ(0, v1.added_to_widget_count());
3429 EXPECT_EQ(1, v1.removed_from_widget_count());
3430 EXPECT_EQ(0, v2.added_to_widget_count());
3431 EXPECT_EQ(1, v2.removed_from_widget_count());
3432
3433 v2.ResetTestState();
3434 v1.RemoveChildView(&v2);
3435 EXPECT_EQ(0, v2.removed_from_widget_count());
3436
3437 // Test move between parents in a single Widget.
3438 v2.RemoveChildView(&v3);
3439 v1.ResetTestState();
3440 v2.ResetTestState();
3441 v3.ResetTestState();
3442
3443 v1.AddChildView(&v2);
3444 root->AddChildView(&v1);
3445 root->AddChildView(&v3);
3446 EXPECT_EQ(1, v1.added_to_widget_count());
3447 EXPECT_EQ(1, v2.added_to_widget_count());
3448 EXPECT_EQ(1, v3.added_to_widget_count());
3449
3450 v3.AddChildView(&v1);
3451 EXPECT_EQ(1, v1.added_to_widget_count());
3452 EXPECT_EQ(0, v1.removed_from_widget_count());
3453 EXPECT_EQ(1, v2.added_to_widget_count());
3454 EXPECT_EQ(0, v2.removed_from_widget_count());
3455 EXPECT_EQ(1, v3.added_to_widget_count());
3456 EXPECT_EQ(0, v3.removed_from_widget_count());
3457
3458 // Test move between widgets.
3459 Widget second_widget;
3460 params.bounds = gfx::Rect(150, 150, 650, 650);
3461 second_widget.Init(params);
3462
3463 View* second_root = second_widget.GetRootView();
3464
3465 v1.ResetTestState();
3466 v2.ResetTestState();
3467 v3.ResetTestState();
3468
3469 second_root->AddChildView(&v1);
3470 EXPECT_EQ(1, v1.removed_from_widget_count());
3471 EXPECT_EQ(1, v1.added_to_widget_count());
3472 EXPECT_EQ(1, v2.added_to_widget_count());
3473 EXPECT_EQ(1, v2.removed_from_widget_count());
3474 EXPECT_EQ(0, v3.added_to_widget_count());
3475 EXPECT_EQ(0, v3.removed_from_widget_count());
3476 }
3477
3338 // Verifies if the child views added under the root are all deleted when calling 3478 // Verifies if the child views added under the root are all deleted when calling
3339 // RemoveAllChildViews. 3479 // RemoveAllChildViews.
3340 // The tree looks like this: 3480 // The tree looks like this:
3341 // root 3481 // root
3342 // +-- child1 3482 // +-- child1
3343 // +-- foo 3483 // +-- foo
3344 // +-- bar0 3484 // +-- bar0
3345 // +-- bar1 3485 // +-- bar1
3346 // +-- bar2 3486 // +-- bar2
3347 // +-- child2 3487 // +-- child2
(...skipping 1514 matching lines...) Expand 10 before | Expand all | Expand 10 after
4862 std::unique_ptr<View> view = NewView(); 5002 std::unique_ptr<View> view = NewView();
4863 std::unique_ptr<View> child_view = NewView(); 5003 std::unique_ptr<View> child_view = NewView();
4864 std::unique_ptr<View> child_view2 = NewView(); 5004 std::unique_ptr<View> child_view2 = NewView();
4865 view->AddChildView(child_view.get()); 5005 view->AddChildView(child_view.get());
4866 view->AddChildView(child_view2.get()); 5006 view->AddChildView(child_view2.get());
4867 view->ReorderChildView(child_view2.get(), 0); 5007 view->ReorderChildView(child_view2.get(), 0);
4868 EXPECT_EQ(child_view2.get(), view_reordered()); 5008 EXPECT_EQ(child_view2.get(), view_reordered());
4869 } 5009 }
4870 5010
4871 } // namespace views 5011 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/view.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698