1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/value_store/value_store_unittest.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_writer.h" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/linked_ptr.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// To save typing ValueStore::DEFAULTS everywhere. 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ValueStore::WriteOptions DEFAULTS = ValueStore::DEFAULTS; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Gets the pretty-printed JSON for a value. 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)std::string GetJSON(const base::Value& value) { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string json; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONWriter::WriteWithOptions(&value, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::JSONWriter::OPTIONS_PRETTY_PRINT, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &json); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return json; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compares two possibly NULL values for equality, filling |error| with an 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// appropriate error message if they're different. 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool ValuesEqual(const base::Value* expected, 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::Value* actual, 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string* error) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expected == actual) { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expected && !actual) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *error = "Expected: " + GetJSON(*expected) + ", actual: NULL"; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (actual && !expected) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *error = "Expected: NULL, actual: " + GetJSON(*actual); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!expected->Equals(actual)) { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *error = 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Expected: " + GetJSON(*expected) + ", actual: " + GetJSON(*actual); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns whether the read result of a storage operation has the expected 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// settings. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)testing::AssertionResult SettingsEq( 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* _1, const char* _2, 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue& expected, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStore::ReadResult actual_result) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (actual_result->HasError()) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return testing::AssertionFailure() << 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Result has error: " << actual_result->error().message; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!ValuesEqual(&expected, &actual_result->settings(), &error)) { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return testing::AssertionFailure() << error; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return testing::AssertionSuccess(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns whether the write result of a storage operation has the expected 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// changes. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)testing::AssertionResult ChangesEq( 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* _1, const char* _2, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ValueStoreChangeList& expected, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStore::WriteResult actual_result) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (actual_result->HasError()) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return testing::AssertionFailure() << 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) "Result has error: " << actual_result->error().message; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ValueStoreChangeList& actual = actual_result->changes(); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expected.size() != actual.size()) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return testing::AssertionFailure() << 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Actual has wrong size, expecting " << expected.size() << 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " but was " << actual.size(); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<std::string, linked_ptr<ValueStoreChange> > expected_as_map; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ValueStoreChangeList::const_iterator it = expected.begin(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != expected.end(); ++it) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_as_map[it->key()] = 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) linked_ptr<ValueStoreChange>(new ValueStoreChange(*it)); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> keys_seen; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ValueStoreChangeList::const_iterator it = actual.begin(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != actual.end(); ++it) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (keys_seen.count(it->key())) { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return testing::AssertionFailure() << 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Multiple changes seen for key: " << it->key(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keys_seen.insert(it->key()); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!expected_as_map.count(it->key())) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return testing::AssertionFailure() << 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Actual has unexpected change for key: " << it->key(); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChange expected_change = *expected_as_map[it->key()]; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ValuesEqual(expected_change.new_value(), it->new_value(), &error)) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return testing::AssertionFailure() << 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "New value for " << it->key() << " was unexpected: " << error; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ValuesEqual(expected_change.old_value(), it->old_value(), &error)) { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return testing::AssertionFailure() << 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Old value for " << it->key() << " was unexpected: " << error; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return testing::AssertionSuccess(); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueStoreTest::ValueStoreTest() 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : key1_("foo"), 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key2_("bar"), 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key3_("baz"), 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) empty_dict_(new base::DictionaryValue()), 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dict1_(new base::DictionaryValue()), 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dict3_(new base::DictionaryValue()), 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dict12_(new base::DictionaryValue()), 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dict123_(new base::DictionaryValue()), 13690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui_thread_(BrowserThread::UI, base::MessageLoop::current()), 13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) file_thread_(BrowserThread::FILE, base::MessageLoop::current()) { 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) val1_.reset(new base::StringValue(key1_ + "Value")); 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) val2_.reset(new base::StringValue(key2_ + "Value")); 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) val3_.reset(new base::StringValue(key3_ + "Value")); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list1_.push_back(key1_); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list2_.push_back(key2_); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list3_.push_back(key3_); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list12_.push_back(key1_); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list12_.push_back(key2_); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list13_.push_back(key1_); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list13_.push_back(key3_); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list123_.push_back(key1_); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list123_.push_back(key2_); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list123_.push_back(key3_); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set1_.insert(list1_.begin(), list1_.end()); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set2_.insert(list2_.begin(), list2_.end()); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set3_.insert(list3_.begin(), list3_.end()); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set12_.insert(list12_.begin(), list12_.end()); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set13_.insert(list13_.begin(), list13_.end()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set123_.insert(list123_.begin(), list123_.end()); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict1_->Set(key1_, val1_->DeepCopy()); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict3_->Set(key3_, val3_->DeepCopy()); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict12_->Set(key1_, val1_->DeepCopy()); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict12_->Set(key2_, val2_->DeepCopy()); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict123_->Set(key1_, val1_->DeepCopy()); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict123_->Set(key2_, val2_->DeepCopy()); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict123_->Set(key3_, val3_->DeepCopy()); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueStoreTest::~ValueStoreTest() {} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ValueStoreTest::SetUp() { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) storage_.reset((GetParam())(temp_dir_.path().AppendASCII("dbName"))); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(storage_.get()); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ValueStoreTest::TearDown() { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) storage_.reset(); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ValueStoreTest, GetWhenEmpty) { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ValueStoreTest, GetWithSingleValue) { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes, storage_->Set(DEFAULTS, key1_, *val1_)); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key2_)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list123_)); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get()); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ValueStoreTest, GetWithMultipleValues) { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_)); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get()); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ValueStoreTest, RemoveWhenEmpty) { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) storage_->Remove(key1_)); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_)); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ValueStoreTest, RemoveWithSingleValue) { 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) storage_->Set(DEFAULTS, *dict1_); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_)); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key2_)); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_)); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list12_)); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ValueStoreTest, RemoveWithMultipleValues) { 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) storage_->Set(DEFAULTS, *dict123_); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key3_, val3_->DeepCopy(), NULL)); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key3_)); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list1_)); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list12_)); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list13_)); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_)); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get()); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_)); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list1_)); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list12_)); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list13_)); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ValueStoreTest, SetWhenOverwriting) { 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) storage_->Set(DEFAULTS, key1_, *val2_); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back( 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChange(key1_, val2_->DeepCopy(), val1_->DeepCopy())); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(key1_)); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key3_)); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list1_)); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list12_)); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict1_, storage_->Get(list13_)); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get(list123_)); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *dict12_, storage_->Get()); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ValueStoreTest, ClearWhenEmpty) { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ValueStoreTest, ClearWhenNotEmpty) { 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) storage_->Set(DEFAULTS, *dict12_); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(key1_)); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(empty_list_)); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(list123_)); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Dots should be allowed in key names; they shouldn't be interpreted as 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// indexing into a dictionary. 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ValueStoreTest, DotsInKeyNames) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string dot_key("foo.bar"); 3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::StringValue dot_value("baz.qux"); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> dot_list; 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dot_list.push_back(dot_key); 3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue dot_dict; 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dot_dict.SetWithoutPathExpansion(dot_key, dot_value.DeepCopy()); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(dot_key)); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back( 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChange(dot_key, NULL, dot_value.DeepCopy())); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes, storage_->Set(DEFAULTS, dot_key, dot_value)); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList(), storage_->Set(DEFAULTS, dot_key, dot_value)); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get(dot_key)); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back( 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChange(dot_key, dot_value.DeepCopy(), NULL)); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_key)); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList(), storage_->Remove(dot_key)); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back( 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChange(dot_key, NULL, dot_value.DeepCopy())); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, dot_dict)); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get(dot_list)); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, dot_dict, storage_->Get()); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back( 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChange(dot_key, dot_value.DeepCopy(), NULL)); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(dot_list)); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get(dot_key)); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get()); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ValueStoreTest, DotsInKeyNamesWithDicts) { 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue outer_dict; 3765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* inner_dict = new base::DictionaryValue(); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outer_dict.Set("foo", inner_dict); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inner_dict->SetString("bar", "baz"); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back( 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChange("foo", NULL, inner_dict->DeepCopy())); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes, storage_->Set(DEFAULTS, outer_dict)); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, outer_dict, storage_->Get("foo")); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(SettingsEq, *empty_dict_, storage_->Get("foo.bar")); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(ValueStoreTest, ComplexChangedKeysScenarios) { 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test: 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - Setting over missing/changed/same keys, combinations. 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - Removing over missing and present keys, combinations. 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - Clearing. 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> complex_list; 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue complex_changed_dict; 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) storage_->Set(DEFAULTS, key1_, *val1_); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList(), storage_->Set(DEFAULTS, key1_, *val1_)); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange( 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key1_, val1_->DeepCopy(), val2_->DeepCopy())); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes, storage_->Set(DEFAULTS, key1_, *val2_)); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key1_, val2_->DeepCopy(), NULL)); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(key1_)); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList(), storage_->Remove(key1_)); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes, storage_->Set(DEFAULTS, key1_, *val1_)); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key1_, val1_->DeepCopy(), NULL)); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key1_, NULL, val1_->DeepCopy())); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key2_, NULL, val2_->DeepCopy())); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict12_)); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList(), storage_->Set(DEFAULTS, *dict12_)); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key3_, NULL, val3_->DeepCopy())); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, *dict123_)); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue to_set; 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) to_set.Set(key1_, val2_->DeepCopy()); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) to_set.Set(key2_, val2_->DeepCopy()); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) to_set.Set("asdf", val1_->DeepCopy()); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) to_set.Set("qwerty", val3_->DeepCopy()); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back( 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChange(key1_, val1_->DeepCopy(), val2_->DeepCopy())); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange("asdf", NULL, val1_->DeepCopy())); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back( 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChange("qwerty", NULL, val3_->DeepCopy())); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Set(DEFAULTS, to_set)); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key1_, val2_->DeepCopy(), NULL)); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key2_, val2_->DeepCopy(), NULL)); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(list12_)); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> to_remove; 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) to_remove.push_back(key1_); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) to_remove.push_back("asdf"); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange("asdf", val1_->DeepCopy(), NULL)); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Remove(to_remove)); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChangeList changes; 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back(ValueStoreChange(key3_, val3_->DeepCopy(), NULL)); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changes.push_back( 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStoreChange("qwerty", val3_->DeepCopy(), NULL)); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, changes, storage_->Clear()); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_PRED_FORMAT2(ChangesEq, ValueStoreChangeList(), storage_->Clear()); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 482