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

Side by Side Diff: chrome/browser/sync/engine/syncapi_unittest.cc

Issue 7033043: [Sync] Speed up sync node browser/search in about:sync (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 9 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <map> 10 #include <map>
10 11
11 #include "base/basictypes.h" 12 #include "base/basictypes.h"
12 #include "base/format_macros.h" 13 #include "base/format_macros.h"
13 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
14 #include "base/message_loop.h" 15 #include "base/message_loop.h"
15 #include "base/scoped_temp_dir.h" 16 #include "base/scoped_temp_dir.h"
16 #include "base/string_number_conversions.h" 17 #include "base/string_number_conversions.h"
17 #include "base/stringprintf.h" 18 #include "base/stringprintf.h"
18 #include "base/utf_string_conversions.h" 19 #include "base/utf_string_conversions.h"
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 EXPECT_TRUE(password_node.InitByClientTagLookup(syncable::PASSWORDS, 382 EXPECT_TRUE(password_node.InitByClientTagLookup(syncable::PASSWORDS,
382 "foo")); 383 "foo"));
383 const sync_pb::PasswordSpecificsData& data = 384 const sync_pb::PasswordSpecificsData& data =
384 password_node.GetPasswordSpecifics(); 385 password_node.GetPasswordSpecifics();
385 EXPECT_EQ("secret", data.password_value()); 386 EXPECT_EQ("secret", data.password_value());
386 } 387 }
387 } 388 }
388 389
389 namespace { 390 namespace {
390 391
391 void CheckNodeValue(const BaseNode& node, const DictionaryValue& value) { 392 void CheckNodeValue(const BaseNode& node, const DictionaryValue& value,
393 bool is_detailed) {
392 ExpectInt64Value(node.GetId(), value, "id"); 394 ExpectInt64Value(node.GetId(), value, "id");
393 ExpectInt64Value(node.GetModificationTime(), value, "modificationTime");
394 ExpectInt64Value(node.GetParentId(), value, "parentId");
395 { 395 {
396 bool is_folder = false; 396 bool is_folder = false;
397 EXPECT_TRUE(value.GetBoolean("isFolder", &is_folder)); 397 EXPECT_TRUE(value.GetBoolean("isFolder", &is_folder));
398 EXPECT_EQ(node.GetIsFolder(), is_folder); 398 EXPECT_EQ(node.GetIsFolder(), is_folder);
399 } 399 }
400 ExpectDictStringValue(WideToUTF8(node.GetTitle()), value, "title"); 400 ExpectDictStringValue(WideToUTF8(node.GetTitle()), value, "title");
401 { 401 {
402 ModelType expected_model_type = node.GetModelType(); 402 ModelType expected_model_type = node.GetModelType();
403 std::string type_str; 403 std::string type_str;
404 EXPECT_TRUE(value.GetString("type", &type_str)); 404 EXPECT_TRUE(value.GetString("type", &type_str));
405 if (expected_model_type >= syncable::FIRST_REAL_MODEL_TYPE) { 405 if (expected_model_type >= syncable::FIRST_REAL_MODEL_TYPE) {
406 ModelType model_type = 406 ModelType model_type =
407 syncable::ModelTypeFromString(type_str); 407 syncable::ModelTypeFromString(type_str);
408 EXPECT_EQ(expected_model_type, model_type); 408 EXPECT_EQ(expected_model_type, model_type);
409 } else if (expected_model_type == syncable::TOP_LEVEL_FOLDER) { 409 } else if (expected_model_type == syncable::TOP_LEVEL_FOLDER) {
410 EXPECT_EQ("Top-level folder", type_str); 410 EXPECT_EQ("Top-level folder", type_str);
411 } else if (expected_model_type == syncable::UNSPECIFIED) { 411 } else if (expected_model_type == syncable::UNSPECIFIED) {
412 EXPECT_EQ("Unspecified", type_str); 412 EXPECT_EQ("Unspecified", type_str);
413 } else { 413 } else {
414 ADD_FAILURE(); 414 ADD_FAILURE();
415 } 415 }
416 } 416 }
417 ExpectInt64Value(node.GetExternalId(), value, "externalId"); 417 if (is_detailed) {
418 ExpectInt64Value(node.GetPredecessorId(), value, "predecessorId"); 418 ExpectInt64Value(node.GetParentId(), value, "parentId");
419 ExpectInt64Value(node.GetSuccessorId(), value, "successorId"); 419 ExpectInt64Value(node.GetModificationTime(), value, "modificationTime");
420 ExpectInt64Value(node.GetFirstChildId(), value, "firstChildId"); 420 ExpectInt64Value(node.GetExternalId(), value, "externalId");
421 { 421 ExpectInt64Value(node.GetPredecessorId(), value, "predecessorId");
422 scoped_ptr<DictionaryValue> expected_entry(node.GetEntry()->ToValue()); 422 ExpectInt64Value(node.GetSuccessorId(), value, "successorId");
423 Value* entry = NULL; 423 ExpectInt64Value(node.GetFirstChildId(), value, "firstChildId");
424 EXPECT_TRUE(value.Get("entry", &entry)); 424 {
425 EXPECT_TRUE(Value::Equals(entry, expected_entry.get())); 425 scoped_ptr<DictionaryValue> expected_entry(node.GetEntry()->ToValue());
426 Value* entry = NULL;
427 EXPECT_TRUE(value.Get("entry", &entry));
428 EXPECT_TRUE(Value::Equals(entry, expected_entry.get()));
429 }
430 EXPECT_EQ(11u, value.size());
431 } else {
432 EXPECT_EQ(4u, value.size());
426 } 433 }
427 EXPECT_EQ(11u, value.size());
428 } 434 }
429 435
430 } // namespace 436 } // namespace
431 437
432 TEST_F(SyncApiTest, BaseNodeToValue) { 438 TEST_F(SyncApiTest, BaseNodeGetSummaryAsValue) {
433 ReadTransaction trans(test_user_share_.user_share()); 439 ReadTransaction trans(test_user_share_.user_share());
434 ReadNode node(&trans); 440 ReadNode node(&trans);
435 node.InitByRootLookup(); 441 node.InitByRootLookup();
436 scoped_ptr<DictionaryValue> value(node.ToValue()); 442 scoped_ptr<DictionaryValue> details(node.GetSummaryAsValue());
437 if (value.get()) { 443 if (details.get()) {
438 CheckNodeValue(node, *value); 444 CheckNodeValue(node, *details, false);
439 } else { 445 } else {
440 ADD_FAILURE(); 446 ADD_FAILURE();
441 } 447 }
448 }
449
450 TEST_F(SyncApiTest, BaseNodeGetDetailsAsValue) {
451 ReadTransaction trans(test_user_share_.user_share());
452 ReadNode node(&trans);
453 node.InitByRootLookup();
454 scoped_ptr<DictionaryValue> details(node.GetDetailsAsValue());
455 if (details.get()) {
456 CheckNodeValue(node, *details, true);
457 } else {
458 ADD_FAILURE();
459 }
442 } 460 }
443 461
444 namespace { 462 namespace {
445 463
446 void ExpectChangeRecordActionValue(SyncManager::ChangeRecord::Action 464 void ExpectChangeRecordActionValue(SyncManager::ChangeRecord::Action
447 expected_value, 465 expected_value,
448 const DictionaryValue& value, 466 const DictionaryValue& value,
449 const std::string& key) { 467 const std::string& key) {
450 std::string str_value; 468 std::string str_value;
451 EXPECT_TRUE(value.GetString(key, &str_value)); 469 EXPECT_TRUE(value.GetString(key, &str_value));
(...skipping 14 matching lines...) Expand all
466 } 484 }
467 485
468 void CheckNonDeleteChangeRecordValue(const SyncManager::ChangeRecord& record, 486 void CheckNonDeleteChangeRecordValue(const SyncManager::ChangeRecord& record,
469 const DictionaryValue& value, 487 const DictionaryValue& value,
470 BaseTransaction* trans) { 488 BaseTransaction* trans) {
471 EXPECT_NE(SyncManager::ChangeRecord::ACTION_DELETE, record.action); 489 EXPECT_NE(SyncManager::ChangeRecord::ACTION_DELETE, record.action);
472 ExpectChangeRecordActionValue(record.action, value, "action"); 490 ExpectChangeRecordActionValue(record.action, value, "action");
473 { 491 {
474 ReadNode node(trans); 492 ReadNode node(trans);
475 EXPECT_TRUE(node.InitByIdLookup(record.id)); 493 EXPECT_TRUE(node.InitByIdLookup(record.id));
476 scoped_ptr<DictionaryValue> expected_node_value(node.ToValue()); 494 scoped_ptr<DictionaryValue> expected_details(node.GetDetailsAsValue());
477 ExpectDictDictionaryValue(*expected_node_value, value, "node"); 495 ExpectDictDictionaryValue(*expected_details, value, "node");
478 } 496 }
479 } 497 }
480 498
481 void CheckDeleteChangeRecordValue(const SyncManager::ChangeRecord& record, 499 void CheckDeleteChangeRecordValue(const SyncManager::ChangeRecord& record,
482 const DictionaryValue& value) { 500 const DictionaryValue& value) {
483 EXPECT_EQ(SyncManager::ChangeRecord::ACTION_DELETE, record.action); 501 EXPECT_EQ(SyncManager::ChangeRecord::ACTION_DELETE, record.action);
484 ExpectChangeRecordActionValue(record.action, value, "action"); 502 ExpectChangeRecordActionValue(record.action, value, "action");
485 DictionaryValue* node_value = NULL; 503 DictionaryValue* node_value = NULL;
486 EXPECT_TRUE(value.GetDictionary("node", &node_value)); 504 EXPECT_TRUE(value.GetDictionary("node", &node_value));
487 if (node_value) { 505 if (node_value) {
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
830 // dropped. 848 // dropped.
831 { 849 {
832 StrictMock<MockJsEventHandler> event_handler; 850 StrictMock<MockJsEventHandler> event_handler;
833 js_backend->ProcessMessage("unknownMessage", 851 js_backend->ProcessMessage("unknownMessage",
834 kNoArgs, &event_handler); 852 kNoArgs, &event_handler);
835 js_backend->ProcessMessage("getNotificationState", 853 js_backend->ProcessMessage("getNotificationState",
836 kNoArgs, &event_handler); 854 kNoArgs, &event_handler);
837 } 855 }
838 } 856 }
839 857
840 TEST_F(SyncManagerTest, ProcessMessageGetRootNode) { 858 TEST_F(SyncManagerTest, ProcessMessageGetRootNodeDetails) {
841 const JsArgList kNoArgs; 859 const JsArgList kNoArgs;
842 860
843 browser_sync::JsBackend* js_backend = sync_manager_.GetJsBackend(); 861 browser_sync::JsBackend* js_backend = sync_manager_.GetJsBackend();
844 862
845 StrictMock<MockJsEventHandler> event_handler; 863 StrictMock<MockJsEventHandler> event_handler;
846 StrictMock<MockJsEventRouter> event_router; 864 StrictMock<MockJsEventRouter> event_router;
847 865
848 JsArgList return_args; 866 JsArgList return_args;
849 867
850 EXPECT_CALL(event_router, 868 EXPECT_CALL(event_router,
851 RouteJsMessageReply("getRootNode", _, &event_handler)) 869 RouteJsMessageReply("getRootNodeDetails", _, &event_handler))
852 .WillOnce(SaveArg<1>(&return_args)); 870 .WillOnce(SaveArg<1>(&return_args));
853 871
854 js_backend->SetParentJsEventRouter(&event_router); 872 js_backend->SetParentJsEventRouter(&event_router);
855 873
856 // Should trigger the reply. 874 // Should trigger the reply.
857 js_backend->ProcessMessage("getRootNode", kNoArgs, &event_handler); 875 js_backend->ProcessMessage("getRootNodeDetails", kNoArgs, &event_handler);
858 876
859 EXPECT_EQ(1u, return_args.Get().GetSize()); 877 EXPECT_EQ(1u, return_args.Get().GetSize());
860 DictionaryValue* node_info = NULL; 878 DictionaryValue* node_info = NULL;
861 EXPECT_TRUE(return_args.Get().GetDictionary(0, &node_info)); 879 EXPECT_TRUE(return_args.Get().GetDictionary(0, &node_info));
862 if (node_info) { 880 if (node_info) {
863 ReadTransaction trans(sync_manager_.GetUserShare()); 881 ReadTransaction trans(sync_manager_.GetUserShare());
864 ReadNode node(&trans); 882 ReadNode node(&trans);
865 node.InitByRootLookup(); 883 node.InitByRootLookup();
866 CheckNodeValue(node, *node_info); 884 CheckNodeValue(node, *node_info, true);
867 } else { 885 } else {
868 ADD_FAILURE(); 886 ADD_FAILURE();
869 } 887 }
870 888
871 js_backend->RemoveParentJsEventRouter(); 889 js_backend->RemoveParentJsEventRouter();
872 } 890 }
873 891
874 void CheckGetNodesByIdReturnArgs(const SyncManager& sync_manager, 892 void CheckGetNodesByIdReturnArgs(const SyncManager& sync_manager,
875 const JsArgList& return_args, 893 const JsArgList& return_args,
876 int64 id) { 894 int64 id,
895 bool is_detailed) {
877 EXPECT_EQ(1u, return_args.Get().GetSize()); 896 EXPECT_EQ(1u, return_args.Get().GetSize());
878 ListValue* nodes = NULL; 897 ListValue* nodes = NULL;
879 ASSERT_TRUE(return_args.Get().GetList(0, &nodes)); 898 ASSERT_TRUE(return_args.Get().GetList(0, &nodes));
880 ASSERT_TRUE(nodes); 899 ASSERT_TRUE(nodes);
881 EXPECT_EQ(1u, nodes->GetSize()); 900 EXPECT_EQ(1u, nodes->GetSize());
882 DictionaryValue* node_info = NULL; 901 DictionaryValue* node_info = NULL;
883 EXPECT_TRUE(nodes->GetDictionary(0, &node_info)); 902 EXPECT_TRUE(nodes->GetDictionary(0, &node_info));
884 ASSERT_TRUE(node_info); 903 ASSERT_TRUE(node_info);
885 ReadTransaction trans(sync_manager.GetUserShare()); 904 ReadTransaction trans(sync_manager.GetUserShare());
886 ReadNode node(&trans); 905 ReadNode node(&trans);
887 node.InitByIdLookup(id); 906 node.InitByIdLookup(id);
888 CheckNodeValue(node, *node_info); 907 CheckNodeValue(node, *node_info, is_detailed);
889 } 908 }
890 909
891 TEST_F(SyncManagerTest, ProcessMessageGetNodesById) { 910 class SyncManagerGetNodesByIdTest : public SyncManagerTest {
892 int64 child_id = 911 protected:
893 MakeNode(sync_manager_.GetUserShare(), syncable::BOOKMARKS, "testtag"); 912 virtual ~SyncManagerGetNodesByIdTest() {}
894 913
914 void RunGetNodesByIdTest(const char* message_name, bool is_detailed) {
915 int64 root_id = kInvalidId;
916 {
917 ReadTransaction trans(sync_manager_.GetUserShare());
918 ReadNode root_node(&trans);
919 root_node.InitByRootLookup();
920 root_id = root_node.GetId();
921 }
922
923 int64 child_id =
924 MakeNode(sync_manager_.GetUserShare(),
925 syncable::BOOKMARKS, "testtag");
926
927 browser_sync::JsBackend* js_backend = sync_manager_.GetJsBackend();
928
929 StrictMock<MockJsEventHandler> event_handler;
930 StrictMock<MockJsEventRouter> event_router;
931
932 JsArgList return_args;
933
934 const int64 ids[] = { root_id, child_id };
935
936 EXPECT_CALL(event_router,
937 RouteJsMessageReply(message_name, _, &event_handler))
938 .Times(arraysize(ids)).WillRepeatedly(SaveArg<1>(&return_args));
939
940 js_backend->SetParentJsEventRouter(&event_router);
941
942 for (size_t i = 0; i < arraysize(ids); ++i) {
943 ListValue args;
944 ListValue* id_values = new ListValue();
945 args.Append(id_values);
946 id_values->Append(Value::CreateStringValue(base::Int64ToString(ids[i])));
947 js_backend->ProcessMessage(message_name,
948 JsArgList(&args), &event_handler);
949
950 CheckGetNodesByIdReturnArgs(sync_manager_, return_args,
951 ids[i], is_detailed);
952 }
953
954 js_backend->RemoveParentJsEventRouter();
955 }
956
957 void RunGetNodesByIdFailureTest(const char* message_name) {
958 browser_sync::JsBackend* js_backend = sync_manager_.GetJsBackend();
959
960 StrictMock<MockJsEventHandler> event_handler;
961 StrictMock<MockJsEventRouter> event_router;
962
963 ListValue empty_list_args;
964 empty_list_args.Append(new ListValue());
965
966 EXPECT_CALL(event_router,
967 RouteJsMessageReply(message_name,
968 HasArgsAsList(empty_list_args),
969 &event_handler))
970 .Times(6);
971
972 js_backend->SetParentJsEventRouter(&event_router);
973
974 {
975 ListValue args;
976 js_backend->ProcessMessage(message_name,
977 JsArgList(&args), &event_handler);
978 }
979
980 {
981 ListValue args;
982 args.Append(new ListValue());
983 js_backend->ProcessMessage(message_name,
984 JsArgList(&args), &event_handler);
985 }
986
987 {
988 ListValue args;
989 ListValue* ids = new ListValue();
990 args.Append(ids);
991 ids->Append(Value::CreateStringValue(""));
992 js_backend->ProcessMessage(message_name,
993 JsArgList(&args), &event_handler);
994 }
995
996 {
997 ListValue args;
998 ListValue* ids = new ListValue();
999 args.Append(ids);
1000 ids->Append(Value::CreateStringValue("nonsense"));
1001 js_backend->ProcessMessage(message_name,
1002 JsArgList(&args), &event_handler);
1003 }
1004
1005 {
1006 ListValue args;
1007 ListValue* ids = new ListValue();
1008 args.Append(ids);
1009 ids->Append(Value::CreateStringValue("0"));
1010 js_backend->ProcessMessage(message_name,
1011 JsArgList(&args), &event_handler);
1012 }
1013
1014 {
1015 ListValue args;
1016 ListValue* ids = new ListValue();
1017 args.Append(ids);
1018 ids->Append(Value::CreateStringValue("9999"));
1019 js_backend->ProcessMessage(message_name,
1020 JsArgList(&args), &event_handler);
1021 }
1022
1023 js_backend->RemoveParentJsEventRouter();
1024 }
1025 };
1026
1027 TEST_F(SyncManagerGetNodesByIdTest, GetNodeSummariesById) {
1028 RunGetNodesByIdTest("getNodeSummariesById", false);
1029 }
1030
1031 TEST_F(SyncManagerGetNodesByIdTest, GetNodeDetailsById) {
1032 RunGetNodesByIdTest("getNodeDetailsById", true);
1033 }
1034
1035 TEST_F(SyncManagerGetNodesByIdTest, GetNodeSummariesByIdFailure) {
1036 RunGetNodesByIdFailureTest("getNodeSummariesById");
1037 }
1038
1039 TEST_F(SyncManagerGetNodesByIdTest, GetNodeDetailsByIdFailure) {
1040 RunGetNodesByIdFailureTest("getNodeDetailsById");
1041 }
1042
1043 TEST_F(SyncManagerTest, GetChildNodeIds) {
895 browser_sync::JsBackend* js_backend = sync_manager_.GetJsBackend(); 1044 browser_sync::JsBackend* js_backend = sync_manager_.GetJsBackend();
896 1045
897 StrictMock<MockJsEventHandler> event_handler; 1046 StrictMock<MockJsEventHandler> event_handler;
898 StrictMock<MockJsEventRouter> event_router;
899
900 JsArgList return_args;
901
902 EXPECT_CALL(event_router,
903 RouteJsMessageReply("getNodesById", _, &event_handler))
904 .Times(2).WillRepeatedly(SaveArg<1>(&return_args));
905
906 js_backend->SetParentJsEventRouter(&event_router);
907
908 // Should trigger the reply.
909 {
910 ListValue args;
911 ListValue* ids = new ListValue();
912 args.Append(ids);
913 ids->Append(Value::CreateStringValue("1"));
914 js_backend->ProcessMessage("getNodesById",
915 JsArgList(&args), &event_handler);
916 }
917
918 CheckGetNodesByIdReturnArgs(sync_manager_, return_args, 1);
919
920 // Should trigger another reply.
921 {
922 ListValue args;
923 ListValue* ids = new ListValue();
924 args.Append(ids);
925 ids->Append(Value::CreateStringValue(base::Int64ToString(child_id)));
926 js_backend->ProcessMessage("getNodesById",
927 JsArgList(&args), &event_handler);
928 }
929
930 CheckGetNodesByIdReturnArgs(sync_manager_, return_args, child_id);
931
932 js_backend->RemoveParentJsEventRouter();
933 }
934
935 TEST_F(SyncManagerTest, ProcessMessageGetNodesByIdFailure) {
936 browser_sync::JsBackend* js_backend = sync_manager_.GetJsBackend();
937
938 StrictMock<MockJsEventHandler> event_handler;
939 StrictMock<MockJsEventRouter> event_router;
940
941 ListValue empty_list_args;
942 empty_list_args.Append(new ListValue());
943
944 EXPECT_CALL(event_router,
945 RouteJsMessageReply("getNodesById",
946 HasArgsAsList(empty_list_args),
947 &event_handler))
948 .Times(6);
949
950 js_backend->SetParentJsEventRouter(&event_router);
951
952 {
953 ListValue args;
954 js_backend->ProcessMessage("getNodesById",
955 JsArgList(&args), &event_handler);
956 }
957
958 {
959 ListValue args;
960 args.Append(new ListValue());
961 js_backend->ProcessMessage("getNodesById",
962 JsArgList(&args), &event_handler);
963 }
964
965 {
966 ListValue args;
967 ListValue* ids = new ListValue();
968 args.Append(ids);
969 ids->Append(Value::CreateStringValue(""));
970 js_backend->ProcessMessage("getNodesById",
971 JsArgList(&args), &event_handler);
972 }
973
974 {
975 ListValue args;
976 ListValue* ids = new ListValue();
977 args.Append(ids);
978 ids->Append(Value::CreateStringValue("nonsense"));
979 js_backend->ProcessMessage("getNodesById",
980 JsArgList(&args), &event_handler);
981 }
982
983 {
984 ListValue args;
985 ListValue* ids = new ListValue();
986 args.Append(ids);
987 ids->Append(Value::CreateStringValue("0"));
988 js_backend->ProcessMessage("getNodesById",
989 JsArgList(&args), &event_handler);
990 }
991
992 {
993 ListValue args;
994 ListValue* ids = new ListValue();
995 args.Append(ids);
996 ids->Append(Value::CreateStringValue("9999"));
997 js_backend->ProcessMessage("getNodesById",
998 JsArgList(&args), &event_handler);
999 }
1000
1001 js_backend->RemoveParentJsEventRouter();
1002 }
1003
1004 TEST_F(SyncManagerTest, ProcessMessageGetChildNodeIds) {
1005 browser_sync::JsBackend* js_backend = sync_manager_.GetJsBackend();
1006
1007 StrictMock<MockJsEventHandler> event_handler;
1008 StrictMock<MockJsEventRouter> event_router; 1047 StrictMock<MockJsEventRouter> event_router;
1009 1048
1010 JsArgList return_args; 1049 JsArgList return_args;
1011 1050
1012 EXPECT_CALL(event_router, 1051 EXPECT_CALL(event_router,
1013 RouteJsMessageReply("getChildNodeIds", _, &event_handler)) 1052 RouteJsMessageReply("getChildNodeIds", _, &event_handler))
1014 .Times(1).WillRepeatedly(SaveArg<1>(&return_args)); 1053 .Times(1).WillRepeatedly(SaveArg<1>(&return_args));
1015 1054
1016 js_backend->SetParentJsEventRouter(&event_router); 1055 js_backend->SetParentJsEventRouter(&event_router);
1017 1056
1018 // Should trigger the reply. 1057 // Should trigger the reply.
1019 { 1058 {
1020 ListValue args; 1059 ListValue args;
1021 args.Append(Value::CreateStringValue("1")); 1060 args.Append(Value::CreateStringValue("1"));
1022 js_backend->ProcessMessage("getChildNodeIds", 1061 js_backend->ProcessMessage("getChildNodeIds",
1023 JsArgList(&args), &event_handler); 1062 JsArgList(&args), &event_handler);
1024 } 1063 }
1025 1064
1026 EXPECT_EQ(1u, return_args.Get().GetSize()); 1065 EXPECT_EQ(1u, return_args.Get().GetSize());
1027 ListValue* nodes = NULL; 1066 ListValue* nodes = NULL;
1028 ASSERT_TRUE(return_args.Get().GetList(0, &nodes)); 1067 ASSERT_TRUE(return_args.Get().GetList(0, &nodes));
1029 ASSERT_TRUE(nodes); 1068 ASSERT_TRUE(nodes);
1030 EXPECT_EQ(5u, nodes->GetSize()); 1069 EXPECT_EQ(5u, nodes->GetSize());
1031 1070
1032 js_backend->RemoveParentJsEventRouter(); 1071 js_backend->RemoveParentJsEventRouter();
1033 } 1072 }
1034 1073
1035 TEST_F(SyncManagerTest, ProcessMessageGetChildNodeIdsFailure) { 1074 TEST_F(SyncManagerTest, GetChildNodeIdsFailure) {
1036 browser_sync::JsBackend* js_backend = sync_manager_.GetJsBackend(); 1075 browser_sync::JsBackend* js_backend = sync_manager_.GetJsBackend();
1037 1076
1038 StrictMock<MockJsEventHandler> event_handler; 1077 StrictMock<MockJsEventHandler> event_handler;
1039 StrictMock<MockJsEventRouter> event_router; 1078 StrictMock<MockJsEventRouter> event_router;
1040 1079
1041 ListValue empty_list_args; 1080 ListValue empty_list_args;
1042 empty_list_args.Append(new ListValue()); 1081 empty_list_args.Append(new ListValue());
1043 1082
1044 EXPECT_CALL(event_router, 1083 EXPECT_CALL(event_router,
1045 RouteJsMessageReply("getChildNodeIds", 1084 RouteJsMessageReply("getChildNodeIds",
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1079 { 1118 {
1080 ListValue args; 1119 ListValue args;
1081 args.Append(Value::CreateStringValue("9999")); 1120 args.Append(Value::CreateStringValue("9999"));
1082 js_backend->ProcessMessage("getChildNodeIds", 1121 js_backend->ProcessMessage("getChildNodeIds",
1083 JsArgList(&args), &event_handler); 1122 JsArgList(&args), &event_handler);
1084 } 1123 }
1085 1124
1086 js_backend->RemoveParentJsEventRouter(); 1125 js_backend->RemoveParentJsEventRouter();
1087 } 1126 }
1088 1127
1128 // TODO(akalin): Add unit tests for findNodesContainingString message.
1129
1089 TEST_F(SyncManagerTest, OnNotificationStateChange) { 1130 TEST_F(SyncManagerTest, OnNotificationStateChange) {
1090 InSequence dummy; 1131 InSequence dummy;
1091 StrictMock<MockJsEventRouter> event_router; 1132 StrictMock<MockJsEventRouter> event_router;
1092 1133
1093 DictionaryValue true_details; 1134 DictionaryValue true_details;
1094 true_details.SetBoolean("enabled", true); 1135 true_details.SetBoolean("enabled", true);
1095 DictionaryValue false_details; 1136 DictionaryValue false_details;
1096 false_details.SetBoolean("enabled", false); 1137 false_details.SetBoolean("enabled", false);
1097 1138
1098 EXPECT_CALL(event_router, 1139 EXPECT_CALL(event_router,
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1235 true /* is encrypted */)); 1276 true /* is encrypted */));
1236 EXPECT_TRUE(syncable::VerifyDataTypeEncryption(trans.GetWrappedTrans(), 1277 EXPECT_TRUE(syncable::VerifyDataTypeEncryption(trans.GetWrappedTrans(),
1237 syncable::THEMES, 1278 syncable::THEMES,
1238 false /* not encrypted */)); 1279 false /* not encrypted */));
1239 } 1280 }
1240 } 1281 }
1241 1282
1242 } // namespace 1283 } // namespace
1243 1284
1244 } // namespace browser_sync 1285 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698