Index: mojo/services/view_manager/test_change_tracker.cc |
diff --git a/mojo/services/view_manager/test_change_tracker.cc b/mojo/services/view_manager/test_change_tracker.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3e31aa4f3d793eff10e4414d0df57dd46303e568 |
--- /dev/null |
+++ b/mojo/services/view_manager/test_change_tracker.cc |
@@ -0,0 +1,314 @@ |
+// 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/view_manager/test_change_tracker.h" |
+ |
+#include "base/strings/string_util.h" |
+#include "base/strings/stringprintf.h" |
+#include "mojo/common/common_type_converters.h" |
+#include "third_party/mojo_services/src/view_manager/public/cpp/util.h" |
+ |
+using mojo::Array; |
+using mojo::Id; |
+using mojo::ViewDataPtr; |
+using mojo::String; |
+ |
+namespace view_manager { |
+ |
+std::string ViewIdToString(Id id) { |
+ return (id == 0) ? "null" : base::StringPrintf("%d,%d", mojo::HiWord(id), |
+ mojo::LoWord(id)); |
+} |
+ |
+namespace { |
+ |
+std::string RectToString(const mojo::Rect& rect) { |
+ return base::StringPrintf("%d,%d %dx%d", rect.x, rect.y, rect.width, |
+ rect.height); |
+} |
+ |
+std::string DirectionToString(mojo::OrderDirection direction) { |
+ return direction == mojo::ORDER_DIRECTION_ABOVE ? "above" : "below"; |
+} |
+ |
+std::string ChangeToDescription1(const Change& change) { |
+ switch (change.type) { |
+ case CHANGE_TYPE_EMBED: |
+ return base::StringPrintf("OnEmbed creator=%s", |
+ change.creator_url.data()); |
+ |
+ case CHANGE_TYPE_EMBEDDED_APP_DISCONNECTED: |
+ return base::StringPrintf("OnEmbeddedAppDisconnected view=%s", |
+ ViewIdToString(change.view_id).c_str()); |
+ |
+ case CHANGE_TYPE_NODE_BOUNDS_CHANGED: |
+ return base::StringPrintf( |
+ "BoundsChanged view=%s old_bounds=%s new_bounds=%s", |
+ ViewIdToString(change.view_id).c_str(), |
+ RectToString(change.bounds).c_str(), |
+ RectToString(change.bounds2).c_str()); |
+ |
+ case CHANGE_TYPE_NODE_VIEWPORT_METRICS_CHANGED: |
+ // TODO(sky): Not implemented. |
+ return "ViewportMetricsChanged"; |
+ |
+ case CHANGE_TYPE_NODE_HIERARCHY_CHANGED: |
+ return base::StringPrintf( |
+ "HierarchyChanged view=%s new_parent=%s old_parent=%s", |
+ ViewIdToString(change.view_id).c_str(), |
+ ViewIdToString(change.view_id2).c_str(), |
+ ViewIdToString(change.view_id3).c_str()); |
+ |
+ case CHANGE_TYPE_NODE_REORDERED: |
+ return base::StringPrintf("Reordered view=%s relative=%s direction=%s", |
+ ViewIdToString(change.view_id).c_str(), |
+ ViewIdToString(change.view_id2).c_str(), |
+ DirectionToString(change.direction).c_str()); |
+ |
+ case CHANGE_TYPE_NODE_DELETED: |
+ return base::StringPrintf("ViewDeleted view=%s", |
+ ViewIdToString(change.view_id).c_str()); |
+ |
+ case CHANGE_TYPE_NODE_VISIBILITY_CHANGED: |
+ return base::StringPrintf("VisibilityChanged view=%s visible=%s", |
+ ViewIdToString(change.view_id).c_str(), |
+ change.bool_value ? "true" : "false"); |
+ |
+ case CHANGE_TYPE_NODE_DRAWN_STATE_CHANGED: |
+ return base::StringPrintf("DrawnStateChanged view=%s drawn=%s", |
+ ViewIdToString(change.view_id).c_str(), |
+ change.bool_value ? "true" : "false"); |
+ |
+ case CHANGE_TYPE_INPUT_EVENT: |
+ return base::StringPrintf("InputEvent view=%s event_action=%d", |
+ ViewIdToString(change.view_id).c_str(), |
+ change.event_action); |
+ |
+ case CHANGE_TYPE_PROPERTY_CHANGED: |
+ return base::StringPrintf("PropertyChanged view=%s key=%s value=%s", |
+ ViewIdToString(change.view_id).c_str(), |
+ change.property_key.c_str(), |
+ change.property_value.c_str()); |
+ |
+ case CHANGE_TYPE_DELEGATE_EMBED: |
+ return base::StringPrintf("DelegateEmbed url=%s", |
+ change.embed_url.data()); |
+ } |
+ return std::string(); |
+} |
+ |
+} // namespace |
+ |
+std::vector<std::string> ChangesToDescription1( |
+ const std::vector<Change>& changes) { |
+ std::vector<std::string> strings(changes.size()); |
+ for (size_t i = 0; i < changes.size(); ++i) |
+ strings[i] = ChangeToDescription1(changes[i]); |
+ return strings; |
+} |
+ |
+std::string SingleChangeToDescription(const std::vector<Change>& changes) { |
+ if (changes.size() != 1u) |
+ return std::string(); |
+ return ChangeToDescription1(changes[0]); |
+} |
+ |
+std::string SingleViewDescription(const std::vector<TestView>& views) { |
+ if (views.size() != 1u) |
+ return std::string(); |
+ return views[0].ToString(); |
+} |
+ |
+std::string ChangeViewDescription(const std::vector<Change>& changes) { |
+ if (changes.size() != 1) |
+ return std::string(); |
+ std::vector<std::string> view_strings(changes[0].views.size()); |
+ for (size_t i = 0; i < changes[0].views.size(); ++i) |
+ view_strings[i] = "[" + changes[0].views[i].ToString() + "]"; |
+ return JoinString(view_strings, ','); |
+} |
+ |
+TestView ViewDataToTestView(const ViewDataPtr& data) { |
+ TestView view; |
+ view.parent_id = data->parent_id; |
+ view.view_id = data->view_id; |
+ view.visible = data->visible; |
+ view.drawn = data->drawn; |
+ view.properties = |
+ data->properties.To<std::map<std::string, std::vector<uint8_t>>>(); |
+ return view; |
+} |
+ |
+void ViewDatasToTestViews(const Array<ViewDataPtr>& data, |
+ std::vector<TestView>* test_views) { |
+ for (size_t i = 0; i < data.size(); ++i) |
+ test_views->push_back(ViewDataToTestView(data[i])); |
+} |
+ |
+Change::Change() |
+ : type(CHANGE_TYPE_EMBED), |
+ connection_id(0), |
+ view_id(0), |
+ view_id2(0), |
+ view_id3(0), |
+ event_action(0), |
+ direction(mojo::ORDER_DIRECTION_ABOVE), |
+ bool_value(false) { |
+} |
+ |
+Change::~Change() { |
+} |
+ |
+TestChangeTracker::TestChangeTracker() |
+ : delegate_(NULL) { |
+} |
+ |
+TestChangeTracker::~TestChangeTracker() { |
+} |
+ |
+void TestChangeTracker::OnEmbed(mojo::ConnectionSpecificId connection_id, |
+ const String& creator_url, |
+ ViewDataPtr root) { |
+ Change change; |
+ change.type = CHANGE_TYPE_EMBED; |
+ change.connection_id = connection_id; |
+ change.creator_url = creator_url; |
+ change.views.push_back(ViewDataToTestView(root)); |
+ AddChange(change); |
+} |
+ |
+void TestChangeTracker::OnEmbeddedAppDisconnected(Id view_id) { |
+ Change change; |
+ change.type = CHANGE_TYPE_EMBEDDED_APP_DISCONNECTED; |
+ change.view_id = view_id; |
+ AddChange(change); |
+} |
+ |
+void TestChangeTracker::OnViewBoundsChanged(Id view_id, |
+ mojo::RectPtr old_bounds, |
+ mojo::RectPtr new_bounds) { |
+ Change change; |
+ change.type = CHANGE_TYPE_NODE_BOUNDS_CHANGED; |
+ change.view_id = view_id; |
+ change.bounds.x = old_bounds->x; |
+ change.bounds.y = old_bounds->y; |
+ change.bounds.width = old_bounds->width; |
+ change.bounds.height = old_bounds->height; |
+ change.bounds2.x = new_bounds->x; |
+ change.bounds2.y = new_bounds->y; |
+ change.bounds2.width = new_bounds->width; |
+ change.bounds2.height = new_bounds->height; |
+ AddChange(change); |
+} |
+ |
+void TestChangeTracker::OnViewViewportMetricsChanged( |
+ mojo::ViewportMetricsPtr old_metrics, |
+ mojo::ViewportMetricsPtr new_metrics) { |
+ Change change; |
+ change.type = CHANGE_TYPE_NODE_VIEWPORT_METRICS_CHANGED; |
+ // NOT IMPLEMENTED |
+ AddChange(change); |
+} |
+ |
+void TestChangeTracker::OnViewHierarchyChanged(Id view_id, |
+ Id new_parent_id, |
+ Id old_parent_id, |
+ Array<ViewDataPtr> views) { |
+ Change change; |
+ change.type = CHANGE_TYPE_NODE_HIERARCHY_CHANGED; |
+ change.view_id = view_id; |
+ change.view_id2 = new_parent_id; |
+ change.view_id3 = old_parent_id; |
+ ViewDatasToTestViews(views, &change.views); |
+ AddChange(change); |
+} |
+ |
+void TestChangeTracker::OnViewReordered(Id view_id, |
+ Id relative_view_id, |
+ mojo::OrderDirection direction) { |
+ Change change; |
+ change.type = CHANGE_TYPE_NODE_REORDERED; |
+ change.view_id = view_id; |
+ change.view_id2 = relative_view_id; |
+ change.direction = direction; |
+ AddChange(change); |
+} |
+ |
+void TestChangeTracker::OnViewDeleted(Id view_id) { |
+ Change change; |
+ change.type = CHANGE_TYPE_NODE_DELETED; |
+ change.view_id = view_id; |
+ AddChange(change); |
+} |
+ |
+void TestChangeTracker::OnViewVisibilityChanged(Id view_id, bool visible) { |
+ Change change; |
+ change.type = CHANGE_TYPE_NODE_VISIBILITY_CHANGED; |
+ change.view_id = view_id; |
+ change.bool_value = visible; |
+ AddChange(change); |
+} |
+ |
+void TestChangeTracker::OnViewDrawnStateChanged(Id view_id, bool drawn) { |
+ Change change; |
+ change.type = CHANGE_TYPE_NODE_DRAWN_STATE_CHANGED; |
+ change.view_id = view_id; |
+ change.bool_value = drawn; |
+ AddChange(change); |
+} |
+ |
+void TestChangeTracker::OnViewInputEvent(Id view_id, mojo::EventPtr event) { |
+ Change change; |
+ change.type = CHANGE_TYPE_INPUT_EVENT; |
+ change.view_id = view_id; |
+ change.event_action = event->action; |
+ AddChange(change); |
+} |
+ |
+void TestChangeTracker::OnViewSharedPropertyChanged(Id view_id, |
+ String name, |
+ Array<uint8_t> data) { |
+ Change change; |
+ change.type = CHANGE_TYPE_PROPERTY_CHANGED; |
+ change.view_id = view_id; |
+ change.property_key = name; |
+ if (data.is_null()) |
+ change.property_value = "NULL"; |
+ else |
+ change.property_value = data.To<std::string>(); |
+ AddChange(change); |
+} |
+ |
+void TestChangeTracker::DelegateEmbed(const String& url) { |
+ Change change; |
+ change.type = CHANGE_TYPE_DELEGATE_EMBED; |
+ change.embed_url = url; |
+ AddChange(change); |
+} |
+ |
+void TestChangeTracker::AddChange(const Change& change) { |
+ changes_.push_back(change); |
+ if (delegate_) |
+ delegate_->OnChangeAdded(); |
+} |
+ |
+TestView::TestView() {} |
+ |
+TestView::~TestView() {} |
+ |
+std::string TestView::ToString() const { |
+ return base::StringPrintf("view=%s parent=%s", |
+ ViewIdToString(view_id).c_str(), |
+ ViewIdToString(parent_id).c_str()); |
+} |
+ |
+std::string TestView::ToString2() const { |
+ return base::StringPrintf("view=%s parent=%s visible=%s drawn=%s", |
+ ViewIdToString(view_id).c_str(), |
+ ViewIdToString(parent_id).c_str(), |
+ visible ? "true" : "false", |
+ drawn ? "true" : "false"); |
+} |
+ |
+} // namespace view_manager |