Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(264)

Unified Diff: mojo/services/view_manager/view_manager_connection_unittest.cc

Issue 308803002: Change type of interface created by mojo:view_manager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/services/view_manager/view_manager_connection_unittest.cc
diff --git a/mojo/services/view_manager/view_manager_connection_unittest.cc b/mojo/services/view_manager/view_manager_connection_unittest.cc
index 364975267990dc7d87520314eb90d942bcfa363d..66830a0b9c7b9312a2a92905fd33d1afda01af3b 100644
--- a/mojo/services/view_manager/view_manager_connection_unittest.cc
+++ b/mojo/services/view_manager/view_manager_connection_unittest.cc
@@ -5,6 +5,7 @@
#include <string>
#include <vector>
+#include "base/auto_reset.h"
#include "base/bind.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/scoped_vector.h"
@@ -14,6 +15,7 @@
#include "mojo/common/common_type_converters.h"
#include "mojo/public/cpp/application/application.h"
#include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/bindings/lib/router.h"
#include "mojo/public/cpp/environment/environment.h"
#include "mojo/service_manager/service_manager.h"
#include "mojo/services/public/cpp/geometry/geometry_type_converters.h"
@@ -31,6 +33,7 @@ namespace service {
namespace {
+// TODO(sky): clean this up. Should be moved to the single place its used.
base::RunLoop* current_run_loop = NULL;
const char kTestServiceURL[] = "mojo:test_url";
@@ -46,57 +49,67 @@ void INodesToTestNodes(const Array<INodePtr>& data,
}
}
-// BackgroundConnection is used when a child ViewManagerConnection is created by
-// way of Connect(). BackgroundConnection is created on a background thread (the
-// thread where the shell lives). All public methods are to be invoked on the
-// main thread. They wait for a result (by spinning a nested message loop),
-// calling through to background thread, then the underlying IViewManager* and
-// respond back to the calling thread to return control to the test.
-class BackgroundConnection : public TestChangeTracker::Delegate {
+// ViewManagerProxy is a proxy to an IViewManager. It handles invoking
+// IViewManager functions on the right thread in a synchronous manner (each
+// IViewManager cover function blocks until the response from the IViewManager
+// is returned). In addition it tracks the set of IViewManagerClient messages
+// received by way of a vector of Changes. Use DoRunLoopUntilChangesCount() to
+// wait for a certain number of messages to be received.
+class ViewManagerProxy : public TestChangeTracker::Delegate {
public:
- BackgroundConnection(TestChangeTracker* tracker,
- base::MessageLoop* loop)
+ ViewManagerProxy(TestChangeTracker* tracker, base::MessageLoop* loop)
: tracker_(tracker),
main_loop_(loop),
background_loop_(base::MessageLoop::current()),
view_manager_(NULL),
- quit_count_(0) {
+ quit_count_(0),
+ router_(NULL) {
main_loop_->PostTask(FROM_HERE,
- base::Bind(&BackgroundConnection::SetInstance, this));
+ base::Bind(&ViewManagerProxy::SetInstance, this));
}
- virtual ~BackgroundConnection() {
- instance_ = NULL;
- }
-
- void set_view_manager(IViewManager* view_manager) {
- view_manager_ = view_manager;
+ virtual ~ViewManagerProxy() {
}
// Runs a message loop until the single instance has been created.
- static BackgroundConnection* WaitForInstance() {
+ static ViewManagerProxy* WaitForInstance() {
if (!instance_)
RunMainLoop();
- return instance_;
+ ViewManagerProxy* instance = instance_;
+ instance_ = NULL;
+ return instance;
}
// Runs the main loop until |count| changes have been received.
std::vector<Change> DoRunLoopUntilChangesCount(size_t count) {
background_loop_->PostTask(FROM_HERE,
- base::Bind(&BackgroundConnection::SetQuitCount,
+ base::Bind(&ViewManagerProxy::SetQuitCount,
base::Unretained(this), count));
- // Run the current message loop. When the quit count is reached we'll quit.
+ // Run the current message loop. When |count| Changes have been received,
+ // we'll quit.
RunMainLoop();
return changes_;
}
+ const std::vector<Change>& changes() const { return changes_; }
+
+ // Destroys the connection, blocking until done.
+ void Destroy() {
+ background_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&ViewManagerProxy::DestroyOnBackgroundThread,
+ base::Unretained(this)));
+ RunMainLoop();
+ }
+
// The following functions mirror that of IViewManager. They bounce the
// function to the right thread and return the result.
bool CreateNode(TransportNodeId node_id) {
+ changes_.clear();
bool result = false;
background_loop_->PostTask(
FROM_HERE,
- base::Bind(&BackgroundConnection::CreateNodeOnBackgroundThread,
+ base::Bind(&ViewManagerProxy::CreateNodeOnBackgroundThread,
base::Unretained(this), node_id, &result));
RunMainLoop();
return result;
@@ -104,10 +117,11 @@ class BackgroundConnection : public TestChangeTracker::Delegate {
bool AddNode(TransportNodeId parent,
TransportNodeId child,
TransportChangeId server_change_id) {
+ changes_.clear();
bool result = false;
background_loop_->PostTask(
FROM_HERE,
- base::Bind(&BackgroundConnection::AddNodeOnBackgroundThread,
+ base::Bind(&ViewManagerProxy::AddNodeOnBackgroundThread,
base::Unretained(this), parent, child, server_change_id,
&result));
RunMainLoop();
@@ -115,45 +129,101 @@ class BackgroundConnection : public TestChangeTracker::Delegate {
}
bool RemoveNodeFromParent(TransportNodeId node_id,
TransportChangeId server_change_id) {
+ changes_.clear();
bool result = false;
background_loop_->PostTask(
FROM_HERE,
- base::Bind(
- &BackgroundConnection::RemoveNodeFromParentOnBackgroundThread,
- base::Unretained(this), node_id, server_change_id, &result));
+ base::Bind(&ViewManagerProxy::RemoveNodeFromParentOnBackgroundThread,
+ base::Unretained(this), node_id, server_change_id, &result));
RunMainLoop();
return result;
}
bool SetView(TransportNodeId node_id, TransportViewId view_id) {
+ changes_.clear();
bool result = false;
background_loop_->PostTask(
FROM_HERE,
- base::Bind(
- &BackgroundConnection::SetViewOnBackgroundThread,
- base::Unretained(this), node_id, view_id, &result));
+ base::Bind(&ViewManagerProxy::SetViewOnBackgroundThread,
+ base::Unretained(this), node_id, view_id, &result));
RunMainLoop();
return result;
}
bool CreateView(TransportViewId view_id) {
+ changes_.clear();
bool result = false;
background_loop_->PostTask(
FROM_HERE,
- base::Bind(
- &BackgroundConnection::CreateViewOnBackgroundThread,
- base::Unretained(this), view_id, &result));
+ base::Bind(&ViewManagerProxy::CreateViewOnBackgroundThread,
+ base::Unretained(this), view_id, &result));
RunMainLoop();
return result;
}
void GetNodeTree(TransportNodeId node_id, std::vector<TestNode>* nodes) {
+ changes_.clear();
+ background_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&ViewManagerProxy::GetNodeTreeOnBackgroundThread,
+ base::Unretained(this), node_id, nodes));
+ RunMainLoop();
+ }
+ bool Connect(const std::vector<TransportNodeId>& nodes) {
+ changes_.clear();
+ base::AutoReset<bool> auto_reset(&in_connect_, true);
+ bool result = false;
+ background_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&ViewManagerProxy::ConnectOnBackgroundThread,
+ base::Unretained(this), nodes, &result));
+ RunMainLoop();
+ return result;
+ }
+ bool DeleteNode(TransportNodeId node_id) {
+ changes_.clear();
+ bool result = false;
+ background_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&ViewManagerProxy::DeleteNodeOnBackgroundThread,
+ base::Unretained(this), node_id, &result));
+ RunMainLoop();
+ return result;
+ }
+ bool DeleteView(TransportViewId node_id) {
+ changes_.clear();
+ bool result = false;
+ background_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&ViewManagerProxy::DeleteViewOnBackgroundThread,
+ base::Unretained(this), node_id, &result));
+ RunMainLoop();
+ return result;
+ }
+ bool SetNodeBounds(TransportNodeId node_id, const gfx::Rect& rect) {
+ bool result = false;
background_loop_->PostTask(
FROM_HERE,
- base::Bind(
- &BackgroundConnection::GetNodeTreeOnBackgroundThread,
- base::Unretained(this), node_id, nodes));
+ base::Bind(&ViewManagerProxy::SetNodeBoundsOnBackgroundThread,
+ base::Unretained(this), node_id, rect, &result));
RunMainLoop();
+ return result;
}
private:
+ friend class TestViewManagerClientConnection;
+
+ void set_router(mojo::internal::Router* router) { router_ = router; }
+
+ void set_view_manager(IViewManager* view_manager) {
+ view_manager_ = view_manager;
+ }
+
+ void DestroyOnBackgroundThread() {
+ router_->CloseMessagePipe();
+ main_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&ViewManagerProxy::QuitOnMainThread,
+ base::Unretained(this)));
+ }
+
void SetQuitCount(size_t count) {
DCHECK_EQ(background_loop_, base::MessageLoop::current());
if (tracker_->changes()->size() >= count) {
@@ -176,7 +246,7 @@ class BackgroundConnection : public TestChangeTracker::Delegate {
tracker_->changes()->swap(changes);
main_loop_->PostTask(
FROM_HERE,
- base::Bind(&BackgroundConnection::QuitCountReachedOnMain,
+ base::Bind(&ViewManagerProxy::QuitCountReachedOnMain,
base::Unretained(this), changes));
}
@@ -186,10 +256,14 @@ class BackgroundConnection : public TestChangeTracker::Delegate {
main_run_loop_->Quit();
}
- static void SetInstance(BackgroundConnection* instance) {
+ static void SetInstance(ViewManagerProxy* instance) {
DCHECK(!instance_);
instance_ = instance;
- if (main_run_loop_)
+ // Connect() runs its own run loop that is quit when the result is
+ // received. Connect() also results in a new instance. If we quit here while
+ // waiting for a Connect() we would prematurely return before we got the
+ // result from Connect().
+ if (!in_connect_ && main_run_loop_)
main_run_loop_->Quit();
}
@@ -198,7 +272,7 @@ class BackgroundConnection : public TestChangeTracker::Delegate {
*result_cache = result;
main_loop_->PostTask(
FROM_HERE,
- base::Bind(&BackgroundConnection::QuitOnMainThread,
+ base::Bind(&ViewManagerProxy::QuitOnMainThread,
base::Unretained(this)));
}
@@ -207,7 +281,7 @@ class BackgroundConnection : public TestChangeTracker::Delegate {
INodesToTestNodes(results, nodes);
main_loop_->PostTask(
FROM_HERE,
- base::Bind(&BackgroundConnection::QuitOnMainThread,
+ base::Bind(&ViewManagerProxy::QuitOnMainThread,
base::Unretained(this)));
}
@@ -221,7 +295,7 @@ class BackgroundConnection : public TestChangeTracker::Delegate {
void CreateNodeOnBackgroundThread(TransportNodeId node_id, bool* result) {
view_manager_->CreateNode(
node_id,
- base::Bind(&BackgroundConnection::GotResultOnBackgroundThread,
+ base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
base::Unretained(this), result));
}
void AddNodeOnBackgroundThread(TransportNodeId parent,
@@ -230,7 +304,7 @@ class BackgroundConnection : public TestChangeTracker::Delegate {
bool* result) {
view_manager_->AddNode(
parent, child, server_change_id,
- base::Bind(&BackgroundConnection::GotResultOnBackgroundThread,
+ base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
base::Unretained(this), result));
}
void RemoveNodeFromParentOnBackgroundThread(
@@ -238,27 +312,51 @@ class BackgroundConnection : public TestChangeTracker::Delegate {
TransportChangeId server_change_id,
bool* result) {
view_manager_->RemoveNodeFromParent(node_id, server_change_id,
- base::Bind(&BackgroundConnection::GotResultOnBackgroundThread,
+ base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
base::Unretained(this), result));
}
void SetViewOnBackgroundThread(TransportNodeId node_id,
TransportViewId view_id,
bool* result) {
view_manager_->SetView(node_id, view_id,
- base::Bind(&BackgroundConnection::GotResultOnBackgroundThread,
+ base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
base::Unretained(this), result));
}
void CreateViewOnBackgroundThread(TransportViewId view_id, bool* result) {
view_manager_->CreateView(view_id,
- base::Bind(&BackgroundConnection::GotResultOnBackgroundThread,
+ base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
base::Unretained(this), result));
}
void GetNodeTreeOnBackgroundThread(TransportNodeId node_id,
std::vector<TestNode>* nodes) {
view_manager_->GetNodeTree(node_id,
- base::Bind(&BackgroundConnection::GotNodeTreeOnBackgroundThread,
+ base::Bind(&ViewManagerProxy::GotNodeTreeOnBackgroundThread,
base::Unretained(this), nodes));
}
+ void ConnectOnBackgroundThread(const std::vector<TransportNodeId>& ids,
+ bool* result) {
+ view_manager_->Connect(kTestServiceURL,
+ Array<TransportNodeId>::From(ids),
+ base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
+ base::Unretained(this), result));
+ }
+ void DeleteNodeOnBackgroundThread(TransportNodeId node_id, bool* result) {
+ view_manager_->DeleteNode(node_id,
+ base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
+ base::Unretained(this), result));
+ }
+ void DeleteViewOnBackgroundThread(TransportViewId view_id, bool* result) {
+ view_manager_->DeleteView(view_id,
+ base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
+ base::Unretained(this), result));
+ }
+ void SetNodeBoundsOnBackgroundThread(TransportNodeId node_id,
+ const gfx::Rect& bounds,
+ bool* result) {
+ view_manager_->SetNodeBounds(node_id, Rect::From(bounds),
+ base::Bind(&ViewManagerProxy::GotResultOnBackgroundThread,
+ base::Unretained(this), result));
+ }
// TestChangeTracker::Delegate:
virtual void OnChangeAdded() OVERRIDE {
@@ -266,15 +364,16 @@ class BackgroundConnection : public TestChangeTracker::Delegate {
QuitCountReached();
}
- static BackgroundConnection* instance_;
+ static ViewManagerProxy* instance_;
static base::RunLoop* main_run_loop_;
+ static bool in_connect_;
TestChangeTracker* tracker_;
// MessageLoop of the test.
base::MessageLoop* main_loop_;
- // MessageLoop BackgroundConnection lives on.
+ // MessageLoop ViewManagerProxy lives on.
base::MessageLoop* background_loop_;
IViewManager* view_manager_;
@@ -284,14 +383,19 @@ class BackgroundConnection : public TestChangeTracker::Delegate {
std::vector<Change> changes_;
- DISALLOW_COPY_AND_ASSIGN(BackgroundConnection);
+ mojo::internal::Router* router_;
+
+ DISALLOW_COPY_AND_ASSIGN(ViewManagerProxy);
};
// static
-BackgroundConnection* BackgroundConnection::instance_ = NULL;
+ViewManagerProxy* ViewManagerProxy::instance_ = NULL;
// static
-base::RunLoop* BackgroundConnection::main_run_loop_ = NULL;
+base::RunLoop* ViewManagerProxy::main_run_loop_ = NULL;
+
+// static
+bool ViewManagerProxy::in_connect_ = false;
class TestViewManagerClientConnection
: public InterfaceImpl<IViewManagerClient> {
@@ -303,6 +407,7 @@ class TestViewManagerClientConnection
// InterfaceImp:
virtual void OnConnectionEstablished() OVERRIDE {
+ connection_.set_router(internal_state()->router());
connection_.set_view_manager(client());
}
@@ -330,7 +435,7 @@ class TestViewManagerClientConnection
TransportChangeId server_change_id,
Array<INodePtr> nodes) OVERRIDE {
tracker_.OnNodeHierarchyChanged(node, new_parent, old_parent,
- server_change_id, nodes.Pass());
+ server_change_id, nodes.Pass());
}
virtual void OnNodeDeleted(TransportNodeId node,
TransportChangeId server_change_id) OVERRIDE {
@@ -347,13 +452,13 @@ class TestViewManagerClientConnection
private:
TestChangeTracker tracker_;
- BackgroundConnection connection_;
+ ViewManagerProxy connection_;
DISALLOW_COPY_AND_ASSIGN(TestViewManagerClientConnection);
};
// Used with IViewManager::Connect(). Creates a TestViewManagerClientConnection,
-// which creates and owns the BackgroundConnection.
+// which creates and owns the ViewManagerProxy.
class ConnectServiceLoader : public ServiceLoader {
public:
ConnectServiceLoader() : initial_loop_(base::MessageLoop::current()) {
@@ -398,129 +503,24 @@ void BooleanCallback(bool* result_cache, bool result) {
current_run_loop->Quit();
}
-// Callback that results in a vector of INodes. The INodes are converted to
-// TestNodes.
-void INodesCallback(std::vector<TestNode>* test_nodes,
- Array<INodePtr> data) {
- INodesToTestNodes(data, test_nodes);
- current_run_loop->Quit();
-}
-
// Creates an id used for transport from the specified parameters.
-TransportNodeId CreateNodeId(TransportConnectionId connection_id,
- TransportConnectionSpecificNodeId node_id) {
+TransportNodeId BuildNodeId(TransportConnectionId connection_id,
+ TransportConnectionSpecificNodeId node_id) {
return (connection_id << 16) | node_id;
}
// Creates an id used for transport from the specified parameters.
-TransportViewId CreateViewId(TransportConnectionId connection_id,
- TransportConnectionSpecificViewId view_id) {
+TransportViewId BuildViewId(TransportConnectionId connection_id,
+ TransportConnectionSpecificViewId view_id) {
return (connection_id << 16) | view_id;
}
-// Creates a node with the specified id. Returns true on success. Blocks until
-// we get back result from server.
-bool CreateNode(IViewManager* view_manager,
- TransportConnectionId connection_id,
- TransportConnectionSpecificNodeId node_id) {
+// Resposible for establishing connection to the viewmanager. Blocks until get
+// back result.
+bool ViewManagerInitConnect(IViewManagerInit* view_manager_init,
+ const std::string& url) {
bool result = false;
- view_manager->CreateNode(CreateNodeId(connection_id, node_id),
- base::Bind(&BooleanCallback, &result));
- DoRunLoop();
- return result;
-}
-
-// Deletes a view, blocking until done.
-bool DeleteNode(IViewManager* view_manager, TransportNodeId node_id) {
- bool result = false;
- view_manager->DeleteNode(node_id, base::Bind(&BooleanCallback, &result));
- DoRunLoop();
- return result;
-}
-
-// Deletes a node, blocking until done.
-bool DeleteView(IViewManager* view_manager, TransportViewId view_id) {
- bool result = false;
- view_manager->DeleteView(view_id, base::Bind(&BooleanCallback, &result));
- DoRunLoop();
- return result;
-}
-
-bool SetNodeBounds(IViewManager* view_manager,
- TransportNodeId node_id,
- const gfx::Rect& bounds) {
- bool result = false;
- view_manager->SetNodeBounds(node_id, Rect::From(bounds),
- base::Bind(&BooleanCallback, &result));
- DoRunLoop();
- return result;
-}
-
-// Adds a node, blocking until done.
-bool AddNode(IViewManager* view_manager,
- TransportNodeId parent,
- TransportNodeId child,
- TransportChangeId server_change_id) {
- bool result = false;
- view_manager->AddNode(parent, child, server_change_id,
- base::Bind(&BooleanCallback, &result));
- DoRunLoop();
- return result;
-}
-
-// Removes a node, blocking until done.
-bool RemoveNodeFromParent(IViewManager* view_manager,
- TransportNodeId node_id,
- TransportChangeId server_change_id) {
- bool result = false;
- view_manager->RemoveNodeFromParent(
- node_id, server_change_id, base::Bind(&BooleanCallback, &result));
- DoRunLoop();
- return result;
-}
-
-void GetNodeTree(IViewManager* view_manager,
- TransportNodeId node_id,
- std::vector<TestNode>* nodes) {
- view_manager->GetNodeTree(node_id, base::Bind(&INodesCallback, nodes));
- DoRunLoop();
-}
-
-// Creates a view with the specified id. Returns true on success. Blocks until
-// we get back result from server.
-bool CreateView(IViewManager* view_manager,
- TransportConnectionId connection_id,
- TransportConnectionSpecificViewId id) {
- bool result = false;
- view_manager->CreateView(CreateViewId(connection_id, id),
- base::Bind(&BooleanCallback, &result));
- DoRunLoop();
- return result;
-}
-
-// Sets a view on the specified node. Returns true on success. Blocks until we
-// get back result from server.
-bool SetView(IViewManager* view_manager,
- TransportNodeId node_id,
- TransportViewId view_id) {
- bool result = false;
- view_manager->SetView(node_id, view_id,
- base::Bind(&BooleanCallback, &result));
- DoRunLoop();
- return result;
-}
-
-bool Connect(IViewManager* view_manager,
- const std::string& url,
- TransportNodeId id,
- TransportNodeId id2) {
- bool result = false;
- std::vector<TransportNodeId> node_ids;
- node_ids.push_back(id);
- if (id2 != 0)
- node_ids.push_back(id2);
- view_manager->Connect(url, Array<uint32_t>::From(node_ids),
- base::Bind(&BooleanCallback, &result));
+ view_manager_init->Connect(url, base::Bind(&BooleanCallback, &result));
DoRunLoop();
return result;
}
@@ -529,270 +529,155 @@ bool Connect(IViewManager* view_manager,
typedef std::vector<std::string> Changes;
-class MainLoopTrackerDelegate : public TestChangeTracker::Delegate {
- public:
- explicit MainLoopTrackerDelegate(TestChangeTracker* tracker)
- : tracker_(tracker),
- quit_count_(0) {}
-
- void DoRunLoopUntilChangesCount(size_t count) {
- if (tracker_->changes()->size() >= count)
- return;
- quit_count_ = count - tracker_->changes()->size();
- DoRunLoop();
- }
-
- // TestChangeTracker::Delegate:
- virtual void OnChangeAdded() OVERRIDE {
- if (quit_count_ > 0 && --quit_count_ == 0)
- current_run_loop->Quit();
- }
-
- private:
- TestChangeTracker* tracker_;
- size_t quit_count_;
-
- DISALLOW_COPY_AND_ASSIGN(MainLoopTrackerDelegate);
-};
-
-class ViewManagerClientImpl : public IViewManagerClient {
- public:
- ViewManagerClientImpl()
- : id_(0),
- next_server_change_id_(0),
- main_loop_tracker_delegate_(&tracker_) {
- tracker_.set_delegate(&main_loop_tracker_delegate_);
- }
-
- TransportConnectionId id() const { return id_; }
-
- TransportChangeId next_server_change_id() const {
- return next_server_change_id_;
- }
- const std::vector<TestNode>& initial_nodes() const {
- return initial_nodes_;
- }
- const std::vector<TestNode>& hierarchy_changed_nodes() const {
- return hierarchy_changed_nodes_;
- }
-
- Changes GetAndClearChanges() {
- Changes changes = ChangesToDescription1(*tracker_.changes());
- tracker_.changes()->clear();
- return changes;
- }
-
- void ClearId() {
- id_ = 0;
- }
-
- void WaitForId() {
- DCHECK_EQ(0, id_);
- DoRunLoopUntilChangesCount(1);
- }
-
- void DoRunLoopUntilChangesCount(size_t count) {
- main_loop_tracker_delegate_.DoRunLoopUntilChangesCount(count);
- }
-
- private:
- // IViewManagerClient overrides:
- virtual void OnViewManagerConnectionEstablished(
- TransportConnectionId connection_id,
- TransportChangeId next_server_change_id,
- mojo::Array<INodePtr> nodes) OVERRIDE {
- id_ = connection_id;
- next_server_change_id_ = next_server_change_id;
- initial_nodes_.clear();
- INodesToTestNodes(nodes, &initial_nodes_);
- tracker_.OnViewManagerConnectionEstablished(
- connection_id, next_server_change_id, nodes.Pass());
- }
- virtual void OnServerChangeIdAdvanced(
- TransportChangeId next_server_change_id) OVERRIDE {
- tracker_.OnServerChangeIdAdvanced(next_server_change_id);
- }
- virtual void OnNodeBoundsChanged(TransportNodeId node_id,
- RectPtr old_bounds,
- RectPtr new_bounds) OVERRIDE {
- tracker_.OnNodeBoundsChanged(node_id, old_bounds.Pass(), new_bounds.Pass());
- }
- virtual void OnNodeHierarchyChanged(
- TransportNodeId node,
- TransportNodeId new_parent,
- TransportNodeId old_parent,
- TransportChangeId server_change_id,
- mojo::Array<INodePtr> nodes) OVERRIDE {
- hierarchy_changed_nodes_.clear();
- INodesToTestNodes(nodes, &hierarchy_changed_nodes_);
- tracker_.OnNodeHierarchyChanged(node, new_parent, old_parent,
- server_change_id, nodes.Pass());
- }
- virtual void OnNodeDeleted(TransportNodeId node,
- TransportChangeId server_change_id) OVERRIDE {
- tracker_.OnNodeDeleted(node, server_change_id);
- }
- virtual void OnViewDeleted(TransportViewId view) OVERRIDE {
- tracker_.OnViewDeleted(view);
- }
- virtual void OnNodeViewReplaced(TransportNodeId node,
- TransportViewId new_view_id,
- TransportViewId old_view_id) OVERRIDE {
- tracker_.OnNodeViewReplaced(node, new_view_id, old_view_id);
- }
-
- TransportConnectionId id_;
- TransportChangeId next_server_change_id_;
-
- // Set of nodes sent when connection created.
- std::vector<TestNode> initial_nodes_;
-
- // Nodes sent from last OnNodeHierarchyChanged.
- std::vector<TestNode> hierarchy_changed_nodes_;
-
- TestChangeTracker tracker_;
- MainLoopTrackerDelegate main_loop_tracker_delegate_;
-
- DISALLOW_COPY_AND_ASSIGN(ViewManagerClientImpl);
-};
-
class ViewManagerConnectionTest : public testing::Test {
public:
- ViewManagerConnectionTest() : background_connection_(NULL) {}
+ ViewManagerConnectionTest() : connection_(NULL), connection2_(NULL) {}
virtual void SetUp() OVERRIDE {
test_helper_.Init();
- ConnectToService(test_helper_.service_provider(),
- "mojo:mojo_view_manager",
- &view_manager_);
- view_manager_.set_client(&client_);
-
- client_.WaitForId();
- client_.GetAndClearChanges();
-
test_helper_.SetLoaderForURL(
scoped_ptr<ServiceLoader>(new ConnectServiceLoader()),
GURL(kTestServiceURL));
- }
- protected:
- // Creates a second connection to the viewmanager.
- void EstablishSecondConnection() {
ConnectToService(test_helper_.service_provider(),
"mojo:mojo_view_manager",
- &view_manager2_);
- view_manager2_.set_client(&client2_);
+ &view_manager_init_);
+ ASSERT_TRUE(ViewManagerInitConnect(view_manager_init_.get(),
+ kTestServiceURL));
+
+ connection_ = ViewManagerProxy::WaitForInstance();
+ ASSERT_TRUE(connection_ != NULL);
+ connection_->DoRunLoopUntilChangesCount(1);
+ }
- client2_.WaitForId();
- client2_.GetAndClearChanges();
+ virtual void TearDown() OVERRIDE {
+ if (connection2_)
+ connection2_->Destroy();
+ if (connection_)
+ connection_->Destroy();
}
- std::vector<Change> EstablishBackgroundConnectionWithRoots(
+ protected:
+ void EstablishSecondConnectionWithRoots(
TransportNodeId id1,
TransportNodeId id2) {
- Connect(view_manager_.get(), kTestServiceURL, id1, id2);
- background_connection_ = BackgroundConnection::WaitForInstance();
- return background_connection_->DoRunLoopUntilChangesCount(1);
+ std::vector<TransportNodeId> node_ids;
+ node_ids.push_back(id1);
+ if (id2 != 0)
+ node_ids.push_back(id2);
+ ASSERT_TRUE(connection_->Connect(node_ids));
+ connection2_ = ViewManagerProxy::WaitForInstance();
+ ASSERT_TRUE(connection2_ != NULL);
+ connection2_->DoRunLoopUntilChangesCount(1);
+ ASSERT_EQ(1u, connection2_->changes().size());
}
- void EstablishBackgroundConnectionWithRoot1() {
- std::vector<Change> changes(
- EstablishBackgroundConnectionWithRoots(CreateNodeId(1, 1), 0));
- if (HasFatalFailure())
- return;
+ // Creates a second connection to the viewmanager.
+ void EstablishSecondConnection(bool create_initial_node) {
+ if (create_initial_node)
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
+ ASSERT_NO_FATAL_FAILURE(
+ EstablishSecondConnectionWithRoots(BuildNodeId(1, 1), 0));
+ const std::vector<Change>& changes(connection2_->changes());
ASSERT_EQ(1u, changes.size());
EXPECT_EQ("OnConnectionEstablished", ChangesToDescription1(changes)[0]);
- EXPECT_EQ("[node=1,1 parent=null view=null]",
- ChangeNodeDescription(changes));
+ if (create_initial_node) {
+ EXPECT_EQ("[node=1,1 parent=null view=null]",
+ ChangeNodeDescription(changes));
+ }
}
void DestroySecondConnection() {
- view_manager2_.reset();
+ connection2_->Destroy();
+ connection2_ = NULL;
}
base::MessageLoop loop_;
shell::ShellTestHelper test_helper_;
- ViewManagerClientImpl client_;
- IViewManagerPtr view_manager_;
+ IViewManagerInitPtr view_manager_init_;
- ViewManagerClientImpl client2_;
- IViewManagerPtr view_manager2_;
-
- BackgroundConnection* background_connection_;
+ ViewManagerProxy* connection_;
+ ViewManagerProxy* connection2_;
DISALLOW_COPY_AND_ASSIGN(ViewManagerConnectionTest);
};
// Verifies client gets a valid id.
TEST_F(ViewManagerConnectionTest, ValidId) {
+ EXPECT_EQ("OnConnectionEstablished",
+ ChangesToDescription1(connection_->changes())[0]);
+
// All these tests assume 1 for the client id. The only real assertion here is
// the client id is not zero, but adding this as rest of code here assumes 1.
- EXPECT_EQ(1, client_.id());
+ EXPECT_EQ(1, connection_->changes()[0].connection_id);
// Change ids start at 1 as well.
- EXPECT_EQ(static_cast<TransportChangeId>(1), client_.next_server_change_id());
+ EXPECT_EQ(static_cast<TransportChangeId>(1),
+ connection_->changes()[0].change_id);
}
// Verifies two clients/connections get different ids.
TEST_F(ViewManagerConnectionTest, TwoClientsGetDifferentConnectionIds) {
- EstablishSecondConnection();
- EXPECT_NE(0, client2_.id());
- EXPECT_NE(client_.id(), client2_.id());
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
+ EXPECT_EQ("OnConnectionEstablished",
+ ChangesToDescription1(connection2_->changes())[0]);
+
+ // It isn't strickly necessary that the second connection gets 2, but these
+ // tests are written assuming that is the case. The key thing is the
+ // connection ids of |connection_| and |connection2_| differ.
+ EXPECT_EQ(2, connection2_->changes()[0].connection_id);
+
+ // Change ids start at 1 as well.
+ EXPECT_EQ(static_cast<TransportChangeId>(1),
+ connection2_->changes()[0].change_id);
}
// Verifies client gets a valid id.
TEST_F(ViewManagerConnectionTest, CreateNode) {
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
+ EXPECT_TRUE(connection_->changes().empty());
// Can't create a node with the same id.
- ASSERT_FALSE(CreateNode(view_manager_.get(), 1, 1));
-}
+ ASSERT_FALSE(connection_->CreateNode(BuildNodeId(1, 1)));
+ EXPECT_TRUE(connection_->changes().empty());
-TEST_F(ViewManagerConnectionTest, CreateNodeFailsWithBogusConnectionId) {
- EXPECT_FALSE(CreateNode(view_manager_.get(), 2, 1));
+ // Can't create a node with a bogus connection id.
+ EXPECT_FALSE(connection_->CreateNode(BuildNodeId(2, 1)));
+ EXPECT_TRUE(connection_->changes().empty());
}
TEST_F(ViewManagerConnectionTest, CreateViewFailsWithBogusConnectionId) {
- EXPECT_FALSE(CreateView(view_manager_.get(), 2, 1));
+ EXPECT_FALSE(connection_->CreateView(BuildViewId(2, 1)));
+ EXPECT_TRUE(connection_->changes().empty());
}
// Verifies hierarchy changes.
TEST_F(ViewManagerConnectionTest, AddRemoveNotify) {
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
-
- EXPECT_TRUE(client_.GetAndClearChanges().empty());
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
- EstablishSecondConnection();
- EXPECT_TRUE(client2_.GetAndClearChanges().empty());
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
- // Make 2 a child of 1.
+ // Make 3 a child of 2.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 1),
- CreateNodeId(client_.id(), 2),
- 1));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- changes = client2_.GetAndClearChanges();
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 1));
+ EXPECT_TRUE(connection_->changes().empty());
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]);
}
- // Remove 2 from its parent.
+ // Remove 3 from its parent.
{
- ASSERT_TRUE(RemoveNodeFromParent(view_manager_.get(),
- CreateNodeId(client_.id(), 2),
- 2));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- changes = client2_.GetAndClearChanges();
+ ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 3), 2));
+ EXPECT_TRUE(connection_->changes().empty());
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]);
}
@@ -800,490 +685,339 @@ TEST_F(ViewManagerConnectionTest, AddRemoveNotify) {
// Verifies AddNode fails when node is already in position.
TEST_F(ViewManagerConnectionTest, AddNodeWithNoChange) {
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
-
- EXPECT_TRUE(client_.GetAndClearChanges().empty());
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
- EstablishSecondConnection();
- EXPECT_TRUE(client2_.GetAndClearChanges().empty());
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
- // Make 2 a child of 1.
+ // Make 3 a child of 2.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 1),
- CreateNodeId(client_.id(), 2),
- 1));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- changes = client2_.GetAndClearChanges();
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 1));
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]);
}
// Try again, this should fail.
{
- EXPECT_FALSE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 1),
- CreateNodeId(client_.id(), 2),
- 2));
- Changes changes(client_.GetAndClearChanges());
- EXPECT_TRUE(changes.empty());
+ EXPECT_FALSE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 2));
}
}
// Verifies AddNode fails when node is already in position.
TEST_F(ViewManagerConnectionTest, AddAncestorFails) {
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
-
- EXPECT_TRUE(client_.GetAndClearChanges().empty());
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
- EstablishSecondConnection();
- EXPECT_TRUE(client2_.GetAndClearChanges().empty());
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
- // Make 2 a child of 1.
+ // Make 3 a child of 2.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 1),
- CreateNodeId(client_.id(), 2),
- 1));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- changes = client2_.GetAndClearChanges();
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 1));
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]);
}
- // Try to make 1 a child of 2, this should fail since 1 is an ancestor of 2.
+ // Try to make 2 a child of 3, this should fail since 2 is an ancestor of 3.
{
- EXPECT_FALSE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 2),
- CreateNodeId(client_.id(), 1),
- 2));
- Changes changes(client_.GetAndClearChanges());
- EXPECT_TRUE(changes.empty());
+ EXPECT_FALSE(connection_->AddNode(BuildNodeId(1, 3), BuildNodeId(1, 2), 2));
}
}
// Verifies adding with an invalid id fails.
TEST_F(ViewManagerConnectionTest, AddWithInvalidServerId) {
// Create two nodes.
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
// Make 2 a child of 1. Supply an invalid change id, which should fail.
- {
- ASSERT_FALSE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 1),
- CreateNodeId(client_.id(), 2),
- 0));
- Changes changes(client_.GetAndClearChanges());
- EXPECT_TRUE(changes.empty());
- }
+ ASSERT_FALSE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 0));
}
// Verifies adding to root sends right notifications.
TEST_F(ViewManagerConnectionTest, AddToRoot) {
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 21));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 3));
- EXPECT_TRUE(client_.GetAndClearChanges().empty());
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 21)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
- EstablishSecondConnection();
- EXPECT_TRUE(client2_.GetAndClearChanges().empty());
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
// Make 3 a child of 21.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 21),
- CreateNodeId(client_.id(), 3),
- 1));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- changes = client2_.GetAndClearChanges();
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 21), BuildNodeId(1, 3), 1));
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]);
}
- // Make 21 a child of the root.
+ // Make 21 a child of 1.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 21),
- 2));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- changes = client2_.GetAndClearChanges();
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 21), 2));
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ(
- "HierarchyChanged change_id=2 node=1,21 new_parent=0,1 old_parent=null",
+ "HierarchyChanged change_id=2 node=1,21 new_parent=1,1 old_parent=null",
changes[0]);
}
}
-// Verifies adding to root sends right notifications.
+// Verifies HierarchyChanged is correctly sent for various adds/removes.
TEST_F(ViewManagerConnectionTest, NodeHierarchyChangedNodes) {
- // Create nodes 1 and 11 with 1 parented to the root and 11 a child of 1.
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 11));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 11)));
+ // Make 11 a child of 2.
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 11), 1));
- // Make 11 a child of 1.
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
+
+ // Make 2 a child of 1.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 1),
- CreateNodeId(client_.id(), 11),
- 1));
- ASSERT_TRUE(client_.GetAndClearChanges().empty());
- }
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 2));
- EstablishSecondConnection();
+ // Client 2 should get a hierarchy change that includes the new nodes as it
+ // has not yet seen them.
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
+ ASSERT_EQ(1u, changes.size());
+ EXPECT_EQ(
+ "HierarchyChanged change_id=2 node=1,2 new_parent=1,1 old_parent=null",
+ changes[0]);
+ EXPECT_EQ("[node=1,2 parent=1,1 view=null],"
+ "[node=1,11 parent=1,2 view=null]",
+ ChangeNodeDescription(connection2_->changes()));
+ }
- // Make 1 a child of the root.
+ // Add 1 to the root.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 1),
- 2));
- ASSERT_TRUE(client_.GetAndClearChanges().empty());
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 3));
// Client 2 should get a hierarchy change that includes the new nodes as it
// has not yet seen them.
- client2_.DoRunLoopUntilChangesCount(1);
- Changes changes(client2_.GetAndClearChanges());
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ(
- "HierarchyChanged change_id=2 node=1,1 new_parent=0,1 old_parent=null",
+ "HierarchyChanged change_id=3 node=1,1 new_parent=null old_parent=null",
changes[0]);
- const std::vector<TestNode>& nodes(client2_.hierarchy_changed_nodes());
- ASSERT_EQ(2u, nodes.size());
- EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[0].ToString());
- EXPECT_EQ("node=1,11 parent=1,1 view=null", nodes[1].ToString());
+ EXPECT_EQ(std::string(), ChangeNodeDescription(connection2_->changes()));
}
- // Remove 1 from the root.
+ // Remove 1 from its parent.
{
- ASSERT_TRUE(RemoveNodeFromParent(view_manager_.get(),
- CreateNodeId(client_.id(), 1),
- 3));
- ASSERT_TRUE(client_.GetAndClearChanges().empty());
+ ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 1), 4));
+ EXPECT_TRUE(connection_->changes().empty());
- client2_.DoRunLoopUntilChangesCount(1);
- Changes changes(client2_.GetAndClearChanges());
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ(
- "HierarchyChanged change_id=3 node=1,1 new_parent=null old_parent=0,1",
+ "HierarchyChanged change_id=4 node=1,1 new_parent=null old_parent=null",
changes[0]);
}
// Create another node, 111, parent it to 11.
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 111));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 111)));
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 11),
- CreateNodeId(client_.id(), 111),
- 4));
- ASSERT_TRUE(client_.GetAndClearChanges().empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- Changes changes(client2_.GetAndClearChanges());
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 11), BuildNodeId(1, 111),
+ 5));
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
- // Even though 11 isn't attached to the root client 2 is still notified of
- // the change because it was told about 11.
EXPECT_EQ(
- "HierarchyChanged change_id=4 node=1,111 new_parent=1,11 "
+ "HierarchyChanged change_id=5 node=1,111 new_parent=1,11 "
"old_parent=null", changes[0]);
- const std::vector<TestNode>& nodes(client2_.hierarchy_changed_nodes());
- ASSERT_EQ(1u, nodes.size());
- EXPECT_EQ("node=1,111 parent=1,11 view=null", nodes[0].ToString());
+ EXPECT_EQ("[node=1,111 parent=1,11 view=null]",
+ ChangeNodeDescription(connection2_->changes()));
}
// Reattach 1 to the root.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 1),
- 5));
- ASSERT_TRUE(client_.GetAndClearChanges().empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- Changes changes = client2_.GetAndClearChanges();
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 6));
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ(
- "HierarchyChanged change_id=5 node=1,1 new_parent=0,1 old_parent=null",
+ "HierarchyChanged change_id=6 node=1,1 new_parent=null old_parent=null",
changes[0]);
- ASSERT_TRUE(client2_.hierarchy_changed_nodes().empty());
+ EXPECT_EQ(std::string(), ChangeNodeDescription(connection2_->changes()));
}
}
TEST_F(ViewManagerConnectionTest, NodeHierarchyChangedAddingKnownToUnknown) {
// Create the following structure: root -> 1 -> 11 and 2->21 (2 has no
// parent).
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 11));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 21));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 11)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 21)));
// Set up the hierarchy.
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 11), 2));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 21), 3));
+
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 1),
- 1));
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 1),
- CreateNodeId(client_.id(), 11),
- 2));
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 2),
- CreateNodeId(client_.id(), 21),
- 3));
- }
-
- EstablishSecondConnection();
-
- // Remove 11.
+ EXPECT_EQ("[node=1,1 parent=null view=null],"
+ "[node=1,11 parent=1,1 view=null]",
+ ChangeNodeDescription(connection2_->changes()));
+ }
+
+ // Remove 11, should result in a delete (since 11 is no longer in connection
+ // 2's root).
{
- ASSERT_TRUE(RemoveNodeFromParent(view_manager_.get(),
- CreateNodeId(client_.id(), 11),
- 4));
- ASSERT_TRUE(client_.GetAndClearChanges().empty());
+ ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 11), 4));
- client2_.DoRunLoopUntilChangesCount(1);
- Changes changes(client2_.GetAndClearChanges());
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
- EXPECT_EQ(
- "HierarchyChanged change_id=4 node=1,11 new_parent=null old_parent=1,1",
- changes[0]);
- EXPECT_TRUE(client2_.hierarchy_changed_nodes().empty());
+ EXPECT_EQ("NodeDeleted change_id=4 node=1,11", changes[0]);
}
- // Add 11 to 21. As client2 knows about 11 it should receive the new
- // hierarchy.
+ // Add 2 to 1.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 21),
- CreateNodeId(client_.id(), 11),
- 5));
- ASSERT_TRUE(client_.GetAndClearChanges().empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- Changes changes(client2_.GetAndClearChanges());
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 5));
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ(
- "HierarchyChanged change_id=5 node=1,11 new_parent=1,21 "
- "old_parent=null", changes[0]);
- const std::vector<TestNode>& nodes(client2_.hierarchy_changed_nodes());
- ASSERT_EQ(2u, nodes.size());
- EXPECT_EQ("node=1,2 parent=null view=null", nodes[0].ToString());
- EXPECT_EQ("node=1,21 parent=1,2 view=null", nodes[1].ToString());
- }
-}
-
-// Verifies connection on told descendants of the root when connecting.
-TEST_F(ViewManagerConnectionTest, GetInitialNodesOnInit) {
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 21));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 3));
- EXPECT_TRUE(client_.GetAndClearChanges().empty());
-
- // Make 3 a child of 21.
- {
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 21),
- CreateNodeId(client_.id(), 3),
- 1));
- ASSERT_TRUE(client_.GetAndClearChanges().empty());
+ "HierarchyChanged change_id=5 node=1,2 new_parent=1,1 old_parent=null",
+ changes[0]);
+ EXPECT_EQ("[node=1,2 parent=1,1 view=null],"
+ "[node=1,21 parent=1,2 view=null]",
+ ChangeNodeDescription(connection2_->changes()));
}
-
- // Make 21 a child of the root.
- {
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 21),
- 2));
- ASSERT_TRUE(client_.GetAndClearChanges().empty());
- }
-
- EstablishSecondConnection();
- // Should get notification of children of the root.
- const std::vector<TestNode>& nodes(client2_.initial_nodes());
- ASSERT_EQ(3u, nodes.size());
- EXPECT_EQ("node=0,1 parent=null view=null", nodes[0].ToString());
- EXPECT_EQ("node=1,21 parent=0,1 view=null", nodes[1].ToString());
- EXPECT_EQ("node=1,3 parent=1,21 view=null", nodes[2].ToString());
}
// Verifies DeleteNode works.
TEST_F(ViewManagerConnectionTest, DeleteNode) {
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
- EXPECT_TRUE(client_.GetAndClearChanges().empty());
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
- EstablishSecondConnection();
- EXPECT_TRUE(client2_.GetAndClearChanges().empty());
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
// Make 2 a child of 1.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 1),
- CreateNodeId(client_.id(), 2),
- 1));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- changes = client2_.GetAndClearChanges();
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 1));
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
- EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]);
+ EXPECT_EQ("HierarchyChanged change_id=1 node=1,2 new_parent=1,1 "
+ "old_parent=null", changes[0]);
}
- // Add 1 to the root
+ // Delete 2.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 1),
- 2));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- changes = client2_.GetAndClearChanges();
- ASSERT_EQ(1u, changes.size());
- EXPECT_EQ(
- "HierarchyChanged change_id=2 node=1,1 new_parent=0,1 old_parent=null",
- changes[0]);
- }
+ ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2)));
+ EXPECT_TRUE(connection_->changes().empty());
- // Delete 1.
- {
- ASSERT_TRUE(DeleteNode(view_manager_.get(), CreateNodeId(client_.id(), 1)));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- changes = client2_.GetAndClearChanges();
- ASSERT_EQ(1u, changes.size());
- EXPECT_EQ("NodeDeleted change_id=3 node=1,1", changes[0]);
+ // TODO(sky): fix this, client should not get ServerChangeIdAdvanced.
+ connection2_->DoRunLoopUntilChangesCount(2);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
+ ASSERT_EQ(2u, changes.size());
+ EXPECT_EQ("NodeDeleted change_id=2 node=1,2", changes[0]);
+ EXPECT_EQ("ServerChangeIdAdvanced 3", changes[1]);
}
}
// Verifies DeleteNode isn't allowed from a separate connection.
TEST_F(ViewManagerConnectionTest, DeleteNodeFromAnotherConnectionDisallowed) {
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- EstablishSecondConnection();
- EXPECT_FALSE(DeleteNode(view_manager2_.get(), CreateNodeId(client_.id(), 1)));
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
+ EXPECT_FALSE(connection2_->DeleteNode(BuildNodeId(1, 1)));
}
// Verifies DeleteView isn't allowed from a separate connection.
TEST_F(ViewManagerConnectionTest, DeleteViewFromAnotherConnectionDisallowed) {
- ASSERT_TRUE(CreateView(view_manager_.get(), 1, 1));
- EstablishSecondConnection();
- EXPECT_FALSE(DeleteView(view_manager2_.get(), CreateViewId(client_.id(), 1)));
+ ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 1)));
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
+ EXPECT_FALSE(connection2_->DeleteView(BuildViewId(1, 1)));
}
// Verifies if a node was deleted and then reused that other clients are
// properly notified.
-TEST_F(ViewManagerConnectionTest, ReusedDeletedId) {
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- EXPECT_TRUE(client_.GetAndClearChanges().empty());
+TEST_F(ViewManagerConnectionTest, ReuseDeletedNodeId) {
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
- EstablishSecondConnection();
-
- // Make 1 a child of the root.
+ // Add 2 to 1.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 1),
- 1));
- EXPECT_TRUE(client_.GetAndClearChanges().empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- Changes changes = client2_.GetAndClearChanges();
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 1));
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
EXPECT_EQ(
- "HierarchyChanged change_id=1 node=1,1 new_parent=0,1 old_parent=null",
+ "HierarchyChanged change_id=1 node=1,2 new_parent=1,1 old_parent=null",
changes[0]);
- const std::vector<TestNode>& nodes(client2_.hierarchy_changed_nodes());
- ASSERT_EQ(1u, nodes.size());
- EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[0].ToString());
+ EXPECT_EQ("[node=1,2 parent=1,1 view=null]",
+ ChangeNodeDescription(connection2_->changes()));
}
- // Delete 1.
+ // Delete 2.
{
- ASSERT_TRUE(DeleteNode(view_manager_.get(), CreateNodeId(client_.id(), 1)));
- EXPECT_TRUE(client_.GetAndClearChanges().empty());
+ ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2)));
- client2_.DoRunLoopUntilChangesCount(1);
- Changes changes = client2_.GetAndClearChanges();
- ASSERT_EQ(1u, changes.size());
- EXPECT_EQ("NodeDeleted change_id=2 node=1,1", changes[0]);
+ // TODO(sky): fix this, shouldn't get ServerChangeIdAdvanced.
+ connection2_->DoRunLoopUntilChangesCount(2);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
+ ASSERT_EQ(2u, changes.size());
+ EXPECT_EQ("NodeDeleted change_id=2 node=1,2", changes[0]);
+ EXPECT_EQ("ServerChangeIdAdvanced 3", changes[1]);
}
- // Create 1 again, and add it back to the root. Should get the same
- // notification.
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
+ // Create 2 again, and add it back to 1. Should get the same notification.
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 1),
- 3));
- EXPECT_TRUE(client_.GetAndClearChanges().empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- Changes changes = client2_.GetAndClearChanges();
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 3));
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
EXPECT_EQ(
- "HierarchyChanged change_id=3 node=1,1 new_parent=0,1 old_parent=null",
+ "HierarchyChanged change_id=3 node=1,2 new_parent=1,1 old_parent=null",
changes[0]);
- const std::vector<TestNode>& nodes(client2_.hierarchy_changed_nodes());
- ASSERT_EQ(1u, nodes.size());
- EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[0].ToString());
+ EXPECT_EQ("[node=1,2 parent=1,1 view=null]",
+ ChangeNodeDescription(connection2_->changes()));
}
}
// Assertions around setting a view.
TEST_F(ViewManagerConnectionTest, SetView) {
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
- ASSERT_TRUE(CreateView(view_manager_.get(), 1, 11));
- ASSERT_TRUE(AddNode(view_manager_.get(), 1, CreateNodeId(1, 1), 1));
- ASSERT_TRUE(AddNode(view_manager_.get(), 1, CreateNodeId(1, 2), 2));
- EXPECT_TRUE(client_.GetAndClearChanges().empty());
+ // Create nodes 1, 2 and 3 and the view 11. Nodes 2 and 3 are parented to 1.
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
+ ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 11)));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 1));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 3), 2));
- EstablishSecondConnection();
- EXPECT_TRUE(client2_.GetAndClearChanges().empty());
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
// Set view 11 on node 1.
{
- ASSERT_TRUE(SetView(view_manager_.get(),
- CreateNodeId(client_.id(), 1),
- CreateViewId(client_.id(), 11)));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- changes = client2_.GetAndClearChanges();
+ ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 1),
+ BuildViewId(1, 11)));
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
- EXPECT_EQ(
- "ViewReplaced node=1,1 new_view=1,11 old_view=null",
- changes[0]);
+ EXPECT_EQ("ViewReplaced node=1,1 new_view=1,11 old_view=null",
+ changes[0]);
}
// Set view 11 on node 2.
{
- ASSERT_TRUE(SetView(view_manager_.get(),
- CreateNodeId(client_.id(), 2),
- CreateViewId(client_.id(), 11)));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
-
- client2_.DoRunLoopUntilChangesCount(2);
- changes = client2_.GetAndClearChanges();
+ ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 2), BuildViewId(1, 11)));
+
+ connection2_->DoRunLoopUntilChangesCount(2);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(2u, changes.size());
EXPECT_EQ("ViewReplaced node=1,1 new_view=null old_view=1,11",
changes[0]);
@@ -1294,90 +1028,68 @@ TEST_F(ViewManagerConnectionTest, SetView) {
// Verifies deleting a node with a view sends correct notifications.
TEST_F(ViewManagerConnectionTest, DeleteNodeWithView) {
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
- ASSERT_TRUE(CreateView(view_manager_.get(), 1, 11));
- EXPECT_TRUE(client_.GetAndClearChanges().empty());
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
+ ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 11)));
- // Set view 11 on node 1.
- ASSERT_TRUE(SetView(view_manager_.get(),
- CreateNodeId(client_.id(), 1),
- CreateViewId(client_.id(), 11)));
- client_.GetAndClearChanges();
+ // Set view 11 on node 2.
+ ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 2), BuildViewId(1, 11)));
- EstablishSecondConnection();
- EXPECT_TRUE(client2_.GetAndClearChanges().empty());
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
- // Delete node 1. The second connection should not see this because the node
+ // Delete node 2. The second connection should not see this because the node
// was not known to it.
{
- ASSERT_TRUE(DeleteNode(view_manager_.get(), CreateNodeId(client_.id(), 1)));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
+ ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2)));
- client2_.DoRunLoopUntilChangesCount(1);
- changes = client2_.GetAndClearChanges();
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]);
}
- // Parent 2 to the root.
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 2),
- 2));
- client2_.DoRunLoopUntilChangesCount(1);
- client2_.GetAndClearChanges();
+ // Parent 3 to 1.
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 3), 2));
+ connection2_->DoRunLoopUntilChangesCount(1);
- // Set view 11 on node 2.
+ // Set view 11 on node 3.
{
- ASSERT_TRUE(SetView(view_manager_.get(),
- CreateNodeId(client_.id(), 2),
- CreateViewId(client_.id(), 11)));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
-
- client2_.DoRunLoopUntilChangesCount(1);
- changes = client2_.GetAndClearChanges();
+ ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 3), BuildViewId(1, 11)));
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
- EXPECT_EQ("ViewReplaced node=1,2 new_view=1,11 old_view=null", changes[0]);
+ EXPECT_EQ("ViewReplaced node=1,3 new_view=1,11 old_view=null", changes[0]);
}
- // Delete node.
+ // Delete 3.
{
- ASSERT_TRUE(DeleteNode(view_manager_.get(), CreateNodeId(client_.id(), 2)));
- Changes changes(client_.GetAndClearChanges());
- ASSERT_TRUE(changes.empty());
+ ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 3)));
- client2_.DoRunLoopUntilChangesCount(2);
- changes = client2_.GetAndClearChanges();
+ // TODO(sky): shouldn't get ServerChangeIdAdvanced here.
+ connection2_->DoRunLoopUntilChangesCount(2);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(2u, changes.size());
- EXPECT_EQ("ViewReplaced node=1,2 new_view=null old_view=1,11", changes[0]);
- EXPECT_EQ("NodeDeleted change_id=3 node=1,2", changes[1]);
+ EXPECT_EQ("NodeDeleted change_id=3 node=1,3", changes[0]);
+ EXPECT_EQ("ServerChangeIdAdvanced 4", changes[1]);
}
}
// Sets view from one connection on another.
TEST_F(ViewManagerConnectionTest, SetViewFromSecondConnection) {
- EstablishSecondConnection();
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
- // Create two nodes in first connection.
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
-
- EXPECT_TRUE(client_.GetAndClearChanges().empty());
- EXPECT_TRUE(client2_.GetAndClearChanges().empty());
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
// Create a view in the second connection.
- ASSERT_TRUE(CreateView(view_manager2_.get(), 2, 51));
+ ASSERT_TRUE(connection2_->CreateView(BuildViewId(2, 51)));
- // Attach view to node 1 in the first connectoin.
+ // Attach view to node 1 in the first connection.
{
- ASSERT_TRUE(SetView(view_manager2_.get(),
- CreateNodeId(client_.id(), 1),
- CreateViewId(client2_.id(), 51)));
- client_.DoRunLoopUntilChangesCount(1);
- Changes changes(client_.GetAndClearChanges());
+ ASSERT_TRUE(connection2_->SetView(BuildNodeId(1, 1), BuildViewId(2, 51)));
+ connection_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ("ViewReplaced node=1,1 new_view=2,51 old_view=null", changes[0]);
}
@@ -1385,9 +1097,8 @@ TEST_F(ViewManagerConnectionTest, SetViewFromSecondConnection) {
// Shutdown the second connection and verify view is removed.
{
DestroySecondConnection();
- client_.DoRunLoopUntilChangesCount(2);
-
- Changes changes(client_.GetAndClearChanges());
+ connection_->DoRunLoopUntilChangesCount(2);
+ const Changes changes(ChangesToDescription1(connection_->changes()));
ASSERT_EQ(2u, changes.size());
EXPECT_EQ("ViewReplaced node=1,1 new_view=null old_view=2,51", changes[0]);
EXPECT_EQ("ViewDeleted view=2,51", changes[1]);
@@ -1396,149 +1107,126 @@ TEST_F(ViewManagerConnectionTest, SetViewFromSecondConnection) {
// Assertions for GetNodeTree.
TEST_F(ViewManagerConnectionTest, GetNodeTree) {
- EstablishSecondConnection();
-
- // Create two nodes in first connection, 1 and 11 (11 is a child of 1).
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 11));
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 1),
- 1));
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(client_.id(), 1),
- CreateNodeId(client_.id(), 11),
- 2));
-
- // Create two nodes in second connection, 2 and 3, both children of the root.
- ASSERT_TRUE(CreateNode(view_manager2_.get(), 2, 2));
- ASSERT_TRUE(CreateNode(view_manager2_.get(), 2, 3));
- ASSERT_TRUE(AddNode(view_manager2_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client2_.id(), 2),
- 3));
- ASSERT_TRUE(AddNode(view_manager2_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client2_.id(), 3),
- 4));
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
+
+ // Create 11 in first connection and make it a child of 1.
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 11)));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 11), 2));
+
+ // Create two nodes in second connection, 2 and 3, both children of 1.
+ ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 2)));
+ ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 3)));
+ ASSERT_TRUE(connection2_->AddNode(BuildNodeId(1, 1), BuildNodeId(2, 2), 3));
+ ASSERT_TRUE(connection2_->AddNode(BuildNodeId(1, 1), BuildNodeId(2, 3), 4));
// Attach view to node 11 in the first connection.
- ASSERT_TRUE(CreateView(view_manager_.get(), 1, 51));
- ASSERT_TRUE(SetView(view_manager_.get(),
- CreateNodeId(client_.id(), 11),
- CreateViewId(client_.id(), 51)));
+ ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 51)));
+ ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 11), BuildViewId(1, 51)));
// Verifies GetNodeTree() on the root.
{
std::vector<TestNode> nodes;
- GetNodeTree(view_manager2_.get(), CreateNodeId(0, 1), &nodes);
+ connection_->GetNodeTree(BuildNodeId(0, 1), &nodes);
ASSERT_EQ(5u, nodes.size());
EXPECT_EQ("node=0,1 parent=null view=null", nodes[0].ToString());
EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[1].ToString());
EXPECT_EQ("node=1,11 parent=1,1 view=1,51", nodes[2].ToString());
- EXPECT_EQ("node=2,2 parent=0,1 view=null", nodes[3].ToString());
- EXPECT_EQ("node=2,3 parent=0,1 view=null", nodes[4].ToString());
+ EXPECT_EQ("node=2,2 parent=1,1 view=null", nodes[3].ToString());
+ EXPECT_EQ("node=2,3 parent=1,1 view=null", nodes[4].ToString());
}
// Verifies GetNodeTree() on the node 1,1.
{
std::vector<TestNode> nodes;
- GetNodeTree(view_manager2_.get(), CreateNodeId(1, 1), &nodes);
- ASSERT_EQ(2u, nodes.size());
- EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[0].ToString());
+ connection2_->GetNodeTree(BuildNodeId(1, 1), &nodes);
+ ASSERT_EQ(4u, nodes.size());
+ EXPECT_EQ("node=1,1 parent=null view=null", nodes[0].ToString());
EXPECT_EQ("node=1,11 parent=1,1 view=1,51", nodes[1].ToString());
+ EXPECT_EQ("node=2,2 parent=1,1 view=null", nodes[2].ToString());
+ EXPECT_EQ("node=2,3 parent=1,1 view=null", nodes[3].ToString());
+ }
+
+ // Connection 2 shouldn't be able to get the root tree.
+ {
+ std::vector<TestNode> nodes;
+ connection2_->GetNodeTree(BuildNodeId(0, 1), &nodes);
+ ASSERT_EQ(0u, nodes.size());
}
}
TEST_F(ViewManagerConnectionTest, SetNodeBounds) {
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(1, 1),
- 1));
- EstablishSecondConnection();
-
- ASSERT_TRUE(SetNodeBounds(view_manager_.get(),
- CreateNodeId(1, 1),
- gfx::Rect(0, 0, 100, 100)));
-
- client2_.DoRunLoopUntilChangesCount(1);
- Changes changes(client2_.GetAndClearChanges());
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1));
+
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
+
+ ASSERT_TRUE(connection_->SetNodeBounds(BuildNodeId(1, 1),
+ gfx::Rect(0, 0, 100, 100)));
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ("BoundsChanged node=1,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100",
changes[0]);
// Should not be possible to change the bounds of a node created by another
// connection.
- ASSERT_FALSE(SetNodeBounds(view_manager2_.get(),
- CreateNodeId(1, 1),
- gfx::Rect(0, 0, 0, 0)));
+ ASSERT_FALSE(connection2_->SetNodeBounds(BuildNodeId(1, 1),
+ gfx::Rect(0, 0, 0, 0)));
}
// Various assertions around SetRoots.
TEST_F(ViewManagerConnectionTest, SetRoots) {
// Create 1, 2, and 3 in the first connection.
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 3));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
// Parent 1 to the root.
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 1),
- 1));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1));
// Establish the second connection and give it the roots 1 and 3.
{
- std::vector<Change> changes(EstablishBackgroundConnectionWithRoots(
- CreateNodeId(1, 1), CreateNodeId(1, 3)));
- if (HasFatalFailure())
- return;
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnectionWithRoots(
+ BuildNodeId(1, 1), BuildNodeId(1, 3)));
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
- EXPECT_EQ("OnConnectionEstablished", ChangesToDescription1(changes)[0]);
+ EXPECT_EQ("OnConnectionEstablished", changes[0]);
EXPECT_EQ("[node=1,1 parent=null view=null],"
"[node=1,3 parent=null view=null]",
- ChangeNodeDescription(changes));
+ ChangeNodeDescription(connection2_->changes()));
}
// Create 4 and add it to the root, connection 2 should only get id advanced.
{
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 4));
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 4),
- 2));
- Changes changes = ChangesToDescription1(
- background_connection_->DoRunLoopUntilChangesCount(1));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 4)));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 4), 2));
+
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]);
}
// Move 4 under 3, this should expose 4 to the client.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(1, 3),
- CreateNodeId(1, 4),
- 3));
- std::vector<Change> changes =
- background_connection_->DoRunLoopUntilChangesCount(1);
- Changes change_strings(ChangesToDescription1(changes));
- ASSERT_EQ(1u, change_strings.size());
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 3), BuildNodeId(1, 4), 3));
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
+ ASSERT_EQ(1u, changes.size());
EXPECT_EQ(
"HierarchyChanged change_id=3 node=1,4 new_parent=1,3 "
- "old_parent=null", change_strings[0]);
+ "old_parent=null", changes[0]);
EXPECT_EQ("[node=1,4 parent=1,3 view=null]",
- ChangeNodeDescription(changes));
+ ChangeNodeDescription(connection2_->changes()));
}
// Move 4 under 2, since 2 isn't a root client should get a delete.
{
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(1, 2),
- CreateNodeId(1, 4),
- 4));
- Changes changes = ChangesToDescription1(
- background_connection_->DoRunLoopUntilChangesCount(1));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 4), 4));
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ("NodeDeleted change_id=4 node=1,4", changes[0]);
}
@@ -1546,11 +1234,10 @@ TEST_F(ViewManagerConnectionTest, SetRoots) {
// Delete 4, client shouldn't receive a delete since it should no longer know
// about 4.
{
- ASSERT_TRUE(DeleteNode(view_manager_.get(), CreateNodeId(client_.id(), 4)));
- ASSERT_TRUE(client_.GetAndClearChanges().empty());
+ ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 4)));
- Changes changes = ChangesToDescription1(
- background_connection_->DoRunLoopUntilChangesCount(1));
+ connection2_->DoRunLoopUntilChangesCount(1);
+ const Changes changes(ChangesToDescription1(connection2_->changes()));
ASSERT_EQ(1u, changes.size());
EXPECT_EQ("ServerChangeIdAdvanced 6", changes[0]);
}
@@ -1559,62 +1246,50 @@ TEST_F(ViewManagerConnectionTest, SetRoots) {
// Verify AddNode fails when trying to manipulate nodes in other roots.
TEST_F(ViewManagerConnectionTest, CantMoveNodesFromOtherRoot) {
// Create 1 and 2 in the first connection.
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
- ASSERT_NO_FATAL_FAILURE(EstablishBackgroundConnectionWithRoot1());
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
// Try to move 2 to be a child of 1 from connection 2. This should fail as 2
// should not be able to access 1.
- ASSERT_FALSE(background_connection_->AddNode(
- CreateNodeId(1, 1), CreateNodeId(1, 2), 1));
+ ASSERT_FALSE(connection2_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 1));
// Try to reparent 1 to the root. A connection is not allowed to reparent its
// roots.
- ASSERT_FALSE(background_connection_->AddNode(CreateNodeId(0, 1),
- CreateNodeId(1, 1), 1));
+ ASSERT_FALSE(connection2_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1));
}
// Verify RemoveNodeFromParent fails for nodes that are descendants of the
// roots.
TEST_F(ViewManagerConnectionTest, CantRemoveNodesInOtherRoots) {
// Create 1 and 2 in the first connection and parent both to the root.
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
-
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 1),
- 1));
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 2),
- 2));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
+
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 2), 2));
// Establish the second connection and give it the root 1.
- ASSERT_NO_FATAL_FAILURE(EstablishBackgroundConnectionWithRoot1());
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
// Connection 2 should not be able to remove node 2 or 1 from its parent.
- ASSERT_FALSE(background_connection_->RemoveNodeFromParent(
- CreateNodeId(1, 2), 3));
- ASSERT_FALSE(background_connection_->RemoveNodeFromParent(CreateNodeId(1, 1),
- 3));
+ ASSERT_FALSE(connection2_->RemoveNodeFromParent(BuildNodeId(1, 2), 3));
+ ASSERT_FALSE(connection2_->RemoveNodeFromParent(BuildNodeId(1, 1), 3));
// Create nodes 10 and 11 in 2.
- ASSERT_TRUE(background_connection_->CreateNode(CreateNodeId(2, 10)));
- ASSERT_TRUE(background_connection_->CreateNode(CreateNodeId(2, 11)));
+ ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 10)));
+ ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 11)));
// Parent 11 to 10.
- ASSERT_TRUE(background_connection_->AddNode(CreateNodeId(2, 10),
- CreateNodeId(2, 11), 3));
+ ASSERT_TRUE(connection2_->AddNode(BuildNodeId(2, 10), BuildNodeId(2, 11), 3));
// Remove 11 from 10.
- ASSERT_TRUE(background_connection_->RemoveNodeFromParent(
- CreateNodeId(2, 11), 4));
+ ASSERT_TRUE(connection2_->RemoveNodeFromParent( BuildNodeId(2, 11), 4));
// Verify nothing was actually removed.
{
std::vector<TestNode> nodes;
- GetNodeTree(view_manager_.get(), CreateNodeId(0, 1), &nodes);
+ connection_->GetNodeTree(BuildNodeId(0, 1), &nodes);
ASSERT_EQ(3u, nodes.size());
EXPECT_EQ("node=0,1 parent=null view=null", nodes[0].ToString());
EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[1].ToString());
@@ -1625,80 +1300,57 @@ TEST_F(ViewManagerConnectionTest, CantRemoveNodesInOtherRoots) {
// Verify SetView fails for nodes that are not descendants of the roots.
TEST_F(ViewManagerConnectionTest, CantRemoveSetViewInOtherRoots) {
// Create 1 and 2 in the first connection and parent both to the root.
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 1),
- 1));
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 2),
- 2));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 2), 2));
- ASSERT_NO_FATAL_FAILURE(EstablishBackgroundConnectionWithRoot1());
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
// Create a view in the second connection.
- ASSERT_TRUE(background_connection_->CreateView(CreateViewId(2, 51)));
+ ASSERT_TRUE(connection2_->CreateView(BuildViewId(2, 51)));
// Connection 2 should be able to set the view on node 1 (it's root), but not
// on 2.
- ASSERT_TRUE(background_connection_->SetView(CreateNodeId(client_.id(), 1),
- CreateViewId(2, 51)));
- ASSERT_FALSE(background_connection_->SetView(CreateNodeId(client_.id(), 2),
- CreateViewId(2, 51)));
+ ASSERT_TRUE(connection2_->SetView(BuildNodeId(1, 1), BuildViewId(2, 51)));
+ ASSERT_FALSE(connection2_->SetView(BuildNodeId(1, 2), BuildViewId(2, 51)));
}
// Verify GetNodeTree fails for nodes that are not descendants of the roots.
TEST_F(ViewManagerConnectionTest, CantGetNodeTreeOfOtherRoots) {
// Create 1 and 2 in the first connection and parent both to the root.
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
+ ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 1),
- 1));
- ASSERT_TRUE(AddNode(view_manager_.get(),
- CreateNodeId(0, 1),
- CreateNodeId(client_.id(), 2),
- 2));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1));
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 2), 2));
- ASSERT_NO_FATAL_FAILURE(EstablishBackgroundConnectionWithRoot1());
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
std::vector<TestNode> nodes;
// Should get nothing for the root.
- background_connection_->GetNodeTree(CreateNodeId(0, 1), &nodes);
+ connection2_->GetNodeTree(BuildNodeId(0, 1), &nodes);
ASSERT_TRUE(nodes.empty());
// Should get nothing for node 2.
- background_connection_->GetNodeTree(CreateNodeId(1, 2), &nodes);
+ connection2_->GetNodeTree(BuildNodeId(1, 2), &nodes);
ASSERT_TRUE(nodes.empty());
// Should get node 1 if asked for.
- background_connection_->GetNodeTree(CreateNodeId(1, 1), &nodes);
+ connection2_->GetNodeTree(BuildNodeId(1, 1), &nodes);
ASSERT_EQ(1u, nodes.size());
EXPECT_EQ("node=1,1 parent=null view=null", nodes[0].ToString());
}
-// Verify GetNodeTree fails for nodes that are not descendants of the roots.
-TEST_F(ViewManagerConnectionTest, Connect) {
- ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
- ASSERT_TRUE(Connect(view_manager_.get(), kTestServiceURL, CreateNodeId(1, 1),
- 0));
- BackgroundConnection* instance = BackgroundConnection::WaitForInstance();
- ASSERT_TRUE(instance != NULL);
- Changes changes(
- ChangesToDescription1(instance->DoRunLoopUntilChangesCount(1)));;
- ASSERT_EQ(1u, changes.size());
- EXPECT_EQ("OnConnectionEstablished", changes[0]);
-}
-
// TODO(sky): add coverage of test that destroys connections and ensures other
// connections get deletion notification (or advanced server id).
+// TODO(sky): need to better track changes to initial connection. For example,
+// that SetBounsdNodes/AddNode and the like don't result in messages to the
+// originating connection.
+
} // namespace service
} // namespace view_manager
} // namespace mojo
« no previous file with comments | « mojo/services/view_manager/view_manager_connection.cc ('k') | mojo/services/view_manager/view_manager_init_connection.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698