Add a minor text member to ui::MenuModel.
[chromium-blink-merge.git] / chrome / browser / policy / policy_map_unittest.cc
blob1386618a7561d1b834dfd55a63b5cd04296e60fe
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.
5 #include "chrome/browser/policy/policy_map.h"
7 #include "base/callback.h"
8 #include "base/memory/weak_ptr.h"
9 #include "chrome/browser/policy/external_data_manager.h"
10 #include "policy/policy_constants.h"
11 #include "testing/gtest/include/gtest/gtest.h"
13 namespace policy {
15 namespace {
17 // Utility functions for the tests.
18 void SetPolicy(PolicyMap* map, const char* name, Value* value) {
19 map->Set(name, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, value, NULL);
22 void SetPolicy(PolicyMap* map,
23 const char* name,
24 ExternalDataFetcher* external_data_fetcher) {
25 map->Set(name, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
26 NULL, external_data_fetcher);
29 } // namespace
31 class PolicyMapTest : public testing::Test {
32 protected:
33 scoped_ptr<ExternalDataFetcher> CreateExternalDataFetcher(
34 const std::string& policy) const;
37 scoped_ptr<ExternalDataFetcher> PolicyMapTest::CreateExternalDataFetcher(
38 const std::string& policy) const {
39 return make_scoped_ptr(
40 new ExternalDataFetcher(base::WeakPtr<ExternalDataManager>(), policy));
43 TEST_F(PolicyMapTest, SetAndGet) {
44 PolicyMap map;
45 SetPolicy(&map, key::kHomepageLocation, Value::CreateStringValue("aaa"));
46 StringValue expected("aaa");
47 EXPECT_TRUE(expected.Equals(map.GetValue(key::kHomepageLocation)));
48 SetPolicy(&map, key::kHomepageLocation, Value::CreateStringValue("bbb"));
49 StringValue expected_b("bbb");
50 EXPECT_TRUE(expected_b.Equals(map.GetValue(key::kHomepageLocation)));
51 SetPolicy(&map, key::kHomepageLocation,
52 CreateExternalDataFetcher("dummy").release());
53 EXPECT_FALSE(map.GetValue(key::kHomepageLocation));
54 const PolicyMap::Entry* entry = map.Get(key::kHomepageLocation);
55 ASSERT_TRUE(entry != NULL);
56 EXPECT_EQ(POLICY_LEVEL_MANDATORY, entry->level);
57 EXPECT_EQ(POLICY_SCOPE_USER, entry->scope);
58 EXPECT_TRUE(ExternalDataFetcher::Equals(
59 entry->external_data_fetcher, CreateExternalDataFetcher("dummy").get()));
60 map.Set(key::kHomepageLocation, POLICY_LEVEL_RECOMMENDED,
61 POLICY_SCOPE_MACHINE, NULL, NULL);
62 EXPECT_FALSE(map.GetValue(key::kHomepageLocation));
63 entry = map.Get(key::kHomepageLocation);
64 ASSERT_TRUE(entry != NULL);
65 EXPECT_EQ(POLICY_LEVEL_RECOMMENDED, entry->level);
66 EXPECT_EQ(POLICY_SCOPE_MACHINE, entry->scope);
67 EXPECT_FALSE(entry->external_data_fetcher);
70 TEST_F(PolicyMapTest, Equals) {
71 PolicyMap a;
72 SetPolicy(&a, key::kHomepageLocation, Value::CreateStringValue("aaa"));
73 PolicyMap a2;
74 SetPolicy(&a2, key::kHomepageLocation, Value::CreateStringValue("aaa"));
75 PolicyMap b;
76 SetPolicy(&b, key::kHomepageLocation, Value::CreateStringValue("bbb"));
77 PolicyMap c;
78 SetPolicy(&c, key::kHomepageLocation, Value::CreateStringValue("aaa"));
79 SetPolicy(&c, key::kHomepageIsNewTabPage, Value::CreateBooleanValue(true));
80 PolicyMap d;
81 SetPolicy(&d, key::kHomepageLocation,
82 CreateExternalDataFetcher("ddd").release());
83 PolicyMap d2;
84 SetPolicy(&d2, key::kHomepageLocation,
85 CreateExternalDataFetcher("ddd").release());
86 PolicyMap e;
87 SetPolicy(&e, key::kHomepageLocation,
88 CreateExternalDataFetcher("eee").release());
89 EXPECT_FALSE(a.Equals(b));
90 EXPECT_FALSE(a.Equals(c));
91 EXPECT_FALSE(a.Equals(d));
92 EXPECT_FALSE(a.Equals(e));
93 EXPECT_FALSE(b.Equals(a));
94 EXPECT_FALSE(b.Equals(c));
95 EXPECT_FALSE(b.Equals(d));
96 EXPECT_FALSE(b.Equals(e));
97 EXPECT_FALSE(c.Equals(a));
98 EXPECT_FALSE(c.Equals(b));
99 EXPECT_FALSE(c.Equals(d));
100 EXPECT_FALSE(c.Equals(e));
101 EXPECT_FALSE(d.Equals(a));
102 EXPECT_FALSE(d.Equals(b));
103 EXPECT_FALSE(d.Equals(c));
104 EXPECT_FALSE(d.Equals(e));
105 EXPECT_FALSE(e.Equals(a));
106 EXPECT_FALSE(e.Equals(b));
107 EXPECT_FALSE(e.Equals(c));
108 EXPECT_FALSE(e.Equals(d));
109 EXPECT_TRUE(a.Equals(a2));
110 EXPECT_TRUE(a2.Equals(a));
111 EXPECT_TRUE(d.Equals(d2));
112 EXPECT_TRUE(d2.Equals(d));
113 PolicyMap empty1;
114 PolicyMap empty2;
115 EXPECT_TRUE(empty1.Equals(empty2));
116 EXPECT_TRUE(empty2.Equals(empty1));
117 EXPECT_FALSE(empty1.Equals(a));
118 EXPECT_FALSE(a.Equals(empty1));
121 TEST_F(PolicyMapTest, Swap) {
122 PolicyMap a;
123 SetPolicy(&a, key::kHomepageLocation, Value::CreateStringValue("aaa"));
124 SetPolicy(&a, key::kAlternateErrorPagesEnabled,
125 CreateExternalDataFetcher("dummy").release());
126 PolicyMap b;
127 SetPolicy(&b, key::kHomepageLocation, Value::CreateStringValue("bbb"));
128 SetPolicy(&b, key::kHomepageIsNewTabPage, Value::CreateBooleanValue(true));
130 a.Swap(&b);
131 base::StringValue expected("bbb");
132 EXPECT_TRUE(expected.Equals(a.GetValue(key::kHomepageLocation)));
133 base::FundamentalValue expected_bool(true);
134 EXPECT_TRUE(expected_bool.Equals(a.GetValue(key::kHomepageIsNewTabPage)));
135 EXPECT_FALSE(a.GetValue(key::kAlternateErrorPagesEnabled));
136 EXPECT_FALSE(a.Get(key::kAlternateErrorPagesEnabled));
137 StringValue expected_a("aaa");
138 EXPECT_TRUE(expected_a.Equals(b.GetValue(key::kHomepageLocation)));
139 EXPECT_FALSE(b.GetValue(key::kHomepageIsNewTabPage));
140 EXPECT_FALSE(a.GetValue(key::kAlternateErrorPagesEnabled));
141 const PolicyMap::Entry* entry = b.Get(key::kAlternateErrorPagesEnabled);
142 ASSERT_TRUE(entry);
143 EXPECT_TRUE(ExternalDataFetcher::Equals(
144 CreateExternalDataFetcher("dummy").get(), entry->external_data_fetcher));
146 b.Clear();
147 a.Swap(&b);
148 PolicyMap empty;
149 EXPECT_TRUE(a.Equals(empty));
150 EXPECT_FALSE(b.Equals(empty));
153 TEST_F(PolicyMapTest, MergeFrom) {
154 PolicyMap a;
155 a.Set(key::kHomepageLocation, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
156 Value::CreateStringValue("google.com"), NULL);
157 a.Set(key::kShowHomeButton, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
158 Value::CreateBooleanValue(true), NULL);
159 a.Set(key::kAlternateErrorPagesEnabled,
160 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
161 NULL, CreateExternalDataFetcher("a").release());
162 a.Set(key::kBookmarkBarEnabled, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
163 Value::CreateBooleanValue(false), NULL);
164 a.Set(key::kDefaultSearchProviderSearchURL,
165 POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_MACHINE,
166 Value::CreateStringValue("google.com/q={x}"), NULL);
168 PolicyMap b;
169 b.Set(key::kHomepageLocation, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
170 Value::CreateStringValue("chromium.org"), NULL);
171 b.Set(key::kShowHomeButton, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
172 Value::CreateBooleanValue(false), NULL);
173 b.Set(key::kAlternateErrorPagesEnabled,
174 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
175 NULL, CreateExternalDataFetcher("b").release());
176 b.Set(key::kBookmarkBarEnabled, POLICY_LEVEL_RECOMMENDED,
177 POLICY_SCOPE_MACHINE, Value::CreateBooleanValue(true), NULL);
178 b.Set(key::kDefaultSearchProviderSearchURL,
179 POLICY_LEVEL_MANDATORY,
180 POLICY_SCOPE_MACHINE,
181 Value::CreateStringValue(std::string()),
182 NULL);
183 b.Set(key::kDisableSpdy,
184 POLICY_LEVEL_RECOMMENDED,
185 POLICY_SCOPE_USER,
186 Value::CreateBooleanValue(true),
187 NULL);
189 a.MergeFrom(b);
191 PolicyMap c;
192 // POLICY_SCOPE_MACHINE over POLICY_SCOPE_USER.
193 c.Set(key::kHomepageLocation, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
194 Value::CreateStringValue("chromium.org"), NULL);
195 // |a| has precedence over |b|.
196 c.Set(key::kShowHomeButton, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
197 Value::CreateBooleanValue(true), NULL);
198 c.Set(key::kAlternateErrorPagesEnabled,
199 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
200 NULL, CreateExternalDataFetcher("a").release());
201 // POLICY_SCOPE_MACHINE over POLICY_SCOPE_USER for POLICY_LEVEL_RECOMMENDED.
202 c.Set(key::kBookmarkBarEnabled, POLICY_LEVEL_RECOMMENDED,
203 POLICY_SCOPE_MACHINE, Value::CreateBooleanValue(true), NULL);
204 // POLICY_LEVEL_MANDATORY over POLICY_LEVEL_RECOMMENDED.
205 c.Set(key::kDefaultSearchProviderSearchURL,
206 POLICY_LEVEL_MANDATORY,
207 POLICY_SCOPE_MACHINE,
208 Value::CreateStringValue(std::string()),
209 NULL);
210 // Merge new ones.
211 c.Set(key::kDisableSpdy, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
212 Value::CreateBooleanValue(true), NULL);
214 EXPECT_TRUE(a.Equals(c));
217 TEST_F(PolicyMapTest, GetDifferingKeys) {
218 PolicyMap a;
219 a.Set(key::kHomepageLocation, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
220 Value::CreateStringValue("google.com"), NULL);
221 a.Set(key::kSearchSuggestEnabled,
222 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
223 NULL, CreateExternalDataFetcher("dummy").release());
224 a.Set(key::kShowHomeButton, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
225 Value::CreateBooleanValue(true), NULL);
226 a.Set(key::kAlternateErrorPagesEnabled,
227 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
228 NULL, CreateExternalDataFetcher("a").release());
229 a.Set(key::kBookmarkBarEnabled, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
230 Value::CreateBooleanValue(false), NULL);
231 a.Set(key::kDefaultSearchProviderSearchURL,
232 POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_MACHINE,
233 Value::CreateStringValue("google.com/q={x}"), NULL);
234 a.Set(key::kDisable3DAPIs, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
235 Value::CreateBooleanValue(true), NULL);
237 PolicyMap b;
238 b.Set(key::kHomepageLocation, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
239 Value::CreateStringValue("google.com"), NULL);
240 b.Set(key::kSearchSuggestEnabled,
241 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
242 NULL, CreateExternalDataFetcher("dummy").release());
243 b.Set(key::kShowHomeButton, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
244 Value::CreateBooleanValue(false), NULL);
245 b.Set(key::kAlternateErrorPagesEnabled,
246 POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
247 NULL, CreateExternalDataFetcher("b").release());
248 b.Set(key::kBookmarkBarEnabled, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
249 Value::CreateBooleanValue(false), NULL);
250 b.Set(key::kDefaultSearchProviderSearchURL, POLICY_LEVEL_RECOMMENDED,
251 POLICY_SCOPE_USER, Value::CreateStringValue("google.com/q={x}"), NULL);
252 b.Set(key::kDisableSpdy, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
253 Value::CreateBooleanValue(true), NULL);
255 std::set<std::string> diff;
256 std::set<std::string> diff2;
257 a.GetDifferingKeys(b, &diff);
258 b.GetDifferingKeys(a, &diff2);
259 // Order shouldn't matter.
260 EXPECT_EQ(diff, diff2);
261 // No change.
262 EXPECT_TRUE(diff.find(key::kHomepageLocation) == diff.end());
263 EXPECT_TRUE(diff.find(key::kSearchSuggestEnabled) == diff.end());
264 // Different values.
265 EXPECT_TRUE(diff.find(key::kShowHomeButton) != diff.end());
266 // Different external data references.
267 EXPECT_TRUE(diff.find(key::kAlternateErrorPagesEnabled) != diff.end());
268 // Different levels.
269 EXPECT_TRUE(diff.find(key::kBookmarkBarEnabled) != diff.end());
270 // Different scopes.
271 EXPECT_TRUE(diff.find(key::kDefaultSearchProviderSearchURL) != diff.end());
272 // Not in |a|.
273 EXPECT_TRUE(diff.find(key::kDisableSpdy) != diff.end());
274 // Not in |b|.
275 EXPECT_TRUE(diff.find(key::kDisable3DAPIs) != diff.end());
276 // No surprises.
277 EXPECT_EQ(6u, diff.size());
280 } // namespace policy