| 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 | 
|---|