| Index: sync/internal_api/shared_model_type_processor_unittest.cc
|
| diff --git a/sync/internal_api/shared_model_type_processor_unittest.cc b/sync/internal_api/shared_model_type_processor_unittest.cc
|
| index 1e6a7f79ef8dd908d928a7a77c89ea93438f56be..d626e2b36f3caf0a8b3850b9f94b59a2e55c21f6 100644
|
| --- a/sync/internal_api/shared_model_type_processor_unittest.cc
|
| +++ b/sync/internal_api/shared_model_type_processor_unittest.cc
|
| @@ -59,16 +59,25 @@ scoped_ptr<EntityData> CopyEntityData(const EntityData& old_data) {
|
| class SimpleStore {
|
| public:
|
| void PutData(const std::string& tag, const EntityData& data) {
|
| + data_change_count_++;
|
| data_store_[tag] = CopyEntityData(data);
|
| }
|
|
|
| void PutMetadata(const std::string& tag,
|
| const sync_pb::EntityMetadata& metadata) {
|
| + metadata_change_count_++;
|
| metadata_store_[tag] = metadata;
|
| }
|
|
|
| - void RemoveData(const std::string& tag) { data_store_.erase(tag); }
|
| - void RemoveMetadata(const std::string& tag) { metadata_store_.erase(tag); }
|
| + void RemoveData(const std::string& tag) {
|
| + data_change_count_++;
|
| + data_store_.erase(tag);
|
| + }
|
| +
|
| + void RemoveMetadata(const std::string& tag) {
|
| + metadata_change_count_++;
|
| + metadata_store_.erase(tag);
|
| + }
|
|
|
| bool HasData(const std::string& tag) const {
|
| return data_store_.find(tag) != data_store_.end();
|
| @@ -93,6 +102,9 @@ class SimpleStore {
|
| size_t DataCount() const { return data_store_.size(); }
|
| size_t MetadataCount() const { return metadata_store_.size(); }
|
|
|
| + size_t DataChangeCount() const { return data_change_count_; }
|
| + size_t MetadataChangeCount() const { return metadata_change_count_; }
|
| +
|
| const sync_pb::DataTypeState& data_type_state() const {
|
| return data_type_state_;
|
| }
|
| @@ -111,12 +123,16 @@ class SimpleStore {
|
| }
|
|
|
| void Reset() {
|
| + data_change_count_ = 0;
|
| + metadata_change_count_ = 0;
|
| data_store_.clear();
|
| metadata_store_.clear();
|
| data_type_state_.Clear();
|
| }
|
|
|
| private:
|
| + size_t data_change_count_ = 0;
|
| + size_t metadata_change_count_ = 0;
|
| std::map<std::string, scoped_ptr<EntityData>> data_store_;
|
| std::map<std::string, sync_pb::EntityMetadata> metadata_store_;
|
| sync_pb::DataTypeState data_type_state_;
|
| @@ -821,7 +837,7 @@ TEST_F(SharedModelTypeProcessorTest, LocalCreateItem) {
|
|
|
| // The purpose of this test case is to test setting |client_tag_hash| and |id|
|
| // on the EntityData object as we pass it into the Put method of the processor.
|
| -TEST_F(SharedModelTypeProcessorTest, LocalCreateAndModifyWithOverrides) {
|
| +TEST_F(SharedModelTypeProcessorTest, LocalUpdateItemWithOverrides) {
|
| const std::string kId1 = "cid1";
|
| const std::string kId2 = "cid2";
|
| const std::string kName1 = "name1";
|
| @@ -883,7 +899,7 @@ TEST_F(SharedModelTypeProcessorTest, LocalCreateAndModifyWithOverrides) {
|
|
|
| // Creates a new local item then modifies it.
|
| // Thoroughly tests data generated by modification of server-unknown item.
|
| -TEST_F(SharedModelTypeProcessorTest, LocalCreateAndModifyItem) {
|
| +TEST_F(SharedModelTypeProcessorTest, LocalUpdateItem) {
|
| InitializeToReadyState();
|
|
|
| WriteItem(kTag1, kValue1);
|
| @@ -934,6 +950,18 @@ TEST_F(SharedModelTypeProcessorTest, LocalCreateAndModifyItem) {
|
| EXPECT_NE(metadata_v1.specifics_hash(), metadata_v2.specifics_hash());
|
| }
|
|
|
| +// Tests that a local update that doesn't change specifics doesn't generate a
|
| +// commit request.
|
| +TEST_F(SharedModelTypeProcessorTest, LocalUpdateItemRedundant) {
|
| + InitializeToReadyState();
|
| + WriteItem(kTag1, kValue1);
|
| + EXPECT_EQ(1U, db().MetadataCount());
|
| + ExpectCommitRequests({kTag1});
|
| +
|
| + WriteItem(kTag1, kValue1);
|
| + ExpectCommitRequests({kTag1});
|
| +}
|
| +
|
| // Thoroughly tests the data generated by a server item creation.
|
| TEST_F(SharedModelTypeProcessorTest, ServerCreateItem) {
|
| InitializeToReadyState();
|
| @@ -964,6 +992,26 @@ TEST_F(SharedModelTypeProcessorTest, ServerCreateItem) {
|
| EXPECT_TRUE(metadata.has_specifics_hash());
|
| }
|
|
|
| +// Thoroughly tests the data generated by a server item creation.
|
| +TEST_F(SharedModelTypeProcessorTest, ServerUpdateItem) {
|
| + InitializeToReadyState();
|
| +
|
| + // Local add writes data and metadata; ack writes metadata again.
|
| + WriteItemAndAck(kTag1, kValue1);
|
| + EXPECT_EQ(1U, db().DataChangeCount());
|
| + EXPECT_EQ(2U, db().MetadataChangeCount());
|
| +
|
| + // Redundant update from server doesn't write data but updates metadata.
|
| + UpdateFromServer(5, kTag1, kValue1);
|
| + EXPECT_EQ(1U, db().DataChangeCount());
|
| + EXPECT_EQ(3U, db().MetadataChangeCount());
|
| +
|
| + // A reflection (update already received) is ignored completely.
|
| + UpdateFromServer(0 /* version_offset */, kTag1, kValue1);
|
| + EXPECT_EQ(1U, db().DataChangeCount());
|
| + EXPECT_EQ(3U, db().MetadataChangeCount());
|
| +}
|
| +
|
| // Tests locally deleting an acknowledged item.
|
| TEST_F(SharedModelTypeProcessorTest, LocalDeleteItem) {
|
| InitializeToReadyState();
|
|
|