| Index: mojo/services/public/cpp/view_manager/tests/view_tree_node_unittest.cc
|
| diff --git a/mojo/services/public/cpp/view_manager/tests/view_tree_node_unittest.cc b/mojo/services/public/cpp/view_manager/tests/view_tree_node_unittest.cc
|
| deleted file mode 100644
|
| index d2326dcbf5fa3ec69983f0b3485c0b67d4fdb020..0000000000000000000000000000000000000000
|
| --- a/mojo/services/public/cpp/view_manager/tests/view_tree_node_unittest.cc
|
| +++ /dev/null
|
| @@ -1,571 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "mojo/services/public/cpp/view_manager/view_tree_node.h"
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h"
|
| -#include "mojo/services/public/cpp/view_manager/util.h"
|
| -#include "mojo/services/public/cpp/view_manager/view_tree_node_observer.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace mojo {
|
| -namespace view_manager {
|
| -
|
| -// ViewTreeNode ----------------------------------------------------------------
|
| -
|
| -typedef testing::Test ViewTreeNodeTest;
|
| -
|
| -// Subclass with public ctor/dtor.
|
| -class TestViewTreeNode : public ViewTreeNode {
|
| - public:
|
| - TestViewTreeNode() {
|
| - ViewTreeNodePrivate(this).set_id(1);
|
| - }
|
| - ~TestViewTreeNode() {}
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(TestViewTreeNode);
|
| -};
|
| -
|
| -TEST_F(ViewTreeNodeTest, AddChild) {
|
| - TestViewTreeNode v1;
|
| - TestViewTreeNode v11;
|
| - v1.AddChild(&v11);
|
| - EXPECT_EQ(1U, v1.children().size());
|
| -}
|
| -
|
| -TEST_F(ViewTreeNodeTest, RemoveChild) {
|
| - TestViewTreeNode v1;
|
| - TestViewTreeNode v11;
|
| - v1.AddChild(&v11);
|
| - EXPECT_EQ(1U, v1.children().size());
|
| - v1.RemoveChild(&v11);
|
| - EXPECT_EQ(0U, v1.children().size());
|
| -}
|
| -
|
| -TEST_F(ViewTreeNodeTest, Reparent) {
|
| - TestViewTreeNode v1;
|
| - TestViewTreeNode v2;
|
| - TestViewTreeNode v11;
|
| - 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(ViewTreeNodeTest, Contains) {
|
| - TestViewTreeNode v1;
|
| -
|
| - // Direct descendant.
|
| - TestViewTreeNode v11;
|
| - v1.AddChild(&v11);
|
| - EXPECT_TRUE(v1.Contains(&v11));
|
| -
|
| - // Indirect descendant.
|
| - TestViewTreeNode v111;
|
| - v11.AddChild(&v111);
|
| - EXPECT_TRUE(v1.Contains(&v111));
|
| -}
|
| -
|
| -TEST_F(ViewTreeNodeTest, GetChildById) {
|
| - TestViewTreeNode v1;
|
| - ViewTreeNodePrivate(&v1).set_id(1);
|
| - TestViewTreeNode v11;
|
| - ViewTreeNodePrivate(&v11).set_id(11);
|
| - v1.AddChild(&v11);
|
| - TestViewTreeNode v111;
|
| - ViewTreeNodePrivate(&v111).set_id(111);
|
| - v11.AddChild(&v111);
|
| -
|
| - // Find direct & indirect descendents.
|
| - EXPECT_EQ(&v11, v1.GetChildById(v11.id()));
|
| - EXPECT_EQ(&v111, v1.GetChildById(v111.id()));
|
| -}
|
| -
|
| -// ViewTreeNodeObserver --------------------------------------------------------
|
| -
|
| -typedef testing::Test ViewTreeNodeObserverTest;
|
| -
|
| -bool TreeChangeParamsMatch(const ViewTreeNodeObserver::TreeChangeParams& lhs,
|
| - const ViewTreeNodeObserver::TreeChangeParams& rhs) {
|
| - return lhs.target == rhs.target && lhs.old_parent == rhs.old_parent &&
|
| - lhs.new_parent == rhs.new_parent && lhs.receiver == rhs.receiver &&
|
| - lhs.phase == rhs.phase;
|
| -}
|
| -
|
| -class TreeChangeObserver : public ViewTreeNodeObserver {
|
| - public:
|
| - explicit TreeChangeObserver(ViewTreeNode* observee) : observee_(observee) {
|
| - observee_->AddObserver(this);
|
| - }
|
| - virtual ~TreeChangeObserver() {
|
| - observee_->RemoveObserver(this);
|
| - }
|
| -
|
| - void Reset() {
|
| - received_params_.clear();
|
| - }
|
| -
|
| - const std::vector<TreeChangeParams>& received_params() {
|
| - return received_params_;
|
| - }
|
| -
|
| - private:
|
| - // Overridden from ViewTreeNodeObserver:
|
| - virtual void OnTreeChange(const TreeChangeParams& params) OVERRIDE {
|
| - received_params_.push_back(params);
|
| - }
|
| -
|
| - ViewTreeNode* observee_;
|
| - std::vector<TreeChangeParams> received_params_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TreeChangeObserver);
|
| -};
|
| -
|
| -// Adds/Removes v11 to v1.
|
| -TEST_F(ViewTreeNodeObserverTest, TreeChange_SimpleAddRemove) {
|
| - TestViewTreeNode v1;
|
| - TreeChangeObserver o1(&v1);
|
| - EXPECT_TRUE(o1.received_params().empty());
|
| -
|
| - TestViewTreeNode v11;
|
| - TreeChangeObserver o11(&v11);
|
| - EXPECT_TRUE(o11.received_params().empty());
|
| -
|
| - // Add.
|
| -
|
| - v1.AddChild(&v11);
|
| -
|
| - EXPECT_EQ(2U, o1.received_params().size());
|
| - ViewTreeNodeObserver::TreeChangeParams p1;
|
| - p1.target = &v11;
|
| - p1.receiver = &v1;
|
| - p1.old_parent = NULL;
|
| - p1.new_parent = &v1;
|
| - p1.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().back()));
|
| -
|
| - EXPECT_EQ(2U, o11.received_params().size());
|
| - ViewTreeNodeObserver::TreeChangeParams p11 = p1;
|
| - p11.receiver = &v11;
|
| - p11.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().front()));
|
| - p11.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().back()));
|
| -
|
| - o1.Reset();
|
| - o11.Reset();
|
| - EXPECT_TRUE(o1.received_params().empty());
|
| - EXPECT_TRUE(o11.received_params().empty());
|
| -
|
| - // Remove.
|
| -
|
| - v1.RemoveChild(&v11);
|
| -
|
| - EXPECT_EQ(2U, o1.received_params().size());
|
| - p1.target = &v11;
|
| - p1.receiver = &v1;
|
| - p1.old_parent = &v1;
|
| - p1.new_parent = NULL;
|
| - p1.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().front()));
|
| -
|
| - EXPECT_EQ(2U, o11.received_params().size());
|
| - p11 = p1;
|
| - p11.receiver = &v11;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().front()));
|
| - p11.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
|
| - 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(ViewTreeNodeObserverTest, TreeChange_NestedAddRemove) {
|
| - TestViewTreeNode v1, v11, v111, v1111, v1112;
|
| -
|
| - // Root tree.
|
| - v1.AddChild(&v11);
|
| -
|
| - // Tree to be attached.
|
| - v111.AddChild(&v1111);
|
| - v111.AddChild(&v1112);
|
| -
|
| - TreeChangeObserver o1(&v1), o11(&v11), o111(&v111), o1111(&v1111),
|
| - o1112(&v1112);
|
| - ViewTreeNodeObserver::TreeChangeParams p1, p11, p111, p1111, p1112;
|
| -
|
| - // Add.
|
| -
|
| - v11.AddChild(&v111);
|
| -
|
| - EXPECT_EQ(2U, o1.received_params().size());
|
| - p1.target = &v111;
|
| - p1.receiver = &v1;
|
| - p1.old_parent = NULL;
|
| - p1.new_parent = &v11;
|
| - p1.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().back()));
|
| -
|
| - EXPECT_EQ(2U, 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 = ViewTreeNodeObserver::DISPOSITION_CHANGING;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().front()));
|
| - p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().back()));
|
| -
|
| - EXPECT_EQ(2U, o1111.received_params().size());
|
| - p1111 = p111;
|
| - p1111.receiver = &v1111;
|
| - p1111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p1111, o1111.received_params().front()));
|
| - p1111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p1111, o1111.received_params().back()));
|
| -
|
| - EXPECT_EQ(2U, o1112.received_params().size());
|
| - p1112 = p111;
|
| - p1112.receiver = &v1112;
|
| - p1112.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().front()));
|
| - p1112.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
|
| - 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(2U, o1.received_params().size());
|
| - p1.target = &v111;
|
| - p1.receiver = &v1;
|
| - p1.old_parent = &v11;
|
| - p1.new_parent = NULL;
|
| - p1.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().front()));
|
| -
|
| - EXPECT_EQ(2U, o11.received_params().size());
|
| - p11 = p1;
|
| - p11.receiver = &v11;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().front()));
|
| -
|
| - EXPECT_EQ(2U, o111.received_params().size());
|
| - p111 = p11;
|
| - p111.receiver = &v111;
|
| - p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().front()));
|
| - p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().back()));
|
| -
|
| - EXPECT_EQ(2U, o1111.received_params().size());
|
| - p1111 = p111;
|
| - p1111.receiver = &v1111;
|
| - p1111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p1111, o1111.received_params().front()));
|
| - p1111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p1111, o1111.received_params().back()));
|
| -
|
| - EXPECT_EQ(2U, o1112.received_params().size());
|
| - p1112 = p111;
|
| - p1112.receiver = &v1112;
|
| - p1112.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().front()));
|
| - p1112.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().back()));
|
| -}
|
| -
|
| -TEST_F(ViewTreeNodeObserverTest, TreeChange_Reparent) {
|
| - TestViewTreeNode v1, v11, v12, v111;
|
| - 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(4U, o1.received_params().size());
|
| - ViewTreeNodeObserver::TreeChangeParams p1;
|
| - p1.target = &v111;
|
| - p1.receiver = &v1;
|
| - p1.old_parent = &v11;
|
| - p1.new_parent = &v12;
|
| - p1.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().front()));
|
| - p1.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().back()));
|
| -
|
| - // v11 should see changing notifications.
|
| - EXPECT_EQ(2U, o11.received_params().size());
|
| - ViewTreeNodeObserver::TreeChangeParams p11;
|
| - p11 = p1;
|
| - p11.receiver = &v11;
|
| - p11.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().front()));
|
| -
|
| - // v12 should see changed notifications.
|
| - EXPECT_EQ(2U, o12.received_params().size());
|
| - ViewTreeNodeObserver::TreeChangeParams p12;
|
| - p12 = p1;
|
| - p12.receiver = &v12;
|
| - p12.phase = ViewTreeNodeObserver::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());
|
| - ViewTreeNodeObserver::TreeChangeParams p111;
|
| - p111 = p1;
|
| - p111.receiver = &v111;
|
| - p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().front()));
|
| - p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
|
| - EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().back()));
|
| -}
|
| -
|
| -namespace {
|
| -
|
| -class OrderChangeObserver : public ViewTreeNodeObserver {
|
| - public:
|
| - struct Change {
|
| - ViewTreeNode* node;
|
| - ViewTreeNode* relative_node;
|
| - OrderDirection direction;
|
| - DispositionChangePhase phase;
|
| - };
|
| - typedef std::vector<Change> Changes;
|
| -
|
| - explicit OrderChangeObserver(ViewTreeNode* observee) : observee_(observee) {
|
| - observee_->AddObserver(this);
|
| - }
|
| - virtual ~OrderChangeObserver() {
|
| - observee_->RemoveObserver(this);
|
| - }
|
| -
|
| - Changes GetAndClearChanges() {
|
| - Changes changes;
|
| - changes_.swap(changes);
|
| - return changes;
|
| - }
|
| -
|
| - private:
|
| - // Overridden from ViewTreeNodeObserver:
|
| - virtual void OnNodeReordered(ViewTreeNode* node,
|
| - ViewTreeNode* relative_node,
|
| - OrderDirection direction,
|
| - DispositionChangePhase phase) OVERRIDE {
|
| - Change change;
|
| - change.node = node;
|
| - change.relative_node = relative_node;
|
| - change.direction = direction;
|
| - change.phase = phase;
|
| - changes_.push_back(change);
|
| - }
|
| -
|
| - ViewTreeNode* observee_;
|
| - Changes changes_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(OrderChangeObserver);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -TEST_F(ViewTreeNodeObserverTest, Order) {
|
| - TestViewTreeNode v1, v11, v12, v13;
|
| - v1.AddChild(&v11);
|
| - v1.AddChild(&v12);
|
| - v1.AddChild(&v13);
|
| -
|
| - // Order: v11, v12, v13
|
| - EXPECT_EQ(3U, v1.children().size());
|
| - EXPECT_EQ(&v11, v1.children().front());
|
| - EXPECT_EQ(&v13, v1.children().back());
|
| -
|
| - {
|
| - OrderChangeObserver observer(&v11);
|
| -
|
| - // Move v11 to front.
|
| - // Resulting order: v12, v13, v11
|
| - v11.MoveToFront();
|
| - EXPECT_EQ(&v12, v1.children().front());
|
| - EXPECT_EQ(&v11, v1.children().back());
|
| -
|
| - OrderChangeObserver::Changes changes = observer.GetAndClearChanges();
|
| - EXPECT_EQ(2U, changes.size());
|
| - EXPECT_EQ(&v11, changes[0].node);
|
| - EXPECT_EQ(&v13, changes[0].relative_node);
|
| - EXPECT_EQ(ORDER_ABOVE, changes[0].direction);
|
| - EXPECT_EQ(ViewTreeNodeObserver::DISPOSITION_CHANGING, changes[0].phase);
|
| -
|
| - EXPECT_EQ(&v11, changes[1].node);
|
| - EXPECT_EQ(&v13, changes[1].relative_node);
|
| - EXPECT_EQ(ORDER_ABOVE, changes[1].direction);
|
| - EXPECT_EQ(ViewTreeNodeObserver::DISPOSITION_CHANGED, changes[1].phase);
|
| - }
|
| -
|
| - {
|
| - OrderChangeObserver observer(&v11);
|
| -
|
| - // Move v11 to back.
|
| - // Resulting order: v11, v12, v13
|
| - v11.MoveToBack();
|
| - EXPECT_EQ(&v11, v1.children().front());
|
| - EXPECT_EQ(&v13, v1.children().back());
|
| -
|
| - OrderChangeObserver::Changes changes = observer.GetAndClearChanges();
|
| - EXPECT_EQ(2U, changes.size());
|
| - EXPECT_EQ(&v11, changes[0].node);
|
| - EXPECT_EQ(&v12, changes[0].relative_node);
|
| - EXPECT_EQ(ORDER_BELOW, changes[0].direction);
|
| - EXPECT_EQ(ViewTreeNodeObserver::DISPOSITION_CHANGING, changes[0].phase);
|
| -
|
| - EXPECT_EQ(&v11, changes[1].node);
|
| - EXPECT_EQ(&v12, changes[1].relative_node);
|
| - EXPECT_EQ(ORDER_BELOW, changes[1].direction);
|
| - EXPECT_EQ(ViewTreeNodeObserver::DISPOSITION_CHANGED, changes[1].phase);
|
| - }
|
| -
|
| - {
|
| - OrderChangeObserver observer(&v11);
|
| -
|
| - // Move v11 above v12.
|
| - // Resulting order: v12. v11, v13
|
| - v11.Reorder(&v12, ORDER_ABOVE);
|
| - EXPECT_EQ(&v12, v1.children().front());
|
| - EXPECT_EQ(&v13, v1.children().back());
|
| -
|
| - OrderChangeObserver::Changes changes = observer.GetAndClearChanges();
|
| - EXPECT_EQ(2U, changes.size());
|
| - EXPECT_EQ(&v11, changes[0].node);
|
| - EXPECT_EQ(&v12, changes[0].relative_node);
|
| - EXPECT_EQ(ORDER_ABOVE, changes[0].direction);
|
| - EXPECT_EQ(ViewTreeNodeObserver::DISPOSITION_CHANGING, changes[0].phase);
|
| -
|
| - EXPECT_EQ(&v11, changes[1].node);
|
| - EXPECT_EQ(&v12, changes[1].relative_node);
|
| - EXPECT_EQ(ORDER_ABOVE, changes[1].direction);
|
| - EXPECT_EQ(ViewTreeNodeObserver::DISPOSITION_CHANGED, changes[1].phase);
|
| - }
|
| -
|
| - {
|
| - OrderChangeObserver observer(&v11);
|
| -
|
| - // Move v11 below v12.
|
| - // Resulting order: v11, v12, v13
|
| - v11.Reorder(&v12, ORDER_BELOW);
|
| - EXPECT_EQ(&v11, v1.children().front());
|
| - EXPECT_EQ(&v13, v1.children().back());
|
| -
|
| - OrderChangeObserver::Changes changes = observer.GetAndClearChanges();
|
| - EXPECT_EQ(2U, changes.size());
|
| - EXPECT_EQ(&v11, changes[0].node);
|
| - EXPECT_EQ(&v12, changes[0].relative_node);
|
| - EXPECT_EQ(ORDER_BELOW, changes[0].direction);
|
| - EXPECT_EQ(ViewTreeNodeObserver::DISPOSITION_CHANGING, changes[0].phase);
|
| -
|
| - EXPECT_EQ(&v11, changes[1].node);
|
| - EXPECT_EQ(&v12, changes[1].relative_node);
|
| - EXPECT_EQ(ORDER_BELOW, changes[1].direction);
|
| - EXPECT_EQ(ViewTreeNodeObserver::DISPOSITION_CHANGED, changes[1].phase);
|
| - }
|
| -}
|
| -
|
| -namespace {
|
| -
|
| -typedef std::vector<std::string> Changes;
|
| -
|
| -std::string NodeIdToString(Id id) {
|
| - return (id == 0) ? "null" :
|
| - base::StringPrintf("%d,%d", HiWord(id), LoWord(id));
|
| -}
|
| -
|
| -std::string RectToString(const gfx::Rect& rect) {
|
| - return base::StringPrintf("%d,%d %dx%d",
|
| - rect.x(), rect.y(), rect.width(), rect.height());
|
| -}
|
| -
|
| -std::string PhaseToString(ViewTreeNodeObserver::DispositionChangePhase phase) {
|
| - return phase == ViewTreeNodeObserver::DISPOSITION_CHANGING ?
|
| - "changing" : "changed";
|
| -}
|
| -
|
| -class BoundsChangeObserver : public ViewTreeNodeObserver {
|
| - public:
|
| - explicit BoundsChangeObserver(ViewTreeNode* node) : node_(node) {
|
| - node_->AddObserver(this);
|
| - }
|
| - virtual ~BoundsChangeObserver() {
|
| - node_->RemoveObserver(this);
|
| - }
|
| -
|
| - Changes GetAndClearChanges() {
|
| - Changes changes;
|
| - changes.swap(changes_);
|
| - return changes;
|
| - }
|
| -
|
| - private:
|
| - // Overridden from ViewTreeNodeObserver:
|
| - virtual void OnNodeBoundsChange(ViewTreeNode* node,
|
| - const gfx::Rect& old_bounds,
|
| - const gfx::Rect& new_bounds,
|
| - DispositionChangePhase phase) OVERRIDE {
|
| - changes_.push_back(
|
| - base::StringPrintf(
|
| - "node=%s old_bounds=%s new_bounds=%s phase=%s",
|
| - NodeIdToString(node->id()).c_str(),
|
| - RectToString(old_bounds).c_str(),
|
| - RectToString(new_bounds).c_str(),
|
| - PhaseToString(phase).c_str()));
|
| - }
|
| -
|
| - ViewTreeNode* node_;
|
| - Changes changes_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(BoundsChangeObserver);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -TEST_F(ViewTreeNodeObserverTest, SetBounds) {
|
| - TestViewTreeNode v1;
|
| - {
|
| - BoundsChangeObserver observer(&v1);
|
| - v1.SetBounds(gfx::Rect(0, 0, 100, 100));
|
| -
|
| - Changes changes = observer.GetAndClearChanges();
|
| - EXPECT_EQ(2U, changes.size());
|
| - EXPECT_EQ(
|
| - "node=0,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100 phase=changing",
|
| - changes[0]);
|
| - EXPECT_EQ(
|
| - "node=0,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100 phase=changed",
|
| - changes[1]);
|
| - }
|
| -}
|
| -
|
| -} // namespace view_manager
|
| -} // namespace mojo
|
|
|