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