OLD | NEW |
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 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
589 } | 589 } |
590 | 590 |
591 // Verifies when Embed() is invoked any child nodes are removed. | 591 // Verifies when Embed() is invoked any child nodes are removed. |
592 TEST_F(ViewManagerTest, NodesRemovedWhenEmbedding) { | 592 TEST_F(ViewManagerTest, NodesRemovedWhenEmbedding) { |
593 // Two nodes 1 and 2. 2 is parented to 1. | 593 // Two nodes 1 and 2. 2 is parented to 1. |
594 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); | 594 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); |
595 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); | 595 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); |
596 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2))); | 596 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2))); |
597 | 597 |
598 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); | 598 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); |
| 599 EXPECT_EQ("[node=1,1 parent=null view=null]", |
| 600 ChangeNodeDescription(connection2_->changes())); |
599 | 601 |
600 // Because |connection_| is the root, the embed call doesn't remove. | 602 // Embed() removed node 2. |
601 { | 603 { |
602 std::vector<TestNode> nodes; | 604 std::vector<TestNode> nodes; |
603 connection_->GetNodeTree(BuildNodeId(1, 2), &nodes); | 605 connection_->GetNodeTree(BuildNodeId(1, 2), &nodes); |
604 ASSERT_EQ(1u, nodes.size()); | 606 ASSERT_EQ(1u, nodes.size()); |
605 EXPECT_EQ("node=1,2 parent=1,1 view=null", nodes[0].ToString()); | 607 EXPECT_EQ("node=1,2 parent=null view=null", nodes[0].ToString()); |
606 } | 608 } |
607 | 609 |
608 // But |connection2_| should not see node 2. | 610 // |connection2_| should not see node 2. |
609 { | 611 { |
610 std::vector<TestNode> nodes; | 612 std::vector<TestNode> nodes; |
611 connection2_->GetNodeTree(BuildNodeId(1, 1), &nodes); | 613 connection2_->GetNodeTree(BuildNodeId(1, 1), &nodes); |
612 ASSERT_EQ(1u, nodes.size()); | 614 ASSERT_EQ(1u, nodes.size()); |
613 EXPECT_EQ("node=1,1 parent=null view=null", nodes[0].ToString()); | 615 EXPECT_EQ("node=1,1 parent=null view=null", nodes[0].ToString()); |
614 } | 616 } |
615 { | 617 { |
616 std::vector<TestNode> nodes; | 618 std::vector<TestNode> nodes; |
617 connection2_->GetNodeTree(BuildNodeId(1, 2), &nodes); | 619 connection2_->GetNodeTree(BuildNodeId(1, 2), &nodes); |
618 EXPECT_TRUE(nodes.empty()); | 620 EXPECT_TRUE(nodes.empty()); |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
882 ASSERT_EQ(1u, changes.size()); | 884 ASSERT_EQ(1u, changes.size()); |
883 EXPECT_EQ("HierarchyChanged node=2,2 new_parent=1,1 old_parent=null", | 885 EXPECT_EQ("HierarchyChanged node=2,2 new_parent=1,1 old_parent=null", |
884 changes[0]); | 886 changes[0]); |
885 EXPECT_EQ("[node=2,2 parent=1,1 view=null]," | 887 EXPECT_EQ("[node=2,2 parent=1,1 view=null]," |
886 "[node=2,21 parent=2,2 view=null]", | 888 "[node=2,21 parent=2,2 view=null]", |
887 ChangeNodeDescription(connection_->changes())); | 889 ChangeNodeDescription(connection_->changes())); |
888 } | 890 } |
889 } | 891 } |
890 | 892 |
891 TEST_F(ViewManagerTest, ReorderNode) { | 893 TEST_F(ViewManagerTest, ReorderNode) { |
892 Id node1_id = BuildNodeId(1, 1); | 894 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); |
893 Id node2_id = BuildNodeId(1, 2); | 895 |
894 Id node3_id = BuildNodeId(1, 3); | 896 Id node1_id = BuildNodeId(2, 1); |
| 897 Id node2_id = BuildNodeId(2, 2); |
| 898 Id node3_id = BuildNodeId(2, 3); |
895 Id node4_id = BuildNodeId(1, 4); // Peer to 1,1 | 899 Id node4_id = BuildNodeId(1, 4); // Peer to 1,1 |
896 Id node5_id = BuildNodeId(1, 5); // Peer to 1,1 | 900 Id node5_id = BuildNodeId(1, 5); // Peer to 1,1 |
897 Id node6_id = BuildNodeId(1, 6); // Child of 1,2. | 901 Id node6_id = BuildNodeId(2, 6); // Child of 1,2. |
898 Id node7_id = BuildNodeId(1, 7); // Unparented. | 902 Id node7_id = BuildNodeId(2, 7); // Unparented. |
899 Id node8_id = BuildNodeId(1, 8); // Unparented. | 903 Id node8_id = BuildNodeId(2, 8); // Unparented. |
900 ASSERT_TRUE(connection_->CreateNode(node1_id)); | 904 ASSERT_TRUE(connection2_->CreateNode(node1_id)); |
901 ASSERT_TRUE(connection_->CreateNode(node2_id)); | 905 ASSERT_TRUE(connection2_->CreateNode(node2_id)); |
902 ASSERT_TRUE(connection_->CreateNode(node3_id)); | 906 ASSERT_TRUE(connection2_->CreateNode(node3_id)); |
903 ASSERT_TRUE(connection_->CreateNode(node4_id)); | 907 ASSERT_TRUE(connection_->CreateNode(node4_id)); |
904 ASSERT_TRUE(connection_->CreateNode(node5_id)); | 908 ASSERT_TRUE(connection_->CreateNode(node5_id)); |
905 ASSERT_TRUE(connection_->CreateNode(node6_id)); | 909 ASSERT_TRUE(connection2_->CreateNode(node6_id)); |
906 ASSERT_TRUE(connection_->CreateNode(node7_id)); | 910 ASSERT_TRUE(connection2_->CreateNode(node7_id)); |
907 ASSERT_TRUE(connection_->CreateNode(node8_id)); | 911 ASSERT_TRUE(connection2_->CreateNode(node8_id)); |
908 ASSERT_TRUE(connection_->AddNode(node1_id, node2_id)); | 912 ASSERT_TRUE(connection2_->AddNode(node1_id, node2_id)); |
909 ASSERT_TRUE(connection_->AddNode(node2_id, node6_id)); | 913 ASSERT_TRUE(connection2_->AddNode(node2_id, node6_id)); |
910 ASSERT_TRUE(connection_->AddNode(node1_id, node3_id)); | 914 ASSERT_TRUE(connection2_->AddNode(node1_id, node3_id)); |
911 ASSERT_TRUE(connection_->AddNode( | 915 ASSERT_TRUE(connection_->AddNode( |
912 NodeIdToTransportId(RootNodeId()), node4_id)); | 916 NodeIdToTransportId(RootNodeId()), node4_id)); |
913 ASSERT_TRUE(connection_->AddNode( | 917 ASSERT_TRUE(connection_->AddNode( |
914 NodeIdToTransportId(RootNodeId()), node5_id)); | 918 NodeIdToTransportId(RootNodeId()), node5_id)); |
915 | 919 |
916 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); | 920 ASSERT_TRUE(connection_->AddNode( |
| 921 NodeIdToTransportId(RootNodeId()), node1_id)); |
917 | 922 |
918 { | 923 { |
919 connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_ABOVE); | 924 ASSERT_TRUE( |
| 925 connection2_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_ABOVE)); |
920 | 926 |
921 connection2_->DoRunLoopUntilChangesCount(1); | 927 connection_->DoRunLoopUntilChangesCount(1); |
922 const Changes changes(ChangesToDescription1(connection2_->changes())); | 928 const Changes changes(ChangesToDescription1(connection_->changes())); |
923 ASSERT_EQ(1u, changes.size()); | 929 ASSERT_EQ(1u, changes.size()); |
924 EXPECT_EQ("Reordered node=1,2 relative=1,3 direction=above", | 930 EXPECT_EQ("Reordered node=2,2 relative=2,3 direction=above", |
925 changes[0]); | 931 changes[0]); |
926 } | 932 } |
927 | 933 |
928 { | 934 { |
929 connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_BELOW); | 935 ASSERT_TRUE(connection2_->ReorderNode( |
| 936 node2_id, node3_id, ORDER_DIRECTION_BELOW)); |
930 | 937 |
931 connection2_->DoRunLoopUntilChangesCount(1); | 938 connection_->DoRunLoopUntilChangesCount(1); |
932 const Changes changes(ChangesToDescription1(connection2_->changes())); | 939 const Changes changes(ChangesToDescription1(connection_->changes())); |
933 ASSERT_EQ(1u, changes.size()); | 940 ASSERT_EQ(1u, changes.size()); |
934 EXPECT_EQ("Reordered node=1,2 relative=1,3 direction=below", | 941 EXPECT_EQ("Reordered node=2,2 relative=2,3 direction=below", |
935 changes[0]); | 942 changes[0]); |
936 } | 943 } |
937 | 944 |
938 // node2 is already below node3. | 945 // node2 is already below node3. |
939 EXPECT_FALSE( | 946 EXPECT_FALSE( |
940 connection_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_BELOW)); | 947 connection2_->ReorderNode(node2_id, node3_id, ORDER_DIRECTION_BELOW)); |
941 | 948 |
942 // node4 & 5 are unknown to connection2_. | 949 // node4 & 5 are unknown to connection2_. |
943 EXPECT_FALSE(connection2_->ReorderNode( | 950 EXPECT_FALSE(connection2_->ReorderNode( |
944 node4_id, node5_id, ORDER_DIRECTION_ABOVE)); | 951 node4_id, node5_id, ORDER_DIRECTION_ABOVE)); |
945 | 952 |
946 // node6 & node3 have different parents. | 953 // node6 & node3 have different parents. |
947 EXPECT_FALSE( | 954 EXPECT_FALSE( |
948 connection_->ReorderNode(node3_id, node6_id, ORDER_DIRECTION_ABOVE)); | 955 connection_->ReorderNode(node3_id, node6_id, ORDER_DIRECTION_ABOVE)); |
949 | 956 |
950 // Non-existent node-ids | 957 // Non-existent node-ids |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1033 const Changes changes(ChangesToDescription1(connection_->changes())); | 1040 const Changes changes(ChangesToDescription1(connection_->changes())); |
1034 EXPECT_EQ("HierarchyChanged node=2,2 new_parent=1,1 old_parent=null", | 1041 EXPECT_EQ("HierarchyChanged node=2,2 new_parent=1,1 old_parent=null", |
1035 changes[0]); | 1042 changes[0]); |
1036 EXPECT_EQ("[node=2,2 parent=1,1 view=null]", | 1043 EXPECT_EQ("[node=2,2 parent=1,1 view=null]", |
1037 ChangeNodeDescription(connection_->changes())); | 1044 ChangeNodeDescription(connection_->changes())); |
1038 } | 1045 } |
1039 } | 1046 } |
1040 | 1047 |
1041 // Assertions around setting a view. | 1048 // Assertions around setting a view. |
1042 TEST_F(ViewManagerTest, SetView) { | 1049 TEST_F(ViewManagerTest, SetView) { |
| 1050 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); |
| 1051 |
1043 // Create nodes 1, 2 and 3 and the view 11. Nodes 2 and 3 are parented to 1. | 1052 // Create nodes 1, 2 and 3 and the view 11. Nodes 2 and 3 are parented to 1. |
1044 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 1))); | 1053 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 2))); |
1045 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 2))); | 1054 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 3))); |
1046 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 3))); | 1055 ASSERT_TRUE(connection2_->CreateView(BuildViewId(2, 11))); |
1047 ASSERT_TRUE(connection_->CreateView(BuildViewId(1, 11))); | 1056 ASSERT_TRUE(connection2_->AddNode(BuildNodeId(1, 1), BuildNodeId(2, 2))); |
1048 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 2))); | 1057 ASSERT_TRUE(connection2_->AddNode(BuildNodeId(1, 1), BuildNodeId(2, 3))); |
1049 ASSERT_TRUE(connection_->AddNode(BuildNodeId(1, 1), BuildNodeId(1, 3))); | |
1050 | 1058 |
1051 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(false)); | 1059 // Do this to clear out the changes conncection_ has seen and ensure it's up |
| 1060 // to date. |
| 1061 connection_->CopyChangesFromTracker(); |
| 1062 ASSERT_TRUE(connection_->CreateNode(BuildNodeId(1, 100))); |
1052 | 1063 |
1053 // Set view 11 on node 1. | 1064 // Set view 11 on node 1. |
1054 { | 1065 { |
1055 ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 1), | 1066 ASSERT_TRUE(connection2_->SetView(BuildNodeId(1, 1), BuildViewId(2, 11))); |
1056 BuildViewId(1, 11))); | |
1057 | 1067 |
1058 connection2_->DoRunLoopUntilChangesCount(1); | 1068 connection_->DoRunLoopUntilChangesCount(1); |
1059 const Changes changes(ChangesToDescription1(connection2_->changes())); | 1069 const Changes changes(ChangesToDescription1(connection_->changes())); |
1060 ASSERT_EQ(1u, changes.size()); | 1070 ASSERT_EQ(1u, changes.size()); |
1061 EXPECT_EQ("ViewReplaced node=1,1 new_view=1,11 old_view=null", | 1071 EXPECT_EQ("ViewReplaced node=1,1 new_view=2,11 old_view=null", |
1062 changes[0]); | 1072 changes[0]); |
1063 } | 1073 } |
1064 | 1074 |
1065 // Set view 11 on node 2. | 1075 // Set view 11 on node 2. |
1066 { | 1076 { |
1067 ASSERT_TRUE(connection_->SetView(BuildNodeId(1, 2), BuildViewId(1, 11))); | 1077 ASSERT_TRUE(connection2_->SetView(BuildNodeId(2, 2), BuildViewId(2, 11))); |
1068 | 1078 |
1069 connection2_->DoRunLoopUntilChangesCount(2); | 1079 connection_->DoRunLoopUntilChangesCount(2); |
1070 const Changes changes(ChangesToDescription1(connection2_->changes())); | 1080 const Changes changes(ChangesToDescription1(connection_->changes())); |
1071 ASSERT_EQ(2u, changes.size()); | 1081 ASSERT_EQ(2u, changes.size()); |
1072 EXPECT_EQ("ViewReplaced node=1,1 new_view=null old_view=1,11", | 1082 EXPECT_EQ("ViewReplaced node=1,1 new_view=null old_view=2,11", |
1073 changes[0]); | 1083 changes[0]); |
1074 EXPECT_EQ("ViewReplaced node=1,2 new_view=1,11 old_view=null", | 1084 EXPECT_EQ("ViewReplaced node=2,2 new_view=2,11 old_view=null", |
1075 changes[1]); | 1085 changes[1]); |
1076 } | 1086 } |
1077 } | 1087 } |
1078 | 1088 |
1079 // Verifies deleting a node with a view sends correct notifications. | 1089 // Verifies deleting a node with a view sends correct notifications. |
1080 TEST_F(ViewManagerTest, DeleteNodeWithView) { | 1090 TEST_F(ViewManagerTest, DeleteNodeWithView) { |
1081 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); | 1091 ASSERT_NO_FATAL_FAILURE(EstablishSecondConnection(true)); |
1082 | 1092 |
1083 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 2))); | 1093 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 2))); |
1084 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 3))); | 1094 ASSERT_TRUE(connection2_->CreateNode(BuildNodeId(2, 3))); |
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1452 // that SetBounsdNodes/AddNode and the like don't result in messages to the | 1462 // that SetBounsdNodes/AddNode and the like don't result in messages to the |
1453 // originating connection. | 1463 // originating connection. |
1454 | 1464 |
1455 // TODO(beng): Add tests for focus: | 1465 // TODO(beng): Add tests for focus: |
1456 // - focus between two nodes known to a connection | 1466 // - focus between two nodes known to a connection |
1457 // - focus between nodes unknown to one of the connections. | 1467 // - focus between nodes unknown to one of the connections. |
1458 // - focus between nodes unknown to either connection. | 1468 // - focus between nodes unknown to either connection. |
1459 | 1469 |
1460 } // namespace service | 1470 } // namespace service |
1461 } // namespace mojo | 1471 } // namespace mojo |
OLD | NEW |