| Index: ui/v2/src/view_unittest.cc
|
| diff --git a/ui/v2/src/view_unittest.cc b/ui/v2/src/view_unittest.cc
|
| index 73a3837d6b1db17d01ef7e1d727b582c0cab6e55..fa93ca594f6fa4234cc93e9f9760a8d47bcc5970 100644
|
| --- a/ui/v2/src/view_unittest.cc
|
| +++ b/ui/v2/src/view_unittest.cc
|
| @@ -29,6 +29,17 @@ TEST_F(ViewTest, RemoveChild) {
|
| EXPECT_EQ(0U, v1.children().size());
|
| }
|
|
|
| +TEST_F(ViewTest, Reparent) {
|
| + View v1;
|
| + View v2;
|
| + View* v11 = new View;
|
| + v1.AddChild(v11);
|
| + EXPECT_EQ(1U, v1.children().size());
|
| + v2.AddChild(v11);
|
| + EXPECT_EQ(1U, v2.children().size());
|
| + EXPECT_EQ(0U, v1.children().size());
|
| +}
|
| +
|
| TEST_F(ViewTest, Contains) {
|
| View v1;
|
|
|
| @@ -122,6 +133,7 @@ class TreeChangeObserver : public ViewObserver {
|
| DISALLOW_COPY_AND_ASSIGN(TreeChangeObserver);
|
| };
|
|
|
| +// Adds/Removes v11 to v1.
|
| TEST_F(ViewObserverTest, TreeChange_SimpleAddRemove) {
|
| View v1;
|
| TreeChangeObserver o1(&v1);
|
| @@ -178,6 +190,13 @@ TEST_F(ViewObserverTest, TreeChange_SimpleAddRemove) {
|
| EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().back()));
|
| }
|
|
|
| +// Creates these two trees:
|
| +// v1
|
| +// +- v11
|
| +// v111
|
| +// +- v1111
|
| +// +- v1112
|
| +// Then adds/removes v111 from v11.
|
| TEST_F(ViewObserverTest, TreeChange_NestedAddRemove) {
|
| View v1, v11, v111, v1111, v1112;
|
|
|
| @@ -238,6 +257,191 @@ TEST_F(ViewObserverTest, TreeChange_NestedAddRemove) {
|
| EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().back()));
|
|
|
| // Remove.
|
| + o1.Reset();
|
| + o11.Reset();
|
| + o111.Reset();
|
| + o1111.Reset();
|
| + o1112.Reset();
|
| + EXPECT_TRUE(o1.received_params().empty());
|
| + EXPECT_TRUE(o11.received_params().empty());
|
| + EXPECT_TRUE(o111.received_params().empty());
|
| + EXPECT_TRUE(o1111.received_params().empty());
|
| + EXPECT_TRUE(o1112.received_params().empty());
|
| +
|
| + v11.RemoveChild(&v111);
|
| +
|
| + EXPECT_EQ(1U, o1.received_params().size());
|
| + p1.target = &v111;
|
| + p1.receiver = &v1;
|
| + p1.old_parent = &v11;
|
| + p1.new_parent = NULL;
|
| + p1.phase = ViewObserver::DISPOSITION_CHANGING;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().back()));
|
| +
|
| + EXPECT_EQ(1U, o11.received_params().size());
|
| + p11 = p1;
|
| + p11.receiver = &v11;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().back()));
|
| +
|
| + EXPECT_EQ(2U, o111.received_params().size());
|
| + p111 = p11;
|
| + p111.receiver = &v111;
|
| + p111.phase = ViewObserver::DISPOSITION_CHANGING;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().front()));
|
| + p111.phase = ViewObserver::DISPOSITION_CHANGED;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().back()));
|
| +
|
| + EXPECT_EQ(2U, o1111.received_params().size());
|
| + p1111 = p111;
|
| + p1111.receiver = &v1111;
|
| + p1111.phase = ViewObserver::DISPOSITION_CHANGING;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p1111, o1111.received_params().front()));
|
| + p1111.phase = ViewObserver::DISPOSITION_CHANGED;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p1111, o1111.received_params().back()));
|
| +
|
| + EXPECT_EQ(2U, o1112.received_params().size());
|
| + p1112 = p111;
|
| + p1112.receiver = &v1112;
|
| + p1112.phase = ViewObserver::DISPOSITION_CHANGING;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().front()));
|
| + p1112.phase = ViewObserver::DISPOSITION_CHANGED;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().back()));
|
| +}
|
| +
|
| +TEST_F(ViewObserverTest, TreeChange_Reparent) {
|
| + View v1, v11, v12, v111;
|
| + v11.set_owned_by_parent(false);
|
| + v111.set_owned_by_parent(false);
|
| + v12.set_owned_by_parent(false);
|
| + v1.AddChild(&v11);
|
| + v1.AddChild(&v12);
|
| + v11.AddChild(&v111);
|
| +
|
| + TreeChangeObserver o1(&v1), o11(&v11), o12(&v12), o111(&v111);
|
| +
|
| + // Reparent.
|
| + v12.AddChild(&v111);
|
| +
|
| + // v1 (root) should see both changing and changed notifications.
|
| + EXPECT_EQ(2U, o1.received_params().size());
|
| + ViewObserver::TreeChangeParams p1;
|
| + p1.target = &v111;
|
| + p1.receiver = &v1;
|
| + p1.old_parent = &v11;
|
| + p1.new_parent = &v12;
|
| + p1.phase = ViewObserver::DISPOSITION_CHANGING;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().front()));
|
| + p1.phase = ViewObserver::DISPOSITION_CHANGED;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().back()));
|
| +
|
| + // v11 should see changing notifications.
|
| + EXPECT_EQ(1U, o11.received_params().size());
|
| + ViewObserver::TreeChangeParams p11;
|
| + p11 = p1;
|
| + p11.receiver = &v11;
|
| + p11.phase = ViewObserver::DISPOSITION_CHANGING;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().back()));
|
| +
|
| + // v12 should see changed notifications.
|
| + EXPECT_EQ(1U, o12.received_params().size());
|
| + ViewObserver::TreeChangeParams p12;
|
| + p12 = p1;
|
| + p12.receiver = &v12;
|
| + p12.phase = ViewObserver::DISPOSITION_CHANGED;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p12, o12.received_params().back()));
|
| +
|
| + // v111 should see both changing and changed notifications.
|
| + EXPECT_EQ(2U, o111.received_params().size());
|
| + ViewObserver::TreeChangeParams p111;
|
| + p111 = p1;
|
| + p111.receiver = &v111;
|
| + p111.phase = ViewObserver::DISPOSITION_CHANGING;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().front()));
|
| + p111.phase = ViewObserver::DISPOSITION_CHANGED;
|
| + EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().back()));
|
| +}
|
| +
|
| +class VisibilityObserver : public ViewObserver {
|
| + public:
|
| + typedef std::pair<ViewObserver::DispositionChangePhase, bool> LogEntry;
|
| + typedef std::vector<LogEntry> LogEntries;
|
| +
|
| + VisibilityObserver(View* view) : view_(view) {
|
| + view_->AddObserver(this);
|
| + }
|
| + virtual ~VisibilityObserver() {
|
| + view_->RemoveObserver(this);
|
| + }
|
| +
|
| + const LogEntries& log_entries() const { return log_entries_; }
|
| +
|
| + private:
|
| + // Overridden from ViewObserver:
|
| + virtual void OnViewVisibilityChange(
|
| + View* view,
|
| + ViewObserver::DispositionChangePhase phase) OVERRIDE {
|
| + DCHECK_EQ(view_, view);
|
| + log_entries_.push_back(std::make_pair(phase, view->visible()));
|
| + }
|
| +
|
| + View* view_;
|
| + LogEntries log_entries_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(VisibilityObserver);
|
| +};
|
| +
|
| +TEST_F(ViewObserverTest, VisibilityChange) {
|
| + View v1; // Starts out visible.
|
| +
|
| + VisibilityObserver o1(&v1);
|
| +
|
| + v1.SetVisible(false);
|
| +
|
| + EXPECT_EQ(2U, o1.log_entries().size());
|
| + EXPECT_EQ(ViewObserver::DISPOSITION_CHANGING, o1.log_entries().front().first);
|
| + EXPECT_EQ(o1.log_entries().front().second, true);
|
| + EXPECT_EQ(ViewObserver::DISPOSITION_CHANGED, o1.log_entries().back().first);
|
| + EXPECT_EQ(o1.log_entries().back().second, false);
|
| +}
|
| +
|
| +class BoundsObserver : public ViewObserver {
|
| + public:
|
| + typedef std::pair<gfx::Rect, gfx::Rect> BoundsChange;
|
| + typedef std::vector<BoundsChange> BoundsChanges;
|
| +
|
| + explicit BoundsObserver(View* view) : view_(view) {
|
| + view_->AddObserver(this);
|
| + }
|
| + virtual ~BoundsObserver() {
|
| + view_->RemoveObserver(this);
|
| + }
|
| +
|
| + const BoundsChanges& bounds_changes() const { return bounds_changes_; }
|
| +
|
| + private:
|
| + virtual void OnViewBoundsChanged(View* view,
|
| + const gfx::Rect& old_bounds,
|
| + const gfx::Rect& new_bounds) OVERRIDE {
|
| + DCHECK_EQ(view_, view);
|
| + bounds_changes_.push_back(std::make_pair(old_bounds, new_bounds));
|
| + }
|
| +
|
| + View* view_;
|
| + BoundsChanges bounds_changes_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(BoundsObserver);
|
| +};
|
| +
|
| +TEST_F(ViewObserverTest, BoundsChanged) {
|
| + View v1;
|
| + BoundsObserver o1(&v1);
|
| +
|
| + gfx::Rect new_bounds(0, 0, 10, 10);
|
| +
|
| + v1.SetBounds(new_bounds);
|
| + EXPECT_EQ(1U, o1.bounds_changes().size());
|
| + EXPECT_EQ(gfx::Rect(), o1.bounds_changes().front().first);
|
| + EXPECT_EQ(new_bounds, o1.bounds_changes().front().second);
|
| }
|
|
|
| } // namespace v2
|
|
|