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

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

Issue 294833002: Mojo: more idiomatic C++ bindings (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 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_connection.cc ('k') | mojo/shell/app_child_process.cc » ('j') | 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/bind.h" 8 #include "base/bind.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/memory/scoped_vector.h" 10 #include "base/memory/scoped_vector.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "base/run_loop.h" 12 #include "base/run_loop.h"
13 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
14 #include "mojo/common/common_type_converters.h" 14 #include "mojo/common/common_type_converters.h"
15 #include "mojo/public/cpp/application/application.h" 15 #include "mojo/public/cpp/application/application.h"
16 #include "mojo/public/cpp/application/connect.h" 16 #include "mojo/public/cpp/application/connect.h"
17 #include "mojo/public/cpp/bindings/allocation_scope.h"
18 #include "mojo/public/cpp/environment/environment.h" 17 #include "mojo/public/cpp/environment/environment.h"
19 #include "mojo/service_manager/service_manager.h" 18 #include "mojo/service_manager/service_manager.h"
20 #include "mojo/services/public/cpp/geometry/geometry_type_converters.h" 19 #include "mojo/services/public/cpp/geometry/geometry_type_converters.h"
21 #include "mojo/services/public/cpp/view_manager/util.h" 20 #include "mojo/services/public/cpp/view_manager/util.h"
22 #include "mojo/services/public/cpp/view_manager/view_manager_types.h" 21 #include "mojo/services/public/cpp/view_manager/view_manager_types.h"
23 #include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h" 22 #include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h"
24 #include "mojo/services/view_manager/test_change_tracker.h" 23 #include "mojo/services/view_manager/test_change_tracker.h"
25 #include "mojo/shell/shell_test_helper.h" 24 #include "mojo/shell/shell_test_helper.h"
26 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
27 #include "ui/gfx/geometry/rect.h" 26 #include "ui/gfx/geometry/rect.h"
28 27
29 namespace mojo { 28 namespace mojo {
30
31 // TODO(sky): remove this when Darin is done with cleanup.
32 template <typename T>
33 class MOJO_COMMON_EXPORT TypeConverter<T, T> {
34 public:
35 static T ConvertFrom(T input, Buffer* buf) {
36 return input;
37 }
38 static T ConvertTo(T input) {
39 return input;
40 }
41
42 MOJO_ALLOW_IMPLICIT_TYPE_CONVERSION();
43 };
44
45 namespace view_manager { 29 namespace view_manager {
46 namespace service { 30 namespace service {
47 31
48 namespace { 32 namespace {
49 33
50 base::RunLoop* current_run_loop = NULL; 34 base::RunLoop* current_run_loop = NULL;
51 35
52 const char kTestServiceURL[] = "mojo:test_url"; 36 const char kTestServiceURL[] = "mojo:test_url";
53 37
54 void INodesToTestNodes(const Array<INode>& data, 38 void INodesToTestNodes(const Array<INodePtr>& data,
55 std::vector<TestNode>* test_nodes) { 39 std::vector<TestNode>* test_nodes) {
56 for (size_t i = 0; i < data.size(); ++i) { 40 for (size_t i = 0; i < data.size(); ++i) {
57 TestNode node; 41 TestNode node;
58 node.parent_id = data[i].parent_id(); 42 node.parent_id = data[i]->parent_id;
59 node.node_id = data[i].node_id(); 43 node.node_id = data[i]->node_id;
60 node.view_id = data[i].view_id(); 44 node.view_id = data[i]->view_id;
61 test_nodes->push_back(node); 45 test_nodes->push_back(node);
62 } 46 }
63 } 47 }
64 48
65 // BackgroundConnection is used when a child ViewManagerConnection is created by 49 // BackgroundConnection is used when a child ViewManagerConnection is created by
66 // way of Connect(). BackgroundConnection is created on a background thread (the 50 // way of Connect(). BackgroundConnection is created on a background thread (the
67 // thread where the shell lives). All public methods are to be invoked on the 51 // thread where the shell lives). All public methods are to be invoked on the
68 // main thread. They wait for a result (by spinning a nested message loop), 52 // main thread. They wait for a result (by spinning a nested message loop),
69 // calling through to background thread, then the underlying IViewManager* and 53 // calling through to background thread, then the underlying IViewManager* and
70 // respond back to the calling thread to return control to the test. 54 // respond back to the calling thread to return control to the test.
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 // Callbacks from the various IViewManager functions. 196 // Callbacks from the various IViewManager functions.
213 void GotResultOnBackgroundThread(bool* result_cache, bool result) { 197 void GotResultOnBackgroundThread(bool* result_cache, bool result) {
214 *result_cache = result; 198 *result_cache = result;
215 main_loop_->PostTask( 199 main_loop_->PostTask(
216 FROM_HERE, 200 FROM_HERE,
217 base::Bind(&BackgroundConnection::QuitOnMainThread, 201 base::Bind(&BackgroundConnection::QuitOnMainThread,
218 base::Unretained(this))); 202 base::Unretained(this)));
219 } 203 }
220 204
221 void GotNodeTreeOnBackgroundThread(std::vector<TestNode>* nodes, 205 void GotNodeTreeOnBackgroundThread(std::vector<TestNode>* nodes,
222 const Array<INode>& results) { 206 Array<INodePtr> results) {
223 INodesToTestNodes(results, nodes); 207 INodesToTestNodes(results, nodes);
224 main_loop_->PostTask( 208 main_loop_->PostTask(
225 FROM_HERE, 209 FROM_HERE,
226 base::Bind(&BackgroundConnection::QuitOnMainThread, 210 base::Bind(&BackgroundConnection::QuitOnMainThread,
227 base::Unretained(this))); 211 base::Unretained(this)));
228 } 212 }
229 213
230 void QuitOnMainThread() { 214 void QuitOnMainThread() {
231 DCHECK(main_run_loop_); 215 DCHECK(main_run_loop_);
232 main_run_loop_->Quit(); 216 main_run_loop_->Quit();
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 303
320 // InterfaceImp: 304 // InterfaceImp:
321 virtual void OnConnectionEstablished() OVERRIDE { 305 virtual void OnConnectionEstablished() OVERRIDE {
322 connection_.set_view_manager(client()); 306 connection_.set_view_manager(client());
323 } 307 }
324 308
325 // IViewMangerClient: 309 // IViewMangerClient:
326 virtual void OnViewManagerConnectionEstablished( 310 virtual void OnViewManagerConnectionEstablished(
327 TransportConnectionId connection_id, 311 TransportConnectionId connection_id,
328 TransportChangeId next_server_change_id, 312 TransportChangeId next_server_change_id,
329 const Array<INode>& nodes) OVERRIDE { 313 Array<INodePtr> nodes) OVERRIDE {
330 tracker_.OnViewManagerConnectionEstablished( 314 tracker_.OnViewManagerConnectionEstablished(
331 connection_id, next_server_change_id, nodes); 315 connection_id, next_server_change_id, nodes.Pass());
332 } 316 }
333 virtual void OnServerChangeIdAdvanced( 317 virtual void OnServerChangeIdAdvanced(
334 TransportChangeId next_server_change_id) OVERRIDE { 318 TransportChangeId next_server_change_id) OVERRIDE {
335 tracker_.OnServerChangeIdAdvanced(next_server_change_id); 319 tracker_.OnServerChangeIdAdvanced(next_server_change_id);
336 } 320 }
337 virtual void OnNodeBoundsChanged(TransportNodeId node_id, 321 virtual void OnNodeBoundsChanged(TransportNodeId node_id,
338 const Rect& old_bounds, 322 RectPtr old_bounds,
339 const Rect& new_bounds) OVERRIDE { 323 RectPtr new_bounds) OVERRIDE {
340 tracker_.OnNodeBoundsChanged(node_id, old_bounds, new_bounds); 324 tracker_.OnNodeBoundsChanged(node_id, old_bounds.Pass(), new_bounds.Pass());
341 } 325 }
342 virtual void OnNodeHierarchyChanged( 326 virtual void OnNodeHierarchyChanged(
343 TransportNodeId node, 327 TransportNodeId node,
344 TransportNodeId new_parent, 328 TransportNodeId new_parent,
345 TransportNodeId old_parent, 329 TransportNodeId old_parent,
346 TransportChangeId server_change_id, 330 TransportChangeId server_change_id,
347 const Array<INode>& nodes) OVERRIDE { 331 Array<INodePtr> nodes) OVERRIDE {
348 tracker_.OnNodeHierarchyChanged(node, new_parent, old_parent, 332 tracker_.OnNodeHierarchyChanged(node, new_parent, old_parent,
349 server_change_id, nodes); 333 server_change_id, nodes.Pass());
350 } 334 }
351 virtual void OnNodeDeleted(TransportNodeId node, 335 virtual void OnNodeDeleted(TransportNodeId node,
352 TransportChangeId server_change_id) OVERRIDE { 336 TransportChangeId server_change_id) OVERRIDE {
353 tracker_.OnNodeDeleted(node, server_change_id); 337 tracker_.OnNodeDeleted(node, server_change_id);
354 } 338 }
355 virtual void OnViewDeleted(TransportViewId view) OVERRIDE { 339 virtual void OnViewDeleted(TransportViewId view) OVERRIDE {
356 tracker_.OnViewDeleted(view); 340 tracker_.OnViewDeleted(view);
357 } 341 }
358 virtual void OnNodeViewReplaced(TransportNodeId node, 342 virtual void OnNodeViewReplaced(TransportNodeId node,
359 TransportViewId new_view_id, 343 TransportViewId new_view_id,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 // Boolean callback. Sets |result_cache| to the value of |result| and quits 394 // Boolean callback. Sets |result_cache| to the value of |result| and quits
411 // the run loop. 395 // the run loop.
412 void BooleanCallback(bool* result_cache, bool result) { 396 void BooleanCallback(bool* result_cache, bool result) {
413 *result_cache = result; 397 *result_cache = result;
414 current_run_loop->Quit(); 398 current_run_loop->Quit();
415 } 399 }
416 400
417 // Callback that results in a vector of INodes. The INodes are converted to 401 // Callback that results in a vector of INodes. The INodes are converted to
418 // TestNodes. 402 // TestNodes.
419 void INodesCallback(std::vector<TestNode>* test_nodes, 403 void INodesCallback(std::vector<TestNode>* test_nodes,
420 const Array<INode>& data) { 404 Array<INodePtr> data) {
421 INodesToTestNodes(data, test_nodes); 405 INodesToTestNodes(data, test_nodes);
422 current_run_loop->Quit(); 406 current_run_loop->Quit();
423 } 407 }
424 408
425 // Creates an id used for transport from the specified parameters. 409 // Creates an id used for transport from the specified parameters.
426 TransportNodeId CreateNodeId(TransportConnectionId connection_id, 410 TransportNodeId CreateNodeId(TransportConnectionId connection_id,
427 TransportConnectionSpecificNodeId node_id) { 411 TransportConnectionSpecificNodeId node_id) {
428 return (connection_id << 16) | node_id; 412 return (connection_id << 16) | node_id;
429 } 413 }
430 414
(...skipping 28 matching lines...) Expand all
459 bool result = false; 443 bool result = false;
460 view_manager->DeleteView(view_id, base::Bind(&BooleanCallback, &result)); 444 view_manager->DeleteView(view_id, base::Bind(&BooleanCallback, &result));
461 DoRunLoop(); 445 DoRunLoop();
462 return result; 446 return result;
463 } 447 }
464 448
465 bool SetNodeBounds(IViewManager* view_manager, 449 bool SetNodeBounds(IViewManager* view_manager,
466 TransportNodeId node_id, 450 TransportNodeId node_id,
467 const gfx::Rect& bounds) { 451 const gfx::Rect& bounds) {
468 bool result = false; 452 bool result = false;
469 view_manager->SetNodeBounds(node_id, bounds, 453 view_manager->SetNodeBounds(node_id, Rect::From(bounds),
470 base::Bind(&BooleanCallback, &result)); 454 base::Bind(&BooleanCallback, &result));
471 DoRunLoop(); 455 DoRunLoop();
472 return result; 456 return result;
473 } 457 }
474 458
475 // Adds a node, blocking until done. 459 // Adds a node, blocking until done.
476 bool AddNode(IViewManager* view_manager, 460 bool AddNode(IViewManager* view_manager,
477 TransportNodeId parent, 461 TransportNodeId parent,
478 TransportNodeId child, 462 TransportNodeId child,
479 TransportChangeId server_change_id) { 463 TransportChangeId server_change_id) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 view_manager->SetView(node_id, view_id, 507 view_manager->SetView(node_id, view_id,
524 base::Bind(&BooleanCallback, &result)); 508 base::Bind(&BooleanCallback, &result));
525 DoRunLoop(); 509 DoRunLoop();
526 return result; 510 return result;
527 } 511 }
528 512
529 bool Connect(IViewManager* view_manager, 513 bool Connect(IViewManager* view_manager,
530 const std::string& url, 514 const std::string& url,
531 TransportNodeId id, 515 TransportNodeId id,
532 TransportNodeId id2) { 516 TransportNodeId id2) {
533 AllocationScope scope;
534 bool result = false; 517 bool result = false;
535 std::vector<TransportNodeId> node_ids; 518 std::vector<TransportNodeId> node_ids;
536 node_ids.push_back(id); 519 node_ids.push_back(id);
537 if (id2 != 0) 520 if (id2 != 0)
538 node_ids.push_back(id2); 521 node_ids.push_back(id2);
539 view_manager->Connect(url, Array<uint32_t>::From(node_ids), 522 view_manager->Connect(url, Array<uint32_t>::From(node_ids),
540 base::Bind(&BooleanCallback, &result)); 523 base::Bind(&BooleanCallback, &result));
541 DoRunLoop(); 524 DoRunLoop();
542 return result; 525 return result;
543 } 526 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 593
611 void DoRunLoopUntilChangesCount(size_t count) { 594 void DoRunLoopUntilChangesCount(size_t count) {
612 main_loop_tracker_delegate_.DoRunLoopUntilChangesCount(count); 595 main_loop_tracker_delegate_.DoRunLoopUntilChangesCount(count);
613 } 596 }
614 597
615 private: 598 private:
616 // IViewManagerClient overrides: 599 // IViewManagerClient overrides:
617 virtual void OnViewManagerConnectionEstablished( 600 virtual void OnViewManagerConnectionEstablished(
618 TransportConnectionId connection_id, 601 TransportConnectionId connection_id,
619 TransportChangeId next_server_change_id, 602 TransportChangeId next_server_change_id,
620 const Array<INode>& nodes) OVERRIDE { 603 mojo::Array<INodePtr> nodes) OVERRIDE {
621 id_ = connection_id; 604 id_ = connection_id;
622 next_server_change_id_ = next_server_change_id; 605 next_server_change_id_ = next_server_change_id;
623 initial_nodes_.clear(); 606 initial_nodes_.clear();
624 INodesToTestNodes(nodes, &initial_nodes_); 607 INodesToTestNodes(nodes, &initial_nodes_);
625 tracker_.OnViewManagerConnectionEstablished( 608 tracker_.OnViewManagerConnectionEstablished(
626 connection_id, next_server_change_id, nodes); 609 connection_id, next_server_change_id, nodes.Pass());
627 } 610 }
628 virtual void OnServerChangeIdAdvanced( 611 virtual void OnServerChangeIdAdvanced(
629 TransportChangeId next_server_change_id) OVERRIDE { 612 TransportChangeId next_server_change_id) OVERRIDE {
630 tracker_.OnServerChangeIdAdvanced(next_server_change_id); 613 tracker_.OnServerChangeIdAdvanced(next_server_change_id);
631 } 614 }
632 virtual void OnNodeBoundsChanged(TransportNodeId node_id, 615 virtual void OnNodeBoundsChanged(TransportNodeId node_id,
633 const Rect& old_bounds, 616 RectPtr old_bounds,
634 const Rect& new_bounds) OVERRIDE { 617 RectPtr new_bounds) OVERRIDE {
635 tracker_.OnNodeBoundsChanged(node_id, old_bounds, new_bounds); 618 tracker_.OnNodeBoundsChanged(node_id, old_bounds.Pass(), new_bounds.Pass());
636 } 619 }
637 virtual void OnNodeHierarchyChanged( 620 virtual void OnNodeHierarchyChanged(
638 TransportNodeId node, 621 TransportNodeId node,
639 TransportNodeId new_parent, 622 TransportNodeId new_parent,
640 TransportNodeId old_parent, 623 TransportNodeId old_parent,
641 TransportChangeId server_change_id, 624 TransportChangeId server_change_id,
642 const Array<INode>& nodes) OVERRIDE { 625 mojo::Array<INodePtr> nodes) OVERRIDE {
643 tracker_.OnNodeHierarchyChanged(node, new_parent, old_parent,
644 server_change_id, nodes);
645 hierarchy_changed_nodes_.clear(); 626 hierarchy_changed_nodes_.clear();
646 INodesToTestNodes(nodes, &hierarchy_changed_nodes_); 627 INodesToTestNodes(nodes, &hierarchy_changed_nodes_);
628 tracker_.OnNodeHierarchyChanged(node, new_parent, old_parent,
629 server_change_id, nodes.Pass());
647 } 630 }
648 virtual void OnNodeDeleted(TransportNodeId node, 631 virtual void OnNodeDeleted(TransportNodeId node,
649 TransportChangeId server_change_id) OVERRIDE { 632 TransportChangeId server_change_id) OVERRIDE {
650 tracker_.OnNodeDeleted(node, server_change_id); 633 tracker_.OnNodeDeleted(node, server_change_id);
651 } 634 }
652 virtual void OnViewDeleted(TransportViewId view) OVERRIDE { 635 virtual void OnViewDeleted(TransportViewId view) OVERRIDE {
653 tracker_.OnViewDeleted(view); 636 tracker_.OnViewDeleted(view);
654 } 637 }
655 virtual void OnNodeViewReplaced(TransportNodeId node, 638 virtual void OnNodeViewReplaced(TransportNodeId node,
656 TransportViewId new_view_id, 639 TransportViewId new_view_id,
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1)); 763 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
781 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2)); 764 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
782 765
783 EXPECT_TRUE(client_.GetAndClearChanges().empty()); 766 EXPECT_TRUE(client_.GetAndClearChanges().empty());
784 767
785 EstablishSecondConnection(); 768 EstablishSecondConnection();
786 EXPECT_TRUE(client2_.GetAndClearChanges().empty()); 769 EXPECT_TRUE(client2_.GetAndClearChanges().empty());
787 770
788 // Make 2 a child of 1. 771 // Make 2 a child of 1.
789 { 772 {
790 AllocationScope scope;
791 ASSERT_TRUE(AddNode(view_manager_.get(), 773 ASSERT_TRUE(AddNode(view_manager_.get(),
792 CreateNodeId(client_.id(), 1), 774 CreateNodeId(client_.id(), 1),
793 CreateNodeId(client_.id(), 2), 775 CreateNodeId(client_.id(), 2),
794 1)); 776 1));
795 Changes changes(client_.GetAndClearChanges()); 777 Changes changes(client_.GetAndClearChanges());
796 ASSERT_TRUE(changes.empty()); 778 ASSERT_TRUE(changes.empty());
797 779
798 client2_.DoRunLoopUntilChangesCount(1); 780 client2_.DoRunLoopUntilChangesCount(1);
799 changes = client2_.GetAndClearChanges(); 781 changes = client2_.GetAndClearChanges();
800 ASSERT_EQ(1u, changes.size()); 782 ASSERT_EQ(1u, changes.size());
801 EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]); 783 EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]);
802 } 784 }
803 785
804 // Remove 2 from its parent. 786 // Remove 2 from its parent.
805 { 787 {
806 AllocationScope scope;
807 ASSERT_TRUE(RemoveNodeFromParent(view_manager_.get(), 788 ASSERT_TRUE(RemoveNodeFromParent(view_manager_.get(),
808 CreateNodeId(client_.id(), 2), 789 CreateNodeId(client_.id(), 2),
809 2)); 790 2));
810 Changes changes(client_.GetAndClearChanges()); 791 Changes changes(client_.GetAndClearChanges());
811 ASSERT_TRUE(changes.empty()); 792 ASSERT_TRUE(changes.empty());
812 793
813 client2_.DoRunLoopUntilChangesCount(1); 794 client2_.DoRunLoopUntilChangesCount(1);
814 changes = client2_.GetAndClearChanges(); 795 changes = client2_.GetAndClearChanges();
815 ASSERT_EQ(1u, changes.size()); 796 ASSERT_EQ(1u, changes.size());
816 EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]); 797 EXPECT_EQ("ServerChangeIdAdvanced 3", changes[0]);
817 } 798 }
818 } 799 }
819 800
820 // Verifies AddNode fails when node is already in position. 801 // Verifies AddNode fails when node is already in position.
821 TEST_F(ViewManagerConnectionTest, AddNodeWithNoChange) { 802 TEST_F(ViewManagerConnectionTest, AddNodeWithNoChange) {
822 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1)); 803 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
823 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2)); 804 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
824 805
825 EXPECT_TRUE(client_.GetAndClearChanges().empty()); 806 EXPECT_TRUE(client_.GetAndClearChanges().empty());
826 807
827 EstablishSecondConnection(); 808 EstablishSecondConnection();
828 EXPECT_TRUE(client2_.GetAndClearChanges().empty()); 809 EXPECT_TRUE(client2_.GetAndClearChanges().empty());
829 810
830 // Make 2 a child of 1. 811 // Make 2 a child of 1.
831 { 812 {
832 AllocationScope scope;
833 ASSERT_TRUE(AddNode(view_manager_.get(), 813 ASSERT_TRUE(AddNode(view_manager_.get(),
834 CreateNodeId(client_.id(), 1), 814 CreateNodeId(client_.id(), 1),
835 CreateNodeId(client_.id(), 2), 815 CreateNodeId(client_.id(), 2),
836 1)); 816 1));
837 Changes changes(client_.GetAndClearChanges()); 817 Changes changes(client_.GetAndClearChanges());
838 ASSERT_TRUE(changes.empty()); 818 ASSERT_TRUE(changes.empty());
839 819
840 client2_.DoRunLoopUntilChangesCount(1); 820 client2_.DoRunLoopUntilChangesCount(1);
841 changes = client2_.GetAndClearChanges(); 821 changes = client2_.GetAndClearChanges();
842 ASSERT_EQ(1u, changes.size()); 822 ASSERT_EQ(1u, changes.size());
843 EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]); 823 EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]);
844 } 824 }
845 825
846 // Try again, this should fail. 826 // Try again, this should fail.
847 { 827 {
848 AllocationScope scope;
849 EXPECT_FALSE(AddNode(view_manager_.get(), 828 EXPECT_FALSE(AddNode(view_manager_.get(),
850 CreateNodeId(client_.id(), 1), 829 CreateNodeId(client_.id(), 1),
851 CreateNodeId(client_.id(), 2), 830 CreateNodeId(client_.id(), 2),
852 2)); 831 2));
853 Changes changes(client_.GetAndClearChanges()); 832 Changes changes(client_.GetAndClearChanges());
854 EXPECT_TRUE(changes.empty()); 833 EXPECT_TRUE(changes.empty());
855 } 834 }
856 } 835 }
857 836
858 // Verifies AddNode fails when node is already in position. 837 // Verifies AddNode fails when node is already in position.
859 TEST_F(ViewManagerConnectionTest, AddAncestorFails) { 838 TEST_F(ViewManagerConnectionTest, AddAncestorFails) {
860 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1)); 839 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
861 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2)); 840 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
862 841
863 EXPECT_TRUE(client_.GetAndClearChanges().empty()); 842 EXPECT_TRUE(client_.GetAndClearChanges().empty());
864 843
865 EstablishSecondConnection(); 844 EstablishSecondConnection();
866 EXPECT_TRUE(client2_.GetAndClearChanges().empty()); 845 EXPECT_TRUE(client2_.GetAndClearChanges().empty());
867 846
868 // Make 2 a child of 1. 847 // Make 2 a child of 1.
869 { 848 {
870 AllocationScope scope;
871 ASSERT_TRUE(AddNode(view_manager_.get(), 849 ASSERT_TRUE(AddNode(view_manager_.get(),
872 CreateNodeId(client_.id(), 1), 850 CreateNodeId(client_.id(), 1),
873 CreateNodeId(client_.id(), 2), 851 CreateNodeId(client_.id(), 2),
874 1)); 852 1));
875 Changes changes(client_.GetAndClearChanges()); 853 Changes changes(client_.GetAndClearChanges());
876 ASSERT_TRUE(changes.empty()); 854 ASSERT_TRUE(changes.empty());
877 855
878 client2_.DoRunLoopUntilChangesCount(1); 856 client2_.DoRunLoopUntilChangesCount(1);
879 changes = client2_.GetAndClearChanges(); 857 changes = client2_.GetAndClearChanges();
880 ASSERT_EQ(1u, changes.size()); 858 ASSERT_EQ(1u, changes.size());
881 EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]); 859 EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]);
882 } 860 }
883 861
884 // Try to make 1 a child of 2, this should fail since 1 is an ancestor of 2. 862 // Try to make 1 a child of 2, this should fail since 1 is an ancestor of 2.
885 { 863 {
886 AllocationScope scope;
887 EXPECT_FALSE(AddNode(view_manager_.get(), 864 EXPECT_FALSE(AddNode(view_manager_.get(),
888 CreateNodeId(client_.id(), 2), 865 CreateNodeId(client_.id(), 2),
889 CreateNodeId(client_.id(), 1), 866 CreateNodeId(client_.id(), 1),
890 2)); 867 2));
891 Changes changes(client_.GetAndClearChanges()); 868 Changes changes(client_.GetAndClearChanges());
892 EXPECT_TRUE(changes.empty()); 869 EXPECT_TRUE(changes.empty());
893 } 870 }
894 } 871 }
895 872
896 // Verifies adding with an invalid id fails. 873 // Verifies adding with an invalid id fails.
897 TEST_F(ViewManagerConnectionTest, AddWithInvalidServerId) { 874 TEST_F(ViewManagerConnectionTest, AddWithInvalidServerId) {
898 // Create two nodes. 875 // Create two nodes.
899 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1)); 876 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
900 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2)); 877 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
901 878
902 // Make 2 a child of 1. Supply an invalid change id, which should fail. 879 // Make 2 a child of 1. Supply an invalid change id, which should fail.
903 { 880 {
904 AllocationScope scope;
905 ASSERT_FALSE(AddNode(view_manager_.get(), 881 ASSERT_FALSE(AddNode(view_manager_.get(),
906 CreateNodeId(client_.id(), 1), 882 CreateNodeId(client_.id(), 1),
907 CreateNodeId(client_.id(), 2), 883 CreateNodeId(client_.id(), 2),
908 0)); 884 0));
909 Changes changes(client_.GetAndClearChanges()); 885 Changes changes(client_.GetAndClearChanges());
910 EXPECT_TRUE(changes.empty()); 886 EXPECT_TRUE(changes.empty());
911 } 887 }
912 } 888 }
913 889
914 // Verifies adding to root sends right notifications. 890 // Verifies adding to root sends right notifications.
915 TEST_F(ViewManagerConnectionTest, AddToRoot) { 891 TEST_F(ViewManagerConnectionTest, AddToRoot) {
916 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 21)); 892 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 21));
917 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 3)); 893 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 3));
918 EXPECT_TRUE(client_.GetAndClearChanges().empty()); 894 EXPECT_TRUE(client_.GetAndClearChanges().empty());
919 895
920 EstablishSecondConnection(); 896 EstablishSecondConnection();
921 EXPECT_TRUE(client2_.GetAndClearChanges().empty()); 897 EXPECT_TRUE(client2_.GetAndClearChanges().empty());
922 898
923 // Make 3 a child of 21. 899 // Make 3 a child of 21.
924 { 900 {
925 AllocationScope scope;
926 ASSERT_TRUE(AddNode(view_manager_.get(), 901 ASSERT_TRUE(AddNode(view_manager_.get(),
927 CreateNodeId(client_.id(), 21), 902 CreateNodeId(client_.id(), 21),
928 CreateNodeId(client_.id(), 3), 903 CreateNodeId(client_.id(), 3),
929 1)); 904 1));
930 Changes changes(client_.GetAndClearChanges()); 905 Changes changes(client_.GetAndClearChanges());
931 ASSERT_TRUE(changes.empty()); 906 ASSERT_TRUE(changes.empty());
932 907
933 client2_.DoRunLoopUntilChangesCount(1); 908 client2_.DoRunLoopUntilChangesCount(1);
934 changes = client2_.GetAndClearChanges(); 909 changes = client2_.GetAndClearChanges();
935 ASSERT_EQ(1u, changes.size()); 910 ASSERT_EQ(1u, changes.size());
936 EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]); 911 EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]);
937 } 912 }
938 913
939 // Make 21 a child of the root. 914 // Make 21 a child of the root.
940 { 915 {
941 AllocationScope scope;
942 ASSERT_TRUE(AddNode(view_manager_.get(), 916 ASSERT_TRUE(AddNode(view_manager_.get(),
943 CreateNodeId(0, 1), 917 CreateNodeId(0, 1),
944 CreateNodeId(client_.id(), 21), 918 CreateNodeId(client_.id(), 21),
945 2)); 919 2));
946 Changes changes(client_.GetAndClearChanges()); 920 Changes changes(client_.GetAndClearChanges());
947 ASSERT_TRUE(changes.empty()); 921 ASSERT_TRUE(changes.empty());
948 922
949 client2_.DoRunLoopUntilChangesCount(1); 923 client2_.DoRunLoopUntilChangesCount(1);
950 changes = client2_.GetAndClearChanges(); 924 changes = client2_.GetAndClearChanges();
951 ASSERT_EQ(1u, changes.size()); 925 ASSERT_EQ(1u, changes.size());
952 EXPECT_EQ( 926 EXPECT_EQ(
953 "HierarchyChanged change_id=2 node=1,21 new_parent=0,1 old_parent=null", 927 "HierarchyChanged change_id=2 node=1,21 new_parent=0,1 old_parent=null",
954 changes[0]); 928 changes[0]);
955 } 929 }
956 } 930 }
957 931
958 // Verifies adding to root sends right notifications. 932 // Verifies adding to root sends right notifications.
959 TEST_F(ViewManagerConnectionTest, NodeHierarchyChangedNodes) { 933 TEST_F(ViewManagerConnectionTest, NodeHierarchyChangedNodes) {
960 // Create nodes 1 and 11 with 1 parented to the root and 11 a child of 1. 934 // Create nodes 1 and 11 with 1 parented to the root and 11 a child of 1.
961 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1)); 935 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
962 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 11)); 936 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 11));
963 937
964 // Make 11 a child of 1. 938 // Make 11 a child of 1.
965 { 939 {
966 AllocationScope scope;
967 ASSERT_TRUE(AddNode(view_manager_.get(), 940 ASSERT_TRUE(AddNode(view_manager_.get(),
968 CreateNodeId(client_.id(), 1), 941 CreateNodeId(client_.id(), 1),
969 CreateNodeId(client_.id(), 11), 942 CreateNodeId(client_.id(), 11),
970 1)); 943 1));
971 ASSERT_TRUE(client_.GetAndClearChanges().empty()); 944 ASSERT_TRUE(client_.GetAndClearChanges().empty());
972 } 945 }
973 946
974 EstablishSecondConnection(); 947 EstablishSecondConnection();
975 948
976 // Make 1 a child of the root. 949 // Make 1 a child of the root.
977 { 950 {
978 AllocationScope scope;
979 ASSERT_TRUE(AddNode(view_manager_.get(), 951 ASSERT_TRUE(AddNode(view_manager_.get(),
980 CreateNodeId(0, 1), 952 CreateNodeId(0, 1),
981 CreateNodeId(client_.id(), 1), 953 CreateNodeId(client_.id(), 1),
982 2)); 954 2));
983 ASSERT_TRUE(client_.GetAndClearChanges().empty()); 955 ASSERT_TRUE(client_.GetAndClearChanges().empty());
984 956
985 // Client 2 should get a hierarchy change that includes the new nodes as it 957 // Client 2 should get a hierarchy change that includes the new nodes as it
986 // has not yet seen them. 958 // has not yet seen them.
987 client2_.DoRunLoopUntilChangesCount(1); 959 client2_.DoRunLoopUntilChangesCount(1);
988 Changes changes(client2_.GetAndClearChanges()); 960 Changes changes(client2_.GetAndClearChanges());
989 ASSERT_EQ(1u, changes.size()); 961 ASSERT_EQ(1u, changes.size());
990 EXPECT_EQ( 962 EXPECT_EQ(
991 "HierarchyChanged change_id=2 node=1,1 new_parent=0,1 old_parent=null", 963 "HierarchyChanged change_id=2 node=1,1 new_parent=0,1 old_parent=null",
992 changes[0]); 964 changes[0]);
993 const std::vector<TestNode>& nodes(client2_.hierarchy_changed_nodes()); 965 const std::vector<TestNode>& nodes(client2_.hierarchy_changed_nodes());
994 ASSERT_EQ(2u, nodes.size()); 966 ASSERT_EQ(2u, nodes.size());
995 EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[0].ToString()); 967 EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[0].ToString());
996 EXPECT_EQ("node=1,11 parent=1,1 view=null", nodes[1].ToString()); 968 EXPECT_EQ("node=1,11 parent=1,1 view=null", nodes[1].ToString());
997 } 969 }
998 970
999 // Remove 1 from the root. 971 // Remove 1 from the root.
1000 { 972 {
1001 AllocationScope scope;
1002 ASSERT_TRUE(RemoveNodeFromParent(view_manager_.get(), 973 ASSERT_TRUE(RemoveNodeFromParent(view_manager_.get(),
1003 CreateNodeId(client_.id(), 1), 974 CreateNodeId(client_.id(), 1),
1004 3)); 975 3));
1005 ASSERT_TRUE(client_.GetAndClearChanges().empty()); 976 ASSERT_TRUE(client_.GetAndClearChanges().empty());
1006 977
1007 client2_.DoRunLoopUntilChangesCount(1); 978 client2_.DoRunLoopUntilChangesCount(1);
1008 Changes changes(client2_.GetAndClearChanges()); 979 Changes changes(client2_.GetAndClearChanges());
1009 ASSERT_EQ(1u, changes.size()); 980 ASSERT_EQ(1u, changes.size());
1010 EXPECT_EQ( 981 EXPECT_EQ(
1011 "HierarchyChanged change_id=3 node=1,1 new_parent=null old_parent=0,1", 982 "HierarchyChanged change_id=3 node=1,1 new_parent=null old_parent=0,1",
1012 changes[0]); 983 changes[0]);
1013 } 984 }
1014 985
1015 // Create another node, 111, parent it to 11. 986 // Create another node, 111, parent it to 11.
1016 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 111)); 987 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 111));
1017 { 988 {
1018 AllocationScope scope;
1019 ASSERT_TRUE(AddNode(view_manager_.get(), 989 ASSERT_TRUE(AddNode(view_manager_.get(),
1020 CreateNodeId(client_.id(), 11), 990 CreateNodeId(client_.id(), 11),
1021 CreateNodeId(client_.id(), 111), 991 CreateNodeId(client_.id(), 111),
1022 4)); 992 4));
1023 ASSERT_TRUE(client_.GetAndClearChanges().empty()); 993 ASSERT_TRUE(client_.GetAndClearChanges().empty());
1024 994
1025 client2_.DoRunLoopUntilChangesCount(1); 995 client2_.DoRunLoopUntilChangesCount(1);
1026 Changes changes(client2_.GetAndClearChanges()); 996 Changes changes(client2_.GetAndClearChanges());
1027 ASSERT_EQ(1u, changes.size()); 997 ASSERT_EQ(1u, changes.size());
1028 // Even though 11 isn't attached to the root client 2 is still notified of 998 // Even though 11 isn't attached to the root client 2 is still notified of
(...skipping 27 matching lines...) Expand all
1056 TEST_F(ViewManagerConnectionTest, NodeHierarchyChangedAddingKnownToUnknown) { 1026 TEST_F(ViewManagerConnectionTest, NodeHierarchyChangedAddingKnownToUnknown) {
1057 // Create the following structure: root -> 1 -> 11 and 2->21 (2 has no 1027 // Create the following structure: root -> 1 -> 11 and 2->21 (2 has no
1058 // parent). 1028 // parent).
1059 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1)); 1029 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
1060 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 11)); 1030 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 11));
1061 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2)); 1031 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
1062 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 21)); 1032 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 21));
1063 1033
1064 // Set up the hierarchy. 1034 // Set up the hierarchy.
1065 { 1035 {
1066 AllocationScope scope;
1067 ASSERT_TRUE(AddNode(view_manager_.get(), 1036 ASSERT_TRUE(AddNode(view_manager_.get(),
1068 CreateNodeId(0, 1), 1037 CreateNodeId(0, 1),
1069 CreateNodeId(client_.id(), 1), 1038 CreateNodeId(client_.id(), 1),
1070 1)); 1039 1));
1071 ASSERT_TRUE(AddNode(view_manager_.get(), 1040 ASSERT_TRUE(AddNode(view_manager_.get(),
1072 CreateNodeId(client_.id(), 1), 1041 CreateNodeId(client_.id(), 1),
1073 CreateNodeId(client_.id(), 11), 1042 CreateNodeId(client_.id(), 11),
1074 2)); 1043 2));
1075 ASSERT_TRUE(AddNode(view_manager_.get(), 1044 ASSERT_TRUE(AddNode(view_manager_.get(),
1076 CreateNodeId(client_.id(), 2), 1045 CreateNodeId(client_.id(), 2),
1077 CreateNodeId(client_.id(), 21), 1046 CreateNodeId(client_.id(), 21),
1078 3)); 1047 3));
1079 } 1048 }
1080 1049
1081 EstablishSecondConnection(); 1050 EstablishSecondConnection();
1082 1051
1083 // Remove 11. 1052 // Remove 11.
1084 { 1053 {
1085 AllocationScope scope;
1086 ASSERT_TRUE(RemoveNodeFromParent(view_manager_.get(), 1054 ASSERT_TRUE(RemoveNodeFromParent(view_manager_.get(),
1087 CreateNodeId(client_.id(), 11), 1055 CreateNodeId(client_.id(), 11),
1088 4)); 1056 4));
1089 ASSERT_TRUE(client_.GetAndClearChanges().empty()); 1057 ASSERT_TRUE(client_.GetAndClearChanges().empty());
1090 1058
1091 client2_.DoRunLoopUntilChangesCount(1); 1059 client2_.DoRunLoopUntilChangesCount(1);
1092 Changes changes(client2_.GetAndClearChanges()); 1060 Changes changes(client2_.GetAndClearChanges());
1093 ASSERT_EQ(1u, changes.size()); 1061 ASSERT_EQ(1u, changes.size());
1094 EXPECT_EQ( 1062 EXPECT_EQ(
1095 "HierarchyChanged change_id=4 node=1,11 new_parent=null old_parent=1,1", 1063 "HierarchyChanged change_id=4 node=1,11 new_parent=null old_parent=1,1",
1096 changes[0]); 1064 changes[0]);
1097 EXPECT_TRUE(client2_.hierarchy_changed_nodes().empty()); 1065 EXPECT_TRUE(client2_.hierarchy_changed_nodes().empty());
1098 } 1066 }
1099 1067
1100 // Add 11 to 21. As client2 knows about 11 it should receive the new 1068 // Add 11 to 21. As client2 knows about 11 it should receive the new
1101 // hierarchy. 1069 // hierarchy.
1102 { 1070 {
1103 AllocationScope scope;
1104 ASSERT_TRUE(AddNode(view_manager_.get(), 1071 ASSERT_TRUE(AddNode(view_manager_.get(),
1105 CreateNodeId(client_.id(), 21), 1072 CreateNodeId(client_.id(), 21),
1106 CreateNodeId(client_.id(), 11), 1073 CreateNodeId(client_.id(), 11),
1107 5)); 1074 5));
1108 ASSERT_TRUE(client_.GetAndClearChanges().empty()); 1075 ASSERT_TRUE(client_.GetAndClearChanges().empty());
1109 1076
1110 client2_.DoRunLoopUntilChangesCount(1); 1077 client2_.DoRunLoopUntilChangesCount(1);
1111 Changes changes(client2_.GetAndClearChanges()); 1078 Changes changes(client2_.GetAndClearChanges());
1112 ASSERT_EQ(1u, changes.size()); 1079 ASSERT_EQ(1u, changes.size());
1113 EXPECT_EQ( 1080 EXPECT_EQ(
1114 "HierarchyChanged change_id=5 node=1,11 new_parent=1,21 " 1081 "HierarchyChanged change_id=5 node=1,11 new_parent=1,21 "
1115 "old_parent=null", changes[0]); 1082 "old_parent=null", changes[0]);
1116 const std::vector<TestNode>& nodes(client2_.hierarchy_changed_nodes()); 1083 const std::vector<TestNode>& nodes(client2_.hierarchy_changed_nodes());
1117 ASSERT_EQ(2u, nodes.size()); 1084 ASSERT_EQ(2u, nodes.size());
1118 EXPECT_EQ("node=1,2 parent=null view=null", nodes[0].ToString()); 1085 EXPECT_EQ("node=1,2 parent=null view=null", nodes[0].ToString());
1119 EXPECT_EQ("node=1,21 parent=1,2 view=null", nodes[1].ToString()); 1086 EXPECT_EQ("node=1,21 parent=1,2 view=null", nodes[1].ToString());
1120 } 1087 }
1121 } 1088 }
1122 1089
1123 // Verifies connection on told descendants of the root when connecting. 1090 // Verifies connection on told descendants of the root when connecting.
1124 TEST_F(ViewManagerConnectionTest, GetInitialNodesOnInit) { 1091 TEST_F(ViewManagerConnectionTest, GetInitialNodesOnInit) {
1125 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 21)); 1092 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 21));
1126 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 3)); 1093 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 3));
1127 EXPECT_TRUE(client_.GetAndClearChanges().empty()); 1094 EXPECT_TRUE(client_.GetAndClearChanges().empty());
1128 1095
1129 // Make 3 a child of 21. 1096 // Make 3 a child of 21.
1130 { 1097 {
1131 AllocationScope scope;
1132 ASSERT_TRUE(AddNode(view_manager_.get(), 1098 ASSERT_TRUE(AddNode(view_manager_.get(),
1133 CreateNodeId(client_.id(), 21), 1099 CreateNodeId(client_.id(), 21),
1134 CreateNodeId(client_.id(), 3), 1100 CreateNodeId(client_.id(), 3),
1135 1)); 1101 1));
1136 ASSERT_TRUE(client_.GetAndClearChanges().empty()); 1102 ASSERT_TRUE(client_.GetAndClearChanges().empty());
1137 } 1103 }
1138 1104
1139 // Make 21 a child of the root. 1105 // Make 21 a child of the root.
1140 { 1106 {
1141 AllocationScope scope;
1142 ASSERT_TRUE(AddNode(view_manager_.get(), 1107 ASSERT_TRUE(AddNode(view_manager_.get(),
1143 CreateNodeId(0, 1), 1108 CreateNodeId(0, 1),
1144 CreateNodeId(client_.id(), 21), 1109 CreateNodeId(client_.id(), 21),
1145 2)); 1110 2));
1146 ASSERT_TRUE(client_.GetAndClearChanges().empty()); 1111 ASSERT_TRUE(client_.GetAndClearChanges().empty());
1147 } 1112 }
1148 1113
1149 EstablishSecondConnection(); 1114 EstablishSecondConnection();
1150 // Should get notification of children of the root. 1115 // Should get notification of children of the root.
1151 const std::vector<TestNode>& nodes(client2_.initial_nodes()); 1116 const std::vector<TestNode>& nodes(client2_.initial_nodes());
1152 ASSERT_EQ(3u, nodes.size()); 1117 ASSERT_EQ(3u, nodes.size());
1153 EXPECT_EQ("node=0,1 parent=null view=null", nodes[0].ToString()); 1118 EXPECT_EQ("node=0,1 parent=null view=null", nodes[0].ToString());
1154 EXPECT_EQ("node=1,21 parent=0,1 view=null", nodes[1].ToString()); 1119 EXPECT_EQ("node=1,21 parent=0,1 view=null", nodes[1].ToString());
1155 EXPECT_EQ("node=1,3 parent=1,21 view=null", nodes[2].ToString()); 1120 EXPECT_EQ("node=1,3 parent=1,21 view=null", nodes[2].ToString());
1156 } 1121 }
1157 1122
1158 // Verifies DeleteNode works. 1123 // Verifies DeleteNode works.
1159 TEST_F(ViewManagerConnectionTest, DeleteNode) { 1124 TEST_F(ViewManagerConnectionTest, DeleteNode) {
1160 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1)); 1125 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
1161 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2)); 1126 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 2));
1162 EXPECT_TRUE(client_.GetAndClearChanges().empty()); 1127 EXPECT_TRUE(client_.GetAndClearChanges().empty());
1163 1128
1164 EstablishSecondConnection(); 1129 EstablishSecondConnection();
1165 EXPECT_TRUE(client2_.GetAndClearChanges().empty()); 1130 EXPECT_TRUE(client2_.GetAndClearChanges().empty());
1166 1131
1167 // Make 2 a child of 1. 1132 // Make 2 a child of 1.
1168 { 1133 {
1169 AllocationScope scope;
1170 ASSERT_TRUE(AddNode(view_manager_.get(), 1134 ASSERT_TRUE(AddNode(view_manager_.get(),
1171 CreateNodeId(client_.id(), 1), 1135 CreateNodeId(client_.id(), 1),
1172 CreateNodeId(client_.id(), 2), 1136 CreateNodeId(client_.id(), 2),
1173 1)); 1137 1));
1174 Changes changes(client_.GetAndClearChanges()); 1138 Changes changes(client_.GetAndClearChanges());
1175 ASSERT_TRUE(changes.empty()); 1139 ASSERT_TRUE(changes.empty());
1176 1140
1177 client2_.DoRunLoopUntilChangesCount(1); 1141 client2_.DoRunLoopUntilChangesCount(1);
1178 changes = client2_.GetAndClearChanges(); 1142 changes = client2_.GetAndClearChanges();
1179 ASSERT_EQ(1u, changes.size()); 1143 ASSERT_EQ(1u, changes.size());
1180 EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]); 1144 EXPECT_EQ("ServerChangeIdAdvanced 2", changes[0]);
1181 } 1145 }
1182 1146
1183 // Add 1 to the root 1147 // Add 1 to the root
1184 { 1148 {
1185 AllocationScope scope;
1186 ASSERT_TRUE(AddNode(view_manager_.get(), 1149 ASSERT_TRUE(AddNode(view_manager_.get(),
1187 CreateNodeId(0, 1), 1150 CreateNodeId(0, 1),
1188 CreateNodeId(client_.id(), 1), 1151 CreateNodeId(client_.id(), 1),
1189 2)); 1152 2));
1190 Changes changes(client_.GetAndClearChanges()); 1153 Changes changes(client_.GetAndClearChanges());
1191 ASSERT_TRUE(changes.empty()); 1154 ASSERT_TRUE(changes.empty());
1192 1155
1193 client2_.DoRunLoopUntilChangesCount(1); 1156 client2_.DoRunLoopUntilChangesCount(1);
1194 changes = client2_.GetAndClearChanges(); 1157 changes = client2_.GetAndClearChanges();
1195 ASSERT_EQ(1u, changes.size()); 1158 ASSERT_EQ(1u, changes.size());
1196 EXPECT_EQ( 1159 EXPECT_EQ(
1197 "HierarchyChanged change_id=2 node=1,1 new_parent=0,1 old_parent=null", 1160 "HierarchyChanged change_id=2 node=1,1 new_parent=0,1 old_parent=null",
1198 changes[0]); 1161 changes[0]);
1199 } 1162 }
1200 1163
1201 // Delete 1. 1164 // Delete 1.
1202 { 1165 {
1203 AllocationScope scope;
1204 ASSERT_TRUE(DeleteNode(view_manager_.get(), CreateNodeId(client_.id(), 1))); 1166 ASSERT_TRUE(DeleteNode(view_manager_.get(), CreateNodeId(client_.id(), 1)));
1205 Changes changes(client_.GetAndClearChanges()); 1167 Changes changes(client_.GetAndClearChanges());
1206 ASSERT_TRUE(changes.empty()); 1168 ASSERT_TRUE(changes.empty());
1207 1169
1208 client2_.DoRunLoopUntilChangesCount(1); 1170 client2_.DoRunLoopUntilChangesCount(1);
1209 changes = client2_.GetAndClearChanges(); 1171 changes = client2_.GetAndClearChanges();
1210 ASSERT_EQ(1u, changes.size()); 1172 ASSERT_EQ(1u, changes.size());
1211 EXPECT_EQ("NodeDeleted change_id=3 node=1,1", changes[0]); 1173 EXPECT_EQ("NodeDeleted change_id=3 node=1,1", changes[0]);
1212 } 1174 }
1213 } 1175 }
(...skipping 15 matching lines...) Expand all
1229 // Verifies if a node was deleted and then reused that other clients are 1191 // Verifies if a node was deleted and then reused that other clients are
1230 // properly notified. 1192 // properly notified.
1231 TEST_F(ViewManagerConnectionTest, ReusedDeletedId) { 1193 TEST_F(ViewManagerConnectionTest, ReusedDeletedId) {
1232 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1)); 1194 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
1233 EXPECT_TRUE(client_.GetAndClearChanges().empty()); 1195 EXPECT_TRUE(client_.GetAndClearChanges().empty());
1234 1196
1235 EstablishSecondConnection(); 1197 EstablishSecondConnection();
1236 1198
1237 // Make 1 a child of the root. 1199 // Make 1 a child of the root.
1238 { 1200 {
1239 AllocationScope scope;
1240 ASSERT_TRUE(AddNode(view_manager_.get(), 1201 ASSERT_TRUE(AddNode(view_manager_.get(),
1241 CreateNodeId(0, 1), 1202 CreateNodeId(0, 1),
1242 CreateNodeId(client_.id(), 1), 1203 CreateNodeId(client_.id(), 1),
1243 1)); 1204 1));
1244 EXPECT_TRUE(client_.GetAndClearChanges().empty()); 1205 EXPECT_TRUE(client_.GetAndClearChanges().empty());
1245 1206
1246 client2_.DoRunLoopUntilChangesCount(1); 1207 client2_.DoRunLoopUntilChangesCount(1);
1247 Changes changes = client2_.GetAndClearChanges(); 1208 Changes changes = client2_.GetAndClearChanges();
1248 EXPECT_EQ( 1209 EXPECT_EQ(
1249 "HierarchyChanged change_id=1 node=1,1 new_parent=0,1 old_parent=null", 1210 "HierarchyChanged change_id=1 node=1,1 new_parent=0,1 old_parent=null",
1250 changes[0]); 1211 changes[0]);
1251 const std::vector<TestNode>& nodes(client2_.hierarchy_changed_nodes()); 1212 const std::vector<TestNode>& nodes(client2_.hierarchy_changed_nodes());
1252 ASSERT_EQ(1u, nodes.size()); 1213 ASSERT_EQ(1u, nodes.size());
1253 EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[0].ToString()); 1214 EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[0].ToString());
1254 } 1215 }
1255 1216
1256 // Delete 1. 1217 // Delete 1.
1257 { 1218 {
1258 AllocationScope scope;
1259 ASSERT_TRUE(DeleteNode(view_manager_.get(), CreateNodeId(client_.id(), 1))); 1219 ASSERT_TRUE(DeleteNode(view_manager_.get(), CreateNodeId(client_.id(), 1)));
1260 EXPECT_TRUE(client_.GetAndClearChanges().empty()); 1220 EXPECT_TRUE(client_.GetAndClearChanges().empty());
1261 1221
1262 client2_.DoRunLoopUntilChangesCount(1); 1222 client2_.DoRunLoopUntilChangesCount(1);
1263 Changes changes = client2_.GetAndClearChanges(); 1223 Changes changes = client2_.GetAndClearChanges();
1264 ASSERT_EQ(1u, changes.size()); 1224 ASSERT_EQ(1u, changes.size());
1265 EXPECT_EQ("NodeDeleted change_id=2 node=1,1", changes[0]); 1225 EXPECT_EQ("NodeDeleted change_id=2 node=1,1", changes[0]);
1266 } 1226 }
1267 1227
1268 // Create 1 again, and add it back to the root. Should get the same 1228 // Create 1 again, and add it back to the root. Should get the same
1269 // notification. 1229 // notification.
1270 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1)); 1230 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
1271 { 1231 {
1272 AllocationScope scope;
1273 ASSERT_TRUE(AddNode(view_manager_.get(), 1232 ASSERT_TRUE(AddNode(view_manager_.get(),
1274 CreateNodeId(0, 1), 1233 CreateNodeId(0, 1),
1275 CreateNodeId(client_.id(), 1), 1234 CreateNodeId(client_.id(), 1),
1276 3)); 1235 3));
1277 EXPECT_TRUE(client_.GetAndClearChanges().empty()); 1236 EXPECT_TRUE(client_.GetAndClearChanges().empty());
1278 1237
1279 client2_.DoRunLoopUntilChangesCount(1); 1238 client2_.DoRunLoopUntilChangesCount(1);
1280 Changes changes = client2_.GetAndClearChanges(); 1239 Changes changes = client2_.GetAndClearChanges();
1281 EXPECT_EQ( 1240 EXPECT_EQ(
1282 "HierarchyChanged change_id=3 node=1,1 new_parent=0,1 old_parent=null", 1241 "HierarchyChanged change_id=3 node=1,1 new_parent=0,1 old_parent=null",
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
1464 4)); 1423 4));
1465 1424
1466 // Attach view to node 11 in the first connection. 1425 // Attach view to node 11 in the first connection.
1467 ASSERT_TRUE(CreateView(view_manager_.get(), 1, 51)); 1426 ASSERT_TRUE(CreateView(view_manager_.get(), 1, 51));
1468 ASSERT_TRUE(SetView(view_manager_.get(), 1427 ASSERT_TRUE(SetView(view_manager_.get(),
1469 CreateNodeId(client_.id(), 11), 1428 CreateNodeId(client_.id(), 11),
1470 CreateViewId(client_.id(), 51))); 1429 CreateViewId(client_.id(), 51)));
1471 1430
1472 // Verifies GetNodeTree() on the root. 1431 // Verifies GetNodeTree() on the root.
1473 { 1432 {
1474 AllocationScope scope;
1475 std::vector<TestNode> nodes; 1433 std::vector<TestNode> nodes;
1476 GetNodeTree(view_manager2_.get(), CreateNodeId(0, 1), &nodes); 1434 GetNodeTree(view_manager2_.get(), CreateNodeId(0, 1), &nodes);
1477 ASSERT_EQ(5u, nodes.size()); 1435 ASSERT_EQ(5u, nodes.size());
1478 EXPECT_EQ("node=0,1 parent=null view=null", nodes[0].ToString()); 1436 EXPECT_EQ("node=0,1 parent=null view=null", nodes[0].ToString());
1479 EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[1].ToString()); 1437 EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[1].ToString());
1480 EXPECT_EQ("node=1,11 parent=1,1 view=1,51", nodes[2].ToString()); 1438 EXPECT_EQ("node=1,11 parent=1,1 view=1,51", nodes[2].ToString());
1481 EXPECT_EQ("node=2,2 parent=0,1 view=null", nodes[3].ToString()); 1439 EXPECT_EQ("node=2,2 parent=0,1 view=null", nodes[3].ToString());
1482 EXPECT_EQ("node=2,3 parent=0,1 view=null", nodes[4].ToString()); 1440 EXPECT_EQ("node=2,3 parent=0,1 view=null", nodes[4].ToString());
1483 } 1441 }
1484 1442
1485 // Verifies GetNodeTree() on the node 1,1. 1443 // Verifies GetNodeTree() on the node 1,1.
1486 { 1444 {
1487 AllocationScope scope;
1488 std::vector<TestNode> nodes; 1445 std::vector<TestNode> nodes;
1489 GetNodeTree(view_manager2_.get(), CreateNodeId(1, 1), &nodes); 1446 GetNodeTree(view_manager2_.get(), CreateNodeId(1, 1), &nodes);
1490 ASSERT_EQ(2u, nodes.size()); 1447 ASSERT_EQ(2u, nodes.size());
1491 EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[0].ToString()); 1448 EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[0].ToString());
1492 EXPECT_EQ("node=1,11 parent=1,1 view=1,51", nodes[1].ToString()); 1449 EXPECT_EQ("node=1,11 parent=1,1 view=1,51", nodes[1].ToString());
1493 } 1450 }
1494 } 1451 }
1495 1452
1496 TEST_F(ViewManagerConnectionTest, SetNodeBounds) { 1453 TEST_F(ViewManagerConnectionTest, SetNodeBounds) {
1497 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1)); 1454 ASSERT_TRUE(CreateNode(view_manager_.get(), 1, 1));
1498 ASSERT_TRUE(AddNode(view_manager_.get(), 1455 ASSERT_TRUE(AddNode(view_manager_.get(),
1499 CreateNodeId(0, 1), 1456 CreateNodeId(0, 1),
1500 CreateNodeId(1, 1), 1457 CreateNodeId(1, 1),
1501 1)); 1458 1));
1502 EstablishSecondConnection(); 1459 EstablishSecondConnection();
1503 1460
1504 AllocationScope scope;
1505 ASSERT_TRUE(SetNodeBounds(view_manager_.get(), 1461 ASSERT_TRUE(SetNodeBounds(view_manager_.get(),
1506 CreateNodeId(1, 1), 1462 CreateNodeId(1, 1),
1507 gfx::Rect(0, 0, 100, 100))); 1463 gfx::Rect(0, 0, 100, 100)));
1508 1464
1509 client2_.DoRunLoopUntilChangesCount(1); 1465 client2_.DoRunLoopUntilChangesCount(1);
1510 Changes changes(client2_.GetAndClearChanges()); 1466 Changes changes(client2_.GetAndClearChanges());
1511 ASSERT_EQ(1u, changes.size()); 1467 ASSERT_EQ(1u, changes.size());
1512 EXPECT_EQ("BoundsChanged node=1,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100", 1468 EXPECT_EQ("BoundsChanged node=1,1 old_bounds=0,0 0x0 new_bounds=0,0 100x100",
1513 changes[0]); 1469 changes[0]);
1514 1470
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
1650 1606
1651 // Parent 11 to 10. 1607 // Parent 11 to 10.
1652 ASSERT_TRUE(background_connection_->AddNode(CreateNodeId(2, 10), 1608 ASSERT_TRUE(background_connection_->AddNode(CreateNodeId(2, 10),
1653 CreateNodeId(2, 11), 3)); 1609 CreateNodeId(2, 11), 3));
1654 // Remove 11 from 10. 1610 // Remove 11 from 10.
1655 ASSERT_TRUE(background_connection_->RemoveNodeFromParent( 1611 ASSERT_TRUE(background_connection_->RemoveNodeFromParent(
1656 CreateNodeId(2, 11), 4)); 1612 CreateNodeId(2, 11), 4));
1657 1613
1658 // Verify nothing was actually removed. 1614 // Verify nothing was actually removed.
1659 { 1615 {
1660 AllocationScope scope;
1661 std::vector<TestNode> nodes; 1616 std::vector<TestNode> nodes;
1662 GetNodeTree(view_manager_.get(), CreateNodeId(0, 1), &nodes); 1617 GetNodeTree(view_manager_.get(), CreateNodeId(0, 1), &nodes);
1663 ASSERT_EQ(3u, nodes.size()); 1618 ASSERT_EQ(3u, nodes.size());
1664 EXPECT_EQ("node=0,1 parent=null view=null", nodes[0].ToString()); 1619 EXPECT_EQ("node=0,1 parent=null view=null", nodes[0].ToString());
1665 EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[1].ToString()); 1620 EXPECT_EQ("node=1,1 parent=0,1 view=null", nodes[1].ToString());
1666 EXPECT_EQ("node=1,2 parent=0,1 view=null", nodes[2].ToString()); 1621 EXPECT_EQ("node=1,2 parent=0,1 view=null", nodes[2].ToString());
1667 } 1622 }
1668 } 1623 }
1669 1624
1670 // Verify SetView fails for nodes that are not descendants of the roots. 1625 // Verify SetView fails for nodes that are not descendants of the roots.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1705 CreateNodeId(0, 1), 1660 CreateNodeId(0, 1),
1706 CreateNodeId(client_.id(), 1), 1661 CreateNodeId(client_.id(), 1),
1707 1)); 1662 1));
1708 ASSERT_TRUE(AddNode(view_manager_.get(), 1663 ASSERT_TRUE(AddNode(view_manager_.get(),
1709 CreateNodeId(0, 1), 1664 CreateNodeId(0, 1),
1710 CreateNodeId(client_.id(), 2), 1665 CreateNodeId(client_.id(), 2),
1711 2)); 1666 2));
1712 1667
1713 ASSERT_NO_FATAL_FAILURE(EstablishBackgroundConnectionWithRoot1()); 1668 ASSERT_NO_FATAL_FAILURE(EstablishBackgroundConnectionWithRoot1());
1714 1669
1715 AllocationScope scope;
1716 std::vector<TestNode> nodes; 1670 std::vector<TestNode> nodes;
1717 1671
1718 // Should get nothing for the root. 1672 // Should get nothing for the root.
1719 background_connection_->GetNodeTree(CreateNodeId(0, 1), &nodes); 1673 background_connection_->GetNodeTree(CreateNodeId(0, 1), &nodes);
1720 ASSERT_TRUE(nodes.empty()); 1674 ASSERT_TRUE(nodes.empty());
1721 1675
1722 // Should get nothing for node 2. 1676 // Should get nothing for node 2.
1723 background_connection_->GetNodeTree(CreateNodeId(1, 2), &nodes); 1677 background_connection_->GetNodeTree(CreateNodeId(1, 2), &nodes);
1724 ASSERT_TRUE(nodes.empty()); 1678 ASSERT_TRUE(nodes.empty());
1725 1679
(...skipping 15 matching lines...) Expand all
1741 ASSERT_EQ(1u, changes.size()); 1695 ASSERT_EQ(1u, changes.size());
1742 EXPECT_EQ("OnConnectionEstablished", changes[0]); 1696 EXPECT_EQ("OnConnectionEstablished", changes[0]);
1743 } 1697 }
1744 1698
1745 // TODO(sky): add coverage of test that destroys connections and ensures other 1699 // TODO(sky): add coverage of test that destroys connections and ensures other
1746 // connections get deletion notification (or advanced server id). 1700 // connections get deletion notification (or advanced server id).
1747 1701
1748 } // namespace service 1702 } // namespace service
1749 } // namespace view_manager 1703 } // namespace view_manager
1750 } // namespace mojo 1704 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/services/view_manager/view_manager_connection.cc ('k') | mojo/shell/app_child_process.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698