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

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

Issue 2500623002: Add ViewObserver to View for view updates (Closed)
Patch Set: sadruls comments Created 4 years, 1 month 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 21 matching lines...) Expand all
32 #include "ui/events/scoped_target_handler.h" 32 #include "ui/events/scoped_target_handler.h"
33 #include "ui/gfx/canvas.h" 33 #include "ui/gfx/canvas.h"
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/devtools_observer.h"
42 #include "ui/views/focus/view_storage.h" 43 #include "ui/views/focus/view_storage.h"
43 #include "ui/views/test/views_test_base.h" 44 #include "ui/views/test/views_test_base.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 {
(...skipping 4518 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 // DevTools observer tests.
4583 ////////////////////////////////////////////////////////////////////////////////
4584
4585 class DevToolsObserverTest : public ViewTest, public DevToolsObserver {
4586 public:
4587 DevToolsObserverTest()
4588 : views_hierarchy_changed_times_(0),
4589 view_visibility_changed_(nullptr),
4590 view_enabled_changed_(nullptr),
4591 view_bounds_changed_(nullptr),
4592 view_reordered_(nullptr) {}
4593
4594 ~DevToolsObserverTest() override {}
4595
4596 void OnViewHierarchyChanged(
4597 View* view,
4598 const View::ViewHierarchyChangedDetails& details) override {
4599 views_hierarchy_changed_.push_back(view);
4600 view_hierarchy_changed_details_ = details;
4601 views_hierarchy_changed_times_++;
4602 }
4603
4604 void OnViewVisibilityChanged(View* view, bool visible) override {
4605 view_visibility_changed_ = view;
4606 }
4607
4608 void OnViewEnabledChanged(View* view, int index) override {
4609 view_enabled_changed_ = view;
4610 }
4611
4612 void OnViewBoundsChanged(View* view, const gfx::Rect& new_bounds) override {
4613 view_bounds_changed_ = view;
4614 }
4615
4616 void OnChildViewReordered(View* view, int index) override {
4617 view_reordered_ = view;
4618 }
4619
4620 bool DidChangeHierarchy(bool is_add,
4621 View* parent,
4622 View* child,
4623 View* move_view) {
4624 return view_hierarchy_changed_details_.is_add == is_add &&
4625 view_hierarchy_changed_details_.parent == parent &&
4626 view_hierarchy_changed_details_.child == child &&
4627 view_hierarchy_changed_details_.move_view == move_view;
4628 }
4629
4630 bool DidChangeHierarchy(View* view) {
4631 return std::find(views_hierarchy_changed_.begin(),
4632 views_hierarchy_changed_.end(),
4633 view) != views_hierarchy_changed_.end();
4634 }
4635
4636 void reset() {
4637 views_hierarchy_changed_.clear();
4638 views_hierarchy_changed_times_ = 0;
4639 view_visibility_changed_ = nullptr;
4640 view_enabled_changed_ = nullptr;
4641 view_bounds_changed_ = nullptr;
4642 view_reordered_ = nullptr;
4643 }
4644
4645 std::unique_ptr<View> NewView() {
4646 auto view = base::MakeUnique<View>();
4647 view->set_devtools_observer(this);
4648 return view;
4649 }
4650
4651 int views_hierarchy_changed_times() const {
4652 return views_hierarchy_changed_times_;
4653 }
4654 const View* view_visibility_changed() const {
4655 return view_visibility_changed_;
4656 }
4657 const View* view_enabled_changed() const { return view_enabled_changed_; }
4658 const View* view_bounds_changed() const { return view_bounds_changed_; }
4659 const View* view_reordered() const { return view_reordered_; }
4660
4661 private:
4662 View::ViewHierarchyChangedDetails view_hierarchy_changed_details_;
4663
4664 int views_hierarchy_changed_times_;
4665 std::vector<View*> views_hierarchy_changed_;
4666 View* view_visibility_changed_;
4667 View* view_enabled_changed_;
4668 View* view_bounds_changed_;
4669 View* view_reordered_;
4670 };
4671
4672 TEST_F(DevToolsObserverTest, DevToolsObserverViewHierarchyChanged) {
4673 std::unique_ptr<View> parent1 = NewView();
4674 std::unique_ptr<View> parent2 = NewView();
4675 std::unique_ptr<View> childView = NewView();
4676
4677 parent1->AddChildView(childView.get());
4678 EXPECT_EQ(2, views_hierarchy_changed_times());
sadrul 2016/11/16 18:35:23 Does this need to be called twice? Shouldn't once
4679 EXPECT_TRUE(DidChangeHierarchy(parent1.get()));
4680 EXPECT_TRUE(DidChangeHierarchy(childView.get()));
4681 EXPECT_TRUE(
4682 DidChangeHierarchy(true, parent1.get(), childView.get(), nullptr));
4683
4684 reset();
4685
4686 parent2->AddChildView(childView.get());
4687 EXPECT_EQ(4, views_hierarchy_changed_times());
4688 EXPECT_TRUE(DidChangeHierarchy(parent1.get()));
4689 EXPECT_TRUE(DidChangeHierarchy(parent2.get()));
4690 EXPECT_TRUE(DidChangeHierarchy(childView.get()));
4691 EXPECT_TRUE(
4692 DidChangeHierarchy(true, parent2.get(), childView.get(), parent1.get()));
4693
4694 reset();
4695
4696 parent2->RemoveChildView(childView.get());
4697 EXPECT_EQ(2, views_hierarchy_changed_times());
4698 EXPECT_TRUE(DidChangeHierarchy(parent2.get()));
4699 EXPECT_TRUE(DidChangeHierarchy(childView.get()));
4700 EXPECT_TRUE(
4701 DidChangeHierarchy(false, parent2.get(), childView.get(), nullptr));
4702 }
4703
4704 TEST_F(DevToolsObserverTest, DevToolsObserverViewVisibilityChanged) {
4705 std::unique_ptr<View> view = NewView();
4706 view->SetVisible(false);
4707 EXPECT_EQ(view.get(), view_visibility_changed());
4708 }
4709
4710 TEST_F(DevToolsObserverTest, DevToolsObserverViewEnabledChanged) {
4711 std::unique_ptr<View> view = NewView();
4712 view->SetEnabled(false);
4713 EXPECT_EQ(view.get(), view_enabled_changed());
4714 }
4715
4716 TEST_F(DevToolsObserverTest, DevToolsObserverViewBoundsChanged) {
4717 std::unique_ptr<View> view = NewView();
4718 view->SetBounds(2, 2, 2, 2);
4719 EXPECT_EQ(view.get(), view_bounds_changed());
4720
4721 reset();
4722
4723 view->SetBoundsRect(gfx::Rect(1, 1, 1, 1));
4724 EXPECT_EQ(view.get(), view_bounds_changed());
4725 }
4726
4727 TEST_F(DevToolsObserverTest, DevToolsObserverChildViewReordered) {
4728 std::unique_ptr<View> view = NewView();
4729 std::unique_ptr<View> childView = NewView();
4730 std::unique_ptr<View> childView2 = NewView();
4731 view->AddChildView(childView.get());
4732 view->AddChildView(childView2.get());
4733 view->ReorderChildView(childView2.get(), 0);
4734 EXPECT_EQ(childView2.get(), view_reordered());
4735 }
4736
4580 } // namespace views 4737 } // 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