test_change_tracker.h revision 116680a4aac90f2aa7413d9095a592090648e557
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
3// found in the LICENSE file.
4
5#ifndef MOJO_SERVICES_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_
6#define MOJO_SERVICES_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_
7
8#include <string>
9#include <vector>
10
11#include "mojo/public/cpp/bindings/array.h"
12#include "mojo/services/public/cpp/view_manager/types.h"
13#include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h"
14#include "ui/gfx/rect.h"
15
16namespace mojo {
17namespace view_manager {
18namespace service {
19
20enum ChangeType {
21  CHANGE_TYPE_CONNECTION_ESTABLISHED,
22  CHANGE_TYPE_ROOTS_ADDED,
23  CHANGE_TYPE_NODE_BOUNDS_CHANGED,
24  CHANGE_TYPE_NODE_HIERARCHY_CHANGED,
25  CHANGE_TYPE_NODE_REORDERED,
26  CHANGE_TYPE_NODE_DELETED,
27  CHANGE_TYPE_VIEW_DELETED,
28  CHANGE_TYPE_VIEW_REPLACED,
29  CHANGE_TYPE_INPUT_EVENT,
30};
31
32// TODO(sky): consider nuking and converting directly to NodeData.
33struct TestNode {
34  // Returns a string description of this.
35  std::string ToString() const;
36
37  Id parent_id;
38  Id node_id;
39  Id view_id;
40};
41
42// Tracks a call to ViewManagerClient. See the individual functions for the
43// fields that are used.
44struct Change {
45  Change();
46  ~Change();
47
48  ChangeType type;
49  ConnectionSpecificId connection_id;
50  std::vector<TestNode> nodes;
51  Id node_id;
52  Id node_id2;
53  Id node_id3;
54  Id view_id;
55  Id view_id2;
56  gfx::Rect bounds;
57  gfx::Rect bounds2;
58  int32 event_action;
59  String creator_url;
60  OrderDirection direction;
61};
62
63// Converts Changes to string descriptions.
64std::vector<std::string> ChangesToDescription1(
65    const std::vector<Change>& changes);
66
67// Returns a string description of |changes[0].nodes|. Returns an empty string
68// if change.size() != 1.
69std::string ChangeNodeDescription(const std::vector<Change>& changes);
70
71// Converts NodeDatas to TestNodes.
72void NodeDatasToTestNodes(const Array<NodeDataPtr>& data,
73                          std::vector<TestNode>* test_nodes);
74
75// TestChangeTracker is used to record ViewManagerClient functions. It notifies
76// a delegate any time a change is added.
77class TestChangeTracker {
78 public:
79  // Used to notify the delegate when a change is added. A change corresponds to
80  // a single ViewManagerClient function.
81  class Delegate {
82   public:
83    virtual void OnChangeAdded() = 0;
84
85   protected:
86    virtual ~Delegate() {}
87  };
88
89  TestChangeTracker();
90  ~TestChangeTracker();
91
92  void set_delegate(Delegate* delegate) { delegate_ = delegate; }
93
94  std::vector<Change>* changes() { return &changes_; }
95
96  // Each of these functions generate a Change. There is one per
97  // ViewManagerClient function.
98  void OnViewManagerConnectionEstablished(ConnectionSpecificId connection_id,
99                                          const String& creator_url,
100                                          Array<NodeDataPtr> nodes);
101  void OnRootAdded(Array<NodeDataPtr> nodes);
102  void OnNodeBoundsChanged(Id node_id, RectPtr old_bounds, RectPtr new_bounds);
103  void OnNodeHierarchyChanged(Id node_id,
104                              Id new_parent_id,
105                              Id old_parent_id,
106                              Array<NodeDataPtr> nodes);
107  void OnNodeReordered(Id node_id,
108                       Id relative_node_id,
109                       OrderDirection direction);
110  void OnNodeDeleted(Id node_id);
111  void OnViewDeleted(Id view_id);
112  void OnNodeViewReplaced(Id node_id, Id new_view_id, Id old_view_id);
113  void OnViewInputEvent(Id view_id, EventPtr event);
114
115 private:
116  void AddChange(const Change& change);
117
118  Delegate* delegate_;
119  std::vector<Change> changes_;
120
121  DISALLOW_COPY_AND_ASSIGN(TestChangeTracker);
122};
123
124}  // namespace service
125}  // namespace view_manager
126}  // namespace mojo
127
128#endif  // MOJO_SERVICES_VIEW_MANAGER_TEST_CHANGE_TRACKER_H_
129