| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/view_manager/public/cpp/view.h" | 5 #include "components/mus/public/cpp/view.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "components/view_manager/public/cpp/lib/view_private.h" | 9 #include "components/mus/public/cpp/lib/view_private.h" |
| 10 #include "components/view_manager/public/cpp/util.h" | 10 #include "components/mus/public/cpp/util.h" |
| 11 #include "components/view_manager/public/cpp/view_observer.h" | 11 #include "components/mus/public/cpp/view_observer.h" |
| 12 #include "components/view_manager/public/cpp/view_property.h" | 12 #include "components/mus/public/cpp/view_property.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 14 | 14 |
| 15 namespace mojo { | 15 namespace mojo { |
| 16 | 16 |
| 17 // View ------------------------------------------------------------------------ | 17 // View ------------------------------------------------------------------------ |
| 18 | 18 |
| 19 typedef testing::Test ViewTest; | 19 typedef testing::Test ViewTest; |
| 20 | 20 |
| 21 // Subclass with public ctor/dtor. | 21 // Subclass with public ctor/dtor. |
| 22 class TestView : public View { | 22 class TestView : public View { |
| 23 public: | 23 public: |
| 24 TestView() { | 24 TestView() { ViewPrivate(this).set_id(1); } |
| 25 ViewPrivate(this).set_id(1); | |
| 26 } | |
| 27 ~TestView() {} | 25 ~TestView() {} |
| 28 | 26 |
| 29 private: | 27 private: |
| 30 MOJO_DISALLOW_COPY_AND_ASSIGN(TestView); | 28 MOJO_DISALLOW_COPY_AND_ASSIGN(TestView); |
| 31 }; | 29 }; |
| 32 | 30 |
| 33 TEST_F(ViewTest, AddChild) { | 31 TEST_F(ViewTest, AddChild) { |
| 34 TestView v1; | 32 TestView v1; |
| 35 TestView v11; | 33 TestView v11; |
| 36 v1.AddChild(&v11); | 34 v1.AddChild(&v11); |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 | 182 |
| 185 EXPECT_EQ(p3, TestProperty::last_deleted()); | 183 EXPECT_EQ(p3, TestProperty::last_deleted()); |
| 186 } | 184 } |
| 187 | 185 |
| 188 // ViewObserver -------------------------------------------------------- | 186 // ViewObserver -------------------------------------------------------- |
| 189 | 187 |
| 190 typedef testing::Test ViewObserverTest; | 188 typedef testing::Test ViewObserverTest; |
| 191 | 189 |
| 192 bool TreeChangeParamsMatch(const ViewObserver::TreeChangeParams& lhs, | 190 bool TreeChangeParamsMatch(const ViewObserver::TreeChangeParams& lhs, |
| 193 const ViewObserver::TreeChangeParams& rhs) { | 191 const ViewObserver::TreeChangeParams& rhs) { |
| 194 return lhs.target == rhs.target && lhs.old_parent == rhs.old_parent && | 192 return lhs.target == rhs.target && lhs.old_parent == rhs.old_parent && |
| 195 lhs.new_parent == rhs.new_parent && lhs.receiver == rhs.receiver; | 193 lhs.new_parent == rhs.new_parent && lhs.receiver == rhs.receiver; |
| 196 } | 194 } |
| 197 | 195 |
| 198 class TreeChangeObserver : public ViewObserver { | 196 class TreeChangeObserver : public ViewObserver { |
| 199 public: | 197 public: |
| 200 explicit TreeChangeObserver(View* observee) : observee_(observee) { | 198 explicit TreeChangeObserver(View* observee) : observee_(observee) { |
| 201 observee_->AddObserver(this); | 199 observee_->AddObserver(this); |
| 202 } | 200 } |
| 203 ~TreeChangeObserver() override { observee_->RemoveObserver(this); } | 201 ~TreeChangeObserver() override { observee_->RemoveObserver(this); } |
| 204 | 202 |
| 205 void Reset() { | 203 void Reset() { received_params_.clear(); } |
| 206 received_params_.clear(); | |
| 207 } | |
| 208 | 204 |
| 209 const std::vector<TreeChangeParams>& received_params() { | 205 const std::vector<TreeChangeParams>& received_params() { |
| 210 return received_params_; | 206 return received_params_; |
| 211 } | 207 } |
| 212 | 208 |
| 213 private: | 209 private: |
| 214 // Overridden from ViewObserver: | 210 // Overridden from ViewObserver: |
| 215 void OnTreeChanging(const TreeChangeParams& params) override { | 211 void OnTreeChanging(const TreeChangeParams& params) override { |
| 216 received_params_.push_back(params); | 212 received_params_.push_back(params); |
| 217 } | 213 } |
| 218 void OnTreeChanged(const TreeChangeParams& params) override { | 214 void OnTreeChanged(const TreeChangeParams& params) override { |
| 219 received_params_.push_back(params); | 215 received_params_.push_back(params); |
| 220 } | 216 } |
| 221 | 217 |
| 222 View* observee_; | 218 View* observee_; |
| 223 std::vector<TreeChangeParams> received_params_; | 219 std::vector<TreeChangeParams> received_params_; |
| 224 | 220 |
| 225 MOJO_DISALLOW_COPY_AND_ASSIGN(TreeChangeObserver); | 221 MOJO_DISALLOW_COPY_AND_ASSIGN(TreeChangeObserver); |
| 226 }; | 222 }; |
| 227 | 223 |
| 228 // Adds/Removes v11 to v1. | 224 // Adds/Removes v11 to v1. |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 558 EXPECT_EQ(&v12, changes[1].relative_view); | 554 EXPECT_EQ(&v12, changes[1].relative_view); |
| 559 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[1].direction); | 555 EXPECT_EQ(ORDER_DIRECTION_BELOW, changes[1].direction); |
| 560 } | 556 } |
| 561 } | 557 } |
| 562 | 558 |
| 563 namespace { | 559 namespace { |
| 564 | 560 |
| 565 typedef std::vector<std::string> Changes; | 561 typedef std::vector<std::string> Changes; |
| 566 | 562 |
| 567 std::string ViewIdToString(Id id) { | 563 std::string ViewIdToString(Id id) { |
| 568 return (id == 0) ? "null" : | 564 return (id == 0) ? "null" |
| 569 base::StringPrintf("%d,%d", HiWord(id), LoWord(id)); | 565 : base::StringPrintf("%d,%d", HiWord(id), LoWord(id)); |
| 570 } | 566 } |
| 571 | 567 |
| 572 std::string RectToString(const Rect& rect) { | 568 std::string RectToString(const Rect& rect) { |
| 573 return base::StringPrintf("%d,%d %dx%d", | 569 return base::StringPrintf("%d,%d %dx%d", rect.x, rect.y, rect.width, |
| 574 rect.x, rect.y, rect.width, rect.height); | 570 rect.height); |
| 575 } | 571 } |
| 576 | 572 |
| 577 class BoundsChangeObserver : public ViewObserver { | 573 class BoundsChangeObserver : public ViewObserver { |
| 578 public: | 574 public: |
| 579 explicit BoundsChangeObserver(View* view) : view_(view) { | 575 explicit BoundsChangeObserver(View* view) : view_(view) { |
| 580 view_->AddObserver(this); | 576 view_->AddObserver(this); |
| 581 } | 577 } |
| 582 ~BoundsChangeObserver() override { view_->RemoveObserver(this); } | 578 ~BoundsChangeObserver() override { view_->RemoveObserver(this); } |
| 583 | 579 |
| 584 Changes GetAndClearChanges() { | 580 Changes GetAndClearChanges() { |
| 585 Changes changes; | 581 Changes changes; |
| 586 changes.swap(changes_); | 582 changes.swap(changes_); |
| 587 return changes; | 583 return changes; |
| 588 } | 584 } |
| 589 | 585 |
| 590 private: | 586 private: |
| 591 // Overridden from ViewObserver: | 587 // Overridden from ViewObserver: |
| 592 void OnViewBoundsChanging(View* view, | 588 void OnViewBoundsChanging(View* view, |
| 593 const Rect& old_bounds, | 589 const Rect& old_bounds, |
| 594 const Rect& new_bounds) override { | 590 const Rect& new_bounds) override { |
| 595 changes_.push_back( | 591 changes_.push_back(base::StringPrintf( |
| 596 base::StringPrintf( | 592 "view=%s old_bounds=%s new_bounds=%s phase=changing", |
| 597 "view=%s old_bounds=%s new_bounds=%s phase=changing", | 593 ViewIdToString(view->id()).c_str(), RectToString(old_bounds).c_str(), |
| 598 ViewIdToString(view->id()).c_str(), | 594 RectToString(new_bounds).c_str())); |
| 599 RectToString(old_bounds).c_str(), | |
| 600 RectToString(new_bounds).c_str())); | |
| 601 } | 595 } |
| 602 void OnViewBoundsChanged(View* view, | 596 void OnViewBoundsChanged(View* view, |
| 603 const Rect& old_bounds, | 597 const Rect& old_bounds, |
| 604 const Rect& new_bounds) override { | 598 const Rect& new_bounds) override { |
| 605 changes_.push_back( | 599 changes_.push_back(base::StringPrintf( |
| 606 base::StringPrintf( | 600 "view=%s old_bounds=%s new_bounds=%s phase=changed", |
| 607 "view=%s old_bounds=%s new_bounds=%s phase=changed", | 601 ViewIdToString(view->id()).c_str(), RectToString(old_bounds).c_str(), |
| 608 ViewIdToString(view->id()).c_str(), | 602 RectToString(new_bounds).c_str())); |
| 609 RectToString(old_bounds).c_str(), | |
| 610 RectToString(new_bounds).c_str())); | |
| 611 } | 603 } |
| 612 | 604 |
| 613 View* view_; | 605 View* view_; |
| 614 Changes changes_; | 606 Changes changes_; |
| 615 | 607 |
| 616 MOJO_DISALLOW_COPY_AND_ASSIGN(BoundsChangeObserver); | 608 MOJO_DISALLOW_COPY_AND_ASSIGN(BoundsChangeObserver); |
| 617 }; | 609 }; |
| 618 | 610 |
| 619 } // namespace | 611 } // namespace |
| 620 | 612 |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 823 } | 815 } |
| 824 } | 816 } |
| 825 | 817 |
| 826 namespace { | 818 namespace { |
| 827 | 819 |
| 828 typedef std::pair<const void*, intptr_t> PropertyChangeInfo; | 820 typedef std::pair<const void*, intptr_t> PropertyChangeInfo; |
| 829 | 821 |
| 830 class LocalPropertyChangeObserver : public ViewObserver { | 822 class LocalPropertyChangeObserver : public ViewObserver { |
| 831 public: | 823 public: |
| 832 explicit LocalPropertyChangeObserver(View* view) | 824 explicit LocalPropertyChangeObserver(View* view) |
| 833 : view_(view), | 825 : view_(view), property_key_(nullptr), old_property_value_(-1) { |
| 834 property_key_(nullptr), | |
| 835 old_property_value_(-1) { | |
| 836 view_->AddObserver(this); | 826 view_->AddObserver(this); |
| 837 } | 827 } |
| 838 ~LocalPropertyChangeObserver() override { view_->RemoveObserver(this); } | 828 ~LocalPropertyChangeObserver() override { view_->RemoveObserver(this); } |
| 839 | 829 |
| 840 PropertyChangeInfo PropertyChangeInfoAndClear() { | 830 PropertyChangeInfo PropertyChangeInfoAndClear() { |
| 841 PropertyChangeInfo result(property_key_, old_property_value_); | 831 PropertyChangeInfo result(property_key_, old_property_value_); |
| 842 property_key_ = NULL; | 832 property_key_ = NULL; |
| 843 old_property_value_ = -3; | 833 old_property_value_ = -3; |
| 844 return result; | 834 return result; |
| 845 } | 835 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 870 v1.SetLocalProperty(&prop, 1); | 860 v1.SetLocalProperty(&prop, 1); |
| 871 EXPECT_EQ(PropertyChangeInfo(&prop, -2), o.PropertyChangeInfoAndClear()); | 861 EXPECT_EQ(PropertyChangeInfo(&prop, -2), o.PropertyChangeInfoAndClear()); |
| 872 v1.SetLocalProperty(&prop, -2); | 862 v1.SetLocalProperty(&prop, -2); |
| 873 EXPECT_EQ(PropertyChangeInfo(&prop, 1), o.PropertyChangeInfoAndClear()); | 863 EXPECT_EQ(PropertyChangeInfo(&prop, 1), o.PropertyChangeInfoAndClear()); |
| 874 v1.SetLocalProperty(&prop, 3); | 864 v1.SetLocalProperty(&prop, 3); |
| 875 EXPECT_EQ(PropertyChangeInfo(&prop, -2), o.PropertyChangeInfoAndClear()); | 865 EXPECT_EQ(PropertyChangeInfo(&prop, -2), o.PropertyChangeInfoAndClear()); |
| 876 v1.ClearLocalProperty(&prop); | 866 v1.ClearLocalProperty(&prop); |
| 877 EXPECT_EQ(PropertyChangeInfo(&prop, 3), o.PropertyChangeInfoAndClear()); | 867 EXPECT_EQ(PropertyChangeInfo(&prop, 3), o.PropertyChangeInfoAndClear()); |
| 878 | 868 |
| 879 // Sanity check to see if |PropertyChangeInfoAndClear| really clears. | 869 // Sanity check to see if |PropertyChangeInfoAndClear| really clears. |
| 880 EXPECT_EQ(PropertyChangeInfo( | 870 EXPECT_EQ(PropertyChangeInfo(reinterpret_cast<const void*>(NULL), -3), |
| 881 reinterpret_cast<const void*>(NULL), -3), o.PropertyChangeInfoAndClear()); | 871 o.PropertyChangeInfoAndClear()); |
| 882 } | 872 } |
| 883 | 873 |
| 884 } // namespace mojo | 874 } // namespace mojo |
| OLD | NEW |