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

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

Issue 2500623002: Add ViewObserver to View for view updates (Closed)
Patch Set: Remove Rect forward declaration and view.h include Created 4 years 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_observer.h ('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 23 matching lines...) Expand all
34 #include "ui/gfx/path.h" 34 #include "ui/gfx/path.h"
35 #include "ui/gfx/transform.h" 35 #include "ui/gfx/transform.h"
36 #include "ui/native_theme/native_theme.h" 36 #include "ui/native_theme/native_theme.h"
37 #include "ui/strings/grit/ui_strings.h" 37 #include "ui/strings/grit/ui_strings.h"
38 #include "ui/views/background.h" 38 #include "ui/views/background.h"
39 #include "ui/views/controls/native/native_view_host.h" 39 #include "ui/views/controls/native/native_view_host.h"
40 #include "ui/views/controls/scroll_view.h" 40 #include "ui/views/controls/scroll_view.h"
41 #include "ui/views/controls/textfield/textfield.h" 41 #include "ui/views/controls/textfield/textfield.h"
42 #include "ui/views/focus/view_storage.h" 42 #include "ui/views/focus/view_storage.h"
43 #include "ui/views/test/views_test_base.h" 43 #include "ui/views/test/views_test_base.h"
44 #include "ui/views/view_observer.h"
44 #include "ui/views/widget/native_widget.h" 45 #include "ui/views/widget/native_widget.h"
45 #include "ui/views/widget/root_view.h" 46 #include "ui/views/widget/root_view.h"
46 #include "ui/views/window/dialog_client_view.h" 47 #include "ui/views/window/dialog_client_view.h"
47 #include "ui/views/window/dialog_delegate.h" 48 #include "ui/views/window/dialog_delegate.h"
48 49
49 using base::ASCIIToUTF16; 50 using base::ASCIIToUTF16;
50 51
51 namespace { 52 namespace {
52 53
53 // Returns true if |ancestor| is an ancestor of |layer|. 54 // Returns true if |ancestor| is an ancestor of |layer|.
(...skipping 4516 matching lines...) Expand 10 before | Expand all | Expand 10 after
4570 params.bounds = gfx::Rect(50, 50, 350, 350); 4571 params.bounds = gfx::Rect(50, 50, 350, 350);
4571 widget.Init(params); 4572 widget.Init(params);
4572 4573
4573 AddViewWithChildLayer(widget.GetRootView()); 4574 AddViewWithChildLayer(widget.GetRootView());
4574 ViewThatAddsViewInOnNativeThemeChanged* v = 4575 ViewThatAddsViewInOnNativeThemeChanged* v =
4575 new ViewThatAddsViewInOnNativeThemeChanged; 4576 new ViewThatAddsViewInOnNativeThemeChanged;
4576 widget.GetRootView()->AddChildView(v); 4577 widget.GetRootView()->AddChildView(v);
4577 EXPECT_TRUE(v->on_native_theme_changed_called()); 4578 EXPECT_TRUE(v->on_native_theme_changed_called());
4578 } 4579 }
4579 4580
4581 ////////////////////////////////////////////////////////////////////////////////
4582 // Observer tests.
4583 ////////////////////////////////////////////////////////////////////////////////
4584
4585 class ViewObserverTest : public ViewTest, public ViewObserver {
4586 public:
4587 ViewObserverTest()
4588 : child_view_added_times_(0),
4589 child_view_removed_times_(0),
4590 child_view_added_(nullptr),
4591 child_view_removed_(nullptr),
4592 child_view_removed_parent_(nullptr),
4593 view_visibility_changed_(nullptr),
4594 view_enabled_changed_(nullptr),
4595 view_bounds_changed_(nullptr),
4596 view_reordered_(nullptr) {}
4597
4598 ~ViewObserverTest() override {}
4599
4600 // ViewObserver:
4601 void OnChildViewAdded(View* child) override {
4602 child_view_added_times_++;
4603 child_view_added_ = child;
4604 }
4605 void OnChildViewRemoved(View* child, View* parent) override {
4606 child_view_removed_times_++;
4607 child_view_removed_ = child;
4608 child_view_removed_parent_ = parent;
4609 }
4610
4611 void OnViewVisibilityChanged(View* view) override {
4612 view_visibility_changed_ = view;
4613 }
4614
4615 void OnViewEnabledChanged(View* view) override {
4616 view_enabled_changed_ = view;
4617 }
4618
4619 void OnViewBoundsChanged(View* view) override { view_bounds_changed_ = view; }
4620
4621 void OnChildViewReordered(View* view) override { view_reordered_ = view; }
4622
4623 void reset() {
4624 child_view_added_times_ = 0;
4625 child_view_removed_times_ = 0;
4626 child_view_added_ = nullptr;
4627 child_view_removed_ = nullptr;
4628 child_view_removed_parent_ = nullptr;
4629 view_visibility_changed_ = nullptr;
4630 view_enabled_changed_ = nullptr;
4631 view_bounds_changed_ = nullptr;
4632 view_reordered_ = nullptr;
4633 }
4634
4635 std::unique_ptr<View> NewView() {
4636 auto view = base::MakeUnique<View>();
4637 view->AddObserver(this);
4638 return view;
4639 }
4640
4641 int child_view_added_times() { return child_view_added_times_; }
4642 int child_view_removed_times() { return child_view_removed_times_; }
4643 const View* child_view_added() const { return child_view_added_; }
4644 const View* child_view_removed() const { return child_view_removed_; }
4645 const View* child_view_removed_parent() const {
4646 return child_view_removed_parent_;
4647 }
4648 const View* view_visibility_changed() const {
4649 return view_visibility_changed_;
4650 }
4651 const View* view_enabled_changed() const { return view_enabled_changed_; }
4652 const View* view_bounds_changed() const { return view_bounds_changed_; }
4653 const View* view_reordered() const { return view_reordered_; }
4654
4655 private:
4656 int child_view_added_times_;
4657 int child_view_removed_times_;
4658
4659 View* child_view_added_;
4660 View* child_view_removed_;
4661 View* child_view_removed_parent_;
4662 View* view_visibility_changed_;
4663 View* view_enabled_changed_;
4664 View* view_bounds_changed_;
4665 View* view_reordered_;
4666
4667 DISALLOW_COPY_AND_ASSIGN(ViewObserverTest);
4668 };
4669
4670 TEST_F(ViewObserverTest, ViewParentChanged) {
4671 std::unique_ptr<View> parent1 = NewView();
4672 std::unique_ptr<View> parent2 = NewView();
4673 std::unique_ptr<View> child_view = NewView();
4674
4675 parent1->AddChildView(child_view.get());
4676 EXPECT_EQ(0, child_view_removed_times());
4677 EXPECT_EQ(1, child_view_added_times());
4678 EXPECT_EQ(child_view.get(), child_view_added());
4679 EXPECT_EQ(child_view.get()->parent(), parent1.get());
4680 reset();
4681
4682 // Removed from parent1, added to parent2
4683 parent2->AddChildView(child_view.get());
4684 EXPECT_EQ(1, child_view_removed_times());
4685 EXPECT_EQ(1, child_view_added_times());
4686 EXPECT_EQ(child_view.get(), child_view_removed());
4687 EXPECT_EQ(parent1.get(), child_view_removed_parent());
4688 EXPECT_EQ(child_view.get(), child_view_added());
4689 EXPECT_EQ(child_view.get()->parent(), parent2.get());
4690
4691 reset();
4692
4693 parent2->RemoveChildView(child_view.get());
4694 EXPECT_EQ(1, child_view_removed_times());
4695 EXPECT_EQ(0, child_view_added_times());
4696 EXPECT_EQ(child_view.get(), child_view_removed());
4697 EXPECT_EQ(parent2.get(), child_view_removed_parent());
4698 }
4699
4700 TEST_F(ViewObserverTest, ViewVisibilityChanged) {
4701 std::unique_ptr<View> view = NewView();
4702 view->SetVisible(false);
4703 EXPECT_EQ(view.get(), view_visibility_changed());
4704 EXPECT_EQ(false, view->visible());
4705 }
4706
4707 TEST_F(ViewObserverTest, ViewEnabledChanged) {
4708 std::unique_ptr<View> view = NewView();
4709 view->SetEnabled(false);
4710 EXPECT_EQ(view.get(), view_enabled_changed());
4711 EXPECT_EQ(false, view->enabled());
4712 }
4713
4714 TEST_F(ViewObserverTest, ViewBoundsChanged) {
4715 std::unique_ptr<View> view = NewView();
4716 gfx::Rect bounds(2, 2, 2, 2);
4717 view->SetBoundsRect(bounds);
4718 EXPECT_EQ(view.get(), view_bounds_changed());
4719 EXPECT_EQ(bounds, view->bounds());
4720
4721 reset();
4722
4723 gfx::Rect new_bounds(1, 1, 1, 1);
4724 view->SetBoundsRect(new_bounds);
4725 EXPECT_EQ(view.get(), view_bounds_changed());
4726 EXPECT_EQ(new_bounds, view->bounds());
4727 }
4728
4729 TEST_F(ViewObserverTest, ChildViewReordered) {
4730 std::unique_ptr<View> view = NewView();
4731 std::unique_ptr<View> child_view = NewView();
4732 std::unique_ptr<View> child_view2 = NewView();
4733 view->AddChildView(child_view.get());
4734 view->AddChildView(child_view2.get());
4735 view->ReorderChildView(child_view2.get(), 0);
4736 EXPECT_EQ(child_view2.get(), view_reordered());
4737 }
4738
4580 } // namespace views 4739 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/view_observer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698