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