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