Home | History | Annotate | Download | only in base
      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 
      5 #include "sync/internal_api/public/base/model_type_invalidation_map.h"
      6 
      7 #include <string>
      8 
      9 #include "base/memory/scoped_ptr.h"
     10 #include "base/test/values_test_util.h"
     11 #include "base/values.h"
     12 #include "testing/gtest/include/gtest/gtest.h"
     13 
     14 namespace syncer {
     15 namespace {
     16 
     17 using base::ExpectDictStringValue;
     18 
     19 class ModelTypeInvalidationMapTest : public testing::Test {};
     20 
     21 TEST_F(ModelTypeInvalidationMapTest, TypeInvalidationMapToSet) {
     22   ModelTypeInvalidationMap states;
     23   states[BOOKMARKS].payload = "bookmarkpayload";
     24   states[APPS].payload = "";
     25 
     26   const ModelTypeSet types(BOOKMARKS, APPS);
     27   EXPECT_TRUE(ModelTypeInvalidationMapToSet(states).Equals(types));
     28 }
     29 
     30 TEST_F(ModelTypeInvalidationMapTest, TypeInvalidationMapToValue) {
     31   ModelTypeInvalidationMap states;
     32   states[BOOKMARKS].payload = "bookmarkpayload";
     33   states[APPS].payload = "";
     34 
     35   scoped_ptr<base::DictionaryValue> value(
     36       ModelTypeInvalidationMapToValue(states));
     37   EXPECT_EQ(2u, value->size());
     38   ExpectDictStringValue(states[BOOKMARKS].payload, *value, "Bookmarks");
     39   ExpectDictStringValue(std::string(), *value, "Apps");
     40   EXPECT_FALSE(value->HasKey("Preferences"));
     41 }
     42 
     43 TEST_F(ModelTypeInvalidationMapTest, CoalesceStates) {
     44   ModelTypeInvalidationMap original;
     45   std::string empty_payload;
     46   std::string payload1 = "payload1";
     47   std::string payload2 = "payload2";
     48   std::string payload3 = "payload3";
     49   original[BOOKMARKS].payload = empty_payload;
     50   original[PASSWORDS].payload = payload1;
     51   original[AUTOFILL].payload = payload2;
     52   original[THEMES].payload = payload3;
     53 
     54   ModelTypeInvalidationMap update;
     55   update[BOOKMARKS].payload = empty_payload;  // Same.
     56   update[PASSWORDS].payload = empty_payload;  // Overwrite with empty.
     57   update[AUTOFILL].payload = payload1;        // Overwrite with non-empty.
     58   update[SESSIONS].payload = payload2;        // New.
     59   // Themes untouched.
     60 
     61   CoalesceStates(update, &original);
     62   ASSERT_EQ(5U, original.size());
     63   EXPECT_EQ(empty_payload, original[BOOKMARKS].payload);
     64   EXPECT_EQ(payload1, original[PASSWORDS].payload);
     65   EXPECT_EQ(payload1, original[AUTOFILL].payload);
     66   EXPECT_EQ(payload2, original[SESSIONS].payload);
     67   EXPECT_EQ(payload3, original[THEMES].payload);
     68 }
     69 
     70 }  // namespace
     71 }  // namespace syncer
     72