mutable_data_batch_unittest.cc 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // Copyright 2015 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/mutable_data_batch.h"
  5. #include "base/memory/ptr_util.h"
  6. #include "components/sync/protocol/entity_data.h"
  7. #include "testing/gtest/include/gtest/gtest.h"
  8. namespace syncer {
  9. TEST(MutableDataBatchTest, PutAndNextWithReuse) {
  10. EntityData* entity1 = new EntityData();
  11. EntityData* entity2 = new EntityData();
  12. MutableDataBatch batch;
  13. EXPECT_FALSE(batch.HasNext());
  14. batch.Put("one", base::WrapUnique(entity1));
  15. EXPECT_TRUE(batch.HasNext());
  16. auto [key1, data1] = batch.Next();
  17. EXPECT_FALSE(batch.HasNext());
  18. EXPECT_EQ("one", key1);
  19. EXPECT_EQ(entity1, data1.get());
  20. batch.Put("two", base::WrapUnique(entity2));
  21. EXPECT_TRUE(batch.HasNext());
  22. auto [key2, data2] = batch.Next();
  23. EXPECT_FALSE(batch.HasNext());
  24. EXPECT_EQ("two", key2);
  25. EXPECT_EQ(entity2, data2.get());
  26. }
  27. TEST(MutableDataBatchTest, PutAndNextInterleaved) {
  28. EntityData* entity1 = new EntityData();
  29. EntityData* entity2 = new EntityData();
  30. EntityData* entity3 = new EntityData();
  31. MutableDataBatch batch;
  32. EXPECT_FALSE(batch.HasNext());
  33. batch.Put("one", base::WrapUnique(entity1));
  34. EXPECT_TRUE(batch.HasNext());
  35. batch.Put("two", base::WrapUnique(entity2));
  36. EXPECT_TRUE(batch.HasNext());
  37. auto [key1, data1] = batch.Next();
  38. EXPECT_TRUE(batch.HasNext());
  39. EXPECT_EQ("one", key1);
  40. EXPECT_EQ(entity1, data1.get());
  41. batch.Put("three", base::WrapUnique(entity3));
  42. EXPECT_TRUE(batch.HasNext());
  43. auto [key2, data2] = batch.Next();
  44. EXPECT_TRUE(batch.HasNext());
  45. EXPECT_EQ("two", key2);
  46. EXPECT_EQ(entity2, data2.get());
  47. auto [key3, data3] = batch.Next();
  48. EXPECT_FALSE(batch.HasNext());
  49. EXPECT_EQ("three", key3);
  50. EXPECT_EQ(entity3, data3.get());
  51. }
  52. TEST(MutableDataBatchTest, PutAndNextSharedKey) {
  53. EntityData* entity1 = new EntityData();
  54. EntityData* entity2 = new EntityData();
  55. MutableDataBatch batch;
  56. EXPECT_FALSE(batch.HasNext());
  57. batch.Put("same", base::WrapUnique(entity1));
  58. EXPECT_TRUE(batch.HasNext());
  59. batch.Put("same", base::WrapUnique(entity2));
  60. EXPECT_TRUE(batch.HasNext());
  61. auto [key1, data1] = batch.Next();
  62. EXPECT_TRUE(batch.HasNext());
  63. EXPECT_EQ("same", key1);
  64. EXPECT_EQ(entity1, data1.get());
  65. auto [key2, data2] = batch.Next();
  66. EXPECT_FALSE(batch.HasNext());
  67. EXPECT_EQ("same", key2);
  68. EXPECT_EQ(entity2, data2.get());
  69. }
  70. } // namespace syncer