OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |