Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(417)

Side by Side Diff: sync/syncable/model_type_unittest.cc

Issue 2130453004: [Sync] Move //sync to //components/sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « sync/syncable/model_type.cc ('k') | sync/syncable/mutable_entry.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 <memory>
6 #include <string>
7
8 #include "base/strings/string_util.h"
9 #include "base/test/values_test_util.h"
10 #include "base/values.h"
11 #include "sync/internal_api/public/base/model_type.h"
12 #include "sync/protocol/sync.pb.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace syncer {
16 namespace {
17
18 class ModelTypeTest : public testing::Test {};
19
20 TEST_F(ModelTypeTest, ModelTypeToValue) {
21 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) {
22 ModelType model_type = ModelTypeFromInt(i);
23 base::ExpectStringValue(ModelTypeToString(model_type),
24 ModelTypeToValue(model_type));
25 }
26 base::ExpectStringValue("Top-level folder",
27 ModelTypeToValue(TOP_LEVEL_FOLDER));
28 base::ExpectStringValue("Unspecified",
29 ModelTypeToValue(UNSPECIFIED));
30 }
31
32 TEST_F(ModelTypeTest, ModelTypeFromValue) {
33 for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) {
34 ModelType model_type = ModelTypeFromInt(i);
35 std::unique_ptr<base::StringValue> value(ModelTypeToValue(model_type));
36 EXPECT_EQ(model_type, ModelTypeFromValue(*value));
37 }
38 }
39
40 TEST_F(ModelTypeTest, ModelTypeSetToValue) {
41 const ModelTypeSet model_types(BOOKMARKS, APPS);
42
43 std::unique_ptr<base::ListValue> value(ModelTypeSetToValue(model_types));
44 EXPECT_EQ(2u, value->GetSize());
45 std::string types[2];
46 EXPECT_TRUE(value->GetString(0, &types[0]));
47 EXPECT_TRUE(value->GetString(1, &types[1]));
48 EXPECT_EQ("Bookmarks", types[0]);
49 EXPECT_EQ("Apps", types[1]);
50 }
51
52 TEST_F(ModelTypeTest, ModelTypeSetFromValue) {
53 // Try empty set first.
54 ModelTypeSet model_types;
55 std::unique_ptr<base::ListValue> value(ModelTypeSetToValue(model_types));
56 EXPECT_EQ(model_types, ModelTypeSetFromValue(*value));
57
58 // Now try with a few random types.
59 model_types.Put(BOOKMARKS);
60 model_types.Put(APPS);
61 value = ModelTypeSetToValue(model_types);
62 EXPECT_EQ(model_types, ModelTypeSetFromValue(*value));
63 }
64
65 TEST_F(ModelTypeTest, IsRealDataType) {
66 EXPECT_FALSE(IsRealDataType(UNSPECIFIED));
67 EXPECT_FALSE(IsRealDataType(MODEL_TYPE_COUNT));
68 EXPECT_FALSE(IsRealDataType(TOP_LEVEL_FOLDER));
69 EXPECT_TRUE(IsRealDataType(FIRST_REAL_MODEL_TYPE));
70 EXPECT_TRUE(IsRealDataType(BOOKMARKS));
71 EXPECT_TRUE(IsRealDataType(APPS));
72 EXPECT_TRUE(IsRealDataType(ARC_PACKAGE));
73 }
74
75 TEST_F(ModelTypeTest, IsProxyType) {
76 EXPECT_FALSE(IsProxyType(BOOKMARKS));
77 EXPECT_FALSE(IsProxyType(MODEL_TYPE_COUNT));
78 EXPECT_TRUE(IsProxyType(PROXY_TABS));
79 }
80
81 // Make sure we can convert ModelTypes to and from specifics field
82 // numbers.
83 TEST_F(ModelTypeTest, ModelTypeToFromSpecificsFieldNumber) {
84 ModelTypeSet protocol_types = ProtocolTypes();
85 for (ModelTypeSet::Iterator iter = protocol_types.First(); iter.Good();
86 iter.Inc()) {
87 int field_number = GetSpecificsFieldNumberFromModelType(iter.Get());
88 EXPECT_EQ(iter.Get(),
89 GetModelTypeFromSpecificsFieldNumber(field_number));
90 }
91 }
92
93 TEST_F(ModelTypeTest, ModelTypeOfInvalidSpecificsFieldNumber) {
94 EXPECT_EQ(UNSPECIFIED, GetModelTypeFromSpecificsFieldNumber(0));
95 }
96
97 TEST_F(ModelTypeTest, ModelTypeHistogramMapping) {
98 std::set<int> histogram_values;
99 ModelTypeSet all_types = ModelTypeSet::All();
100 for (ModelTypeSet::Iterator it = all_types.First(); it.Good(); it.Inc()) {
101 SCOPED_TRACE(ModelTypeToString(it.Get()));
102 int histogram_value = ModelTypeToHistogramInt(it.Get());
103
104 EXPECT_TRUE(histogram_values.insert(histogram_value).second)
105 << "Expected histogram values to be unique";
106
107 // This is not necessary for the mapping to be valid, but most instances of
108 // UMA_HISTOGRAM that use this mapping specify MODEL_TYPE_COUNT as the
109 // maximum possible value. If you break this assumption, you should update
110 // those histograms.
111 EXPECT_LT(histogram_value, MODEL_TYPE_COUNT);
112 }
113 }
114
115 TEST_F(ModelTypeTest, ModelTypeSetFromString) {
116 syncer::ModelTypeSet empty;
117 syncer::ModelTypeSet one(BOOKMARKS);
118 syncer::ModelTypeSet two(BOOKMARKS, TYPED_URLS);
119
120 EXPECT_EQ(empty, ModelTypeSetFromString(ModelTypeSetToString(empty)));
121 EXPECT_EQ(one, ModelTypeSetFromString(ModelTypeSetToString(one)));
122 EXPECT_EQ(two, ModelTypeSetFromString(ModelTypeSetToString(two)));
123 }
124
125 TEST_F(ModelTypeTest, DefaultFieldValues) {
126 syncer::ModelTypeSet types = syncer::ProtocolTypes();
127 for (ModelTypeSet::Iterator it = types.First(); it.Good(); it.Inc()) {
128 SCOPED_TRACE(ModelTypeToString(it.Get()));
129
130 sync_pb::EntitySpecifics specifics;
131 syncer::AddDefaultFieldValue(it.Get(), &specifics);
132 EXPECT_TRUE(specifics.IsInitialized());
133
134 std::string tmp;
135 EXPECT_TRUE(specifics.SerializeToString(&tmp));
136
137 sync_pb::EntitySpecifics from_string;
138 EXPECT_TRUE(from_string.ParseFromString(tmp));
139 EXPECT_TRUE(from_string.IsInitialized());
140
141 EXPECT_EQ(it.Get(), syncer::GetModelTypeFromSpecifics(from_string));
142 }
143 }
144
145 TEST_F(ModelTypeTest, ModelTypeToRootTagValues) {
146 ModelTypeSet all_types = ModelTypeSet::All();
147 for (ModelTypeSet::Iterator it = all_types.First(); it.Good(); it.Inc()) {
148 ModelType model_type = it.Get();
149 std::string root_tag = ModelTypeToRootTag(model_type);
150 if (IsProxyType(model_type)) {
151 EXPECT_EQ(root_tag, std::string());
152 } else if (IsRealDataType(model_type)) {
153 EXPECT_TRUE(base::StartsWith(root_tag, "google_chrome_",
154 base::CompareCase::INSENSITIVE_ASCII));
155 } else {
156 EXPECT_EQ(root_tag, "INVALID");
157 }
158 }
159 }
160
161 TEST_F(ModelTypeTest, ModelTypeStringMapping) {
162 ModelTypeSet all_types = ModelTypeSet::All();
163 for (ModelTypeSet::Iterator it = all_types.First(); it.Good(); it.Inc()) {
164 ModelType model_type = it.Get();
165 const char* model_type_string = ModelTypeToString(model_type);
166 ModelType converted_model_type = ModelTypeFromString(model_type_string);
167 if (IsRealDataType(model_type))
168 EXPECT_EQ(converted_model_type, model_type);
169 else
170 EXPECT_EQ(converted_model_type, UNSPECIFIED);
171 }
172 }
173
174 TEST_F(ModelTypeTest, ModelTypeNotificationTypeMapping) {
175 ModelTypeSet all_types = ModelTypeSet::All();
176 for (ModelTypeSet::Iterator it = all_types.First(); it.Good(); it.Inc()) {
177 ModelType model_type = it.Get();
178 std::string notification_type;
179 bool ret = RealModelTypeToNotificationType(model_type, &notification_type);
180 if (ret) {
181 ModelType notified_model_type;
182 EXPECT_TRUE(NotificationTypeToRealModelType(notification_type,
183 &notified_model_type));
184 EXPECT_EQ(notified_model_type, model_type);
185 } else {
186 EXPECT_FALSE(ProtocolTypes().Has(model_type));
187 EXPECT_TRUE(notification_type.empty());
188 }
189 }
190 }
191
192 } // namespace
193 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/syncable/model_type.cc ('k') | sync/syncable/mutable_entry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698