OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2011 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 "base/basictypes.h" | |
6 #include "base/ref_counted.h" | |
7 #include "base/scoped_ptr.h" | |
8 #include "base/values.h" | |
9 #include "chrome/browser/extensions/extension_pref_value_map.h" | |
10 #include "chrome/common/pref_store_observer_mock.h" | |
11 #include "testing/gtest/include/gtest/gtest.h" | |
12 | |
13 namespace { | |
14 const char kExt1[] = "ext1"; | |
15 const char kExt2[] = "ext2"; | |
16 const char kExt3[] = "ext3"; | |
17 | |
18 const char kPref1[] = "path1.subpath"; | |
19 const char kPref2[] = "path2"; | |
20 const char kPref3[] = "path3"; | |
21 const char kPref4[] = "path4"; | |
22 } // namespace | |
23 | |
24 static Value* createVal(const char* str) { | |
25 return Value::CreateStringValue(str); | |
26 } | |
27 | |
28 template <typename BASECLASS> | |
29 class ExtensionPrefStoreTestBase : public BASECLASS { | |
Mattias Nissler (ping if slow)
2011/01/05 12:08:07
I think the classes here should be named Extension
battre
2011/01/05 20:23:08
Done.
| |
30 public: | |
31 // Returns an empty string if the key is not set. | |
32 std::string GetValue(const char * key, bool incognito) const { | |
33 const Value *value = epvm_.GetEffectivePrefValue(key, incognito); | |
34 std::string string_value = ""; | |
35 if (value) | |
36 value->GetAsString(&string_value); | |
37 return string_value; | |
38 } | |
39 | |
40 static base::Time createTime(long t) { | |
Mattias Nissler (ping if slow)
2011/01/05 12:08:07
can you sync createVal and createTime to the effec
battre
2011/01/05 20:23:08
Done.
| |
41 return base::Time::FromInternalValue(10); | |
42 } | |
43 | |
44 protected: | |
45 ExtensionPrefValueMap epvm_; | |
46 }; | |
47 | |
48 class ExtensionPrefStoreTest | |
49 : public ExtensionPrefStoreTestBase<testing::Test> { | |
50 }; | |
51 | |
52 template<typename BASECLASS> | |
53 class ExtensionPrefStoreTestParameterized | |
Mattias Nissler (ping if slow)
2011/01/05 12:08:07
Seems this class definition is not really helpful,
battre
2011/01/05 20:23:08
Done.
| |
54 : public ExtensionPrefStoreTestBase<testing::TestWithParam<BASECLASS> > { | |
55 }; | |
56 | |
57 TEST_F(ExtensionPrefStoreTest, SetAndGetPrefValue) { | |
58 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
59 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1")); | |
60 EXPECT_EQ("val1", GetValue(kPref1, false)); | |
61 }; | |
62 | |
63 TEST_F(ExtensionPrefStoreTest, GetNotSetPrefValue) { | |
64 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
65 EXPECT_EQ("", GetValue(kPref1, false)); | |
66 }; | |
67 | |
68 // Make sure the last-installed extension wins for each preference. | |
69 TEST_F(ExtensionPrefStoreTest, Overwrite) { | |
Mattias Nissler (ping if slow)
2011/01/05 12:08:07
nit: name this Override
battre
2011/01/05 20:23:08
Done.
| |
70 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
71 epvm_.RegisterExtension(kExt2, createTime(20), true); | |
72 epvm_.RegisterExtension(kExt3, createTime(30), true); | |
73 | |
74 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1")); | |
75 epvm_.SetExtensionPref(kExt2, kPref1, false, createVal("val2")); | |
76 epvm_.SetExtensionPref(kExt3, kPref1, false, createVal("val3")); | |
77 | |
78 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val4")); | |
79 epvm_.SetExtensionPref(kExt2, kPref2, false, createVal("val5")); | |
80 | |
81 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val6")); | |
82 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val7")); | |
83 epvm_.SetExtensionPref(kExt1, kPref3, false, createVal("val8")); | |
84 | |
85 EXPECT_EQ("val3", GetValue(kPref1, false)); | |
86 EXPECT_EQ("val5", GetValue(kPref2, false)); | |
87 EXPECT_EQ("val8", GetValue(kPref3, false)); | |
88 } | |
89 | |
90 TEST_F(ExtensionPrefStoreTest, SetAndGetPrefValueIncognito) { | |
91 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
92 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1")); | |
93 EXPECT_EQ("val1", GetValue(kPref1, true)); | |
94 } | |
95 | |
96 struct OverwriteIncognitoTestCase { | |
97 OverwriteIncognitoTestCase(int val_ext1_regular, | |
98 int val_ext1_incognito, | |
99 int val_ext2_regular, | |
100 int val_ext2_incognito, | |
101 int effective_value_regular, | |
102 int effective_value_incognito) | |
103 : val_ext1_regular_(val_ext1_regular), | |
104 val_ext1_incognito_(val_ext1_incognito), | |
105 val_ext2_regular_(val_ext2_regular), | |
106 val_ext2_incognito_(val_ext2_incognito), | |
107 effective_value_regular_(effective_value_regular), | |
108 effective_value_incognito_(effective_value_incognito) {} | |
109 | |
110 int val_ext1_regular_; // pref value of extension 1 | |
111 int val_ext1_incognito_; // pref value of extension 1 incognito | |
112 int val_ext2_regular_; // pref value of extension 2 | |
113 int val_ext2_incognito_; // pref value of extension 2 incognito | |
114 int effective_value_regular_; // desired winner regular | |
115 int effective_value_incognito_; // desired winner incognito | |
116 }; | |
117 | |
118 class ExtensionPrefStoreTestIncognitoTests | |
Mattias Nissler (ping if slow)
2011/01/05 12:08:07
Can you move this test fixture down below all the
battre
2011/01/05 20:23:08
Done.
| |
119 : public ExtensionPrefStoreTestParameterized<OverwriteIncognitoTestCase> { | |
120 }; | |
121 | |
122 TEST_P(ExtensionPrefStoreTestIncognitoTests, OverwriteIncognito) { | |
123 OverwriteIncognitoTestCase test = GetParam(); | |
124 const char* strings[] = { | |
125 "undefined", | |
126 "val1", | |
127 "val2", | |
128 "val3", | |
129 "val4" | |
130 }; | |
131 | |
132 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
133 epvm_.RegisterExtension(kExt2, createTime(20), true); | |
134 if (test.val_ext1_regular_) { | |
135 epvm_.SetExtensionPref(kExt1, kPref1, false, | |
136 createVal(strings[test.val_ext1_regular_])); | |
137 } | |
138 if (test.val_ext1_incognito_) { | |
139 epvm_.SetExtensionPref(kExt1, kPref1, true, | |
140 createVal(strings[test.val_ext1_incognito_])); | |
141 } | |
142 if (test.val_ext2_regular_) { | |
143 epvm_.SetExtensionPref(kExt2, kPref1, false, | |
144 createVal(strings[test.val_ext2_regular_])); | |
145 } | |
146 if (test.val_ext2_incognito_) { | |
147 epvm_.SetExtensionPref(kExt2, kPref1, true, | |
148 createVal(strings[test.val_ext2_incognito_])); | |
149 } | |
150 std::string actual; | |
151 EXPECT_EQ(strings[test.effective_value_regular_], GetValue(kPref1, false)); | |
152 EXPECT_EQ(strings[test.effective_value_incognito_], GetValue(kPref1, true)); | |
153 epvm_.UnregisterExtension(kExt1); | |
154 epvm_.UnregisterExtension(kExt2); | |
155 } | |
156 | |
157 INSTANTIATE_TEST_CASE_P( | |
158 ExtensionPrefStoreTestIncognitoTestsInstance, | |
159 ExtensionPrefStoreTestIncognitoTests, | |
160 testing::Values( | |
161 // e.g. (1, 0, 0, 4, 1, 4), means: | |
162 // ext1 regular is set to "val1", ext2 incognito is set to "val4" | |
163 // --> the winning regular value is "val1", the winning incognito | |
164 // value is "val4". | |
165 OverwriteIncognitoTestCase(1, 0, 0, 0, 1, 1), | |
166 OverwriteIncognitoTestCase(1, 2, 0, 0, 1, 2), | |
167 OverwriteIncognitoTestCase(1, 0, 3, 0, 3, 3), | |
168 OverwriteIncognitoTestCase(1, 0, 0, 4, 1, 4), | |
169 // The last 3 in the following line is intentional! | |
170 OverwriteIncognitoTestCase(1, 2, 3, 0, 3, 3), | |
171 OverwriteIncognitoTestCase(1, 2, 0, 4, 1, 4), | |
172 OverwriteIncognitoTestCase(1, 2, 3, 4, 3, 4) | |
173 )); | |
174 | |
175 // Make sure the last-installed extension wins even if other extensions set | |
176 // the same or different preferences later. | |
177 TEST_F(ExtensionPrefStoreTest, OverrideInterleaved) { | |
Mattias Nissler (ping if slow)
2011/01/05 12:08:07
Does this really give us additional coverage over
battre
2011/01/05 20:23:08
This is mostly legacy from the old unit tests. It
| |
178 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
179 epvm_.RegisterExtension(kExt2, createTime(20), true); | |
180 epvm_.RegisterExtension(kExt3, createTime(30), true); | |
181 | |
182 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1")); | |
183 epvm_.SetExtensionPref(kExt2, kPref2, false, createVal("val2")); | |
184 epvm_.SetExtensionPref(kExt3, kPref3, false, createVal("val3")); | |
185 | |
186 epvm_.SetExtensionPref(kExt3, kPref3, false, createVal("val4")); | |
187 epvm_.SetExtensionPref(kExt2, kPref3, false, createVal("val5")); | |
188 epvm_.SetExtensionPref(kExt1, kPref3, false, createVal("val6")); | |
189 | |
190 epvm_.SetExtensionPref(kExt3, kPref1, false, createVal("val7")); | |
191 | |
192 EXPECT_EQ("val7", GetValue(kPref1, false)); | |
193 EXPECT_EQ("val2", GetValue(kPref2, false)); | |
194 EXPECT_EQ("val4", GetValue(kPref3, false)); | |
195 EXPECT_EQ("val7", GetValue(kPref1, true)); | |
196 EXPECT_EQ("val2", GetValue(kPref2, true)); | |
197 EXPECT_EQ("val4", GetValue(kPref3, true)); | |
198 } | |
199 | |
200 TEST_F(ExtensionPrefStoreTest, UninstallOnlyExtension) { | |
201 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
202 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1")); | |
203 epvm_.UnregisterExtension(kExt1); | |
204 | |
205 EXPECT_EQ("", GetValue(kPref1, false)); | |
206 } | |
207 | |
208 // Tests uninstalling an extension that wasn't winning for any preferences. | |
209 TEST_F(ExtensionPrefStoreTest, UninstallIrrelevantExtension) { | |
210 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
211 epvm_.RegisterExtension(kExt2, createTime(10), true); | |
212 | |
213 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1")); | |
214 epvm_.SetExtensionPref(kExt2, kPref1, false, createVal("val2")); | |
215 | |
216 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val3")); | |
217 epvm_.SetExtensionPref(kExt2, kPref2, false, createVal("val4")); | |
218 | |
219 epvm_.UnregisterExtension(kExt1); | |
220 | |
221 EXPECT_EQ("val2", GetValue(kPref1, false)); | |
222 EXPECT_EQ("val4", GetValue(kPref2, false)); | |
223 } | |
224 | |
225 // Tests uninstalling an extension that was winning for all preferences. | |
226 TEST_F(ExtensionPrefStoreTest, UninstallExtensionFromTop) { | |
227 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
228 epvm_.RegisterExtension(kExt2, createTime(20), true); | |
229 epvm_.RegisterExtension(kExt3, createTime(30), true); | |
230 | |
231 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1")); | |
232 epvm_.SetExtensionPref(kExt2, kPref1, false, createVal("val2")); | |
233 epvm_.SetExtensionPref(kExt3, kPref1, false, createVal("val3")); | |
234 | |
235 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val4")); | |
236 epvm_.SetExtensionPref(kExt3, kPref2, false, createVal("val5")); | |
237 | |
238 epvm_.UnregisterExtension(kExt3); | |
239 | |
240 EXPECT_EQ("val2", GetValue(kPref1, false)); | |
241 EXPECT_EQ("val4", GetValue(kPref2, false)); | |
242 } | |
243 | |
244 // Tests uninstalling an extension that was winning for only some preferences. | |
245 TEST_F(ExtensionPrefStoreTest, UninstallExtensionFromMiddle) { | |
246 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
247 epvm_.RegisterExtension(kExt2, createTime(20), true); | |
248 epvm_.RegisterExtension(kExt3, createTime(30), true); | |
249 | |
250 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1")); | |
251 epvm_.SetExtensionPref(kExt2, kPref1, false, createVal("val2")); | |
252 epvm_.SetExtensionPref(kExt3, kPref1, false, createVal("val3")); | |
253 | |
254 epvm_.SetExtensionPref(kExt1, kPref2, false, createVal("val4")); | |
255 epvm_.SetExtensionPref(kExt2, kPref2, false, createVal("val5")); | |
256 | |
257 epvm_.SetExtensionPref(kExt1, kPref3, false, createVal("val6")); | |
258 | |
259 epvm_.SetExtensionPref(kExt2, kPref4, false, createVal("val7")); | |
260 | |
261 epvm_.UnregisterExtension(kExt2); | |
262 | |
263 EXPECT_EQ("val3", GetValue(kPref1, false)); | |
264 EXPECT_EQ("val4", GetValue(kPref2, false)); | |
265 EXPECT_EQ("val6", GetValue(kPref3, false)); | |
266 EXPECT_EQ("", GetValue(kPref4, false)); | |
267 } | |
268 | |
269 // Tests triggering of notifications to registered observers. | |
270 TEST_F(ExtensionPrefStoreTest, NotifyWhenNeeded) { | |
271 using testing::_; | |
272 using testing::Mock; | |
273 using testing::StrEq; | |
274 | |
275 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
276 | |
277 PrefStoreObserverMock observer; | |
278 epvm_.AddObserver(&observer); | |
279 | |
280 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))); | |
281 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1")); | |
282 Mock::VerifyAndClearExpectations(&observer); | |
283 | |
284 // Write the same value again | |
Mattias Nissler (ping if slow)
2011/01/05 12:08:07
Comment missing period (also below).
battre
2011/01/05 20:23:08
Done.
| |
285 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))).Times(0); | |
286 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1")); | |
287 Mock::VerifyAndClearExpectations(&observer); | |
288 | |
289 // Overwrite incognito value | |
Mattias Nissler (ping if slow)
2011/01/05 12:08:07
nit: I think you should decide on either overwrite
battre
2011/01/05 20:23:08
Done.
| |
290 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))); | |
291 epvm_.SetExtensionPref(kExt1, kPref1, true, createVal("val2")); | |
292 Mock::VerifyAndClearExpectations(&observer); | |
293 | |
294 // Overwrite non-incognito value | |
295 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))); | |
296 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val3")); | |
297 Mock::VerifyAndClearExpectations(&observer); | |
298 | |
299 // Disable | |
300 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))); | |
301 epvm_.UpdateExtensionsState(kExt1, false); | |
302 Mock::VerifyAndClearExpectations(&observer); | |
303 | |
304 // Enable | |
305 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))); | |
306 epvm_.UpdateExtensionsState(kExt1, true); | |
307 Mock::VerifyAndClearExpectations(&observer); | |
308 | |
309 // Uninstall | |
310 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))); | |
311 epvm_.UnregisterExtension(kExt1); | |
312 Mock::VerifyAndClearExpectations(&observer); | |
313 | |
314 epvm_.RemoveObserver(&observer); | |
315 | |
316 // Write new value --> no notification ofter removing observer | |
Mattias Nissler (ping if slow)
2011/01/05 12:08:07
s/ofter/after/
battre
2011/01/05 20:23:08
Done.
| |
317 EXPECT_CALL(observer, OnPrefValueChanged(std::string(kPref1))).Times(0); | |
318 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
319 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val4")); | |
320 Mock::VerifyAndClearExpectations(&observer); | |
321 } | |
322 | |
323 // Tests disabling an extension | |
324 TEST_F(ExtensionPrefStoreTest, DisableExt) { | |
325 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
326 | |
327 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1")); | |
328 epvm_.UpdateExtensionsState(kExt1, false); | |
329 EXPECT_EQ("", GetValue(kPref1, false)); | |
330 } | |
331 | |
332 // Tests disabling and reenabling an extension | |
333 TEST_F(ExtensionPrefStoreTest, ReenableExt) { | |
334 epvm_.RegisterExtension(kExt1, createTime(10), true); | |
335 | |
336 epvm_.SetExtensionPref(kExt1, kPref1, false, createVal("val1")); | |
337 epvm_.UpdateExtensionsState(kExt1, false); | |
338 epvm_.UpdateExtensionsState(kExt1, true); | |
339 EXPECT_EQ("val1", GetValue(kPref1, false)); | |
340 } | |
OLD | NEW |