OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "extensions/browser/value_store/value_store_unittest.h" | 5 #include "extensions/browser/value_store/value_store_unittest.h" |
6 | 6 |
7 #include <utility> | |
8 | |
7 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
8 #include "base/memory/linked_ptr.h" | 10 #include "base/memory/linked_ptr.h" |
9 #include "base/values.h" | 11 #include "base/values.h" |
10 | 12 |
11 using content::BrowserThread; | 13 using content::BrowserThread; |
12 | 14 |
13 namespace { | 15 namespace { |
14 | 16 |
15 // To save typing ValueStore::DEFAULTS everywhere. | 17 // To save typing ValueStore::DEFAULTS everywhere. |
16 const ValueStore::WriteOptions DEFAULTS = ValueStore::DEFAULTS; | 18 const ValueStore::WriteOptions DEFAULTS = ValueStore::DEFAULTS; |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
149 list123_.push_back(key2_); | 151 list123_.push_back(key2_); |
150 list123_.push_back(key3_); | 152 list123_.push_back(key3_); |
151 | 153 |
152 set1_.insert(list1_.begin(), list1_.end()); | 154 set1_.insert(list1_.begin(), list1_.end()); |
153 set2_.insert(list2_.begin(), list2_.end()); | 155 set2_.insert(list2_.begin(), list2_.end()); |
154 set3_.insert(list3_.begin(), list3_.end()); | 156 set3_.insert(list3_.begin(), list3_.end()); |
155 set12_.insert(list12_.begin(), list12_.end()); | 157 set12_.insert(list12_.begin(), list12_.end()); |
156 set13_.insert(list13_.begin(), list13_.end()); | 158 set13_.insert(list13_.begin(), list13_.end()); |
157 set123_.insert(list123_.begin(), list123_.end()); | 159 set123_.insert(list123_.begin(), list123_.end()); |
158 | 160 |
159 dict1_->Set(key1_, val1_->DeepCopy()); | 161 dict1_->Set(key1_, val1_->CreateDeepCopy()); |
160 dict3_->Set(key3_, val3_->DeepCopy()); | 162 dict3_->Set(key3_, val3_->CreateDeepCopy()); |
161 dict12_->Set(key1_, val1_->DeepCopy()); | 163 dict12_->Set(key1_, val1_->CreateDeepCopy()); |
162 dict12_->Set(key2_, val2_->DeepCopy()); | 164 dict12_->Set(key2_, val2_->CreateDeepCopy()); |
163 dict123_->Set(key1_, val1_->DeepCopy()); | 165 dict123_->Set(key1_, val1_->CreateDeepCopy()); |
164 dict123_->Set(key2_, val2_->DeepCopy()); | 166 dict123_->Set(key2_, val2_->CreateDeepCopy()); |
165 dict123_->Set(key3_, val3_->DeepCopy()); | 167 dict123_->Set(key3_, val3_->CreateDeepCopy()); |
166 } | 168 } |
167 | 169 |
168 ValueStoreTest::~ValueStoreTest() {} | 170 ValueStoreTest::~ValueStoreTest() {} |
169 | 171 |
170 void ValueStoreTest::SetUp() { | 172 void ValueStoreTest::SetUp() { |
171 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 173 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
172 storage_.reset((GetParam())(temp_dir_.path().AppendASCII("dbName"))); | 174 storage_.reset((GetParam())(temp_dir_.path().AppendASCII("dbName"))); |
173 ASSERT_TRUE(storage_.get()); | 175 ASSERT_TRUE(storage_.get()); |
174 } | 176 } |
175 | 177 |
176 void ValueStoreTest::TearDown() { | 178 void ValueStoreTest::TearDown() { |
177 storage_.reset(); | 179 storage_.reset(); |
178 } | 180 } |
179 | 181 |
180 TEST_P(ValueStoreTest, GetWhenEmpty) { | 182 TEST_P(ValueStoreTest, GetWhenEmpty) { |
181 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); | 183 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); |
182 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); | 184 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); |
183 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); | 185 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); |
184 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); | 186 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); |
185 } | 187 } |
186 | 188 |
187 TEST_P(ValueStoreTest, GetWithSingleValue) { | 189 TEST_P(ValueStoreTest, GetWithSingleValue) { |
188 { | 190 { |
189 ValueStoreChangeList changes; | 191 ValueStoreChangeList changes; |
190 changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); | 192 changes.push_back( |
193 ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy())); | |
191 EXPECT_PRED_FORMAT2(ChangesEq, | 194 EXPECT_PRED_FORMAT2(ChangesEq, |
192 changes, storage_->Set(DEFAULTS, key1_, *val1_)); | 195 changes, storage_->Set(DEFAULTS, key1_, *val1_)); |
193 } | 196 } |
194 | 197 |
195 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); | 198 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); |
196 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key2_)); | 199 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key2_)); |
197 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); | 200 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); |
198 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); | 201 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); |
199 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list123_)); | 202 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list123_)); |
200 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get()); | 203 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get()); |
201 } | 204 } |
202 | 205 |
203 TEST_P(ValueStoreTest, GetWithMultipleValues) { | 206 TEST_P(ValueStoreTest, GetWithMultipleValues) { |
204 { | 207 { |
205 ValueStoreChangeList changes; | 208 ValueStoreChangeList changes; |
206 changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); | 209 changes.push_back( |
207 changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); | 210 ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy())); |
211 changes.push_back( | |
212 ValueStoreChange(key2_, nullptr, val2_->CreateDeepCopy())); | |
208 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); | 213 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); |
209 } | 214 } |
210 | 215 |
211 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); | 216 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); |
212 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); | 217 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); |
213 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); | 218 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); |
214 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_)); | 219 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_)); |
215 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get()); | 220 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get()); |
216 } | 221 } |
217 | 222 |
218 TEST_P(ValueStoreTest, RemoveWhenEmpty) { | 223 TEST_P(ValueStoreTest, RemoveWhenEmpty) { |
219 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), | 224 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), |
220 storage_->Remove(key1_)); | 225 storage_->Remove(key1_)); |
221 | 226 |
222 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); | 227 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); |
223 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_)); | 228 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_)); |
224 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); | 229 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); |
225 } | 230 } |
226 | 231 |
227 TEST_P(ValueStoreTest, RemoveWithSingleValue) { | 232 TEST_P(ValueStoreTest, RemoveWithSingleValue) { |
228 storage_->Set(DEFAULTS, *dict1_); | 233 storage_->Set(DEFAULTS, *dict1_); |
229 { | 234 { |
230 ValueStoreChangeList changes; | 235 ValueStoreChangeList changes; |
231 changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); | 236 changes.push_back( |
237 ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr)); | |
232 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_)); | 238 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_)); |
233 } | 239 } |
234 | 240 |
235 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); | 241 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); |
236 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key2_)); | 242 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key2_)); |
237 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_)); | 243 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_)); |
238 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list12_)); | 244 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list12_)); |
239 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); | 245 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); |
240 } | 246 } |
241 | 247 |
242 TEST_P(ValueStoreTest, RemoveWithMultipleValues) { | 248 TEST_P(ValueStoreTest, RemoveWithMultipleValues) { |
243 storage_->Set(DEFAULTS, *dict123_); | 249 storage_->Set(DEFAULTS, *dict123_); |
244 { | 250 { |
245 ValueStoreChangeList changes; | 251 ValueStoreChangeList changes; |
246 changes.push_back(ValueStoreChange(key3_, val3_->DeepCopy(), NULL)); | 252 changes.push_back( |
253 ValueStoreChange(key3_, val3_->CreateDeepCopy(), nullptr)); | |
247 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key3_)); | 254 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key3_)); |
248 } | 255 } |
249 | 256 |
250 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); | 257 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); |
251 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); | 258 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); |
252 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); | 259 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); |
253 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list1_)); | 260 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list1_)); |
254 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list12_)); | 261 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list12_)); |
255 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list13_)); | 262 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list13_)); |
256 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_)); | 263 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_)); |
257 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get()); | 264 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get()); |
258 | 265 |
259 { | 266 { |
260 ValueStoreChangeList changes; | 267 ValueStoreChangeList changes; |
261 changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); | 268 changes.push_back( |
262 changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); | 269 ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr)); |
270 changes.push_back( | |
271 ValueStoreChange(key2_, val2_->CreateDeepCopy(), nullptr)); | |
263 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_)); | 272 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_)); |
264 } | 273 } |
265 | 274 |
266 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); | 275 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); |
267 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); | 276 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); |
268 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); | 277 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); |
269 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_)); | 278 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_)); |
270 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list12_)); | 279 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list12_)); |
271 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list13_)); | 280 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list13_)); |
272 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); | 281 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); |
273 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); | 282 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); |
274 } | 283 } |
275 | 284 |
276 TEST_P(ValueStoreTest, SetWhenOverwriting) { | 285 TEST_P(ValueStoreTest, SetWhenOverwriting) { |
277 storage_->Set(DEFAULTS, key1_, *val2_); | 286 storage_->Set(DEFAULTS, key1_, *val2_); |
278 { | 287 { |
279 ValueStoreChangeList changes; | 288 ValueStoreChangeList changes; |
289 changes.push_back(ValueStoreChange(key1_, val2_->CreateDeepCopy(), | |
290 val1_->CreateDeepCopy())); | |
280 changes.push_back( | 291 changes.push_back( |
281 ValueStoreChange(key1_, val2_->DeepCopy(), val1_->DeepCopy())); | 292 ValueStoreChange(key2_, nullptr, val2_->CreateDeepCopy())); |
282 changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); | |
283 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); | 293 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); |
284 } | 294 } |
285 | 295 |
286 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); | 296 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); |
287 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); | 297 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); |
288 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); | 298 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); |
289 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list1_)); | 299 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list1_)); |
290 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list12_)); | 300 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list12_)); |
291 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list13_)); | 301 EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list13_)); |
292 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_)); | 302 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_)); |
293 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get()); | 303 EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get()); |
294 } | 304 } |
295 | 305 |
296 TEST_P(ValueStoreTest, ClearWhenEmpty) { | 306 TEST_P(ValueStoreTest, ClearWhenEmpty) { |
297 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); | 307 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); |
298 | 308 |
299 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); | 309 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); |
300 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); | 310 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); |
301 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); | 311 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); |
302 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); | 312 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); |
303 } | 313 } |
304 | 314 |
305 TEST_P(ValueStoreTest, ClearWhenNotEmpty) { | 315 TEST_P(ValueStoreTest, ClearWhenNotEmpty) { |
306 storage_->Set(DEFAULTS, *dict12_); | 316 storage_->Set(DEFAULTS, *dict12_); |
307 { | 317 { |
308 ValueStoreChangeList changes; | 318 ValueStoreChangeList changes; |
309 changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); | 319 changes.push_back( |
310 changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); | 320 ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr)); |
321 changes.push_back( | |
322 ValueStoreChange(key2_, val2_->CreateDeepCopy(), nullptr)); | |
311 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); | 323 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); |
312 } | 324 } |
313 | 325 |
314 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); | 326 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); |
315 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); | 327 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); |
316 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); | 328 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); |
317 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); | 329 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); |
318 } | 330 } |
319 | 331 |
320 // Dots should be allowed in key names; they shouldn't be interpreted as | 332 // Dots should be allowed in key names; they shouldn't be interpreted as |
321 // indexing into a dictionary. | 333 // indexing into a dictionary. |
322 TEST_P(ValueStoreTest, DotsInKeyNames) { | 334 TEST_P(ValueStoreTest, DotsInKeyNames) { |
323 std::string dot_key("foo.bar"); | 335 std::string dot_key("foo.bar"); |
324 base::StringValue dot_value("baz.qux"); | 336 base::StringValue dot_value("baz.qux"); |
325 std::vector<std::string> dot_list; | 337 std::vector<std::string> dot_list; |
326 dot_list.push_back(dot_key); | 338 dot_list.push_back(dot_key); |
327 base::DictionaryValue dot_dict; | 339 base::DictionaryValue dot_dict; |
328 dot_dict.SetWithoutPathExpansion(dot_key, dot_value.DeepCopy()); | 340 dot_dict.SetWithoutPathExpansion(dot_key, dot_value.CreateDeepCopy()); |
329 | 341 |
330 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(dot_key)); | 342 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(dot_key)); |
331 | 343 |
332 { | 344 { |
333 ValueStoreChangeList changes; | 345 ValueStoreChangeList changes; |
334 changes.push_back( | 346 changes.push_back( |
335 ValueStoreChange(dot_key, NULL, dot_value.DeepCopy())); | 347 ValueStoreChange(dot_key, nullptr, dot_value.CreateDeepCopy())); |
336 EXPECT_PRED_FORMAT2(ChangesEq, | 348 EXPECT_PRED_FORMAT2(ChangesEq, |
337 changes, storage_->Set(DEFAULTS, dot_key, dot_value)); | 349 changes, storage_->Set(DEFAULTS, dot_key, dot_value)); |
338 } | 350 } |
339 EXPECT_PRED_FORMAT2(ChangesEq, | 351 EXPECT_PRED_FORMAT2(ChangesEq, |
340 ValueStoreChangeList(), storage_->Set(DEFAULTS, dot_key, dot_value)); | 352 ValueStoreChangeList(), storage_->Set(DEFAULTS, dot_key, dot_value)); |
341 | 353 |
342 EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get(dot_key)); | 354 EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get(dot_key)); |
343 | 355 |
344 { | 356 { |
345 ValueStoreChangeList changes; | 357 ValueStoreChangeList changes; |
346 changes.push_back( | 358 changes.push_back( |
347 ValueStoreChange(dot_key, dot_value.DeepCopy(), NULL)); | 359 ValueStoreChange(dot_key, dot_value.CreateDeepCopy(), nullptr)); |
348 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_key)); | 360 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_key)); |
349 } | 361 } |
350 EXPECT_PRED_FORMAT2(ChangesEq, | 362 EXPECT_PRED_FORMAT2(ChangesEq, |
351 ValueStoreChangeList(), storage_->Remove(dot_key)); | 363 ValueStoreChangeList(), storage_->Remove(dot_key)); |
352 { | 364 { |
353 ValueStoreChangeList changes; | 365 ValueStoreChangeList changes; |
354 changes.push_back( | 366 changes.push_back( |
355 ValueStoreChange(dot_key, NULL, dot_value.DeepCopy())); | 367 ValueStoreChange(dot_key, nullptr, dot_value.CreateDeepCopy())); |
356 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, dot_dict)); | 368 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, dot_dict)); |
357 } | 369 } |
358 | 370 |
359 EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get(dot_list)); | 371 EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get(dot_list)); |
360 EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get()); | 372 EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get()); |
361 | 373 |
362 { | 374 { |
363 ValueStoreChangeList changes; | 375 ValueStoreChangeList changes; |
364 changes.push_back( | 376 changes.push_back( |
365 ValueStoreChange(dot_key, dot_value.DeepCopy(), NULL)); | 377 ValueStoreChange(dot_key, dot_value.CreateDeepCopy(), nullptr)); |
366 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_list)); | 378 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_list)); |
367 } | 379 } |
368 | 380 |
369 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(dot_key)); | 381 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(dot_key)); |
370 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); | 382 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); |
371 } | 383 } |
372 | 384 |
373 TEST_P(ValueStoreTest, DotsInKeyNamesWithDicts) { | 385 TEST_P(ValueStoreTest, DotsInKeyNamesWithDicts) { |
374 base::DictionaryValue outer_dict; | 386 base::DictionaryValue outer_dict; |
375 base::DictionaryValue* inner_dict = new base::DictionaryValue(); | 387 std::unique_ptr<base::DictionaryValue> inner_dict( |
376 outer_dict.Set("foo", inner_dict); | 388 new base::DictionaryValue()); |
389 outer_dict.Set("foo", std::move(inner_dict)); | |
377 inner_dict->SetString("bar", "baz"); | 390 inner_dict->SetString("bar", "baz"); |
Devlin
2016/05/03 16:55:05
UAF (was already a conceptual problem, but now thi
dcheng
2016/05/03 17:16:26
Done. This was "safe" before but is now unsafe.
| |
378 | 391 |
379 { | 392 { |
380 ValueStoreChangeList changes; | 393 ValueStoreChangeList changes; |
381 changes.push_back( | 394 changes.push_back( |
382 ValueStoreChange("foo", NULL, inner_dict->DeepCopy())); | 395 ValueStoreChange("foo", nullptr, inner_dict->CreateDeepCopy())); |
383 EXPECT_PRED_FORMAT2(ChangesEq, | 396 EXPECT_PRED_FORMAT2(ChangesEq, |
384 changes, storage_->Set(DEFAULTS, outer_dict)); | 397 changes, storage_->Set(DEFAULTS, outer_dict)); |
385 } | 398 } |
386 | 399 |
387 EXPECT_PRED_FORMAT2(SettingsEq, outer_dict, storage_->Get("foo")); | 400 EXPECT_PRED_FORMAT2(SettingsEq, outer_dict, storage_->Get("foo")); |
388 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get("foo.bar")); | 401 EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get("foo.bar")); |
389 } | 402 } |
390 | 403 |
391 TEST_P(ValueStoreTest, ComplexChangedKeysScenarios) { | 404 TEST_P(ValueStoreTest, ComplexChangedKeysScenarios) { |
392 // Test: | 405 // Test: |
393 // - Setting over missing/changed/same keys, combinations. | 406 // - Setting over missing/changed/same keys, combinations. |
394 // - Removing over missing and present keys, combinations. | 407 // - Removing over missing and present keys, combinations. |
395 // - Clearing. | 408 // - Clearing. |
396 std::vector<std::string> complex_list; | 409 std::vector<std::string> complex_list; |
397 base::DictionaryValue complex_changed_dict; | 410 base::DictionaryValue complex_changed_dict; |
398 | 411 |
399 storage_->Set(DEFAULTS, key1_, *val1_); | 412 storage_->Set(DEFAULTS, key1_, *val1_); |
400 EXPECT_PRED_FORMAT2(ChangesEq, | 413 EXPECT_PRED_FORMAT2(ChangesEq, |
401 ValueStoreChangeList(), storage_->Set(DEFAULTS, key1_, *val1_)); | 414 ValueStoreChangeList(), storage_->Set(DEFAULTS, key1_, *val1_)); |
402 { | 415 { |
403 ValueStoreChangeList changes; | 416 ValueStoreChangeList changes; |
404 changes.push_back(ValueStoreChange( | 417 changes.push_back(ValueStoreChange(key1_, val1_->CreateDeepCopy(), |
405 key1_, val1_->DeepCopy(), val2_->DeepCopy())); | 418 val2_->CreateDeepCopy())); |
406 EXPECT_PRED_FORMAT2(ChangesEq, | 419 EXPECT_PRED_FORMAT2(ChangesEq, |
407 changes, storage_->Set(DEFAULTS, key1_, *val2_)); | 420 changes, storage_->Set(DEFAULTS, key1_, *val2_)); |
408 } | 421 } |
409 { | 422 { |
410 ValueStoreChangeList changes; | 423 ValueStoreChangeList changes; |
411 changes.push_back(ValueStoreChange(key1_, val2_->DeepCopy(), NULL)); | 424 changes.push_back( |
425 ValueStoreChange(key1_, val2_->CreateDeepCopy(), nullptr)); | |
412 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_)); | 426 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_)); |
413 EXPECT_PRED_FORMAT2(ChangesEq, | 427 EXPECT_PRED_FORMAT2(ChangesEq, |
414 ValueStoreChangeList(), storage_->Remove(key1_)); | 428 ValueStoreChangeList(), storage_->Remove(key1_)); |
415 } | 429 } |
416 { | 430 { |
417 ValueStoreChangeList changes; | 431 ValueStoreChangeList changes; |
418 changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); | 432 changes.push_back( |
433 ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy())); | |
419 EXPECT_PRED_FORMAT2(ChangesEq, | 434 EXPECT_PRED_FORMAT2(ChangesEq, |
420 changes, storage_->Set(DEFAULTS, key1_, *val1_)); | 435 changes, storage_->Set(DEFAULTS, key1_, *val1_)); |
421 } | 436 } |
422 { | 437 { |
423 ValueStoreChangeList changes; | 438 ValueStoreChangeList changes; |
424 changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); | 439 changes.push_back( |
440 ValueStoreChange(key1_, val1_->CreateDeepCopy(), nullptr)); | |
425 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); | 441 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); |
426 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); | 442 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); |
427 } | 443 } |
428 | 444 |
429 { | 445 { |
430 ValueStoreChangeList changes; | 446 ValueStoreChangeList changes; |
431 changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); | 447 changes.push_back( |
432 changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); | 448 ValueStoreChange(key1_, nullptr, val1_->CreateDeepCopy())); |
449 changes.push_back( | |
450 ValueStoreChange(key2_, nullptr, val2_->CreateDeepCopy())); | |
433 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); | 451 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); |
434 EXPECT_PRED_FORMAT2(ChangesEq, | 452 EXPECT_PRED_FORMAT2(ChangesEq, |
435 ValueStoreChangeList(), storage_->Set(DEFAULTS, *dict12_)); | 453 ValueStoreChangeList(), storage_->Set(DEFAULTS, *dict12_)); |
436 } | 454 } |
437 { | 455 { |
438 ValueStoreChangeList changes; | 456 ValueStoreChangeList changes; |
439 changes.push_back(ValueStoreChange(key3_, NULL, val3_->DeepCopy())); | 457 changes.push_back( |
458 ValueStoreChange(key3_, nullptr, val3_->CreateDeepCopy())); | |
440 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict123_)); | 459 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict123_)); |
441 } | 460 } |
442 { | 461 { |
443 base::DictionaryValue to_set; | 462 base::DictionaryValue to_set; |
444 to_set.Set(key1_, val2_->DeepCopy()); | 463 to_set.Set(key1_, val2_->CreateDeepCopy()); |
445 to_set.Set(key2_, val2_->DeepCopy()); | 464 to_set.Set(key2_, val2_->CreateDeepCopy()); |
446 to_set.Set("asdf", val1_->DeepCopy()); | 465 to_set.Set("asdf", val1_->CreateDeepCopy()); |
447 to_set.Set("qwerty", val3_->DeepCopy()); | 466 to_set.Set("qwerty", val3_->CreateDeepCopy()); |
448 | 467 |
449 ValueStoreChangeList changes; | 468 ValueStoreChangeList changes; |
469 changes.push_back(ValueStoreChange(key1_, val1_->CreateDeepCopy(), | |
470 val2_->CreateDeepCopy())); | |
450 changes.push_back( | 471 changes.push_back( |
451 ValueStoreChange(key1_, val1_->DeepCopy(), val2_->DeepCopy())); | 472 ValueStoreChange("asdf", nullptr, val1_->CreateDeepCopy())); |
452 changes.push_back(ValueStoreChange("asdf", NULL, val1_->DeepCopy())); | |
453 changes.push_back( | 473 changes.push_back( |
454 ValueStoreChange("qwerty", NULL, val3_->DeepCopy())); | 474 ValueStoreChange("qwerty", nullptr, val3_->CreateDeepCopy())); |
455 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, to_set)); | 475 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, to_set)); |
456 } | 476 } |
457 { | 477 { |
458 ValueStoreChangeList changes; | 478 ValueStoreChangeList changes; |
459 changes.push_back(ValueStoreChange(key1_, val2_->DeepCopy(), NULL)); | 479 changes.push_back( |
460 changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); | 480 ValueStoreChange(key1_, val2_->CreateDeepCopy(), nullptr)); |
481 changes.push_back( | |
482 ValueStoreChange(key2_, val2_->CreateDeepCopy(), nullptr)); | |
461 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_)); | 483 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_)); |
462 } | 484 } |
463 { | 485 { |
464 std::vector<std::string> to_remove; | 486 std::vector<std::string> to_remove; |
465 to_remove.push_back(key1_); | 487 to_remove.push_back(key1_); |
466 to_remove.push_back("asdf"); | 488 to_remove.push_back("asdf"); |
467 | 489 |
468 ValueStoreChangeList changes; | 490 ValueStoreChangeList changes; |
469 changes.push_back(ValueStoreChange("asdf", val1_->DeepCopy(), NULL)); | 491 changes.push_back( |
492 ValueStoreChange("asdf", val1_->CreateDeepCopy(), nullptr)); | |
470 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(to_remove)); | 493 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(to_remove)); |
471 } | 494 } |
472 { | 495 { |
473 ValueStoreChangeList changes; | 496 ValueStoreChangeList changes; |
474 changes.push_back(ValueStoreChange(key3_, val3_->DeepCopy(), NULL)); | |
475 changes.push_back( | 497 changes.push_back( |
476 ValueStoreChange("qwerty", val3_->DeepCopy(), NULL)); | 498 ValueStoreChange(key3_, val3_->CreateDeepCopy(), nullptr)); |
499 changes.push_back( | |
500 ValueStoreChange("qwerty", val3_->CreateDeepCopy(), nullptr)); | |
477 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); | 501 EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); |
478 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); | 502 EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); |
479 } | 503 } |
480 } | 504 } |
OLD | NEW |