Index: mojo/services/view_manager/view_manager_unittest.cc |
diff --git a/mojo/services/view_manager/view_manager_unittest.cc b/mojo/services/view_manager/view_manager_unittest.cc |
index da5ae76e597aaa1313136f0353ea1c5f5f951c6d..e630147efd3ae4f34f0a43c68626b3726ced2cdb 100644 |
--- a/mojo/services/view_manager/view_manager_unittest.cc |
+++ b/mojo/services/view_manager/view_manager_unittest.cc |
@@ -37,6 +37,7 @@ namespace service { |
namespace { |
const char kTestServiceURL[] = "mojo:test_url"; |
+const char kTestServiceURL2[] = "mojo:test_url2"; |
// ViewManagerProxy is a proxy to an ViewManagerService. It handles invoking |
// ViewManagerService functions on the right thread in a synchronous manner |
@@ -89,6 +90,11 @@ class ViewManagerProxy : public TestChangeTracker::Delegate { |
router_->CloseMessagePipe(); |
} |
+ void ClearChanges() { |
+ changes_.clear(); |
+ tracker_->changes()->clear(); |
+ } |
+ |
// The following functions are cover methods for ViewManagerService. They |
// block until the result is received. |
bool CreateNode(Id node_id) { |
@@ -167,11 +173,11 @@ class ViewManagerProxy : public TestChangeTracker::Delegate { |
base::Unretained(this), nodes)); |
RunMainLoop(); |
} |
- bool Embed(const Id node_id) { |
+ bool Embed(const Id node_id, const char* url) { |
changes_.clear(); |
base::AutoReset<bool> auto_reset(&in_embed_, true); |
bool result = false; |
- view_manager_->Embed(kTestServiceURL, node_id, |
+ view_manager_->Embed(url, node_id, |
base::Bind(&ViewManagerProxy::GotResult, |
base::Unretained(this), &result)); |
RunMainLoop(); |
@@ -460,6 +466,10 @@ class ViewManagerTest : public testing::Test { |
scoped_ptr<ServiceLoader>(new EmbedServiceLoader()), |
GURL(kTestServiceURL)); |
+ test_helper_.SetLoaderForURL( |
+ scoped_ptr<ServiceLoader>(new EmbedServiceLoader()), |
+ GURL(kTestServiceURL2)); |
+ |
test_helper_.service_manager()->ConnectToService( |
GURL("mojo:mojo_view_manager"), |
&view_manager_init_); |
@@ -479,7 +489,7 @@ class ViewManagerTest : public testing::Test { |
protected: |
void EstablishSecondConnectionWithRoot(Id root_id) { |
- ASSERT_TRUE(connection_->Embed(root_id)); |
+ ASSERT_TRUE(connection_->Embed(root_id, kTestServiceURL)); |
connection2_ = ViewManagerProxy::WaitForInstance(); |
ASSERT_TRUE(connection2_ != NULL); |
connection2_->DoRunLoopUntilChangesCount(1); |
@@ -580,24 +590,24 @@ TEST_F(ViewManagerTest, AddRemoveNotify) { |
// Make 3 a child of 2. |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 1)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), 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 2", changes[0]); |
+ EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]); |
} |
// Remove 3 from its parent. |
{ |
- ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 3), 2)); |
+ ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 3), 3)); |
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]); |
+ EXPECT_EQ("ServerChangeIdAdvanced 4", changes[0]); |
} |
} |
@@ -610,17 +620,17 @@ TEST_F(ViewManagerTest, AddNodeWithNoChange) { |
// Make 3 a child of 2. |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 1)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 2)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
- EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]); |
+ EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]); |
} |
// Try again, this should fail. |
{ |
- EXPECT_FALSE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 2)); |
+ EXPECT_FALSE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 3)); |
} |
} |
@@ -633,16 +643,16 @@ TEST_F(ViewManagerTest, AddAncestorFails) { |
// Make 3 a child of 2. |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 1)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 2)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
- EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]); |
+ EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]); |
} |
// Try to make 2 a child of 3, this should fail since 2 is an ancestor of 3. |
{ |
- EXPECT_FALSE(connection_->AddNode(BuildNodeId(1, 3), BuildNodeId(1, 2), 2)); |
+ EXPECT_FALSE(connection_->AddNode(BuildNodeId(1, 3), BuildNodeId(1, 2), 3)); |
} |
} |
@@ -665,23 +675,23 @@ TEST_F(ViewManagerTest, AddToRoot) { |
// Make 3 a child of 21. |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 21), BuildNodeId(1, 3), 1)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 21), BuildNodeId(1, 3), 2)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
- EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]); |
+ EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]); |
} |
// Make 21 a child of 1. |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 21), 2)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 21), 3)); |
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=1,1 old_parent=null", |
+ "HierarchyChanged change_id=3 node=1,21 new_parent=1,1 old_parent=null", |
changes[0]); |
} |
} |
@@ -697,7 +707,7 @@ TEST_F(ViewManagerTest, NodeHierarchyChangedNodes) { |
// Make 2 a child of 1. |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 2)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 3)); |
// Client 2 should get a hierarchy change that includes the new nodes as it |
// has not yet seen them. |
@@ -705,7 +715,7 @@ TEST_F(ViewManagerTest, NodeHierarchyChangedNodes) { |
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", |
+ "HierarchyChanged change_id=3 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]", |
@@ -714,7 +724,7 @@ TEST_F(ViewManagerTest, NodeHierarchyChangedNodes) { |
// Add 1 to the root. |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 3)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 4)); |
// Client 2 should get a hierarchy change that includes the new nodes as it |
// has not yet seen them. |
@@ -722,21 +732,21 @@ TEST_F(ViewManagerTest, NodeHierarchyChangedNodes) { |
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=null", |
+ "HierarchyChanged change_id=4 node=1,1 new_parent=null old_parent=null", |
changes[0]); |
EXPECT_EQ(std::string(), ChangeNodeDescription(connection2_->changes())); |
} |
// Remove 1 from its parent. |
{ |
- ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 1), 4)); |
+ ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 1), 5)); |
EXPECT_TRUE(connection_->changes().empty()); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
EXPECT_EQ( |
- "HierarchyChanged change_id=4 node=1,1 new_parent=null old_parent=null", |
+ "HierarchyChanged change_id=5 node=1,1 new_parent=null old_parent=null", |
changes[0]); |
} |
@@ -744,13 +754,13 @@ TEST_F(ViewManagerTest, NodeHierarchyChangedNodes) { |
ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 111))); |
{ |
ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 11), BuildNodeId(1, 111), |
- 5)); |
+ 6)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
EXPECT_EQ( |
- "HierarchyChanged change_id=5 node=1,111 new_parent=1,11 " |
+ "HierarchyChanged change_id=6 node=1,111 new_parent=1,11 " |
"old_parent=null", changes[0]); |
EXPECT_EQ("[node=1,111 parent=1,11 view=null]", |
ChangeNodeDescription(connection2_->changes())); |
@@ -758,13 +768,13 @@ TEST_F(ViewManagerTest, NodeHierarchyChangedNodes) { |
// Reattach 1 to the root. |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 6)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 7)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
EXPECT_EQ( |
- "HierarchyChanged change_id=6 node=1,1 new_parent=null old_parent=null", |
+ "HierarchyChanged change_id=7 node=1,1 new_parent=null old_parent=null", |
changes[0]); |
EXPECT_EQ(std::string(), ChangeNodeDescription(connection2_->changes())); |
} |
@@ -793,23 +803,23 @@ TEST_F(ViewManagerTest, NodeHierarchyChangedAddingKnownToUnknown) { |
// Remove 11, should result in a delete (since 11 is no longer in connection |
// 2's root). |
{ |
- ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 11), 4)); |
+ ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 11), 5)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
- EXPECT_EQ("NodeDeleted change_id=4 node=1,11", changes[0]); |
+ EXPECT_EQ("NodeDeleted change_id=5 node=1,11", changes[0]); |
} |
// Add 2 to 1. |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 5)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 6)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
EXPECT_EQ( |
- "HierarchyChanged change_id=5 node=1,2 new_parent=1,1 old_parent=null", |
+ "HierarchyChanged change_id=6 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]", |
@@ -845,55 +855,55 @@ TEST_F(ViewManagerTest, ReorderNode) { |
ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); |
{ |
- connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_ABOVE, 6); |
+ connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_ABOVE, 7); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
EXPECT_EQ( |
- "Reordered change_id=6 node=1,2 relative=1,3 direction=above", |
+ "Reordered change_id=7 node=1,2 relative=1,3 direction=above", |
changes[0]); |
} |
{ |
- connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_BELOW, 7); |
+ connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_BELOW, 8); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
EXPECT_EQ( |
- "Reordered change_id=7 node=1,2 relative=1,3 direction=below", |
+ "Reordered change_id=8 node=1,2 relative=1,3 direction=below", |
changes[0]); |
} |
{ |
// node2 is already below node3. |
EXPECT_FALSE( |
- connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_BELOW, 8)); |
+ connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_BELOW, 9)); |
} |
{ |
// node4 & 5 are unknown to connection2_. |
EXPECT_FALSE(connection2_->ReorderNode( |
- node4_id, node5_id, ORDER_DIRECTION_ABOVE, 8)); |
+ node4_id, node5_id, ORDER_DIRECTION_ABOVE, 9)); |
} |
{ |
// node6 & node3 have different parents. |
EXPECT_FALSE( |
- connection_->ReorderNode(node3_id, node6_id, ORDER_DIRECTION_ABOVE, 8)); |
+ connection_->ReorderNode(node3_id, node6_id, ORDER_DIRECTION_ABOVE, 9)); |
} |
{ |
// Non-existent node-ids |
EXPECT_FALSE(connection_->ReorderNode( |
- BuildNodeId(1, 27), BuildNodeId(1, 28), ORDER_DIRECTION_ABOVE, 8)); |
+ BuildNodeId(1, 27), BuildNodeId(1, 28), ORDER_DIRECTION_ABOVE, 9)); |
} |
{ |
// node7 & node8 are un-parented. |
EXPECT_FALSE( |
- connection_->ReorderNode(node7_id, node8_id, ORDER_DIRECTION_ABOVE, 8)); |
+ connection_->ReorderNode(node7_id, node8_id, ORDER_DIRECTION_ABOVE, 9)); |
} |
} |
@@ -905,23 +915,23 @@ TEST_F(ViewManagerTest, DeleteNode) { |
// Make 2 a child of 1. |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 1)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 2)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
- EXPECT_EQ("HierarchyChanged change_id=1 node=1,2 new_parent=1,1 " |
+ EXPECT_EQ("HierarchyChanged change_id=2 node=1,2 new_parent=1,1 " |
"old_parent=null", changes[0]); |
} |
// Delete 2. |
{ |
- ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2), 2)); |
+ ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2), 3)); |
EXPECT_TRUE(connection_->changes().empty()); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
- EXPECT_EQ("NodeDeleted change_id=2 node=1,2", changes[0]); |
+ EXPECT_EQ("NodeDeleted change_id=3 node=1,2", changes[0]); |
} |
} |
@@ -946,12 +956,12 @@ TEST_F(ViewManagerTest, ReuseDeletedNodeId) { |
// Add 2 to 1. |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 1)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 2)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
EXPECT_EQ( |
- "HierarchyChanged change_id=1 node=1,2 new_parent=1,1 old_parent=null", |
+ "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]", |
ChangeNodeDescription(connection2_->changes())); |
@@ -959,23 +969,23 @@ TEST_F(ViewManagerTest, ReuseDeletedNodeId) { |
// Delete 2. |
{ |
- ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2), 2)); |
+ ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2), 3)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
- EXPECT_EQ("NodeDeleted change_id=2 node=1,2", changes[0]); |
+ EXPECT_EQ("NodeDeleted change_id=3 node=1,2", changes[0]); |
} |
// Create 2 again, and add it back to 1. Should get the same notification. |
ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 3)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 4)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
EXPECT_EQ( |
- "HierarchyChanged change_id=3 node=1,2 new_parent=1,1 old_parent=null", |
+ "HierarchyChanged change_id=4 node=1,2 new_parent=1,1 old_parent=null", |
changes[0]); |
EXPECT_EQ("[node=1,2 parent=1,1 view=null]", |
ChangeNodeDescription(connection2_->changes())); |
@@ -1035,16 +1045,16 @@ TEST_F(ViewManagerTest, DeleteNodeWithView) { |
// Delete node 2. The second connection should not see this because the node |
// was not known to it. |
{ |
- ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2), 1)); |
+ ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2), 2)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
- EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]); |
+ EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]); |
} |
// Parent 3 to 1. |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 3), 2)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 3), 3)); |
connection2_->DoRunLoopUntilChangesCount(1); |
// Set view 11 on node 3. |
@@ -1059,12 +1069,12 @@ TEST_F(ViewManagerTest, DeleteNodeWithView) { |
// Delete 3. |
{ |
- ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 3), 3)); |
+ ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 3), 4)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
- EXPECT_EQ("NodeDeleted change_id=3 node=1,3", changes[0]); |
+ EXPECT_EQ("NodeDeleted change_id=4 node=1,3", changes[0]); |
} |
} |
@@ -1103,14 +1113,14 @@ TEST_F(ViewManagerTest, GetNodeTree) { |
// 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)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 2)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 11), 3)); |
// 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)); |
+ ASSERT_TRUE(connection2_->AddNode(BuildNodeId(1, 1), BuildNodeId(2, 2), 4)); |
+ ASSERT_TRUE(connection2_->AddNode(BuildNodeId(1, 1), BuildNodeId(2, 3), 5)); |
// Attach view to node 11 in the first connection. |
ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 51))); |
@@ -1182,7 +1192,7 @@ TEST_F(ViewManagerTest, SetRoots) { |
{ |
ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); |
- ASSERT_TRUE(connection_->Embed(BuildNodeId(1, 3))); |
+ ASSERT_TRUE(connection_->Embed(BuildNodeId(1, 3), kTestServiceURL)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
@@ -1194,22 +1204,22 @@ TEST_F(ViewManagerTest, SetRoots) { |
// Create 4 and add it to the root, connection 2 should only get id advanced. |
{ |
ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 4))); |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 4), 2)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 4), 4)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
- EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]); |
+ EXPECT_EQ("ServerChangeIdAdvanced 5", changes[0]); |
} |
// Move 4 under 3, this should expose 4 to the client. |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 3), BuildNodeId(1, 4), 3)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 3), BuildNodeId(1, 4), 5)); |
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 " |
+ "HierarchyChanged change_id=5 node=1,4 new_parent=1,3 " |
"old_parent=null", changes[0]); |
EXPECT_EQ("[node=1,4 parent=1,3 view=null]", |
ChangeNodeDescription(connection2_->changes())); |
@@ -1217,22 +1227,22 @@ TEST_F(ViewManagerTest, SetRoots) { |
// Move 4 under 2, since 2 isn't a root client should get a delete. |
{ |
- ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 4), 4)); |
+ ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 4), 6)); |
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]); |
+ EXPECT_EQ("NodeDeleted change_id=6 node=1,4", changes[0]); |
} |
// Delete 4, client shouldn't receive a delete since it should no longer know |
// about 4. |
{ |
- ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 4), 5)); |
+ ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 4), 7)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
- EXPECT_EQ("ServerChangeIdAdvanced 6", changes[0]); |
+ EXPECT_EQ("ServerChangeIdAdvanced 8", changes[0]); |
} |
} |
@@ -1267,17 +1277,17 @@ TEST_F(ViewManagerTest, CantRemoveNodesInOtherRoots) { |
ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); |
// Connection 2 should not be able to remove node 2 or 1 from its parent. |
- ASSERT_FALSE(connection2_->RemoveNodeFromParent(BuildNodeId(1, 2), 3)); |
- ASSERT_FALSE(connection2_->RemoveNodeFromParent(BuildNodeId(1, 1), 3)); |
+ ASSERT_FALSE(connection2_->RemoveNodeFromParent(BuildNodeId(1, 2), 4)); |
+ ASSERT_FALSE(connection2_->RemoveNodeFromParent(BuildNodeId(1, 1), 4)); |
// Create nodes 10 and 11 in 2. |
ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 10))); |
ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 11))); |
// Parent 11 to 10. |
- ASSERT_TRUE(connection2_->AddNode(BuildNodeId(2, 10), BuildNodeId(2, 11), 3)); |
+ ASSERT_TRUE(connection2_->AddNode(BuildNodeId(2, 10), BuildNodeId(2, 11), 4)); |
// Remove 11 from 10. |
- ASSERT_TRUE(connection2_->RemoveNodeFromParent( BuildNodeId(2, 11), 4)); |
+ ASSERT_TRUE(connection2_->RemoveNodeFromParent( BuildNodeId(2, 11), 5)); |
// Verify nothing was actually removed. |
{ |
@@ -1348,12 +1358,12 @@ TEST_F(ViewManagerTest, ConnectTwice) { |
// Try to connect again to 1,1, this should fail as already connected to that |
// root. |
{ |
- ASSERT_FALSE(connection_->Embed(BuildNodeId(1, 1))); |
+ ASSERT_FALSE(connection_->Embed(BuildNodeId(1, 1), kTestServiceURL)); |
} |
// Connecting to 1,2 should succeed and end up in connection2. |
{ |
- ASSERT_TRUE(connection_->Embed(BuildNodeId(1, 2))); |
+ ASSERT_TRUE(connection_->Embed(BuildNodeId(1, 2), kTestServiceURL)); |
connection2_->DoRunLoopUntilChangesCount(1); |
const Changes changes(ChangesToDescription1(connection2_->changes())); |
ASSERT_EQ(1u, changes.size()); |
@@ -1384,6 +1394,121 @@ TEST_F(ViewManagerTest, OnViewInput) { |
} |
} |
+TEST_F(ViewManagerTest, EmbedWithSameNodeId) { |
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); |
+ |
+ // Create a third connection. |
+ ViewManagerProxy* connection3 = NULL; |
+ { |
+ ASSERT_TRUE(connection_->Embed(BuildNodeId(1, 1), kTestServiceURL2)); |
+ connection3 = ViewManagerProxy::WaitForInstance(); |
+ ASSERT_TRUE(connection3 != NULL); |
+ connection3->DoRunLoopUntilChangesCount(1); |
+ const Changes changes(ChangesToDescription1(connection3->changes())); |
+ ASSERT_EQ(1u, changes.size()); |
+ EXPECT_EQ("OnConnectionEstablished creator=mojo:test_url", changes[0]); |
+ } |
+ |
+ // Connection2 should have been told the node was deleted. |
+ { |
+ connection2_->DoRunLoopUntilChangesCount(1); |
+ const Changes changes(ChangesToDescription1(connection2_->changes())); |
+ ASSERT_EQ(1u, changes.size()); |
+ EXPECT_EQ("NodeDeleted change_id=2 node=1,1", changes[0]); |
+ } |
+ |
+ // Connection2 has no root. Verify it can't see node 1,1 anymore. |
+ { |
+ std::vector<TestNode> nodes; |
+ connection2_->GetNodeTree(BuildNodeId(1, 1), &nodes); |
+ EXPECT_TRUE(nodes.empty()); |
+ } |
+ |
+ connection3->Destroy(); |
+} |
+ |
+TEST_F(ViewManagerTest, EmbedWithSameNodeId2) { |
+ ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); |
+ |
+ // Create a third connection. |
+ ViewManagerProxy* connection3 = NULL; |
+ { |
+ ASSERT_TRUE(connection_->Embed(BuildNodeId(1, 1), kTestServiceURL2)); |
+ connection3 = ViewManagerProxy::WaitForInstance(); |
+ ASSERT_TRUE(connection3 != NULL); |
+ connection3->DoRunLoopUntilChangesCount(1); |
+ const Changes changes(ChangesToDescription1(connection3->changes())); |
+ ASSERT_EQ(1u, changes.size()); |
+ EXPECT_EQ("OnConnectionEstablished creator=mojo:test_url", changes[0]); |
+ } |
+ |
+ // Connection2 should have been told the node was deleted. |
+ connection2_->DoRunLoopUntilChangesCount(1); |
+ connection2_->ClearChanges(); |
+ |
+ // Create a node in the third connection and parent it to the root. |
+ ASSERT_TRUE(connection3->CreateNode(BuildNodeId(3, 1))); |
+ ASSERT_TRUE(connection3->AddNode(BuildNodeId(1, 1), BuildNodeId(3, 1), 3)); |
+ |
+ // Connection 1 should have been told about the add (it owns the node). |
+ { |
+ connection_->DoRunLoopUntilChangesCount(1); |
+ const Changes changes(ChangesToDescription1(connection_->changes())); |
+ ASSERT_EQ(1u, changes.size()); |
+ EXPECT_EQ( |
+ "HierarchyChanged change_id=3 node=3,1 new_parent=1,1 old_parent=null", |
+ changes[0]); |
+ } |
+ |
+ // connection2_ should get an advance. |
+ connection2_->DoRunLoopUntilChangesCount(1); |
+ connection2_->ClearChanges(); |
+ |
+ // Embed 1,1 back in connection 2. |
+ { |
+ // 2 should be told about the new embed. |
+ ASSERT_TRUE(connection_->Embed(BuildNodeId(1, 1), kTestServiceURL)); |
+ connection2_->DoRunLoopUntilChangesCount(1); |
+ const std::vector<Change>& changes(connection2_->changes()); |
+ ASSERT_EQ(1u, changes.size()); |
+ EXPECT_EQ("OnRootAdded", ChangesToDescription1(changes)[0]); |
+ EXPECT_EQ("[node=1,1 parent=null view=null]", |
+ ChangeNodeDescription(changes)); |
+ |
+ // And 3 should get a delete. |
+ connection3->DoRunLoopUntilChangesCount(1); |
+ ASSERT_EQ(1u, connection3->changes().size()); |
+ EXPECT_EQ("NodeDeleted change_id=4 node=1,1", |
+ ChangesToDescription1(connection3->changes())[0]); |
+ } |
+ |
+ // Connection3 has no root. Verify it can't see node 1,1 anymore. |
+ { |
+ std::vector<TestNode> nodes; |
+ connection3->GetNodeTree(BuildNodeId(1, 1), &nodes); |
+ EXPECT_TRUE(nodes.empty()); |
+ } |
+ |
+ // Verify 3,1 is no longer parented to 1,1. We have to do this from 1,1 as |
+ // connection3 can no longer see 1,1. |
+ { |
+ std::vector<TestNode> nodes; |
+ connection_->GetNodeTree(BuildNodeId(1, 1), &nodes); |
+ ASSERT_EQ(1u, nodes.size()); |
+ EXPECT_EQ("node=1,1 parent=null view=null", nodes[0].ToString()); |
+ } |
+ |
+ // Verify connection3 can still see the node it created 3,1. |
+ { |
+ std::vector<TestNode> nodes; |
+ connection3->GetNodeTree(BuildNodeId(3, 1), &nodes); |
+ ASSERT_EQ(1u, nodes.size()); |
+ EXPECT_EQ("node=3,1 parent=null view=null", nodes[0].ToString()); |
+ } |
+ |
+ connection3->Destroy(); |
+} |
+ |
// TODO(sky): add coverage of test that destroys connections and ensures other |
// connections get deletion notification (or advanced server id). |