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

Side by Side Diff: mojo/services/view_manager/view_manager_unittest.cc

Issue 397263004: Nukes change_ids from view manager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « mojo/services/view_manager/view_manager_service_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/at_exit.h" 8 #include "base/at_exit.h"
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 ErrorCode CreateNodeWithErrorCode(Id node_id) { 110 ErrorCode CreateNodeWithErrorCode(Id node_id) {
111 changes_.clear(); 111 changes_.clear();
112 ErrorCode result = ERROR_CODE_NONE; 112 ErrorCode result = ERROR_CODE_NONE;
113 view_manager_->CreateNode( 113 view_manager_->CreateNode(
114 node_id, 114 node_id,
115 base::Bind(&ViewManagerProxy::GotResultWithErrorCode, 115 base::Bind(&ViewManagerProxy::GotResultWithErrorCode,
116 base::Unretained(this), &result)); 116 base::Unretained(this), &result));
117 RunMainLoop(); 117 RunMainLoop();
118 return result; 118 return result;
119 } 119 }
120 bool AddNode(Id parent, Id child, Id server_change_id) { 120 bool AddNode(Id parent, Id child) {
121 changes_.clear(); 121 changes_.clear();
122 bool result = false; 122 bool result = false;
123 view_manager_->AddNode(parent, child, server_change_id, 123 view_manager_->AddNode(parent, child,
124 base::Bind(&ViewManagerProxy::GotResult, 124 base::Bind(&ViewManagerProxy::GotResult,
125 base::Unretained(this), &result)); 125 base::Unretained(this), &result));
126 RunMainLoop(); 126 RunMainLoop();
127 return result; 127 return result;
128 } 128 }
129 bool RemoveNodeFromParent(Id node_id, Id server_change_id) { 129 bool RemoveNodeFromParent(Id node_id) {
130 changes_.clear(); 130 changes_.clear();
131 bool result = false; 131 bool result = false;
132 view_manager_->RemoveNodeFromParent(node_id, server_change_id, 132 view_manager_->RemoveNodeFromParent(node_id,
133 base::Bind(&ViewManagerProxy::GotResult, 133 base::Bind(&ViewManagerProxy::GotResult,
134 base::Unretained(this), &result)); 134 base::Unretained(this), &result));
135 RunMainLoop(); 135 RunMainLoop();
136 return result; 136 return result;
137 } 137 }
138 bool ReorderNode(Id node_id, 138 bool ReorderNode(Id node_id,
139 Id relative_node_id, 139 Id relative_node_id,
140 OrderDirection direction, 140 OrderDirection direction) {
141 Id server_change_id) {
142 changes_.clear(); 141 changes_.clear();
143 bool result = false; 142 bool result = false;
144 view_manager_->ReorderNode(node_id, relative_node_id, direction, 143 view_manager_->ReorderNode(node_id, relative_node_id, direction,
145 server_change_id,
146 base::Bind(&ViewManagerProxy::GotResult, 144 base::Bind(&ViewManagerProxy::GotResult,
147 base::Unretained(this), &result)); 145 base::Unretained(this), &result));
148 RunMainLoop(); 146 RunMainLoop();
149 return result; 147 return result;
150 } 148 }
151 bool SetView(Id node_id, Id view_id) { 149 bool SetView(Id node_id, Id view_id) {
152 changes_.clear(); 150 changes_.clear();
153 bool result = false; 151 bool result = false;
154 view_manager_->SetView(node_id, view_id, 152 view_manager_->SetView(node_id, view_id,
155 base::Bind(&ViewManagerProxy::GotResult, 153 base::Bind(&ViewManagerProxy::GotResult,
(...skipping 20 matching lines...) Expand all
176 bool Embed(const Id node_id, const char* url) { 174 bool Embed(const Id node_id, const char* url) {
177 changes_.clear(); 175 changes_.clear();
178 base::AutoReset<bool> auto_reset(&in_embed_, true); 176 base::AutoReset<bool> auto_reset(&in_embed_, true);
179 bool result = false; 177 bool result = false;
180 view_manager_->Embed(url, node_id, 178 view_manager_->Embed(url, node_id,
181 base::Bind(&ViewManagerProxy::GotResult, 179 base::Bind(&ViewManagerProxy::GotResult,
182 base::Unretained(this), &result)); 180 base::Unretained(this), &result));
183 RunMainLoop(); 181 RunMainLoop();
184 return result; 182 return result;
185 } 183 }
186 bool DeleteNode(Id node_id, Id server_change_id) { 184 bool DeleteNode(Id node_id) {
187 changes_.clear(); 185 changes_.clear();
188 bool result = false; 186 bool result = false;
189 view_manager_->DeleteNode(node_id, 187 view_manager_->DeleteNode(node_id,
190 server_change_id,
191 base::Bind(&ViewManagerProxy::GotResult, 188 base::Bind(&ViewManagerProxy::GotResult,
192 base::Unretained(this), &result)); 189 base::Unretained(this), &result));
193 RunMainLoop(); 190 RunMainLoop();
194 return result; 191 return result;
195 } 192 }
196 bool DeleteView(Id view_id) { 193 bool DeleteView(Id view_id) {
197 changes_.clear(); 194 changes_.clear();
198 bool result = false; 195 bool result = false;
199 view_manager_->DeleteView(view_id, 196 view_manager_->DeleteView(view_id,
200 base::Bind(&ViewManagerProxy::GotResult, 197 base::Bind(&ViewManagerProxy::GotResult,
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 // InterfaceImp: 315 // InterfaceImp:
319 virtual void OnConnectionEstablished() OVERRIDE { 316 virtual void OnConnectionEstablished() OVERRIDE {
320 connection_.set_router(internal_state()->router()); 317 connection_.set_router(internal_state()->router());
321 connection_.set_view_manager(client()); 318 connection_.set_view_manager(client());
322 } 319 }
323 320
324 // ViewMangerClient: 321 // ViewMangerClient:
325 virtual void OnViewManagerConnectionEstablished( 322 virtual void OnViewManagerConnectionEstablished(
326 ConnectionSpecificId connection_id, 323 ConnectionSpecificId connection_id,
327 const String& creator_url, 324 const String& creator_url,
328 Id next_server_change_id,
329 Array<NodeDataPtr> nodes) OVERRIDE { 325 Array<NodeDataPtr> nodes) OVERRIDE {
330 tracker_.OnViewManagerConnectionEstablished( 326 tracker_.OnViewManagerConnectionEstablished(
331 connection_id, creator_url, next_server_change_id, nodes.Pass()); 327 connection_id, creator_url, nodes.Pass());
332 } 328 }
333 virtual void OnRootAdded(Array<NodeDataPtr> nodes) OVERRIDE { 329 virtual void OnRootAdded(Array<NodeDataPtr> nodes) OVERRIDE {
334 tracker_.OnRootAdded(nodes.Pass()); 330 tracker_.OnRootAdded(nodes.Pass());
335 } 331 }
336 virtual void OnServerChangeIdAdvanced(
337 Id next_server_change_id) OVERRIDE {
338 tracker_.OnServerChangeIdAdvanced(next_server_change_id);
339 }
340 virtual void OnNodeBoundsChanged(Id node_id, 332 virtual void OnNodeBoundsChanged(Id node_id,
341 RectPtr old_bounds, 333 RectPtr old_bounds,
342 RectPtr new_bounds) OVERRIDE { 334 RectPtr new_bounds) OVERRIDE {
343 tracker_.OnNodeBoundsChanged(node_id, old_bounds.Pass(), new_bounds.Pass()); 335 tracker_.OnNodeBoundsChanged(node_id, old_bounds.Pass(), new_bounds.Pass());
344 } 336 }
345 virtual void OnNodeHierarchyChanged(Id node, 337 virtual void OnNodeHierarchyChanged(Id node,
346 Id new_parent, 338 Id new_parent,
347 Id old_parent, 339 Id old_parent,
348 Id server_change_id,
349 Array<NodeDataPtr> nodes) OVERRIDE { 340 Array<NodeDataPtr> nodes) OVERRIDE {
350 tracker_.OnNodeHierarchyChanged(node, new_parent, old_parent, 341 tracker_.OnNodeHierarchyChanged(node, new_parent, old_parent, nodes.Pass());
351 server_change_id, nodes.Pass());
352 } 342 }
353 virtual void OnNodeReordered(Id node_id, 343 virtual void OnNodeReordered(Id node_id,
354 Id relative_node_id, 344 Id relative_node_id,
355 OrderDirection direction, 345 OrderDirection direction) OVERRIDE {
356 Id server_change_id) OVERRIDE { 346 tracker_.OnNodeReordered(node_id, relative_node_id, direction);
357 tracker_.OnNodeReordered(node_id, relative_node_id, direction,
358 server_change_id);
359 } 347 }
360 virtual void OnNodeDeleted(Id node, Id server_change_id) OVERRIDE { 348 virtual void OnNodeDeleted(Id node) OVERRIDE {
361 tracker_.OnNodeDeleted(node, server_change_id); 349 tracker_.OnNodeDeleted(node);
362 } 350 }
363 virtual void OnViewDeleted(Id view) OVERRIDE { 351 virtual void OnViewDeleted(Id view) OVERRIDE {
364 tracker_.OnViewDeleted(view); 352 tracker_.OnViewDeleted(view);
365 } 353 }
366 virtual void OnNodeViewReplaced(Id node, 354 virtual void OnNodeViewReplaced(Id node,
367 Id new_view_id, 355 Id new_view_id,
368 Id old_view_id) OVERRIDE { 356 Id old_view_id) OVERRIDE {
369 tracker_.OnNodeViewReplaced(node, new_view_id, old_view_id); 357 tracker_.OnNodeViewReplaced(node, new_view_id, old_view_id);
370 } 358 }
371 virtual void OnViewInputEvent(Id view_id, 359 virtual void OnViewInputEvent(Id view_id,
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 // Verifies client gets a valid id. 520 // Verifies client gets a valid id.
533 TEST_F(ViewManagerTest, ValidId) { 521 TEST_F(ViewManagerTest, ValidId) {
534 // TODO(beng): this should really have the URL of the application that 522 // TODO(beng): this should really have the URL of the application that
535 // connected to ViewManagerInit. 523 // connected to ViewManagerInit.
536 EXPECT_EQ("OnConnectionEstablished creator=", 524 EXPECT_EQ("OnConnectionEstablished creator=",
537 ChangesToDescription1(connection_->changes())[0]); 525 ChangesToDescription1(connection_->changes())[0]);
538 526
539 // All these tests assume 1 for the client id. The only real assertion here is 527 // All these tests assume 1 for the client id. The only real assertion here is
540 // the client id is not zero, but adding this as rest of code here assumes 1. 528 // the client id is not zero, but adding this as rest of code here assumes 1.
541 EXPECT_EQ(1, connection_->changes()[0].connection_id); 529 EXPECT_EQ(1, connection_->changes()[0].connection_id);
542
543 // Change ids start at 1 as well.
544 EXPECT_EQ(static_cast<Id>(1), connection_->changes()[0].change_id);
545 } 530 }
546 531
547 // Verifies two clients/connections get different ids. 532 // Verifies two clients/connections get different ids.
548 TEST_F(ViewManagerTest, TwoClientsGetDifferentConnectionIds) { 533 TEST_F(ViewManagerTest, TwoClientsGetDifferentConnectionIds) {
549 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); 534 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
550 EXPECT_EQ("OnConnectionEstablished creator=mojo:test_url", 535 EXPECT_EQ("OnConnectionEstablished creator=mojo:test_url",
551 ChangesToDescription1(connection2_->changes())[0]); 536 ChangesToDescription1(connection2_->changes())[0]);
552 537
553 // It isn't strictly necessary that the second connection gets 2, but these 538 // It isn't strictly necessary that the second connection gets 2, but these
554 // tests are written assuming that is the case. The key thing is the 539 // tests are written assuming that is the case. The key thing is the
555 // connection ids of |connection_| and |connection2_| differ. 540 // connection ids of |connection_| and |connection2_| differ.
556 EXPECT_EQ(2, connection2_->changes()[0].connection_id); 541 EXPECT_EQ(2, connection2_->changes()[0].connection_id);
557
558 // Change ids start at 1 as well.
559 EXPECT_EQ(static_cast<Id>(1), connection2_->changes()[0].change_id);
560 } 542 }
561 543
562 // Verifies client gets a valid id. 544 // Verifies client gets a valid id.
563 TEST_F(ViewManagerTest, CreateNode) { 545 TEST_F(ViewManagerTest, CreateNode) {
564 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); 546 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
565 EXPECT_TRUE(connection_->changes().empty()); 547 EXPECT_TRUE(connection_->changes().empty());
566 548
567 // Can't create a node with the same id. 549 // Can't create a node with the same id.
568 ASSERT_EQ(ERROR_CODE_VALUE_IN_USE, 550 ASSERT_EQ(ERROR_CODE_VALUE_IN_USE,
569 connection_->CreateNodeWithErrorCode(BuildNodeId(1, 1))); 551 connection_->CreateNodeWithErrorCode(BuildNodeId(1, 1)));
570 EXPECT_TRUE(connection_->changes().empty()); 552 EXPECT_TRUE(connection_->changes().empty());
571 553
572 // Can't create a node with a bogus connection id. 554 // Can't create a node with a bogus connection id.
573 EXPECT_EQ( 555 EXPECT_EQ(ERROR_CODE_ILLEGAL_ARGUMENT,
574 ERROR_CODE_ILLEGAL_ARGUMENT, 556 connection_->CreateNodeWithErrorCode(BuildNodeId(2, 1)));
575 connection_->CreateNodeWithErrorCode(BuildNodeId(2, 1)));
576 EXPECT_TRUE(connection_->changes().empty()); 557 EXPECT_TRUE(connection_->changes().empty());
577 } 558 }
578 559
579 TEST_F(ViewManagerTest, CreateViewFailsWithBogusConnectionId) { 560 TEST_F(ViewManagerTest, CreateViewFailsWithBogusConnectionId) {
580 EXPECT_FALSE(connection_->CreateView(BuildViewId(2, 1))); 561 EXPECT_FALSE(connection_->CreateView(BuildViewId(2, 1)));
581 EXPECT_TRUE(connection_->changes().empty()); 562 EXPECT_TRUE(connection_->changes().empty());
582 } 563 }
583 564
584 // Verifies hierarchy changes.
585 TEST_F(ViewManagerTest, AddRemoveNotify) {
586 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
587 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
588
589 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
590
591 // Make 3 a child of 2.
592 {
593 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 2));
594 EXPECT_TRUE(connection_->changes().empty());
595
596 connection2_->DoRunLoopUntilChangesCount(1);
597 const Changes changes(ChangesToDescription1(connection2_->changes()));
598 ASSERT_EQ(1u, changes.size());
599 EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]);
600 }
601
602 // Remove 3 from its parent.
603 {
604 ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 3), 3));
605 EXPECT_TRUE(connection_->changes().empty());
606
607 connection2_->DoRunLoopUntilChangesCount(1);
608 const Changes changes(ChangesToDescription1(connection2_->changes()));
609 ASSERT_EQ(1u, changes.size());
610 EXPECT_EQ("ServerChangeIdAdvanced 4", changes[0]);
611 }
612 }
613
614 // Verifies AddNode fails when node is already in position. 565 // Verifies AddNode fails when node is already in position.
615 TEST_F(ViewManagerTest, AddNodeWithNoChange) { 566 TEST_F(ViewManagerTest, AddNodeWithNoChange) {
616 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 567 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
617 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3))); 568 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
618 569
619 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); 570 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
620 571
621 // Make 3 a child of 2. 572 // Make 3 a child of 2.
622 { 573 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3)));
623 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 2));
624
625 connection2_->DoRunLoopUntilChangesCount(1);
626 const Changes changes(ChangesToDescription1(connection2_->changes()));
627 ASSERT_EQ(1u, changes.size());
628 EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]);
629 }
630 574
631 // Try again, this should fail. 575 // Try again, this should fail.
632 { 576 EXPECT_FALSE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3)));
633 EXPECT_FALSE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 3));
634 }
635 } 577 }
636 578
637 // Verifies AddNode fails when node is already in position. 579 // Verifies AddNode fails when node is already in position.
638 TEST_F(ViewManagerTest, AddAncestorFails) { 580 TEST_F(ViewManagerTest, AddAncestorFails) {
639 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 581 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
640 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3))); 582 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
641 583
642 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); 584 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
643 585
644 // Make 3 a child of 2. 586 // Make 3 a child of 2.
645 { 587 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3)));
646 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 3), 2));
647 connection2_->DoRunLoopUntilChangesCount(1);
648 const Changes changes(ChangesToDescription1(connection2_->changes()));
649 ASSERT_EQ(1u, changes.size());
650 EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]);
651 }
652 588
653 // Try to make 2 a child of 3, this should fail since 2 is an ancestor of 3. 589 // Try to make 2 a child of 3, this should fail since 2 is an ancestor of 3.
654 { 590 EXPECT_FALSE(connection_->AddNode(BuildNodeId(1, 3), BuildNodeId(1, 2)));
655 EXPECT_FALSE(connection_->AddNode(BuildNodeId(1, 3), BuildNodeId(1, 2), 3));
656 }
657 }
658
659 // Verifies adding with an invalid id fails.
660 TEST_F(ViewManagerTest, AddWithInvalidServerId) {
661 // Create two nodes.
662 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
663 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
664
665 // Make 2 a child of 1. Supply an invalid change id, which should fail.
666 ASSERT_FALSE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 0));
667 } 591 }
668 592
669 // Verifies adding to root sends right notifications. 593 // Verifies adding to root sends right notifications.
670 TEST_F(ViewManagerTest, AddToRoot) { 594 TEST_F(ViewManagerTest, AddToRoot) {
671 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 21))); 595 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 21)));
672 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3))); 596 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
673 597
674 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); 598 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
675 599
676 // Make 3 a child of 21. 600 // Make 3 a child of 21.
601 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 21), BuildNodeId(1, 3)));
602
603 // Make 21 a child of 1.
677 { 604 {
678 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 21), BuildNodeId(1, 3), 2)); 605 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 21)));
679 606
680 connection2_->DoRunLoopUntilChangesCount(1); 607 connection2_->DoRunLoopUntilChangesCount(1);
681 const Changes changes(ChangesToDescription1(connection2_->changes())); 608 const Changes changes(ChangesToDescription1(connection2_->changes()));
682 ASSERT_EQ(1u, changes.size()); 609 ASSERT_EQ(1u, changes.size());
683 EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]); 610 EXPECT_EQ("HierarchyChanged node=1,21 new_parent=1,1 old_parent=null",
684 } 611 changes[0]);
685
686 // Make 21 a child of 1.
687 {
688 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 21), 3));
689
690 connection2_->DoRunLoopUntilChangesCount(1);
691 const Changes changes(ChangesToDescription1(connection2_->changes()));
692 ASSERT_EQ(1u, changes.size());
693 EXPECT_EQ(
694 "HierarchyChanged change_id=3 node=1,21 new_parent=1,1 old_parent=null",
695 changes[0]);
696 } 612 }
697 } 613 }
698 614
699 // Verifies HierarchyChanged is correctly sent for various adds/removes. 615 // Verifies HierarchyChanged is correctly sent for various adds/removes.
700 TEST_F(ViewManagerTest, NodeHierarchyChangedNodes) { 616 TEST_F(ViewManagerTest, NodeHierarchyChangedNodes) {
701 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 617 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
702 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 11))); 618 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 11)));
703 // Make 11 a child of 2. 619 // Make 11 a child of 2.
704 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 11), 1)); 620 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 11)));
705 621
706 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); 622 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
707 623
708 // Make 2 a child of 1. 624 // Make 2 a child of 1.
709 { 625 {
710 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 3)); 626 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2)));
711 627
712 // Client 2 should get a hierarchy change that includes the new nodes as it 628 // Client 2 should get a hierarchy change that includes the new nodes as it
713 // has not yet seen them. 629 // has not yet seen them.
714 connection2_->DoRunLoopUntilChangesCount(1); 630 connection2_->DoRunLoopUntilChangesCount(1);
715 const Changes changes(ChangesToDescription1(connection2_->changes())); 631 const Changes changes(ChangesToDescription1(connection2_->changes()));
716 ASSERT_EQ(1u, changes.size()); 632 ASSERT_EQ(1u, changes.size());
717 EXPECT_EQ( 633 EXPECT_EQ(
718 "HierarchyChanged change_id=3 node=1,2 new_parent=1,1 old_parent=null", 634 "HierarchyChanged node=1,2 new_parent=1,1 old_parent=null", changes[0]);
719 changes[0]);
720 EXPECT_EQ("[node=1,2 parent=1,1 view=null]," 635 EXPECT_EQ("[node=1,2 parent=1,1 view=null],"
721 "[node=1,11 parent=1,2 view=null]", 636 "[node=1,11 parent=1,2 view=null]",
722 ChangeNodeDescription(connection2_->changes())); 637 ChangeNodeDescription(connection2_->changes()));
723 } 638 }
724 639
725 // Add 1 to the root. 640 // Add 1 to the root.
726 { 641 {
727 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 4)); 642 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1)));
728 643
729 // Client 2 should get a hierarchy change that includes the new nodes as it 644 // Client 2 should get a hierarchy change that includes the new nodes as it
730 // has not yet seen them. 645 // has not yet seen them.
731 connection2_->DoRunLoopUntilChangesCount(1); 646 connection2_->DoRunLoopUntilChangesCount(1);
732 const Changes changes(ChangesToDescription1(connection2_->changes())); 647 const Changes changes(ChangesToDescription1(connection2_->changes()));
733 ASSERT_EQ(1u, changes.size()); 648 ASSERT_EQ(1u, changes.size());
734 EXPECT_EQ( 649 EXPECT_EQ("HierarchyChanged node=1,1 new_parent=null old_parent=null",
735 "HierarchyChanged change_id=4 node=1,1 new_parent=null old_parent=null", 650 changes[0]);
736 changes[0]);
737 EXPECT_EQ(std::string(), ChangeNodeDescription(connection2_->changes())); 651 EXPECT_EQ(std::string(), ChangeNodeDescription(connection2_->changes()));
738 } 652 }
739 653
740 // Remove 1 from its parent. 654 // Remove 1 from its parent.
741 { 655 {
742 ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 1), 5)); 656 ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 1)));
743 EXPECT_TRUE(connection_->changes().empty()); 657 EXPECT_TRUE(connection_->changes().empty());
744 658
745 connection2_->DoRunLoopUntilChangesCount(1); 659 connection2_->DoRunLoopUntilChangesCount(1);
746 const Changes changes(ChangesToDescription1(connection2_->changes())); 660 const Changes changes(ChangesToDescription1(connection2_->changes()));
747 ASSERT_EQ(1u, changes.size()); 661 ASSERT_EQ(1u, changes.size());
748 EXPECT_EQ( 662 EXPECT_EQ("HierarchyChanged node=1,1 new_parent=null old_parent=null",
749 "HierarchyChanged change_id=5 node=1,1 new_parent=null old_parent=null", 663 changes[0]);
750 changes[0]);
751 } 664 }
752 665
753 // Create another node, 111, parent it to 11. 666 // Create another node, 111, parent it to 11.
754 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 111))); 667 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 111)));
755 { 668 {
756 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 11), BuildNodeId(1, 111), 669 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 11), BuildNodeId(1, 111)));
757 6));
758 670
759 connection2_->DoRunLoopUntilChangesCount(1); 671 connection2_->DoRunLoopUntilChangesCount(1);
760 const Changes changes(ChangesToDescription1(connection2_->changes())); 672 const Changes changes(ChangesToDescription1(connection2_->changes()));
761 ASSERT_EQ(1u, changes.size()); 673 ASSERT_EQ(1u, changes.size());
762 EXPECT_EQ( 674 EXPECT_EQ("HierarchyChanged node=1,111 new_parent=1,11 old_parent=null",
763 "HierarchyChanged change_id=6 node=1,111 new_parent=1,11 " 675 changes[0]);
764 "old_parent=null", changes[0]);
765 EXPECT_EQ("[node=1,111 parent=1,11 view=null]", 676 EXPECT_EQ("[node=1,111 parent=1,11 view=null]",
766 ChangeNodeDescription(connection2_->changes())); 677 ChangeNodeDescription(connection2_->changes()));
767 } 678 }
768 679
769 // Reattach 1 to the root. 680 // Reattach 1 to the root.
770 { 681 {
771 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 7)); 682 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1)));
772 683
773 connection2_->DoRunLoopUntilChangesCount(1); 684 connection2_->DoRunLoopUntilChangesCount(1);
774 const Changes changes(ChangesToDescription1(connection2_->changes())); 685 const Changes changes(ChangesToDescription1(connection2_->changes()));
775 ASSERT_EQ(1u, changes.size()); 686 ASSERT_EQ(1u, changes.size());
776 EXPECT_EQ( 687 EXPECT_EQ("HierarchyChanged node=1,1 new_parent=null old_parent=null",
777 "HierarchyChanged change_id=7 node=1,1 new_parent=null old_parent=null", 688 changes[0]);
778 changes[0]);
779 EXPECT_EQ(std::string(), ChangeNodeDescription(connection2_->changes())); 689 EXPECT_EQ(std::string(), ChangeNodeDescription(connection2_->changes()));
780 } 690 }
781 } 691 }
782 692
783 TEST_F(ViewManagerTest, NodeHierarchyChangedAddingKnownToUnknown) { 693 TEST_F(ViewManagerTest, NodeHierarchyChangedAddingKnownToUnknown) {
784 // Create the following structure: root -> 1 -> 11 and 2->21 (2 has no 694 // Create the following structure: root -> 1 -> 11 and 2->21 (2 has no
785 // parent). 695 // parent).
786 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); 696 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
787 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 11))); 697 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 11)));
788 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 698 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
789 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 21))); 699 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 21)));
790 700
791 // Set up the hierarchy. 701 // Set up the hierarchy.
792 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1)); 702 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1)));
793 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 11), 2)); 703 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 11)));
794 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 21), 3)); 704 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 21)));
795 705
796 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); 706 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
797 { 707 EXPECT_EQ("[node=1,1 parent=null view=null],"
798 EXPECT_EQ("[node=1,1 parent=null view=null]," 708 "[node=1,11 parent=1,1 view=null]",
799 "[node=1,11 parent=1,1 view=null]", 709 ChangeNodeDescription(connection2_->changes()));
800 ChangeNodeDescription(connection2_->changes()));
801 }
802 710
803 // Remove 11, should result in a delete (since 11 is no longer in connection 711 // Remove 11, should result in a delete (since 11 is no longer in connection
804 // 2's root). 712 // 2's root).
805 { 713 {
806 ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 11), 5)); 714 ASSERT_TRUE(connection_->RemoveNodeFromParent(BuildNodeId(1, 11)));
807 715
808 connection2_->DoRunLoopUntilChangesCount(1); 716 connection2_->DoRunLoopUntilChangesCount(1);
809 const Changes changes(ChangesToDescription1(connection2_->changes())); 717 const Changes changes(ChangesToDescription1(connection2_->changes()));
810 ASSERT_EQ(1u, changes.size()); 718 ASSERT_EQ(1u, changes.size());
811 EXPECT_EQ("NodeDeleted change_id=5 node=1,11", changes[0]); 719 EXPECT_EQ("NodeDeleted node=1,11", changes[0]);
812 } 720 }
813 721
814 // Add 2 to 1. 722 // Add 2 to 1.
815 { 723 {
816 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 6)); 724 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2)));
817 725
818 connection2_->DoRunLoopUntilChangesCount(1); 726 connection2_->DoRunLoopUntilChangesCount(1);
819 const Changes changes(ChangesToDescription1(connection2_->changes())); 727 const Changes changes(ChangesToDescription1(connection2_->changes()));
820 ASSERT_EQ(1u, changes.size()); 728 ASSERT_EQ(1u, changes.size());
821 EXPECT_EQ( 729 EXPECT_EQ("HierarchyChanged node=1,2 new_parent=1,1 old_parent=null",
822 "HierarchyChanged change_id=6 node=1,2 new_parent=1,1 old_parent=null", 730 changes[0]);
823 changes[0]);
824 EXPECT_EQ("[node=1,2 parent=1,1 view=null]," 731 EXPECT_EQ("[node=1,2 parent=1,1 view=null],"
825 "[node=1,21 parent=1,2 view=null]", 732 "[node=1,21 parent=1,2 view=null]",
826 ChangeNodeDescription(connection2_->changes())); 733 ChangeNodeDescription(connection2_->changes()));
827 } 734 }
828 } 735 }
829 736
830 TEST_F(ViewManagerTest, ReorderNode) { 737 TEST_F(ViewManagerTest, ReorderNode) {
831 Id node1_id = BuildNodeId(1, 1); 738 Id node1_id = BuildNodeId(1, 1);
832 Id node2_id = BuildNodeId(1, 2); 739 Id node2_id = BuildNodeId(1, 2);
833 Id node3_id = BuildNodeId(1, 3); 740 Id node3_id = BuildNodeId(1, 3);
834 Id node4_id = BuildNodeId(1, 4); // Peer to 1,1 741 Id node4_id = BuildNodeId(1, 4); // Peer to 1,1
835 Id node5_id = BuildNodeId(1, 5); // Peer to 1,1 742 Id node5_id = BuildNodeId(1, 5); // Peer to 1,1
836 Id node6_id = BuildNodeId(1, 6); // Child of 1,2. 743 Id node6_id = BuildNodeId(1, 6); // Child of 1,2.
837 Id node7_id = BuildNodeId(1, 7); // Unparented. 744 Id node7_id = BuildNodeId(1, 7); // Unparented.
838 Id node8_id = BuildNodeId(1, 8); // Unparented. 745 Id node8_id = BuildNodeId(1, 8); // Unparented.
839 ASSERT_TRUE(connection_->CreateNode(node1_id)); 746 ASSERT_TRUE(connection_->CreateNode(node1_id));
840 ASSERT_TRUE(connection_->CreateNode(node2_id)); 747 ASSERT_TRUE(connection_->CreateNode(node2_id));
841 ASSERT_TRUE(connection_->CreateNode(node3_id)); 748 ASSERT_TRUE(connection_->CreateNode(node3_id));
842 ASSERT_TRUE(connection_->CreateNode(node4_id)); 749 ASSERT_TRUE(connection_->CreateNode(node4_id));
843 ASSERT_TRUE(connection_->CreateNode(node5_id)); 750 ASSERT_TRUE(connection_->CreateNode(node5_id));
844 ASSERT_TRUE(connection_->CreateNode(node6_id)); 751 ASSERT_TRUE(connection_->CreateNode(node6_id));
845 ASSERT_TRUE(connection_->CreateNode(node7_id)); 752 ASSERT_TRUE(connection_->CreateNode(node7_id));
846 ASSERT_TRUE(connection_->CreateNode(node8_id)); 753 ASSERT_TRUE(connection_->CreateNode(node8_id));
847 ASSERT_TRUE(connection_->AddNode(node1_id, node2_id, 1)); 754 ASSERT_TRUE(connection_->AddNode(node1_id, node2_id));
848 ASSERT_TRUE(connection_->AddNode(node2_id, node6_id, 2)); 755 ASSERT_TRUE(connection_->AddNode(node2_id, node6_id));
849 ASSERT_TRUE(connection_->AddNode(node1_id, node3_id, 3)); 756 ASSERT_TRUE(connection_->AddNode(node1_id, node3_id));
850 ASSERT_TRUE(connection_->AddNode( 757 ASSERT_TRUE(connection_->AddNode(
851 NodeIdToTransportId(RootNodeId()), node4_id, 4)); 758 NodeIdToTransportId(RootNodeId()), node4_id));
852 ASSERT_TRUE(connection_->AddNode( 759 ASSERT_TRUE(connection_->AddNode(
853 NodeIdToTransportId(RootNodeId()), node5_id, 5)); 760 NodeIdToTransportId(RootNodeId()), node5_id));
854 761
855 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); 762 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
856 763
857 { 764 {
858 connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_ABOVE, 7); 765 connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_ABOVE);
859 766
860 connection2_->DoRunLoopUntilChangesCount(1); 767 connection2_->DoRunLoopUntilChangesCount(1);
861 const Changes changes(ChangesToDescription1(connection2_->changes())); 768 const Changes changes(ChangesToDescription1(connection2_->changes()));
862 ASSERT_EQ(1u, changes.size()); 769 ASSERT_EQ(1u, changes.size());
863 EXPECT_EQ( 770 EXPECT_EQ("Reordered node=1,2 relative=1,3 direction=above",
864 "Reordered change_id=7 node=1,2 relative=1,3 direction=above", 771 changes[0]);
865 changes[0]);
866 } 772 }
867 773
868 { 774 {
869 connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_BELOW, 8); 775 connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_BELOW);
870 776
871 connection2_->DoRunLoopUntilChangesCount(1); 777 connection2_->DoRunLoopUntilChangesCount(1);
872 const Changes changes(ChangesToDescription1(connection2_->changes())); 778 const Changes changes(ChangesToDescription1(connection2_->changes()));
873 ASSERT_EQ(1u, changes.size()); 779 ASSERT_EQ(1u, changes.size());
874 EXPECT_EQ( 780 EXPECT_EQ("Reordered node=1,2 relative=1,3 direction=below",
875 "Reordered change_id=8 node=1,2 relative=1,3 direction=below", 781 changes[0]);
876 changes[0]);
877 } 782 }
878 783
879 { 784 // node2 is already below node3.
880 // node2 is already below node3. 785 EXPECT_FALSE(
881 EXPECT_FALSE( 786 connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_BELOW));
882 connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_BELOW, 9));
883 }
884 787
885 { 788 // node4 & 5 are unknown to connection2_.
886 // node4 & 5 are unknown to connection2_. 789 EXPECT_FALSE(connection2_->ReorderNode(
887 EXPECT_FALSE(connection2_->ReorderNode( 790 node4_id, node5_id, ORDER_DIRECTION_ABOVE));
888 node4_id, node5_id, ORDER_DIRECTION_ABOVE, 9));
889 }
890 791
891 { 792 // node6 & node3 have different parents.
892 // node6 & node3 have different parents. 793 EXPECT_FALSE(
893 EXPECT_FALSE( 794 connection_->ReorderNode(node3_id, node6_id, ORDER_DIRECTION_ABOVE));
894 connection_->ReorderNode(node3_id, node6_id, ORDER_DIRECTION_ABOVE, 9));
895 }
896 795
897 { 796 // Non-existent node-ids
898 // Non-existent node-ids 797 EXPECT_FALSE(connection_->ReorderNode(
899 EXPECT_FALSE(connection_->ReorderNode( 798 BuildNodeId(1, 27), BuildNodeId(1, 28), ORDER_DIRECTION_ABOVE));
900 BuildNodeId(1, 27), BuildNodeId(1, 28), ORDER_DIRECTION_ABOVE, 9));
901 }
902 799
903 { 800 // node7 & node8 are un-parented.
904 // node7 & node8 are un-parented. 801 EXPECT_FALSE(
905 EXPECT_FALSE( 802 connection_->ReorderNode(node7_id, node8_id, ORDER_DIRECTION_ABOVE));
906 connection_->ReorderNode(node7_id, node8_id, ORDER_DIRECTION_ABOVE, 9));
907 }
908 } 803 }
909 804
910 // Verifies DeleteNode works. 805 // Verifies DeleteNode works.
911 TEST_F(ViewManagerTest, DeleteNode) { 806 TEST_F(ViewManagerTest, DeleteNode) {
912 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 807 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
913 808
914 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); 809 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
915 810
916 // Make 2 a child of 1. 811 // Make 2 a child of 1.
917 { 812 {
918 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 2)); 813 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2)));
919 connection2_->DoRunLoopUntilChangesCount(1); 814 connection2_->DoRunLoopUntilChangesCount(1);
920 const Changes changes(ChangesToDescription1(connection2_->changes())); 815 const Changes changes(ChangesToDescription1(connection2_->changes()));
921 ASSERT_EQ(1u, changes.size()); 816 ASSERT_EQ(1u, changes.size());
922 EXPECT_EQ("HierarchyChanged change_id=2 node=1,2 new_parent=1,1 " 817 EXPECT_EQ("HierarchyChanged node=1,2 new_parent=1,1 old_parent=null",
923 "old_parent=null", changes[0]); 818 changes[0]);
924 } 819 }
925 820
926 // Delete 2. 821 // Delete 2.
927 { 822 {
928 ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2), 3)); 823 ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2)));
929 EXPECT_TRUE(connection_->changes().empty()); 824 EXPECT_TRUE(connection_->changes().empty());
930 825
931 connection2_->DoRunLoopUntilChangesCount(1); 826 connection2_->DoRunLoopUntilChangesCount(1);
932 const Changes changes(ChangesToDescription1(connection2_->changes())); 827 const Changes changes(ChangesToDescription1(connection2_->changes()));
933 ASSERT_EQ(1u, changes.size()); 828 ASSERT_EQ(1u, changes.size());
934 EXPECT_EQ("NodeDeleted change_id=3 node=1,2", changes[0]); 829 EXPECT_EQ("NodeDeleted node=1,2", changes[0]);
935 } 830 }
936 } 831 }
937 832
938 // Verifies DeleteNode isn't allowed from a separate connection. 833 // Verifies DeleteNode isn't allowed from a separate connection.
939 TEST_F(ViewManagerTest, DeleteNodeFromAnotherConnectionDisallowed) { 834 TEST_F(ViewManagerTest, DeleteNodeFromAnotherConnectionDisallowed) {
940 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); 835 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
941 EXPECT_FALSE(connection2_->DeleteNode(BuildNodeId(1, 1), 1)); 836 EXPECT_FALSE(connection2_->DeleteNode(BuildNodeId(1, 1)));
942 } 837 }
943 838
944 // Verifies DeleteView isn't allowed from a separate connection. 839 // Verifies DeleteView isn't allowed from a separate connection.
945 TEST_F(ViewManagerTest, DeleteViewFromAnotherConnectionDisallowed) { 840 TEST_F(ViewManagerTest, DeleteViewFromAnotherConnectionDisallowed) {
946 ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 1))); 841 ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 1)));
947 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); 842 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
948 EXPECT_FALSE(connection2_->DeleteView(BuildViewId(1, 1))); 843 EXPECT_FALSE(connection2_->DeleteView(BuildViewId(1, 1)));
949 } 844 }
950 845
951 // Verifies if a node was deleted and then reused that other clients are 846 // Verifies if a node was deleted and then reused that other clients are
952 // properly notified. 847 // properly notified.
953 TEST_F(ViewManagerTest, ReuseDeletedNodeId) { 848 TEST_F(ViewManagerTest, ReuseDeletedNodeId) {
954 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); 849 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
955 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 850 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
956 851
957 // Add 2 to 1. 852 // Add 2 to 1.
958 { 853 {
959 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 2)); 854 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2)));
960 855
961 connection2_->DoRunLoopUntilChangesCount(1); 856 connection2_->DoRunLoopUntilChangesCount(1);
962 const Changes changes(ChangesToDescription1(connection2_->changes())); 857 const Changes changes(ChangesToDescription1(connection2_->changes()));
963 EXPECT_EQ( 858 EXPECT_EQ("HierarchyChanged node=1,2 new_parent=1,1 old_parent=null",
964 "HierarchyChanged change_id=2 node=1,2 new_parent=1,1 old_parent=null", 859 changes[0]);
965 changes[0]);
966 EXPECT_EQ("[node=1,2 parent=1,1 view=null]", 860 EXPECT_EQ("[node=1,2 parent=1,1 view=null]",
967 ChangeNodeDescription(connection2_->changes())); 861 ChangeNodeDescription(connection2_->changes()));
968 } 862 }
969 863
970 // Delete 2. 864 // Delete 2.
971 { 865 {
972 ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2), 3)); 866 ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2)));
973 867
974 connection2_->DoRunLoopUntilChangesCount(1); 868 connection2_->DoRunLoopUntilChangesCount(1);
975 const Changes changes(ChangesToDescription1(connection2_->changes())); 869 const Changes changes(ChangesToDescription1(connection2_->changes()));
976 ASSERT_EQ(1u, changes.size()); 870 ASSERT_EQ(1u, changes.size());
977 EXPECT_EQ("NodeDeleted change_id=3 node=1,2", changes[0]); 871 EXPECT_EQ("NodeDeleted node=1,2", changes[0]);
978 } 872 }
979 873
980 // Create 2 again, and add it back to 1. Should get the same notification. 874 // Create 2 again, and add it back to 1. Should get the same notification.
981 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 875 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
982 { 876 {
983 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 4)); 877 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2)));
984 878
985 connection2_->DoRunLoopUntilChangesCount(1); 879 connection2_->DoRunLoopUntilChangesCount(1);
986 const Changes changes(ChangesToDescription1(connection2_->changes())); 880 const Changes changes(ChangesToDescription1(connection2_->changes()));
987 EXPECT_EQ( 881 EXPECT_EQ("HierarchyChanged node=1,2 new_parent=1,1 old_parent=null",
988 "HierarchyChanged change_id=4 node=1,2 new_parent=1,1 old_parent=null", 882 changes[0]);
989 changes[0]);
990 EXPECT_EQ("[node=1,2 parent=1,1 view=null]", 883 EXPECT_EQ("[node=1,2 parent=1,1 view=null]",
991 ChangeNodeDescription(connection2_->changes())); 884 ChangeNodeDescription(connection2_->changes()));
992 } 885 }
993 } 886 }
994 887
995 // Assertions around setting a view. 888 // Assertions around setting a view.
996 TEST_F(ViewManagerTest, SetView) { 889 TEST_F(ViewManagerTest, SetView) {
997 // Create nodes 1, 2 and 3 and the view 11. Nodes 2 and 3 are parented to 1. 890 // Create nodes 1, 2 and 3 and the view 11. Nodes 2 and 3 are parented to 1.
998 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); 891 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
999 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 892 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
1000 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3))); 893 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
1001 ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 11))); 894 ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 11)));
1002 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 1)); 895 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2)));
1003 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 3), 2)); 896 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 3)));
1004 897
1005 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); 898 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
1006 899
1007 // Set view 11 on node 1. 900 // Set view 11 on node 1.
1008 { 901 {
1009 ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 1), 902 ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 1),
1010 BuildViewId(1, 11))); 903 BuildViewId(1, 11)));
1011 904
1012 connection2_->DoRunLoopUntilChangesCount(1); 905 connection2_->DoRunLoopUntilChangesCount(1);
1013 const Changes changes(ChangesToDescription1(connection2_->changes())); 906 const Changes changes(ChangesToDescription1(connection2_->changes()));
(...skipping 23 matching lines...) Expand all
1037 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3))); 930 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
1038 ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 11))); 931 ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 11)));
1039 932
1040 // Set view 11 on node 2. 933 // Set view 11 on node 2.
1041 ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 2), BuildViewId(1, 11))); 934 ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 2), BuildViewId(1, 11)));
1042 935
1043 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); 936 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
1044 937
1045 // Delete node 2. The second connection should not see this because the node 938 // Delete node 2. The second connection should not see this because the node
1046 // was not known to it. 939 // was not known to it.
1047 { 940 ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2)));
1048 ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 2), 2));
1049
1050 connection2_->DoRunLoopUntilChangesCount(1);
1051 const Changes changes(ChangesToDescription1(connection2_->changes()));
1052 ASSERT_EQ(1u, changes.size());
1053 EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]);
1054 }
1055 941
1056 // Parent 3 to 1. 942 // Parent 3 to 1.
1057 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 3), 3)); 943 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 3)));
1058 connection2_->DoRunLoopUntilChangesCount(1); 944 connection2_->DoRunLoopUntilChangesCount(1);
1059 945
1060 // Set view 11 on node 3. 946 // Set view 11 on node 3.
1061 { 947 {
1062 ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 3), BuildViewId(1, 11))); 948 ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 3), BuildViewId(1, 11)));
1063 949
1064 connection2_->DoRunLoopUntilChangesCount(1); 950 connection2_->DoRunLoopUntilChangesCount(1);
1065 const Changes changes(ChangesToDescription1(connection2_->changes())); 951 const Changes changes(ChangesToDescription1(connection2_->changes()));
1066 ASSERT_EQ(1u, changes.size()); 952 ASSERT_EQ(1u, changes.size());
1067 EXPECT_EQ("ViewReplaced node=1,3 new_view=1,11 old_view=null", changes[0]); 953 EXPECT_EQ("ViewReplaced node=1,3 new_view=1,11 old_view=null", changes[0]);
1068 } 954 }
1069 955
1070 // Delete 3. 956 // Delete 3.
1071 { 957 {
1072 ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 3), 4)); 958 ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 3)));
1073 959
1074 connection2_->DoRunLoopUntilChangesCount(1); 960 connection2_->DoRunLoopUntilChangesCount(1);
1075 const Changes changes(ChangesToDescription1(connection2_->changes())); 961 const Changes changes(ChangesToDescription1(connection2_->changes()));
1076 ASSERT_EQ(1u, changes.size()); 962 ASSERT_EQ(1u, changes.size());
1077 EXPECT_EQ("NodeDeleted change_id=4 node=1,3", changes[0]); 963 EXPECT_EQ("NodeDeleted node=1,3", changes[0]);
1078 } 964 }
1079 } 965 }
1080 966
1081 // Sets view from one connection on another. 967 // Sets view from one connection on another.
1082 TEST_F(ViewManagerTest, SetViewFromSecondConnection) { 968 TEST_F(ViewManagerTest, SetViewFromSecondConnection) {
1083 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); 969 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
1084 970
1085 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 971 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
1086 972
1087 // Create a view in the second connection. 973 // Create a view in the second connection.
(...skipping 18 matching lines...) Expand all
1106 EXPECT_EQ("ViewDeleted view=2,51", changes[1]); 992 EXPECT_EQ("ViewDeleted view=2,51", changes[1]);
1107 } 993 }
1108 } 994 }
1109 995
1110 // Assertions for GetNodeTree. 996 // Assertions for GetNodeTree.
1111 TEST_F(ViewManagerTest, GetNodeTree) { 997 TEST_F(ViewManagerTest, GetNodeTree) {
1112 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); 998 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true));
1113 999
1114 // Create 11 in first connection and make it a child of 1. 1000 // Create 11 in first connection and make it a child of 1.
1115 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 11))); 1001 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 11)));
1116 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 2)); 1002 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1)));
1117 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 11), 3)); 1003 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 11)));
1118 1004
1119 // Create two nodes in second connection, 2 and 3, both children of 1. 1005 // Create two nodes in second connection, 2 and 3, both children of 1.
1120 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 2))); 1006 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 2)));
1121 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 3))); 1007 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 3)));
1122 ASSERT_TRUE(connection2_->AddNode(BuildNodeId(1, 1), BuildNodeId(2, 2), 4)); 1008 ASSERT_TRUE(connection2_->AddNode(BuildNodeId(1, 1), BuildNodeId(2, 2)));
1123 ASSERT_TRUE(connection2_->AddNode(BuildNodeId(1, 1), BuildNodeId(2, 3), 5)); 1009 ASSERT_TRUE(connection2_->AddNode(BuildNodeId(1, 1), BuildNodeId(2, 3)));
1124 1010
1125 // Attach view to node 11 in the first connection. 1011 // Attach view to node 11 in the first connection.
1126 ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 51))); 1012 ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 51)));
1127 ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 11), BuildViewId(1, 51))); 1013 ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 11), BuildViewId(1, 51)));
1128 1014
1129 // Verifies GetNodeTree() on the root. 1015 // Verifies GetNodeTree() on the root.
1130 { 1016 {
1131 std::vector<TestNode> nodes; 1017 std::vector<TestNode> nodes;
1132 connection_->GetNodeTree(BuildNodeId(0, 1), &nodes); 1018 connection_->GetNodeTree(BuildNodeId(0, 1), &nodes);
1133 ASSERT_EQ(5u, nodes.size()); 1019 ASSERT_EQ(5u, nodes.size());
(...skipping 18 matching lines...) Expand all
1152 // Connection 2 shouldn't be able to get the root tree. 1038 // Connection 2 shouldn't be able to get the root tree.
1153 { 1039 {
1154 std::vector<TestNode> nodes; 1040 std::vector<TestNode> nodes;
1155 connection2_->GetNodeTree(BuildNodeId(0, 1), &nodes); 1041 connection2_->GetNodeTree(BuildNodeId(0, 1), &nodes);
1156 ASSERT_EQ(0u, nodes.size()); 1042 ASSERT_EQ(0u, nodes.size());
1157 } 1043 }
1158 } 1044 }
1159 1045
1160 TEST_F(ViewManagerTest, SetNodeBounds) { 1046 TEST_F(ViewManagerTest, SetNodeBounds) {
1161 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); 1047 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
1162 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1)); 1048 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1)));
1163 1049
1164 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); 1050 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
1165 1051
1166 ASSERT_TRUE(connection_->SetNodeBounds(BuildNodeId(1, 1), 1052 ASSERT_TRUE(connection_->SetNodeBounds(BuildNodeId(1, 1),
1167 gfx::Rect(0, 0, 100, 100))); 1053 gfx::Rect(0, 0, 100, 100)));
1168 1054
1169 connection2_->DoRunLoopUntilChangesCount(1); 1055 connection2_->DoRunLoopUntilChangesCount(1);
1170 const Changes changes(ChangesToDescription1(connection2_->changes())); 1056 const Changes changes(ChangesToDescription1(connection2_->changes()));
1171 ASSERT_EQ(1u, changes.size()); 1057 ASSERT_EQ(1u, changes.size());
1172 EXPECT_EQ("BoundsChanged node=1,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100", 1058 EXPECT_EQ("BoundsChanged node=1,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100",
1173 changes[0]); 1059 changes[0]);
1174 1060
1175 // Should not be possible to change the bounds of a node created by another 1061 // Should not be possible to change the bounds of a node created by another
1176 // connection. 1062 // connection.
1177 ASSERT_FALSE(connection2_->SetNodeBounds(BuildNodeId(1, 1), 1063 ASSERT_FALSE(connection2_->SetNodeBounds(BuildNodeId(1, 1),
1178 gfx::Rect(0, 0, 0, 0))); 1064 gfx::Rect(0, 0, 0, 0)));
1179 } 1065 }
1180 1066
1181 // Various assertions around SetRoots. 1067 // Various assertions around SetRoots.
1182 TEST_F(ViewManagerTest, SetRoots) { 1068 TEST_F(ViewManagerTest, SetRoots) {
1183 // Create 1, 2, and 3 in the first connection. 1069 // Create 1, 2, and 3 in the first connection.
1184 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); 1070 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
1185 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 1071 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
1186 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3))); 1072 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3)));
1187 1073
1188 // Parent 1 to the root. 1074 // Parent 1 to the root.
1189 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1)); 1075 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1)));
1190 1076
1191 // Establish the second connection with roots 1 and 3. 1077 // Establish the second connection with roots 1 and 3.
1192 { 1078 {
1193 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); 1079 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
1194 1080
1195 ASSERT_TRUE(connection_->Embed(BuildNodeId(1, 3), kTestServiceURL)); 1081 ASSERT_TRUE(connection_->Embed(BuildNodeId(1, 3), kTestServiceURL));
1196 connection2_->DoRunLoopUntilChangesCount(1); 1082 connection2_->DoRunLoopUntilChangesCount(1);
1197 const Changes changes(ChangesToDescription1(connection2_->changes())); 1083 const Changes changes(ChangesToDescription1(connection2_->changes()));
1198 ASSERT_EQ(1u, changes.size()); 1084 ASSERT_EQ(1u, changes.size());
1199 EXPECT_EQ("OnRootAdded", changes[0]); 1085 EXPECT_EQ("OnRootAdded", changes[0]);
1200 EXPECT_EQ("[node=1,3 parent=null view=null]", 1086 EXPECT_EQ("[node=1,3 parent=null view=null]",
1201 ChangeNodeDescription(connection2_->changes())); 1087 ChangeNodeDescription(connection2_->changes()));
1202 } 1088 }
1203 1089
1204 // Create 4 and add it to the root, connection 2 should only get id advanced. 1090 // Create 4 and add it to the root, connection 2 should not getting anything.
1205 { 1091 {
1206 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 4))); 1092 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 4)));
1207 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 4), 4)); 1093 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 4)));
1208
1209 connection2_->DoRunLoopUntilChangesCount(1);
1210 const Changes changes(ChangesToDescription1(connection2_->changes()));
1211 ASSERT_EQ(1u, changes.size());
1212 EXPECT_EQ("ServerChangeIdAdvanced 5", changes[0]);
1213 } 1094 }
1214 1095
1215 // Move 4 under 3, this should expose 4 to the client. 1096 // Move 4 under 3, this should expose 4 to the client.
1216 { 1097 {
1217 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 3), BuildNodeId(1, 4), 5)); 1098 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 3), BuildNodeId(1, 4)));
1218 connection2_->DoRunLoopUntilChangesCount(1); 1099 connection2_->DoRunLoopUntilChangesCount(1);
1219 const Changes changes(ChangesToDescription1(connection2_->changes())); 1100 const Changes changes(ChangesToDescription1(connection2_->changes()));
1220 ASSERT_EQ(1u, changes.size()); 1101 ASSERT_EQ(1u, changes.size());
1221 EXPECT_EQ( 1102 EXPECT_EQ(
1222 "HierarchyChanged change_id=5 node=1,4 new_parent=1,3 " 1103 "HierarchyChanged node=1,4 new_parent=1,3 old_parent=null", changes[0]);
1223 "old_parent=null", changes[0]);
1224 EXPECT_EQ("[node=1,4 parent=1,3 view=null]", 1104 EXPECT_EQ("[node=1,4 parent=1,3 view=null]",
1225 ChangeNodeDescription(connection2_->changes())); 1105 ChangeNodeDescription(connection2_->changes()));
1226 } 1106 }
1227 1107
1228 // Move 4 under 2, since 2 isn't a root client should get a delete. 1108 // Move 4 under 2, since 2 isn't a root client should get a delete.
1229 { 1109 {
1230 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 4), 6)); 1110 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 2), BuildNodeId(1, 4)));
1231 connection2_->DoRunLoopUntilChangesCount(1); 1111 connection2_->DoRunLoopUntilChangesCount(1);
1232 const Changes changes(ChangesToDescription1(connection2_->changes())); 1112 const Changes changes(ChangesToDescription1(connection2_->changes()));
1233 ASSERT_EQ(1u, changes.size()); 1113 ASSERT_EQ(1u, changes.size());
1234 EXPECT_EQ("NodeDeleted change_id=6 node=1,4", changes[0]); 1114 EXPECT_EQ("NodeDeleted node=1,4", changes[0]);
1235 } 1115 }
1236 1116
1237 // Delete 4, client shouldn't receive a delete since it should no longer know 1117 // Delete 4, client shouldn't receive a delete since it should no longer know
1238 // about 4. 1118 // about 4.
1239 { 1119 {
1240 ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 4), 7)); 1120 ASSERT_TRUE(connection_->DeleteNode(BuildNodeId(1, 4)));
1241
1242 connection2_->DoRunLoopUntilChangesCount(1);
1243 const Changes changes(ChangesToDescription1(connection2_->changes()));
1244 ASSERT_EQ(1u, changes.size());
1245 EXPECT_EQ("ServerChangeIdAdvanced 8", changes[0]);
1246 } 1121 }
1247 } 1122 }
1248 1123
1249 // Verify AddNode fails when trying to manipulate nodes in other roots. 1124 // Verify AddNode fails when trying to manipulate nodes in other roots.
1250 TEST_F(ViewManagerTest, CantMoveNodesFromOtherRoot) { 1125 TEST_F(ViewManagerTest, CantMoveNodesFromOtherRoot) {
1251 // Create 1 and 2 in the first connection. 1126 // Create 1 and 2 in the first connection.
1252 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); 1127 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
1253 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 1128 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
1254 1129
1255 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); 1130 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
1256 1131
1257 // Try to move 2 to be a child of 1 from connection 2. This should fail as 2 1132 // Try to move 2 to be a child of 1 from connection 2. This should fail as 2
1258 // should not be able to access 1. 1133 // should not be able to access 1.
1259 ASSERT_FALSE(connection2_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 1)); 1134 ASSERT_FALSE(connection2_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2)));
1260 1135
1261 // Try to reparent 1 to the root. A connection is not allowed to reparent its 1136 // Try to reparent 1 to the root. A connection is not allowed to reparent its
1262 // roots. 1137 // roots.
1263 ASSERT_FALSE(connection2_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1)); 1138 ASSERT_FALSE(connection2_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1)));
1264 } 1139 }
1265 1140
1266 // Verify RemoveNodeFromParent fails for nodes that are descendants of the 1141 // Verify RemoveNodeFromParent fails for nodes that are descendants of the
1267 // roots. 1142 // roots.
1268 TEST_F(ViewManagerTest, CantRemoveNodesInOtherRoots) { 1143 TEST_F(ViewManagerTest, CantRemoveNodesInOtherRoots) {
1269 // Create 1 and 2 in the first connection and parent both to the root. 1144 // Create 1 and 2 in the first connection and parent both to the root.
1270 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); 1145 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
1271 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 1146 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
1272 1147
1273 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1)); 1148 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1)));
1274 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 2), 2)); 1149 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 2)));
1275 1150
1276 // Establish the second connection and give it the root 1. 1151 // Establish the second connection and give it the root 1.
1277 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); 1152 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
1278 1153
1279 // Connection 2 should not be able to remove node 2 or 1 from its parent. 1154 // Connection 2 should not be able to remove node 2 or 1 from its parent.
1280 ASSERT_FALSE(connection2_->RemoveNodeFromParent(BuildNodeId(1, 2), 4)); 1155 ASSERT_FALSE(connection2_->RemoveNodeFromParent(BuildNodeId(1, 2)));
1281 ASSERT_FALSE(connection2_->RemoveNodeFromParent(BuildNodeId(1, 1), 4)); 1156 ASSERT_FALSE(connection2_->RemoveNodeFromParent(BuildNodeId(1, 1)));
1282 1157
1283 // Create nodes 10 and 11 in 2. 1158 // Create nodes 10 and 11 in 2.
1284 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 10))); 1159 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 10)));
1285 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 11))); 1160 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 11)));
1286 1161
1287 // Parent 11 to 10. 1162 // Parent 11 to 10.
1288 ASSERT_TRUE(connection2_->AddNode(BuildNodeId(2, 10), BuildNodeId(2, 11), 4)); 1163 ASSERT_TRUE(connection2_->AddNode(BuildNodeId(2, 10), BuildNodeId(2, 11)));
1289 // Remove 11 from 10. 1164 // Remove 11 from 10.
1290 ASSERT_TRUE(connection2_->RemoveNodeFromParent( BuildNodeId(2, 11), 5)); 1165 ASSERT_TRUE(connection2_->RemoveNodeFromParent( BuildNodeId(2, 11)));
1291 1166
1292 // Verify nothing was actually removed. 1167 // Verify nothing was actually removed.
1293 { 1168 {
1294 std::vector<TestNode> nodes; 1169 std::vector<TestNode> nodes;
1295 connection_->GetNodeTree(BuildNodeId(0, 1), &nodes); 1170 connection_->GetNodeTree(BuildNodeId(0, 1), &nodes);
1296 ASSERT_EQ(3u, nodes.size()); 1171 ASSERT_EQ(3u, nodes.size());
1297 EXPECT_EQ("node=0,1 parent=null view=null", nodes[0].ToString()); 1172 EXPECT_EQ("node=0,1 parent=null view=null", nodes[0].ToString());
1298 EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[1].ToString()); 1173 EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[1].ToString());
1299 EXPECT_EQ("node=1,2 parent=0,1 view=null", nodes[2].ToString()); 1174 EXPECT_EQ("node=1,2 parent=0,1 view=null", nodes[2].ToString());
1300 } 1175 }
1301 } 1176 }
1302 1177
1303 // Verify SetView fails for nodes that are not descendants of the roots. 1178 // Verify SetView fails for nodes that are not descendants of the roots.
1304 TEST_F(ViewManagerTest, CantRemoveSetViewInOtherRoots) { 1179 TEST_F(ViewManagerTest, CantRemoveSetViewInOtherRoots) {
1305 // Create 1 and 2 in the first connection and parent both to the root. 1180 // Create 1 and 2 in the first connection and parent both to the root.
1306 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); 1181 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
1307 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 1182 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
1308 1183
1309 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1)); 1184 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1)));
1310 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 2), 2)); 1185 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 2)));
1311 1186
1312 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); 1187 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
1313 1188
1314 // Create a view in the second connection. 1189 // Create a view in the second connection.
1315 ASSERT_TRUE(connection2_->CreateView(BuildViewId(2, 51))); 1190 ASSERT_TRUE(connection2_->CreateView(BuildViewId(2, 51)));
1316 1191
1317 // Connection 2 should be able to set the view on node 1 (it's root), but not 1192 // Connection 2 should be able to set the view on node 1 (it's root), but not
1318 // on 2. 1193 // on 2.
1319 ASSERT_TRUE(connection2_->SetView(BuildNodeId(1, 1), BuildViewId(2, 51))); 1194 ASSERT_TRUE(connection2_->SetView(BuildNodeId(1, 1), BuildViewId(2, 51)));
1320 ASSERT_FALSE(connection2_->SetView(BuildNodeId(1, 2), BuildViewId(2, 51))); 1195 ASSERT_FALSE(connection2_->SetView(BuildNodeId(1, 2), BuildViewId(2, 51)));
1321 } 1196 }
1322 1197
1323 // Verify GetNodeTree fails for nodes that are not descendants of the roots. 1198 // Verify GetNodeTree fails for nodes that are not descendants of the roots.
1324 TEST_F(ViewManagerTest, CantGetNodeTreeOfOtherRoots) { 1199 TEST_F(ViewManagerTest, CantGetNodeTreeOfOtherRoots) {
1325 // Create 1 and 2 in the first connection and parent both to the root. 1200 // Create 1 and 2 in the first connection and parent both to the root.
1326 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); 1201 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
1327 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 1202 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
1328 1203
1329 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1), 1)); 1204 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 1)));
1330 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 2), 2)); 1205 ASSERT_TRUE(connection_->AddNode(BuildNodeId(0, 1), BuildNodeId(1, 2)));
1331 1206
1332 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); 1207 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
1333 1208
1334 std::vector<TestNode> nodes; 1209 std::vector<TestNode> nodes;
1335 1210
1336 // Should get nothing for the root. 1211 // Should get nothing for the root.
1337 connection2_->GetNodeTree(BuildNodeId(0, 1), &nodes); 1212 connection2_->GetNodeTree(BuildNodeId(0, 1), &nodes);
1338 ASSERT_TRUE(nodes.empty()); 1213 ASSERT_TRUE(nodes.empty());
1339 1214
1340 // Should get nothing for node 2. 1215 // Should get nothing for node 2.
1341 connection2_->GetNodeTree(BuildNodeId(1, 2), &nodes); 1216 connection2_->GetNodeTree(BuildNodeId(1, 2), &nodes);
1342 ASSERT_TRUE(nodes.empty()); 1217 ASSERT_TRUE(nodes.empty());
1343 1218
1344 // Should get node 1 if asked for. 1219 // Should get node 1 if asked for.
1345 connection2_->GetNodeTree(BuildNodeId(1, 1), &nodes); 1220 connection2_->GetNodeTree(BuildNodeId(1, 1), &nodes);
1346 ASSERT_EQ(1u, nodes.size()); 1221 ASSERT_EQ(1u, nodes.size());
1347 EXPECT_EQ("node=1,1 parent=null view=null", nodes[0].ToString()); 1222 EXPECT_EQ("node=1,1 parent=null view=null", nodes[0].ToString());
1348 } 1223 }
1349 1224
1350 TEST_F(ViewManagerTest, ConnectTwice) { 1225 TEST_F(ViewManagerTest, ConnectTwice) {
1351 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); 1226 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1)));
1352 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); 1227 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2)));
1353 1228
1354 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2), 1)); 1229 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2)));
1355 1230
1356 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); 1231 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false));
1357 1232
1358 // Try to connect again to 1,1, this should fail as already connected to that 1233 // Try to connect again to 1,1, this should fail as already connected to that
1359 // root. 1234 // root.
1360 { 1235 ASSERT_FALSE(connection_->Embed(BuildNodeId(1, 1), kTestServiceURL));
1361 ASSERT_FALSE(connection_->Embed(BuildNodeId(1, 1), kTestServiceURL));
1362 }
1363 1236
1364 // Connecting to 1,2 should succeed and end up in connection2. 1237 // Connecting to 1,2 should succeed and end up in connection2.
1365 { 1238 {
1366 ASSERT_TRUE(connection_->Embed(BuildNodeId(1, 2), kTestServiceURL)); 1239 ASSERT_TRUE(connection_->Embed(BuildNodeId(1, 2), kTestServiceURL));
1367 connection2_->DoRunLoopUntilChangesCount(1); 1240 connection2_->DoRunLoopUntilChangesCount(1);
1368 const Changes changes(ChangesToDescription1(connection2_->changes())); 1241 const Changes changes(ChangesToDescription1(connection2_->changes()));
1369 ASSERT_EQ(1u, changes.size()); 1242 ASSERT_EQ(1u, changes.size());
1370 EXPECT_EQ("OnRootAdded", changes[0]); 1243 EXPECT_EQ("OnRootAdded", changes[0]);
1371 EXPECT_EQ("[node=1,2 parent=1,1 view=null]", 1244 EXPECT_EQ("[node=1,2 parent=1,1 view=null]",
1372 ChangeNodeDescription(connection2_->changes())); 1245 ChangeNodeDescription(connection2_->changes()));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1407 const Changes changes(ChangesToDescription1(connection3->changes())); 1280 const Changes changes(ChangesToDescription1(connection3->changes()));
1408 ASSERT_EQ(1u, changes.size()); 1281 ASSERT_EQ(1u, changes.size());
1409 EXPECT_EQ("OnConnectionEstablished creator=mojo:test_url", changes[0]); 1282 EXPECT_EQ("OnConnectionEstablished creator=mojo:test_url", changes[0]);
1410 } 1283 }
1411 1284
1412 // Connection2 should have been told the node was deleted. 1285 // Connection2 should have been told the node was deleted.
1413 { 1286 {
1414 connection2_->DoRunLoopUntilChangesCount(1); 1287 connection2_->DoRunLoopUntilChangesCount(1);
1415 const Changes changes(ChangesToDescription1(connection2_->changes())); 1288 const Changes changes(ChangesToDescription1(connection2_->changes()));
1416 ASSERT_EQ(1u, changes.size()); 1289 ASSERT_EQ(1u, changes.size());
1417 EXPECT_EQ("NodeDeleted change_id=2 node=1,1", changes[0]); 1290 EXPECT_EQ("NodeDeleted node=1,1", changes[0]);
1418 } 1291 }
1419 1292
1420 // Connection2 has no root. Verify it can't see node 1,1 anymore. 1293 // Connection2 has no root. Verify it can't see node 1,1 anymore.
1421 { 1294 {
1422 std::vector<TestNode> nodes; 1295 std::vector<TestNode> nodes;
1423 connection2_->GetNodeTree(BuildNodeId(1, 1), &nodes); 1296 connection2_->GetNodeTree(BuildNodeId(1, 1), &nodes);
1424 EXPECT_TRUE(nodes.empty()); 1297 EXPECT_TRUE(nodes.empty());
1425 } 1298 }
1426 1299
1427 connection3->Destroy(); 1300 connection3->Destroy();
(...skipping 13 matching lines...) Expand all
1441 ASSERT_EQ(1u, changes.size()); 1314 ASSERT_EQ(1u, changes.size());
1442 EXPECT_EQ("OnConnectionEstablished creator=mojo:test_url", changes[0]); 1315 EXPECT_EQ("OnConnectionEstablished creator=mojo:test_url", changes[0]);
1443 } 1316 }
1444 1317
1445 // Connection2 should have been told the node was deleted. 1318 // Connection2 should have been told the node was deleted.
1446 connection2_->DoRunLoopUntilChangesCount(1); 1319 connection2_->DoRunLoopUntilChangesCount(1);
1447 connection2_->ClearChanges(); 1320 connection2_->ClearChanges();
1448 1321
1449 // Create a node in the third connection and parent it to the root. 1322 // Create a node in the third connection and parent it to the root.
1450 ASSERT_TRUE(connection3->CreateNode(BuildNodeId(3, 1))); 1323 ASSERT_TRUE(connection3->CreateNode(BuildNodeId(3, 1)));
1451 ASSERT_TRUE(connection3->AddNode(BuildNodeId(1, 1), BuildNodeId(3, 1), 3)); 1324 ASSERT_TRUE(connection3->AddNode(BuildNodeId(1, 1), BuildNodeId(3, 1)));
1452 1325
1453 // Connection 1 should have been told about the add (it owns the node). 1326 // Connection 1 should have been told about the add (it owns the node).
1454 { 1327 {
1455 connection_->DoRunLoopUntilChangesCount(1); 1328 connection_->DoRunLoopUntilChangesCount(1);
1456 const Changes changes(ChangesToDescription1(connection_->changes())); 1329 const Changes changes(ChangesToDescription1(connection_->changes()));
1457 ASSERT_EQ(1u, changes.size()); 1330 ASSERT_EQ(1u, changes.size());
1458 EXPECT_EQ( 1331 EXPECT_EQ("HierarchyChanged node=3,1 new_parent=1,1 old_parent=null",
1459 "HierarchyChanged change_id=3 node=3,1 new_parent=1,1 old_parent=null", 1332 changes[0]);
1460 changes[0]);
1461 } 1333 }
1462 1334
1463 // connection2_ should get an advance.
1464 connection2_->DoRunLoopUntilChangesCount(1);
1465 connection2_->ClearChanges();
1466
1467 // Embed 1,1 back in connection 2. 1335 // Embed 1,1 back in connection 2.
1468 { 1336 {
1469 // 2 should be told about the new embed. 1337 // 2 should be told about the new embed.
1470 ASSERT_TRUE(connection_->Embed(BuildNodeId(1, 1), kTestServiceURL)); 1338 ASSERT_TRUE(connection_->Embed(BuildNodeId(1, 1), kTestServiceURL));
1471 connection2_->DoRunLoopUntilChangesCount(1); 1339 connection2_->DoRunLoopUntilChangesCount(1);
1472 const std::vector<Change>& changes(connection2_->changes()); 1340 const std::vector<Change>& changes(connection2_->changes());
1473 ASSERT_EQ(1u, changes.size()); 1341 ASSERT_EQ(1u, changes.size());
1474 EXPECT_EQ("OnRootAdded", ChangesToDescription1(changes)[0]); 1342 EXPECT_EQ("OnRootAdded", ChangesToDescription1(changes)[0]);
1475 EXPECT_EQ("[node=1,1 parent=null view=null]", 1343 EXPECT_EQ("[node=1,1 parent=null view=null]",
1476 ChangeNodeDescription(changes)); 1344 ChangeNodeDescription(changes));
1477 1345
1478 // And 3 should get a delete. 1346 // And 3 should get a delete.
1479 connection3->DoRunLoopUntilChangesCount(1); 1347 connection3->DoRunLoopUntilChangesCount(1);
1480 ASSERT_EQ(1u, connection3->changes().size()); 1348 ASSERT_EQ(1u, connection3->changes().size());
1481 EXPECT_EQ("NodeDeleted change_id=4 node=1,1", 1349 EXPECT_EQ("NodeDeleted node=1,1",
1482 ChangesToDescription1(connection3->changes())[0]); 1350 ChangesToDescription1(connection3->changes())[0]);
1483 } 1351 }
1484 1352
1485 // Connection3 has no root. Verify it can't see node 1,1 anymore. 1353 // Connection3 has no root. Verify it can't see node 1,1 anymore.
1486 { 1354 {
1487 std::vector<TestNode> nodes; 1355 std::vector<TestNode> nodes;
1488 connection3->GetNodeTree(BuildNodeId(1, 1), &nodes); 1356 connection3->GetNodeTree(BuildNodeId(1, 1), &nodes);
1489 EXPECT_TRUE(nodes.empty()); 1357 EXPECT_TRUE(nodes.empty());
1490 } 1358 }
1491 1359
(...skipping 11 matching lines...) Expand all
1503 std::vector<TestNode> nodes; 1371 std::vector<TestNode> nodes;
1504 connection3->GetNodeTree(BuildNodeId(3, 1), &nodes); 1372 connection3->GetNodeTree(BuildNodeId(3, 1), &nodes);
1505 ASSERT_EQ(1u, nodes.size()); 1373 ASSERT_EQ(1u, nodes.size());
1506 EXPECT_EQ("node=3,1 parent=null view=null", nodes[0].ToString()); 1374 EXPECT_EQ("node=3,1 parent=null view=null", nodes[0].ToString());
1507 } 1375 }
1508 1376
1509 connection3->Destroy(); 1377 connection3->Destroy();
1510 } 1378 }
1511 1379
1512 // TODO(sky): add coverage of test that destroys connections and ensures other 1380 // TODO(sky): add coverage of test that destroys connections and ensures other
1513 // connections get deletion notification (or advanced server id). 1381 // connections get deletion notification.
1514 1382
1515 // TODO(sky): need to better track changes to initial connection. For example, 1383 // TODO(sky): need to better track changes to initial connection. For example,
1516 // that SetBounsdNodes/AddNode and the like don't result in messages to the 1384 // that SetBounsdNodes/AddNode and the like don't result in messages to the
1517 // originating connection. 1385 // originating connection.
1518 1386
1519 // TODO(beng): Add tests for focus: 1387 // TODO(beng): Add tests for focus:
1520 // - focus between two nodes known to a connection 1388 // - focus between two nodes known to a connection
1521 // - focus between nodes unknown to one of the connections. 1389 // - focus between nodes unknown to one of the connections.
1522 // - focus between nodes unknown to either connection. 1390 // - focus between nodes unknown to either connection.
1523 1391
1524 } // namespace service 1392 } // namespace service
1525 } // namespace view_manager 1393 } // namespace view_manager
1526 } // namespace mojo 1394 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/services/view_manager/view_manager_service_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698