| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 // Unit tests for the SyncApi. Note that a lot of the underlying | 5 // Unit tests for the SyncApi. Note that a lot of the underlying |
| 6 // functionality is provided by the Syncable layer, which has its own | 6 // functionality is provided by the Syncable layer, which has its own |
| 7 // unit tests. We'll test SyncApi specific things in this harness. | 7 // unit tests. We'll test SyncApi specific things in this harness. |
| 8 | 8 |
| 9 #include <cstddef> | 9 #include <cstddef> |
| 10 #include <map> | 10 #include <map> |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 using sessions::SyncSessionSnapshot; | 90 using sessions::SyncSessionSnapshot; |
| 91 using syncable::GET_BY_HANDLE; | 91 using syncable::GET_BY_HANDLE; |
| 92 using syncable::IS_DEL; | 92 using syncable::IS_DEL; |
| 93 using syncable::IS_UNSYNCED; | 93 using syncable::IS_UNSYNCED; |
| 94 using syncable::NON_UNIQUE_NAME; | 94 using syncable::NON_UNIQUE_NAME; |
| 95 using syncable::SPECIFICS; | 95 using syncable::SPECIFICS; |
| 96 using syncable::kEncryptedString; | 96 using syncable::kEncryptedString; |
| 97 | 97 |
| 98 namespace { | 98 namespace { |
| 99 | 99 |
| 100 void ExpectInt64Value(int64 expected_value, | |
| 101 const base::DictionaryValue& value, | |
| 102 const std::string& key) { | |
| 103 std::string int64_str; | |
| 104 EXPECT_TRUE(value.GetString(key, &int64_str)); | |
| 105 int64 val = 0; | |
| 106 EXPECT_TRUE(base::StringToInt64(int64_str, &val)); | |
| 107 EXPECT_EQ(expected_value, val); | |
| 108 } | |
| 109 | |
| 110 void ExpectTimeValue(const base::Time& expected_value, | |
| 111 const base::DictionaryValue& value, | |
| 112 const std::string& key) { | |
| 113 std::string time_str; | |
| 114 EXPECT_TRUE(value.GetString(key, &time_str)); | |
| 115 EXPECT_EQ(GetTimeDebugString(expected_value), time_str); | |
| 116 } | |
| 117 | |
| 118 // Makes a non-folder child of the root node. Returns the id of the | 100 // Makes a non-folder child of the root node. Returns the id of the |
| 119 // newly-created node. | 101 // newly-created node. |
| 120 int64 MakeNode(UserShare* share, | 102 int64 MakeNode(UserShare* share, |
| 121 ModelType model_type, | 103 ModelType model_type, |
| 122 const std::string& client_tag) { | 104 const std::string& client_tag) { |
| 123 WriteTransaction trans(FROM_HERE, share); | 105 WriteTransaction trans(FROM_HERE, share); |
| 124 ReadNode root_node(&trans); | 106 ReadNode root_node(&trans); |
| 125 root_node.InitByRootLookup(); | 107 root_node.InitByRootLookup(); |
| 126 WriteNode node(&trans); | 108 WriteNode node(&trans); |
| 127 WriteNode::InitUniqueByCreationResult result = | 109 WriteNode::InitUniqueByCreationResult result = |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 519 entity_specifics.mutable_bookmark()->set_url("http://www.google.com"); | 501 entity_specifics.mutable_bookmark()->set_url("http://www.google.com"); |
| 520 entity_specifics.mutable_unknown_fields()->AddFixed32(5, 100); | 502 entity_specifics.mutable_unknown_fields()->AddFixed32(5, 100); |
| 521 node.SetEntitySpecifics(entity_specifics); | 503 node.SetEntitySpecifics(entity_specifics); |
| 522 EXPECT_FALSE(node.GetEntitySpecifics().unknown_fields().empty()); | 504 EXPECT_FALSE(node.GetEntitySpecifics().unknown_fields().empty()); |
| 523 | 505 |
| 524 entity_specifics.mutable_unknown_fields()->Clear(); | 506 entity_specifics.mutable_unknown_fields()->Clear(); |
| 525 node.SetEntitySpecifics(entity_specifics); | 507 node.SetEntitySpecifics(entity_specifics); |
| 526 EXPECT_FALSE(node.GetEntitySpecifics().unknown_fields().empty()); | 508 EXPECT_FALSE(node.GetEntitySpecifics().unknown_fields().empty()); |
| 527 } | 509 } |
| 528 | 510 |
| 529 namespace { | |
| 530 | |
| 531 void CheckNodeValue(const BaseNode& node, const base::DictionaryValue& value, | |
| 532 bool is_detailed) { | |
| 533 size_t expected_field_count = 4; | |
| 534 | |
| 535 ExpectInt64Value(node.GetId(), value, "id"); | |
| 536 { | |
| 537 bool is_folder = false; | |
| 538 EXPECT_TRUE(value.GetBoolean("isFolder", &is_folder)); | |
| 539 EXPECT_EQ(node.GetIsFolder(), is_folder); | |
| 540 } | |
| 541 ExpectDictStringValue(node.GetTitle(), value, "title"); | |
| 542 | |
| 543 ModelType expected_model_type = node.GetModelType(); | |
| 544 std::string type_str; | |
| 545 EXPECT_TRUE(value.GetString("type", &type_str)); | |
| 546 if (expected_model_type >= FIRST_REAL_MODEL_TYPE) { | |
| 547 ModelType model_type = ModelTypeFromString(type_str); | |
| 548 EXPECT_EQ(expected_model_type, model_type); | |
| 549 } else if (expected_model_type == TOP_LEVEL_FOLDER) { | |
| 550 EXPECT_EQ("Top-level folder", type_str); | |
| 551 } else if (expected_model_type == UNSPECIFIED) { | |
| 552 EXPECT_EQ("Unspecified", type_str); | |
| 553 } else { | |
| 554 ADD_FAILURE(); | |
| 555 } | |
| 556 | |
| 557 if (is_detailed) { | |
| 558 { | |
| 559 scoped_ptr<base::DictionaryValue> expected_entry( | |
| 560 node.GetEntry()->ToValue(NULL)); | |
| 561 const base::Value* entry = NULL; | |
| 562 EXPECT_TRUE(value.Get("entry", &entry)); | |
| 563 EXPECT_TRUE(base::Value::Equals(entry, expected_entry.get())); | |
| 564 } | |
| 565 | |
| 566 ExpectInt64Value(node.GetParentId(), value, "parentId"); | |
| 567 ExpectTimeValue(node.GetModificationTime(), value, "modificationTime"); | |
| 568 ExpectInt64Value(node.GetExternalId(), value, "externalId"); | |
| 569 expected_field_count += 4; | |
| 570 | |
| 571 if (value.HasKey("predecessorId")) { | |
| 572 ExpectInt64Value(node.GetPredecessorId(), value, "predecessorId"); | |
| 573 expected_field_count++; | |
| 574 } | |
| 575 if (value.HasKey("successorId")) { | |
| 576 ExpectInt64Value(node.GetSuccessorId(), value, "successorId"); | |
| 577 expected_field_count++; | |
| 578 } | |
| 579 if (value.HasKey("firstChildId")) { | |
| 580 ExpectInt64Value(node.GetFirstChildId(), value, "firstChildId"); | |
| 581 expected_field_count++; | |
| 582 } | |
| 583 } | |
| 584 | |
| 585 EXPECT_EQ(expected_field_count, value.size()); | |
| 586 } | |
| 587 | |
| 588 } // namespace | |
| 589 | |
| 590 TEST_F(SyncApiTest, BaseNodeGetSummaryAsValue) { | |
| 591 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | |
| 592 ReadNode node(&trans); | |
| 593 node.InitByRootLookup(); | |
| 594 scoped_ptr<base::DictionaryValue> details(node.GetSummaryAsValue()); | |
| 595 if (details) { | |
| 596 CheckNodeValue(node, *details, false); | |
| 597 } else { | |
| 598 ADD_FAILURE(); | |
| 599 } | |
| 600 } | |
| 601 | |
| 602 TEST_F(SyncApiTest, BaseNodeGetDetailsAsValue) { | |
| 603 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | |
| 604 ReadNode node(&trans); | |
| 605 node.InitByRootLookup(); | |
| 606 scoped_ptr<base::DictionaryValue> details(node.GetDetailsAsValue()); | |
| 607 if (details) { | |
| 608 CheckNodeValue(node, *details, true); | |
| 609 } else { | |
| 610 ADD_FAILURE(); | |
| 611 } | |
| 612 } | |
| 613 | |
| 614 TEST_F(SyncApiTest, EmptyTags) { | 511 TEST_F(SyncApiTest, EmptyTags) { |
| 615 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 512 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
| 616 ReadNode root_node(&trans); | 513 ReadNode root_node(&trans); |
| 617 root_node.InitByRootLookup(); | 514 root_node.InitByRootLookup(); |
| 618 WriteNode node(&trans); | 515 WriteNode node(&trans); |
| 619 std::string empty_tag; | 516 std::string empty_tag; |
| 620 WriteNode::InitUniqueByCreationResult result = | 517 WriteNode::InitUniqueByCreationResult result = |
| 621 node.InitUniqueByCreation(TYPED_URLS, root_node, empty_tag); | 518 node.InitUniqueByCreation(TYPED_URLS, root_node, empty_tag); |
| 622 EXPECT_NE(WriteNode::INIT_SUCCESS, result); | 519 EXPECT_NE(WriteNode::INIT_SUCCESS, result); |
| 623 EXPECT_EQ(BaseNode::INIT_FAILED_PRECONDITION, | 520 EXPECT_EQ(BaseNode::INIT_FAILED_PRECONDITION, |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 870 (*out)[DEVICE_INFO] = GROUP_PASSIVE; | 767 (*out)[DEVICE_INFO] = GROUP_PASSIVE; |
| 871 (*out)[EXPERIMENTS] = GROUP_PASSIVE; | 768 (*out)[EXPERIMENTS] = GROUP_PASSIVE; |
| 872 (*out)[BOOKMARKS] = GROUP_PASSIVE; | 769 (*out)[BOOKMARKS] = GROUP_PASSIVE; |
| 873 (*out)[THEMES] = GROUP_PASSIVE; | 770 (*out)[THEMES] = GROUP_PASSIVE; |
| 874 (*out)[SESSIONS] = GROUP_PASSIVE; | 771 (*out)[SESSIONS] = GROUP_PASSIVE; |
| 875 (*out)[PASSWORDS] = GROUP_PASSIVE; | 772 (*out)[PASSWORDS] = GROUP_PASSIVE; |
| 876 (*out)[PREFERENCES] = GROUP_PASSIVE; | 773 (*out)[PREFERENCES] = GROUP_PASSIVE; |
| 877 (*out)[PRIORITY_PREFERENCES] = GROUP_PASSIVE; | 774 (*out)[PRIORITY_PREFERENCES] = GROUP_PASSIVE; |
| 878 } | 775 } |
| 879 | 776 |
| 777 ModelTypeSet GetEnabledTypes() { |
| 778 ModelSafeRoutingInfo routing_info; |
| 779 GetModelSafeRoutingInfo(&routing_info); |
| 780 return GetRoutingInfoTypes(routing_info); |
| 781 } |
| 782 |
| 880 virtual void OnChangesApplied( | 783 virtual void OnChangesApplied( |
| 881 ModelType model_type, | 784 ModelType model_type, |
| 882 int64 model_version, | 785 int64 model_version, |
| 883 const BaseTransaction* trans, | 786 const BaseTransaction* trans, |
| 884 const ImmutableChangeRecordList& changes) OVERRIDE {} | 787 const ImmutableChangeRecordList& changes) OVERRIDE {} |
| 885 | 788 |
| 886 virtual void OnChangesComplete(ModelType model_type) OVERRIDE {} | 789 virtual void OnChangesComplete(ModelType model_type) OVERRIDE {} |
| 887 | 790 |
| 888 // Helper methods. | 791 // Helper methods. |
| 889 bool SetUpEncryption(NigoriStatus nigori_status, | 792 bool SetUpEncryption(NigoriStatus nigori_status, |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1032 StrictMock<SyncManagerObserverMock> manager_observer_; | 935 StrictMock<SyncManagerObserverMock> manager_observer_; |
| 1033 StrictMock<SyncEncryptionHandlerObserverMock> encryption_observer_; | 936 StrictMock<SyncEncryptionHandlerObserverMock> encryption_observer_; |
| 1034 InternalComponentsFactory::Switches switches_; | 937 InternalComponentsFactory::Switches switches_; |
| 1035 }; | 938 }; |
| 1036 | 939 |
| 1037 TEST_F(SyncManagerTest, ProcessJsMessage) { | 940 TEST_F(SyncManagerTest, ProcessJsMessage) { |
| 1038 const JsArgList kNoArgs; | 941 const JsArgList kNoArgs; |
| 1039 | 942 |
| 1040 StrictMock<MockJsReplyHandler> reply_handler; | 943 StrictMock<MockJsReplyHandler> reply_handler; |
| 1041 | 944 |
| 1042 base::ListValue disabled_args; | |
| 1043 disabled_args.Append(new base::StringValue("TRANSIENT_INVALIDATION_ERROR")); | |
| 1044 | |
| 1045 EXPECT_CALL(reply_handler, | 945 EXPECT_CALL(reply_handler, |
| 1046 HandleJsReply("getNotificationState", | 946 HandleJsReply("getNotificationInfo", _)); |
| 1047 HasArgsAsList(disabled_args))); | |
| 1048 | 947 |
| 1049 // This message should be dropped. | 948 // This message should be dropped. |
| 1050 SendJsMessage("unknownMessage", kNoArgs, reply_handler.AsWeakHandle()); | 949 SendJsMessage("unknownMessage", kNoArgs, reply_handler.AsWeakHandle()); |
| 1051 | 950 |
| 1052 SendJsMessage("getNotificationState", kNoArgs, reply_handler.AsWeakHandle()); | 951 SendJsMessage("getNotificationInfo", kNoArgs, reply_handler.AsWeakHandle()); |
| 1053 } | |
| 1054 | |
| 1055 TEST_F(SyncManagerTest, ProcessJsMessageGetRootNodeDetails) { | |
| 1056 const JsArgList kNoArgs; | |
| 1057 | |
| 1058 StrictMock<MockJsReplyHandler> reply_handler; | |
| 1059 | |
| 1060 JsArgList return_args; | |
| 1061 | |
| 1062 EXPECT_CALL(reply_handler, | |
| 1063 HandleJsReply("getRootNodeDetails", _)) | |
| 1064 .WillOnce(SaveArg<1>(&return_args)); | |
| 1065 | |
| 1066 SendJsMessage("getRootNodeDetails", kNoArgs, reply_handler.AsWeakHandle()); | |
| 1067 | |
| 1068 EXPECT_EQ(1u, return_args.Get().GetSize()); | |
| 1069 const base::DictionaryValue* node_info = NULL; | |
| 1070 EXPECT_TRUE(return_args.Get().GetDictionary(0, &node_info)); | |
| 1071 if (node_info) { | |
| 1072 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | |
| 1073 ReadNode node(&trans); | |
| 1074 node.InitByRootLookup(); | |
| 1075 CheckNodeValue(node, *node_info, true); | |
| 1076 } else { | |
| 1077 ADD_FAILURE(); | |
| 1078 } | |
| 1079 } | |
| 1080 | |
| 1081 void CheckGetNodesByIdReturnArgs(SyncManager* sync_manager, | |
| 1082 const JsArgList& return_args, | |
| 1083 int64 id, | |
| 1084 bool is_detailed) { | |
| 1085 EXPECT_EQ(1u, return_args.Get().GetSize()); | |
| 1086 const base::ListValue* nodes = NULL; | |
| 1087 ASSERT_TRUE(return_args.Get().GetList(0, &nodes)); | |
| 1088 ASSERT_TRUE(nodes); | |
| 1089 EXPECT_EQ(1u, nodes->GetSize()); | |
| 1090 const base::DictionaryValue* node_info = NULL; | |
| 1091 EXPECT_TRUE(nodes->GetDictionary(0, &node_info)); | |
| 1092 ASSERT_TRUE(node_info); | |
| 1093 ReadTransaction trans(FROM_HERE, sync_manager->GetUserShare()); | |
| 1094 ReadNode node(&trans); | |
| 1095 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(id)); | |
| 1096 CheckNodeValue(node, *node_info, is_detailed); | |
| 1097 } | |
| 1098 | |
| 1099 class SyncManagerGetNodesByIdTest : public SyncManagerTest { | |
| 1100 protected: | |
| 1101 virtual ~SyncManagerGetNodesByIdTest() {} | |
| 1102 | |
| 1103 void RunGetNodesByIdTest(const char* message_name, bool is_detailed) { | |
| 1104 int64 root_id = kInvalidId; | |
| 1105 { | |
| 1106 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | |
| 1107 ReadNode root_node(&trans); | |
| 1108 root_node.InitByRootLookup(); | |
| 1109 root_id = root_node.GetId(); | |
| 1110 } | |
| 1111 | |
| 1112 int64 child_id = | |
| 1113 MakeNode(sync_manager_.GetUserShare(), BOOKMARKS, "testtag"); | |
| 1114 | |
| 1115 StrictMock<MockJsReplyHandler> reply_handler; | |
| 1116 | |
| 1117 JsArgList return_args; | |
| 1118 | |
| 1119 const int64 ids[] = { root_id, child_id }; | |
| 1120 | |
| 1121 EXPECT_CALL(reply_handler, | |
| 1122 HandleJsReply(message_name, _)) | |
| 1123 .Times(arraysize(ids)).WillRepeatedly(SaveArg<1>(&return_args)); | |
| 1124 | |
| 1125 for (size_t i = 0; i < arraysize(ids); ++i) { | |
| 1126 base::ListValue args; | |
| 1127 base::ListValue* id_values = new base::ListValue(); | |
| 1128 args.Append(id_values); | |
| 1129 id_values->Append(new base::StringValue(base::Int64ToString(ids[i]))); | |
| 1130 SendJsMessage(message_name, | |
| 1131 JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 1132 | |
| 1133 CheckGetNodesByIdReturnArgs(&sync_manager_, return_args, | |
| 1134 ids[i], is_detailed); | |
| 1135 } | |
| 1136 } | |
| 1137 | |
| 1138 void RunGetNodesByIdFailureTest(const char* message_name) { | |
| 1139 StrictMock<MockJsReplyHandler> reply_handler; | |
| 1140 | |
| 1141 base::ListValue empty_list_args; | |
| 1142 empty_list_args.Append(new base::ListValue()); | |
| 1143 | |
| 1144 EXPECT_CALL(reply_handler, | |
| 1145 HandleJsReply(message_name, | |
| 1146 HasArgsAsList(empty_list_args))) | |
| 1147 .Times(6); | |
| 1148 | |
| 1149 { | |
| 1150 base::ListValue args; | |
| 1151 SendJsMessage(message_name, | |
| 1152 JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 1153 } | |
| 1154 | |
| 1155 { | |
| 1156 base::ListValue args; | |
| 1157 args.Append(new base::ListValue()); | |
| 1158 SendJsMessage(message_name, | |
| 1159 JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 1160 } | |
| 1161 | |
| 1162 { | |
| 1163 base::ListValue args; | |
| 1164 base::ListValue* ids = new base::ListValue(); | |
| 1165 args.Append(ids); | |
| 1166 ids->Append(new base::StringValue(std::string())); | |
| 1167 SendJsMessage( | |
| 1168 message_name, JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 1169 } | |
| 1170 | |
| 1171 { | |
| 1172 base::ListValue args; | |
| 1173 base::ListValue* ids = new base::ListValue(); | |
| 1174 args.Append(ids); | |
| 1175 ids->Append(new base::StringValue("nonsense")); | |
| 1176 SendJsMessage(message_name, | |
| 1177 JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 1178 } | |
| 1179 | |
| 1180 { | |
| 1181 base::ListValue args; | |
| 1182 base::ListValue* ids = new base::ListValue(); | |
| 1183 args.Append(ids); | |
| 1184 ids->Append(new base::StringValue("0")); | |
| 1185 SendJsMessage(message_name, | |
| 1186 JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 1187 } | |
| 1188 | |
| 1189 { | |
| 1190 base::ListValue args; | |
| 1191 base::ListValue* ids = new base::ListValue(); | |
| 1192 args.Append(ids); | |
| 1193 ids->Append(new base::StringValue("9999")); | |
| 1194 SendJsMessage(message_name, | |
| 1195 JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 1196 } | |
| 1197 } | |
| 1198 }; | |
| 1199 | |
| 1200 TEST_F(SyncManagerGetNodesByIdTest, GetNodeSummariesById) { | |
| 1201 RunGetNodesByIdTest("getNodeSummariesById", false); | |
| 1202 } | |
| 1203 | |
| 1204 TEST_F(SyncManagerGetNodesByIdTest, GetNodeDetailsById) { | |
| 1205 RunGetNodesByIdTest("getNodeDetailsById", true); | |
| 1206 } | |
| 1207 | |
| 1208 TEST_F(SyncManagerGetNodesByIdTest, GetNodeSummariesByIdFailure) { | |
| 1209 RunGetNodesByIdFailureTest("getNodeSummariesById"); | |
| 1210 } | |
| 1211 | |
| 1212 TEST_F(SyncManagerGetNodesByIdTest, GetNodeDetailsByIdFailure) { | |
| 1213 RunGetNodesByIdFailureTest("getNodeDetailsById"); | |
| 1214 } | |
| 1215 | |
| 1216 TEST_F(SyncManagerTest, GetChildNodeIds) { | |
| 1217 StrictMock<MockJsReplyHandler> reply_handler; | |
| 1218 | |
| 1219 JsArgList return_args; | |
| 1220 | |
| 1221 EXPECT_CALL(reply_handler, | |
| 1222 HandleJsReply("getChildNodeIds", _)) | |
| 1223 .Times(1).WillRepeatedly(SaveArg<1>(&return_args)); | |
| 1224 | |
| 1225 { | |
| 1226 base::ListValue args; | |
| 1227 args.Append(new base::StringValue("1")); | |
| 1228 SendJsMessage("getChildNodeIds", | |
| 1229 JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 1230 } | |
| 1231 | |
| 1232 EXPECT_EQ(1u, return_args.Get().GetSize()); | |
| 1233 const base::ListValue* nodes = NULL; | |
| 1234 ASSERT_TRUE(return_args.Get().GetList(0, &nodes)); | |
| 1235 ASSERT_TRUE(nodes); | |
| 1236 EXPECT_EQ(9u, nodes->GetSize()); | |
| 1237 } | |
| 1238 | |
| 1239 TEST_F(SyncManagerTest, GetChildNodeIdsFailure) { | |
| 1240 StrictMock<MockJsReplyHandler> reply_handler; | |
| 1241 | |
| 1242 base::ListValue empty_list_args; | |
| 1243 empty_list_args.Append(new base::ListValue()); | |
| 1244 | |
| 1245 EXPECT_CALL(reply_handler, | |
| 1246 HandleJsReply("getChildNodeIds", | |
| 1247 HasArgsAsList(empty_list_args))) | |
| 1248 .Times(5); | |
| 1249 | |
| 1250 { | |
| 1251 base::ListValue args; | |
| 1252 SendJsMessage("getChildNodeIds", | |
| 1253 JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 1254 } | |
| 1255 | |
| 1256 { | |
| 1257 base::ListValue args; | |
| 1258 args.Append(new base::StringValue(std::string())); | |
| 1259 SendJsMessage( | |
| 1260 "getChildNodeIds", JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 1261 } | |
| 1262 | |
| 1263 { | |
| 1264 base::ListValue args; | |
| 1265 args.Append(new base::StringValue("nonsense")); | |
| 1266 SendJsMessage("getChildNodeIds", | |
| 1267 JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 1268 } | |
| 1269 | |
| 1270 { | |
| 1271 base::ListValue args; | |
| 1272 args.Append(new base::StringValue("0")); | |
| 1273 SendJsMessage("getChildNodeIds", | |
| 1274 JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 1275 } | |
| 1276 | |
| 1277 { | |
| 1278 base::ListValue args; | |
| 1279 args.Append(new base::StringValue("9999")); | |
| 1280 SendJsMessage("getChildNodeIds", | |
| 1281 JsArgList(&args), reply_handler.AsWeakHandle()); | |
| 1282 } | |
| 1283 } | 952 } |
| 1284 | 953 |
| 1285 TEST_F(SyncManagerTest, GetAllNodesTest) { | 954 TEST_F(SyncManagerTest, GetAllNodesTest) { |
| 1286 StrictMock<MockJsReplyHandler> reply_handler; | 955 StrictMock<MockJsReplyHandler> reply_handler; |
| 1287 JsArgList return_args; | 956 JsArgList return_args; |
| 1288 | 957 |
| 1289 EXPECT_CALL(reply_handler, | 958 EXPECT_CALL(reply_handler, |
| 1290 HandleJsReply("getAllNodes", _)) | 959 HandleJsReply("getAllNodes", _)) |
| 1291 .Times(1).WillRepeatedly(SaveArg<1>(&return_args)); | 960 .Times(1).WillRepeatedly(SaveArg<1>(&return_args)); |
| 1292 | 961 |
| (...skipping 2218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3511 // SyncManagerInitInvalidStorageTest::GetFactory will return | 3180 // SyncManagerInitInvalidStorageTest::GetFactory will return |
| 3512 // DirectoryBackingStore that ensures that SyncManagerImpl::OpenDirectory fails. | 3181 // DirectoryBackingStore that ensures that SyncManagerImpl::OpenDirectory fails. |
| 3513 // SyncManagerImpl initialization is done in SyncManagerTest::SetUp. This test's | 3182 // SyncManagerImpl initialization is done in SyncManagerTest::SetUp. This test's |
| 3514 // task is to ensure that SyncManagerImpl reported initialization failure in | 3183 // task is to ensure that SyncManagerImpl reported initialization failure in |
| 3515 // OnInitializationComplete callback. | 3184 // OnInitializationComplete callback. |
| 3516 TEST_F(SyncManagerInitInvalidStorageTest, FailToOpenDatabase) { | 3185 TEST_F(SyncManagerInitInvalidStorageTest, FailToOpenDatabase) { |
| 3517 EXPECT_FALSE(initialization_succeeded_); | 3186 EXPECT_FALSE(initialization_succeeded_); |
| 3518 } | 3187 } |
| 3519 | 3188 |
| 3520 } // namespace | 3189 } // namespace |
| OLD | NEW |