sync_change_unittest.cc 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/sync/model/sync_change.h"
  5. #include <memory>
  6. #include "base/time/time.h"
  7. #include "base/values.h"
  8. #include "components/sync/protocol/entity_specifics.pb.h"
  9. #include "components/sync/protocol/preference_specifics.pb.h"
  10. #include "components/sync/protocol/proto_value_conversions.h"
  11. #include "testing/gtest/include/gtest/gtest.h"
  12. namespace syncer {
  13. // Ordered list of SyncChange's.
  14. using SyncChangeList = std::vector<SyncChange>;
  15. namespace {
  16. TEST(SyncChangeTest, LocalDelete) {
  17. SyncChange::SyncChangeType change_type = SyncChange::ACTION_DELETE;
  18. std::string tag = "client_tag";
  19. SyncChange e(FROM_HERE, change_type,
  20. SyncData::CreateLocalDelete(tag, PREFERENCES));
  21. EXPECT_EQ(change_type, e.change_type());
  22. EXPECT_EQ(ClientTagHash::FromUnhashed(PREFERENCES, tag),
  23. e.sync_data().GetClientTagHash());
  24. EXPECT_EQ(PREFERENCES, e.sync_data().GetDataType());
  25. }
  26. TEST(SyncChangeTest, LocalUpdate) {
  27. SyncChange::SyncChangeType change_type = SyncChange::ACTION_UPDATE;
  28. sync_pb::EntitySpecifics specifics;
  29. sync_pb::PreferenceSpecifics* pref_specifics = specifics.mutable_preference();
  30. pref_specifics->set_name("test");
  31. std::string tag = "client_tag";
  32. std::string title = "client_title";
  33. SyncChange e(FROM_HERE, change_type,
  34. SyncData::CreateLocalData(tag, title, specifics));
  35. EXPECT_EQ(change_type, e.change_type());
  36. EXPECT_EQ(ClientTagHash::FromUnhashed(PREFERENCES, tag),
  37. e.sync_data().GetClientTagHash());
  38. EXPECT_EQ(title, e.sync_data().GetTitle());
  39. EXPECT_EQ(PREFERENCES, e.sync_data().GetDataType());
  40. std::unique_ptr<base::DictionaryValue> ref_spec(
  41. EntitySpecificsToValue(specifics));
  42. std::unique_ptr<base::DictionaryValue> e_spec(
  43. EntitySpecificsToValue(e.sync_data().GetSpecifics()));
  44. EXPECT_EQ(*ref_spec, *e_spec);
  45. }
  46. TEST(SyncChangeTest, LocalAdd) {
  47. SyncChange::SyncChangeType change_type = SyncChange::ACTION_ADD;
  48. sync_pb::EntitySpecifics specifics;
  49. sync_pb::PreferenceSpecifics* pref_specifics = specifics.mutable_preference();
  50. pref_specifics->set_name("test");
  51. std::string tag = "client_tag";
  52. std::string title = "client_title";
  53. SyncChange e(FROM_HERE, change_type,
  54. SyncData::CreateLocalData(tag, title, specifics));
  55. EXPECT_EQ(change_type, e.change_type());
  56. EXPECT_EQ(ClientTagHash::FromUnhashed(PREFERENCES, tag),
  57. e.sync_data().GetClientTagHash());
  58. EXPECT_EQ(title, e.sync_data().GetTitle());
  59. EXPECT_EQ(PREFERENCES, e.sync_data().GetDataType());
  60. std::unique_ptr<base::DictionaryValue> ref_spec(
  61. EntitySpecificsToValue(specifics));
  62. std::unique_ptr<base::DictionaryValue> e_spec(
  63. EntitySpecificsToValue(e.sync_data().GetSpecifics()));
  64. EXPECT_EQ(*ref_spec, *e_spec);
  65. }
  66. TEST(SyncChangeTest, SyncerChanges) {
  67. SyncChangeList change_list;
  68. // Create an update.
  69. sync_pb::EntitySpecifics update_specifics;
  70. sync_pb::PreferenceSpecifics* pref_specifics =
  71. update_specifics.mutable_preference();
  72. pref_specifics->set_name("update");
  73. change_list.push_back(
  74. SyncChange(FROM_HERE, SyncChange::ACTION_UPDATE,
  75. SyncData::CreateRemoteData(
  76. update_specifics, ClientTagHash::FromHashed("unused"))));
  77. // Create an add.
  78. sync_pb::EntitySpecifics add_specifics;
  79. pref_specifics = add_specifics.mutable_preference();
  80. pref_specifics->set_name("add");
  81. change_list.push_back(
  82. SyncChange(FROM_HERE, SyncChange::ACTION_ADD,
  83. SyncData::CreateRemoteData(
  84. add_specifics, ClientTagHash::FromHashed("unused"))));
  85. // Create a delete.
  86. sync_pb::EntitySpecifics delete_specifics;
  87. pref_specifics = delete_specifics.mutable_preference();
  88. pref_specifics->set_name("add");
  89. change_list.push_back(
  90. SyncChange(FROM_HERE, SyncChange::ACTION_DELETE,
  91. SyncData::CreateRemoteData(
  92. delete_specifics, ClientTagHash::FromHashed("unused"))));
  93. ASSERT_EQ(3U, change_list.size());
  94. // Verify update.
  95. SyncChange e = change_list[0];
  96. EXPECT_EQ(SyncChange::ACTION_UPDATE, e.change_type());
  97. EXPECT_EQ(PREFERENCES, e.sync_data().GetDataType());
  98. std::unique_ptr<base::DictionaryValue> ref_spec(
  99. EntitySpecificsToValue(update_specifics));
  100. std::unique_ptr<base::DictionaryValue> e_spec(
  101. EntitySpecificsToValue(e.sync_data().GetSpecifics()));
  102. EXPECT_EQ(*ref_spec, *e_spec);
  103. // Verify add.
  104. e = change_list[1];
  105. EXPECT_EQ(SyncChange::ACTION_ADD, e.change_type());
  106. EXPECT_EQ(PREFERENCES, e.sync_data().GetDataType());
  107. ref_spec = EntitySpecificsToValue(add_specifics);
  108. e_spec = EntitySpecificsToValue(e.sync_data().GetSpecifics());
  109. EXPECT_EQ(*ref_spec, *e_spec);
  110. // Verify delete.
  111. e = change_list[2];
  112. EXPECT_EQ(SyncChange::ACTION_DELETE, e.change_type());
  113. EXPECT_EQ(PREFERENCES, e.sync_data().GetDataType());
  114. ref_spec = EntitySpecificsToValue(delete_specifics);
  115. e_spec = EntitySpecificsToValue(e.sync_data().GetSpecifics());
  116. EXPECT_EQ(*ref_spec, *e_spec);
  117. }
  118. } // namespace
  119. } // namespace syncer