OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 "chrome/browser/extensions/extension_settings_storage_unittest.h" | 5 #include "chrome/browser/extensions/extension_settings_storage_unittest.h" |
6 | 6 |
7 #include "base/json/json_writer.h" | 7 #include "base/json/json_writer.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
10 | 10 |
(...skipping 15 matching lines...) Expand all Loading... |
26 string.append(", "); | 26 string.append(", "); |
27 } | 27 } |
28 string.append(*it); | 28 string.append(*it); |
29 } | 29 } |
30 string.append("}"); | 30 string.append("}"); |
31 return string; | 31 return string; |
32 } | 32 } |
33 | 33 |
34 } // namespace | 34 } // namespace |
35 | 35 |
| 36 // Compares two possibly NULL values for equality, filling |error| with an |
| 37 // appropriate error message if they're different. |
| 38 bool ValuesEqual( |
| 39 const Value* expected, const Value* actual, std::string* error) { |
| 40 if (expected == actual) { |
| 41 return true; |
| 42 } |
| 43 if (expected && !actual) { |
| 44 *error = "Expected: " + GetJSON(*expected) + ", actual: NULL"; |
| 45 return false; |
| 46 } |
| 47 if (actual && !expected) { |
| 48 *error = "Expected: NULL, actual: " + GetJSON(*actual); |
| 49 return false; |
| 50 } |
| 51 if (!expected->Equals(actual)) { |
| 52 *error = |
| 53 "Expected: " + GetJSON(*expected) + ", actual: " + GetJSON(*actual); |
| 54 return false; |
| 55 } |
| 56 return true; |
| 57 } |
| 58 |
36 // Returns whether the result of a storage operation has the expected settings | 59 // Returns whether the result of a storage operation has the expected settings |
37 // and changed keys. | 60 // and changed keys. |
38 testing::AssertionResult SettingsEq( | 61 testing::AssertionResult SettingsEq( |
39 const char* _1, const char* _2, const char* _3, | 62 const char* _1, const char* _2, const char* _3, const char* _4, |
40 DictionaryValue* expected_settings, | 63 DictionaryValue* expected_settings, |
| 64 DictionaryValue* expected_old_settings, |
41 std::set<std::string>* expected_changed_keys, | 65 std::set<std::string>* expected_changed_keys, |
42 ExtensionSettingsStorage::Result actual) { | 66 ExtensionSettingsStorage::Result actual) { |
| 67 std::string error; |
| 68 |
43 if (actual.HasError()) { | 69 if (actual.HasError()) { |
44 return testing::AssertionFailure() << | 70 return testing::AssertionFailure() << |
45 "Expected: " << GetJSON(*expected_settings) << | 71 "Expected: " << GetJSON(*expected_settings) << |
46 ", " << ToString(*expected_changed_keys) << "\n" << | 72 ", " << ToString(*expected_changed_keys) << "\n" << |
47 ", actual has error: " << actual.GetError(); | 73 ", actual has error: " << actual.GetError(); |
48 } | 74 } |
49 if (expected_settings == NULL && actual.GetSettings() != NULL) { | 75 |
50 return testing::AssertionFailure() << | 76 if (!ValuesEqual(expected_settings, actual.GetSettings(), &error)) { |
51 "Expected NULL settings, actual: " << GetJSON(*actual.GetSettings()); | 77 return testing::AssertionFailure() << "For settings, " << error; |
52 } | 78 } |
53 if (expected_changed_keys == NULL && actual.GetChangedKeys() != NULL) { | 79 |
| 80 if (!expected_changed_keys && actual.GetChangedKeys()) { |
54 return testing::AssertionFailure() << | 81 return testing::AssertionFailure() << |
55 "Expected NULL changed keys, actual: " << | 82 "Expected NULL changed keys, actual: " << |
56 ToString(*actual.GetChangedKeys()); | 83 ToString(*actual.GetChangedKeys()); |
57 } | 84 } |
58 if (expected_settings != NULL && actual.GetSettings() == NULL) { | 85 if (expected_changed_keys && !actual.GetChangedKeys()) { |
59 return testing::AssertionFailure() << | |
60 "Expected: " << GetJSON(*expected_settings) << ", actual NULL"; | |
61 } | |
62 if (expected_changed_keys != NULL && actual.GetChangedKeys() == NULL) { | |
63 return testing::AssertionFailure() << | 86 return testing::AssertionFailure() << |
64 "Expected: " << ToString(*expected_changed_keys) << ", actual NULL"; | 87 "Expected: " << ToString(*expected_changed_keys) << ", actual NULL"; |
65 } | 88 } |
66 if (expected_settings != actual.GetSettings() && | |
67 !expected_settings->Equals(actual.GetSettings())) { | |
68 return testing::AssertionFailure() << | |
69 "Expected: " << GetJSON(*expected_settings) << | |
70 ", actual: " << GetJSON(*actual.GetSettings()); | |
71 } | |
72 if (expected_changed_keys != actual.GetChangedKeys() && | 89 if (expected_changed_keys != actual.GetChangedKeys() && |
73 *expected_changed_keys != *actual.GetChangedKeys()) { | 90 *expected_changed_keys != *actual.GetChangedKeys()) { |
74 return testing::AssertionFailure() << | 91 return testing::AssertionFailure() << |
75 "Expected: " << ToString(*expected_changed_keys) << | 92 "Expected: " << ToString(*expected_changed_keys) << |
76 ", actual: " << ToString(*actual.GetChangedKeys()); | 93 ", actual: " << ToString(*actual.GetChangedKeys()); |
77 } | 94 } |
| 95 |
| 96 const std::set<std::string>* changed_keys = actual.GetChangedKeys(); |
| 97 if (changed_keys) { |
| 98 for (std::set<std::string>::const_iterator it = changed_keys->begin(); |
| 99 it != changed_keys->end(); ++it) { |
| 100 Value *expected_old_value = NULL; |
| 101 expected_old_settings->GetWithoutPathExpansion(*it, &expected_old_value); |
| 102 if (!ValuesEqual(expected_old_value, actual.GetOldValue(*it), &error)) { |
| 103 return testing::AssertionFailure() << "Old values not equal: " << error; |
| 104 } |
| 105 |
| 106 Value *expected_new_value = NULL; |
| 107 if (expected_settings) { |
| 108 expected_settings->GetWithoutPathExpansion(*it, &expected_new_value); |
| 109 } |
| 110 if (!ValuesEqual(expected_new_value, actual.GetNewValue(*it), &error)) { |
| 111 return testing::AssertionFailure() << "New values not equal: " << error; |
| 112 } |
| 113 } |
| 114 } |
| 115 |
78 return testing::AssertionSuccess(); | 116 return testing::AssertionSuccess(); |
79 } | 117 } |
80 | 118 |
81 ExtensionSettingsStorageTest::ExtensionSettingsStorageTest() | 119 ExtensionSettingsStorageTest::ExtensionSettingsStorageTest() |
82 : key1_("foo"), | 120 : key1_("foo"), |
83 key2_("bar"), | 121 key2_("bar"), |
84 key3_("baz"), | 122 key3_("baz"), |
85 empty_dict_(new DictionaryValue), | 123 empty_dict_(new DictionaryValue()), |
86 dict1_(new DictionaryValue), | 124 dict1_(new DictionaryValue()), |
87 dict12_(new DictionaryValue), | 125 dict3_(new DictionaryValue()), |
88 dict123_(new DictionaryValue), | 126 dict12_(new DictionaryValue()), |
| 127 dict123_(new DictionaryValue()), |
89 ui_thread_(BrowserThread::UI, MessageLoop::current()), | 128 ui_thread_(BrowserThread::UI, MessageLoop::current()), |
90 file_thread_(BrowserThread::FILE, MessageLoop::current()) { | 129 file_thread_(BrowserThread::FILE, MessageLoop::current()) { |
91 val1_.reset(Value::CreateStringValue(key1_ + "Value")); | 130 val1_.reset(Value::CreateStringValue(key1_ + "Value")); |
92 val2_.reset(Value::CreateStringValue(key2_ + "Value")); | 131 val2_.reset(Value::CreateStringValue(key2_ + "Value")); |
93 val3_.reset(Value::CreateStringValue(key3_ + "Value")); | 132 val3_.reset(Value::CreateStringValue(key3_ + "Value")); |
94 | 133 |
95 list1_.push_back(key1_); | 134 list1_.push_back(key1_); |
96 list2_.push_back(key2_); | 135 list2_.push_back(key2_); |
97 list3_.push_back(key3_); | 136 list3_.push_back(key3_); |
98 list12_.push_back(key1_); | 137 list12_.push_back(key1_); |
99 list12_.push_back(key2_); | 138 list12_.push_back(key2_); |
100 list13_.push_back(key1_); | 139 list13_.push_back(key1_); |
101 list13_.push_back(key3_); | 140 list13_.push_back(key3_); |
102 list123_.push_back(key1_); | 141 list123_.push_back(key1_); |
103 list123_.push_back(key2_); | 142 list123_.push_back(key2_); |
104 list123_.push_back(key3_); | 143 list123_.push_back(key3_); |
105 | 144 |
106 set1_.insert(list1_.begin(), list1_.end()); | 145 set1_.insert(list1_.begin(), list1_.end()); |
107 set2_.insert(list2_.begin(), list2_.end()); | 146 set2_.insert(list2_.begin(), list2_.end()); |
108 set3_.insert(list3_.begin(), list3_.end()); | 147 set3_.insert(list3_.begin(), list3_.end()); |
109 set12_.insert(list12_.begin(), list12_.end()); | 148 set12_.insert(list12_.begin(), list12_.end()); |
110 set13_.insert(list13_.begin(), list13_.end()); | 149 set13_.insert(list13_.begin(), list13_.end()); |
111 set123_.insert(list123_.begin(), list123_.end()); | 150 set123_.insert(list123_.begin(), list123_.end()); |
112 | 151 |
113 dict1_->Set(key1_, val1_->DeepCopy()); | 152 dict1_->Set(key1_, val1_->DeepCopy()); |
| 153 dict3_->Set(key3_, val3_->DeepCopy()); |
114 dict12_->Set(key1_, val1_->DeepCopy()); | 154 dict12_->Set(key1_, val1_->DeepCopy()); |
115 dict12_->Set(key2_, val2_->DeepCopy()); | 155 dict12_->Set(key2_, val2_->DeepCopy()); |
116 dict123_->Set(key1_, val1_->DeepCopy()); | 156 dict123_->Set(key1_, val1_->DeepCopy()); |
117 dict123_->Set(key2_, val2_->DeepCopy()); | 157 dict123_->Set(key2_, val2_->DeepCopy()); |
118 dict123_->Set(key3_, val3_->DeepCopy()); | 158 dict123_->Set(key3_, val3_->DeepCopy()); |
119 } | 159 } |
120 | 160 |
121 ExtensionSettingsStorageTest::~ExtensionSettingsStorageTest() {} | 161 ExtensionSettingsStorageTest::~ExtensionSettingsStorageTest() {} |
122 | 162 |
123 void ExtensionSettingsStorageTest::SetUp() { | 163 void ExtensionSettingsStorageTest::SetUp() { |
124 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 164 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
125 storage_.reset((GetParam())(temp_dir_.path(), "fakeExtension")); | 165 storage_.reset((GetParam())(temp_dir_.path(), "fakeExtension")); |
126 ASSERT_TRUE(storage_.get()); | 166 ASSERT_TRUE(storage_.get()); |
127 } | 167 } |
128 | 168 |
129 void ExtensionSettingsStorageTest::TearDown() { | 169 void ExtensionSettingsStorageTest::TearDown() { |
130 storage_.reset(); | 170 storage_.reset(); |
131 } | 171 } |
132 | 172 |
133 TEST_P(ExtensionSettingsStorageTest, GetWhenEmpty) { | 173 TEST_P(ExtensionSettingsStorageTest, GetWhenEmpty) { |
134 EXPECT_PRED_FORMAT3(SettingsEq, | 174 EXPECT_PRED_FORMAT4(SettingsEq, |
135 empty_dict_.get(), NULL, storage_->Get(key1_)); | 175 empty_dict_.get(), NULL, NULL, storage_->Get(key1_)); |
136 EXPECT_PRED_FORMAT3(SettingsEq, | 176 EXPECT_PRED_FORMAT4(SettingsEq, |
137 empty_dict_.get(), NULL, storage_->Get(empty_list_)); | 177 empty_dict_.get(), NULL, NULL, storage_->Get(empty_list_)); |
138 EXPECT_PRED_FORMAT3(SettingsEq, | 178 EXPECT_PRED_FORMAT4(SettingsEq, |
139 empty_dict_.get(), NULL, storage_->Get(list123_)); | 179 empty_dict_.get(), NULL, NULL, storage_->Get(list123_)); |
140 EXPECT_PRED_FORMAT3(SettingsEq, | 180 EXPECT_PRED_FORMAT4(SettingsEq, |
141 empty_dict_.get(), NULL, storage_->Get()); | 181 empty_dict_.get(), NULL, NULL, storage_->Get()); |
142 } | 182 } |
143 | 183 |
144 TEST_P(ExtensionSettingsStorageTest, GetWithSingleValue) { | 184 TEST_P(ExtensionSettingsStorageTest, GetWithSingleValue) { |
145 EXPECT_PRED_FORMAT3(SettingsEq, | 185 EXPECT_PRED_FORMAT4(SettingsEq, |
146 dict1_.get(), &set1_, storage_->Set(key1_, *val1_)); | 186 dict1_.get(), empty_dict_.get(), &set1_, storage_->Set(key1_, *val1_)); |
147 | 187 |
148 EXPECT_PRED_FORMAT3(SettingsEq, | 188 EXPECT_PRED_FORMAT4(SettingsEq, |
149 dict1_.get(), NULL, storage_->Get(key1_)); | 189 dict1_.get(), NULL, NULL, storage_->Get(key1_)); |
150 EXPECT_PRED_FORMAT3(SettingsEq, | 190 EXPECT_PRED_FORMAT4(SettingsEq, |
151 empty_dict_.get(), NULL, storage_->Get(key2_)); | 191 empty_dict_.get(), NULL, NULL, storage_->Get(key2_)); |
152 EXPECT_PRED_FORMAT3(SettingsEq, | 192 EXPECT_PRED_FORMAT4(SettingsEq, |
153 empty_dict_.get(), NULL, storage_->Get(key3_)); | 193 empty_dict_.get(), NULL, NULL, storage_->Get(key3_)); |
154 EXPECT_PRED_FORMAT3(SettingsEq, | 194 EXPECT_PRED_FORMAT4(SettingsEq, |
155 empty_dict_.get(), NULL, storage_->Get(empty_list_)); | 195 empty_dict_.get(), NULL, NULL, storage_->Get(empty_list_)); |
156 EXPECT_PRED_FORMAT3(SettingsEq, | 196 EXPECT_PRED_FORMAT4(SettingsEq, |
157 dict1_.get(), NULL, storage_->Get(list123_)); | 197 dict1_.get(), NULL, NULL, storage_->Get(list123_)); |
158 EXPECT_PRED_FORMAT3(SettingsEq, | 198 EXPECT_PRED_FORMAT4(SettingsEq, |
159 dict1_.get(), NULL, storage_->Get()); | 199 dict1_.get(), NULL, NULL, storage_->Get()); |
160 } | 200 } |
161 | 201 |
162 TEST_P(ExtensionSettingsStorageTest, GetWithMultipleValues) { | 202 TEST_P(ExtensionSettingsStorageTest, GetWithMultipleValues) { |
163 EXPECT_PRED_FORMAT3(SettingsEq, | 203 EXPECT_PRED_FORMAT4(SettingsEq, |
164 dict12_.get(), &set12_, storage_->Set(*dict12_)); | 204 dict12_.get(), empty_dict_.get(), &set12_, storage_->Set(*dict12_)); |
165 | 205 |
166 EXPECT_PRED_FORMAT3(SettingsEq, | 206 EXPECT_PRED_FORMAT4(SettingsEq, |
167 dict1_.get(), NULL, storage_->Get(key1_)); | 207 dict1_.get(), NULL, NULL, storage_->Get(key1_)); |
168 EXPECT_PRED_FORMAT3(SettingsEq, | 208 EXPECT_PRED_FORMAT4(SettingsEq, |
169 empty_dict_.get(), NULL, storage_->Get(key3_)); | 209 empty_dict_.get(), NULL, NULL, storage_->Get(key3_)); |
170 EXPECT_PRED_FORMAT3(SettingsEq, | 210 EXPECT_PRED_FORMAT4(SettingsEq, |
171 empty_dict_.get(), NULL, storage_->Get(empty_list_)); | 211 empty_dict_.get(), NULL, NULL, storage_->Get(empty_list_)); |
172 EXPECT_PRED_FORMAT3(SettingsEq, | 212 EXPECT_PRED_FORMAT4(SettingsEq, |
173 dict12_.get(), NULL, storage_->Get(list123_)); | 213 dict12_.get(), NULL, NULL, storage_->Get(list123_)); |
174 EXPECT_PRED_FORMAT3(SettingsEq, | 214 EXPECT_PRED_FORMAT4(SettingsEq, |
175 dict12_.get(), NULL, storage_->Get()); | 215 dict12_.get(), NULL, NULL, storage_->Get()); |
176 } | 216 } |
177 | 217 |
178 TEST_P(ExtensionSettingsStorageTest, RemoveWhenEmpty) { | 218 TEST_P(ExtensionSettingsStorageTest, RemoveWhenEmpty) { |
179 EXPECT_PRED_FORMAT3(SettingsEq, | 219 EXPECT_PRED_FORMAT4(SettingsEq, |
180 NULL, &empty_set_, storage_->Remove(key1_)); | 220 NULL, empty_dict_.get(), &empty_set_, storage_->Remove(key1_)); |
181 | 221 |
182 EXPECT_PRED_FORMAT3(SettingsEq, | 222 EXPECT_PRED_FORMAT4(SettingsEq, |
183 empty_dict_.get(), NULL, storage_->Get(key1_)); | 223 empty_dict_.get(), NULL, NULL, storage_->Get(key1_)); |
184 EXPECT_PRED_FORMAT3(SettingsEq, | 224 EXPECT_PRED_FORMAT4(SettingsEq, |
185 empty_dict_.get(), NULL, storage_->Get(list1_)); | 225 empty_dict_.get(), NULL, NULL, storage_->Get(list1_)); |
186 EXPECT_PRED_FORMAT3(SettingsEq, | 226 EXPECT_PRED_FORMAT4(SettingsEq, |
187 empty_dict_.get(), NULL, storage_->Get()); | 227 empty_dict_.get(), NULL, NULL, storage_->Get()); |
188 } | 228 } |
189 | 229 |
190 TEST_P(ExtensionSettingsStorageTest, RemoveWithSingleValue) { | 230 TEST_P(ExtensionSettingsStorageTest, RemoveWithSingleValue) { |
191 EXPECT_PRED_FORMAT3(SettingsEq, | 231 EXPECT_PRED_FORMAT4(SettingsEq, |
192 dict1_.get(), &set1_, storage_->Set(*dict1_)); | 232 dict1_.get(), empty_dict_.get(), &set1_, storage_->Set(*dict1_)); |
193 EXPECT_PRED_FORMAT3(SettingsEq, | 233 EXPECT_PRED_FORMAT4(SettingsEq, |
194 NULL, &set1_, storage_->Remove(key1_)); | 234 NULL, dict1_.get(), &set1_, storage_->Remove(key1_)); |
195 | 235 |
196 EXPECT_PRED_FORMAT3(SettingsEq, | 236 EXPECT_PRED_FORMAT4(SettingsEq, |
197 empty_dict_.get(), NULL, storage_->Get(key1_)); | 237 empty_dict_.get(), NULL, NULL, storage_->Get(key1_)); |
198 EXPECT_PRED_FORMAT3(SettingsEq, | 238 EXPECT_PRED_FORMAT4(SettingsEq, |
199 empty_dict_.get(), NULL, storage_->Get(key2_)); | 239 empty_dict_.get(), NULL, NULL, storage_->Get(key2_)); |
200 EXPECT_PRED_FORMAT3(SettingsEq, | 240 EXPECT_PRED_FORMAT4(SettingsEq, |
201 empty_dict_.get(), NULL, storage_->Get(list1_)); | 241 empty_dict_.get(), NULL, NULL, storage_->Get(list1_)); |
202 EXPECT_PRED_FORMAT3(SettingsEq, | 242 EXPECT_PRED_FORMAT4(SettingsEq, |
203 empty_dict_.get(), NULL, storage_->Get(list12_)); | 243 empty_dict_.get(), NULL, NULL, storage_->Get(list12_)); |
204 EXPECT_PRED_FORMAT3(SettingsEq, | 244 EXPECT_PRED_FORMAT4(SettingsEq, |
205 empty_dict_.get(), NULL, storage_->Get()); | 245 empty_dict_.get(), NULL, NULL, storage_->Get()); |
206 } | 246 } |
207 | 247 |
208 TEST_P(ExtensionSettingsStorageTest, RemoveWithMultipleValues) { | 248 TEST_P(ExtensionSettingsStorageTest, RemoveWithMultipleValues) { |
209 EXPECT_PRED_FORMAT3(SettingsEq, | 249 EXPECT_PRED_FORMAT4(SettingsEq, |
210 dict123_.get(), &set123_, storage_->Set(*dict123_)); | 250 dict123_.get(), empty_dict_.get(), &set123_, storage_->Set(*dict123_)); |
211 EXPECT_PRED_FORMAT3(SettingsEq, | 251 EXPECT_PRED_FORMAT4(SettingsEq, |
212 NULL, &set3_, storage_->Remove(key3_)); | 252 NULL, dict3_.get(), &set3_, storage_->Remove(key3_)); |
213 | 253 |
214 EXPECT_PRED_FORMAT3(SettingsEq, | 254 EXPECT_PRED_FORMAT4(SettingsEq, |
215 dict1_.get(), NULL, storage_->Get(key1_)); | 255 dict1_.get(), NULL, NULL, storage_->Get(key1_)); |
216 EXPECT_PRED_FORMAT3(SettingsEq, | 256 EXPECT_PRED_FORMAT4(SettingsEq, |
217 empty_dict_.get(), NULL, storage_->Get(key3_)); | 257 empty_dict_.get(), NULL, NULL, storage_->Get(key3_)); |
218 EXPECT_PRED_FORMAT3(SettingsEq, | 258 EXPECT_PRED_FORMAT4(SettingsEq, |
219 empty_dict_.get(), NULL, storage_->Get(empty_list_)); | 259 empty_dict_.get(), NULL, NULL, storage_->Get(empty_list_)); |
220 EXPECT_PRED_FORMAT3(SettingsEq, | 260 EXPECT_PRED_FORMAT4(SettingsEq, |
221 dict1_.get(), NULL, storage_->Get(list1_)); | 261 dict1_.get(), NULL, NULL, storage_->Get(list1_)); |
222 EXPECT_PRED_FORMAT3(SettingsEq, | 262 EXPECT_PRED_FORMAT4(SettingsEq, |
223 dict12_.get(), NULL, storage_->Get(list12_)); | 263 dict12_.get(), NULL, NULL, storage_->Get(list12_)); |
224 EXPECT_PRED_FORMAT3(SettingsEq, | 264 EXPECT_PRED_FORMAT4(SettingsEq, |
225 dict1_.get(), NULL, storage_->Get(list13_)); | 265 dict1_.get(), NULL, NULL, storage_->Get(list13_)); |
226 EXPECT_PRED_FORMAT3(SettingsEq, | 266 EXPECT_PRED_FORMAT4(SettingsEq, |
227 dict12_.get(), NULL, storage_->Get(list123_)); | 267 dict12_.get(), NULL, NULL, storage_->Get(list123_)); |
228 EXPECT_PRED_FORMAT3(SettingsEq, | 268 EXPECT_PRED_FORMAT4(SettingsEq, |
229 dict12_.get(), NULL, storage_->Get()); | 269 dict12_.get(), NULL, NULL, storage_->Get()); |
230 | 270 |
231 EXPECT_PRED_FORMAT3(SettingsEq, | 271 EXPECT_PRED_FORMAT4(SettingsEq, |
232 NULL, &set12_, storage_->Remove(list12_)); | 272 NULL, dict12_.get(), &set12_, storage_->Remove(list12_)); |
233 | 273 |
234 EXPECT_PRED_FORMAT3(SettingsEq, | 274 EXPECT_PRED_FORMAT4(SettingsEq, |
235 empty_dict_.get(), NULL, storage_->Get(key1_)); | 275 empty_dict_.get(), NULL, NULL, storage_->Get(key1_)); |
236 EXPECT_PRED_FORMAT3(SettingsEq, | 276 EXPECT_PRED_FORMAT4(SettingsEq, |
237 empty_dict_.get(), NULL, storage_->Get(key3_)); | 277 empty_dict_.get(), NULL, NULL, storage_->Get(key3_)); |
238 EXPECT_PRED_FORMAT3(SettingsEq, | 278 EXPECT_PRED_FORMAT4(SettingsEq, |
239 empty_dict_.get(), NULL, storage_->Get(empty_list_)); | 279 empty_dict_.get(), NULL, NULL, storage_->Get(empty_list_)); |
240 EXPECT_PRED_FORMAT3(SettingsEq, | 280 EXPECT_PRED_FORMAT4(SettingsEq, |
241 empty_dict_.get(), NULL, storage_->Get(list1_)); | 281 empty_dict_.get(), NULL, NULL, storage_->Get(list1_)); |
242 EXPECT_PRED_FORMAT3(SettingsEq, | 282 EXPECT_PRED_FORMAT4(SettingsEq, |
243 empty_dict_.get(), NULL, storage_->Get(list12_)); | 283 empty_dict_.get(), NULL, NULL, storage_->Get(list12_)); |
244 EXPECT_PRED_FORMAT3(SettingsEq, | 284 EXPECT_PRED_FORMAT4(SettingsEq, |
245 empty_dict_.get(), NULL, storage_->Get(list13_)); | 285 empty_dict_.get(), NULL, NULL, storage_->Get(list13_)); |
246 EXPECT_PRED_FORMAT3(SettingsEq, | 286 EXPECT_PRED_FORMAT4(SettingsEq, |
247 empty_dict_.get(), NULL, storage_->Get(list123_)); | 287 empty_dict_.get(), NULL, NULL, storage_->Get(list123_)); |
248 EXPECT_PRED_FORMAT3(SettingsEq, | 288 EXPECT_PRED_FORMAT4(SettingsEq, |
249 empty_dict_.get(), NULL, storage_->Get()); | 289 empty_dict_.get(), NULL, NULL, storage_->Get()); |
250 } | 290 } |
251 | 291 |
252 TEST_P(ExtensionSettingsStorageTest, SetWhenOverwriting) { | 292 TEST_P(ExtensionSettingsStorageTest, SetWhenOverwriting) { |
253 DictionaryValue key1_val2; | 293 DictionaryValue key1_val2; |
254 key1_val2.Set(key1_, val2_->DeepCopy()); | 294 key1_val2.Set(key1_, val2_->DeepCopy()); |
255 | 295 |
256 EXPECT_PRED_FORMAT3(SettingsEq, | 296 EXPECT_PRED_FORMAT4(SettingsEq, |
257 &key1_val2, &set1_, storage_->Set(key1_, *val2_)); | 297 &key1_val2, empty_dict_.get(), &set1_, storage_->Set(key1_, *val2_)); |
258 EXPECT_PRED_FORMAT3(SettingsEq, | 298 EXPECT_PRED_FORMAT4(SettingsEq, |
259 dict12_.get(), &set12_, storage_->Set(*dict12_)); | 299 dict12_.get(), &key1_val2, &set12_, storage_->Set(*dict12_)); |
260 | 300 |
261 EXPECT_PRED_FORMAT3(SettingsEq, | 301 EXPECT_PRED_FORMAT4(SettingsEq, |
262 dict1_.get(), NULL, storage_->Get(key1_)); | 302 dict1_.get(), NULL, NULL, storage_->Get(key1_)); |
263 EXPECT_PRED_FORMAT3(SettingsEq, | 303 EXPECT_PRED_FORMAT4(SettingsEq, |
264 empty_dict_.get(), NULL, storage_->Get(key3_)); | 304 empty_dict_.get(), NULL, NULL, storage_->Get(key3_)); |
265 EXPECT_PRED_FORMAT3(SettingsEq, | 305 EXPECT_PRED_FORMAT4(SettingsEq, |
266 empty_dict_.get(), NULL, storage_->Get(empty_list_)); | 306 empty_dict_.get(), NULL, NULL, storage_->Get(empty_list_)); |
267 EXPECT_PRED_FORMAT3(SettingsEq, | 307 EXPECT_PRED_FORMAT4(SettingsEq, |
268 dict1_.get(), NULL, storage_->Get(list1_)); | 308 dict1_.get(), NULL, NULL, storage_->Get(list1_)); |
269 EXPECT_PRED_FORMAT3(SettingsEq, | 309 EXPECT_PRED_FORMAT4(SettingsEq, |
270 dict12_.get(), NULL, storage_->Get(list12_)); | 310 dict12_.get(), NULL, NULL, storage_->Get(list12_)); |
271 EXPECT_PRED_FORMAT3(SettingsEq, | 311 EXPECT_PRED_FORMAT4(SettingsEq, |
272 dict1_.get(), NULL, storage_->Get(list13_)); | 312 dict1_.get(), NULL, NULL, storage_->Get(list13_)); |
273 EXPECT_PRED_FORMAT3(SettingsEq, | 313 EXPECT_PRED_FORMAT4(SettingsEq, |
274 dict12_.get(), NULL, storage_->Get(list123_)); | 314 dict12_.get(), NULL, NULL, storage_->Get(list123_)); |
275 EXPECT_PRED_FORMAT3(SettingsEq, | 315 EXPECT_PRED_FORMAT4(SettingsEq, |
276 dict12_.get(), NULL, storage_->Get()); | 316 dict12_.get(), NULL, NULL, storage_->Get()); |
277 } | 317 } |
278 | 318 |
279 TEST_P(ExtensionSettingsStorageTest, ClearWhenEmpty) { | 319 TEST_P(ExtensionSettingsStorageTest, ClearWhenEmpty) { |
280 EXPECT_PRED_FORMAT3(SettingsEq, | 320 EXPECT_PRED_FORMAT4(SettingsEq, |
281 NULL, &empty_set_, storage_->Clear()); | 321 NULL, empty_dict_.get(), &empty_set_, storage_->Clear()); |
282 | 322 |
283 EXPECT_PRED_FORMAT3(SettingsEq, | 323 EXPECT_PRED_FORMAT4(SettingsEq, |
284 empty_dict_.get(), NULL, storage_->Get(key1_)); | 324 empty_dict_.get(), NULL, NULL, storage_->Get(key1_)); |
285 EXPECT_PRED_FORMAT3(SettingsEq, | 325 EXPECT_PRED_FORMAT4(SettingsEq, |
286 empty_dict_.get(), NULL, storage_->Get(empty_list_)); | 326 empty_dict_.get(), NULL, NULL, storage_->Get(empty_list_)); |
287 EXPECT_PRED_FORMAT3(SettingsEq, | 327 EXPECT_PRED_FORMAT4(SettingsEq, |
288 empty_dict_.get(), NULL, storage_->Get(list123_)); | 328 empty_dict_.get(), NULL, NULL, storage_->Get(list123_)); |
289 EXPECT_PRED_FORMAT3(SettingsEq, | 329 EXPECT_PRED_FORMAT4(SettingsEq, |
290 empty_dict_.get(), NULL, storage_->Get()); | 330 empty_dict_.get(), NULL, NULL, storage_->Get()); |
291 } | 331 } |
292 | 332 |
293 TEST_P(ExtensionSettingsStorageTest, ClearWhenNotEmpty) { | 333 TEST_P(ExtensionSettingsStorageTest, ClearWhenNotEmpty) { |
294 EXPECT_PRED_FORMAT3(SettingsEq, | 334 EXPECT_PRED_FORMAT4(SettingsEq, |
295 dict12_.get(), &set12_, storage_->Set(*dict12_)); | 335 dict12_.get(), empty_dict_.get(), &set12_, storage_->Set(*dict12_)); |
296 EXPECT_PRED_FORMAT3(SettingsEq, | 336 EXPECT_PRED_FORMAT4(SettingsEq, |
297 NULL, &set12_, storage_->Clear()); | 337 NULL, dict12_.get(), &set12_, storage_->Clear()); |
298 | 338 |
299 EXPECT_PRED_FORMAT3(SettingsEq, | 339 EXPECT_PRED_FORMAT4(SettingsEq, |
300 empty_dict_.get(), NULL, storage_->Get(key1_)); | 340 empty_dict_.get(), NULL, NULL, storage_->Get(key1_)); |
301 EXPECT_PRED_FORMAT3(SettingsEq, | 341 EXPECT_PRED_FORMAT4(SettingsEq, |
302 empty_dict_.get(), NULL, storage_->Get(empty_list_)); | 342 empty_dict_.get(), NULL, NULL, storage_->Get(empty_list_)); |
303 EXPECT_PRED_FORMAT3(SettingsEq, | 343 EXPECT_PRED_FORMAT4(SettingsEq, |
304 empty_dict_.get(), NULL, storage_->Get(list123_)); | 344 empty_dict_.get(), NULL, NULL, storage_->Get(list123_)); |
305 EXPECT_PRED_FORMAT3(SettingsEq, | 345 EXPECT_PRED_FORMAT4(SettingsEq, |
306 empty_dict_.get(), NULL, storage_->Get()); | 346 empty_dict_.get(), NULL, NULL, storage_->Get()); |
307 } | 347 } |
308 | 348 |
309 // Dots should be allowed in key names; they shouldn't be interpreted as | 349 // Dots should be allowed in key names; they shouldn't be interpreted as |
310 // indexing into a dictionary. | 350 // indexing into a dictionary. |
311 TEST_P(ExtensionSettingsStorageTest, DotsInKeyNames) { | 351 TEST_P(ExtensionSettingsStorageTest, DotsInKeyNames) { |
312 std::string dot_key("foo.bar"); | 352 std::string dot_key("foo.bar"); |
313 StringValue dot_value("baz.qux"); | 353 StringValue dot_value("baz.qux"); |
314 std::vector<std::string> dot_list; | 354 std::vector<std::string> dot_list; |
315 dot_list.push_back(dot_key); | 355 dot_list.push_back(dot_key); |
316 std::set<std::string> dot_set; | 356 std::set<std::string> dot_set; |
317 dot_set.insert(dot_key); | 357 dot_set.insert(dot_key); |
318 DictionaryValue dot_dict; | 358 DictionaryValue dot_dict; |
319 dot_dict.SetWithoutPathExpansion(dot_key, dot_value.DeepCopy()); | 359 dot_dict.SetWithoutPathExpansion(dot_key, dot_value.DeepCopy()); |
320 | 360 |
321 EXPECT_PRED_FORMAT3(SettingsEq, | 361 EXPECT_PRED_FORMAT4(SettingsEq, |
322 empty_dict_.get(), NULL, storage_->Get(dot_key)); | 362 empty_dict_.get(), NULL, NULL, storage_->Get(dot_key)); |
323 | 363 |
324 EXPECT_PRED_FORMAT3(SettingsEq, | 364 EXPECT_PRED_FORMAT4(SettingsEq, |
325 &dot_dict, &dot_set, storage_->Set(dot_key, dot_value)); | 365 &dot_dict, empty_dict_.get(), &dot_set, |
326 EXPECT_PRED_FORMAT3(SettingsEq, | 366 storage_->Set(dot_key, dot_value)); |
327 &dot_dict, &empty_set_, storage_->Set(dot_key, dot_value)); | 367 EXPECT_PRED_FORMAT4(SettingsEq, |
328 EXPECT_PRED_FORMAT3(SettingsEq, | 368 &dot_dict, &dot_dict, &empty_set_, |
329 &dot_dict, NULL, storage_->Get(dot_key)); | 369 storage_->Set(dot_key, dot_value)); |
| 370 EXPECT_PRED_FORMAT4(SettingsEq, |
| 371 &dot_dict, NULL, NULL, storage_->Get(dot_key)); |
330 | 372 |
331 EXPECT_PRED_FORMAT3(SettingsEq, | 373 EXPECT_PRED_FORMAT4(SettingsEq, |
332 NULL, &dot_set, storage_->Remove(dot_key)); | 374 NULL, &dot_dict, &dot_set, storage_->Remove(dot_key)); |
333 EXPECT_PRED_FORMAT3(SettingsEq, | 375 EXPECT_PRED_FORMAT4(SettingsEq, |
334 NULL, &empty_set_, storage_->Remove(dot_key)); | 376 NULL, empty_dict_.get(), &empty_set_, storage_->Remove(dot_key)); |
335 EXPECT_PRED_FORMAT3(SettingsEq, | 377 EXPECT_PRED_FORMAT4(SettingsEq, |
336 &dot_dict, &dot_set, storage_->Set(dot_dict)); | 378 &dot_dict, empty_dict_.get(), &dot_set, storage_->Set(dot_dict)); |
337 EXPECT_PRED_FORMAT3(SettingsEq, | 379 EXPECT_PRED_FORMAT4(SettingsEq, |
338 &dot_dict, NULL, storage_->Get(dot_list)); | 380 &dot_dict, NULL, NULL, storage_->Get(dot_list)); |
339 EXPECT_PRED_FORMAT3(SettingsEq, | 381 EXPECT_PRED_FORMAT4(SettingsEq, |
340 &dot_dict, NULL, storage_->Get()); | 382 &dot_dict, NULL, NULL, storage_->Get()); |
341 | 383 |
342 EXPECT_PRED_FORMAT3(SettingsEq, | 384 EXPECT_PRED_FORMAT4(SettingsEq, |
343 NULL, &dot_set, storage_->Remove(dot_list)); | 385 NULL, &dot_dict, &dot_set, storage_->Remove(dot_list)); |
344 EXPECT_PRED_FORMAT3(SettingsEq, | 386 EXPECT_PRED_FORMAT4(SettingsEq, |
345 empty_dict_.get(), NULL, storage_->Get(dot_key)); | 387 empty_dict_.get(), NULL, NULL, storage_->Get(dot_key)); |
346 EXPECT_PRED_FORMAT3(SettingsEq, | 388 EXPECT_PRED_FORMAT4(SettingsEq, |
347 empty_dict_.get(), NULL, storage_->Get()); | 389 empty_dict_.get(), NULL, NULL, storage_->Get()); |
348 } | 390 } |
349 | 391 |
350 TEST_P(ExtensionSettingsStorageTest, DotsInKeyNamesWithDicts) { | 392 TEST_P(ExtensionSettingsStorageTest, DotsInKeyNamesWithDicts) { |
351 DictionaryValue outer_dict; | 393 DictionaryValue outer_dict; |
352 DictionaryValue* inner_dict = new DictionaryValue(); | 394 DictionaryValue* inner_dict = new DictionaryValue(); |
353 outer_dict.Set("foo", inner_dict); | 395 outer_dict.Set("foo", inner_dict); |
354 inner_dict->Set("bar", Value::CreateStringValue("baz")); | 396 inner_dict->Set("bar", Value::CreateStringValue("baz")); |
355 std::set<std::string> changed_keys; | 397 std::set<std::string> changed_keys; |
356 changed_keys.insert("foo"); | 398 changed_keys.insert("foo"); |
357 | 399 |
358 EXPECT_PRED_FORMAT3(SettingsEq, | 400 EXPECT_PRED_FORMAT4(SettingsEq, |
359 &outer_dict, &changed_keys, storage_->Set(outer_dict)); | 401 &outer_dict, empty_dict_.get(), &changed_keys, storage_->Set(outer_dict)); |
360 EXPECT_PRED_FORMAT3(SettingsEq, | 402 EXPECT_PRED_FORMAT4(SettingsEq, |
361 &outer_dict, NULL, storage_->Get("foo")); | 403 &outer_dict, NULL, NULL, storage_->Get("foo")); |
362 EXPECT_PRED_FORMAT3(SettingsEq, | 404 EXPECT_PRED_FORMAT4(SettingsEq, |
363 empty_dict_.get(), NULL, storage_->Get("foo.bar")); | 405 empty_dict_.get(), NULL, NULL, storage_->Get("foo.bar")); |
364 } | 406 } |
365 | 407 |
366 TEST_P(ExtensionSettingsStorageTest, ComplexChangedKeysScenarios) { | 408 TEST_P(ExtensionSettingsStorageTest, ComplexChangedKeysScenarios) { |
367 // Test: | 409 // Test: |
368 // - Setting over missing/changed/same keys, combinations. | 410 // - Setting over missing/changed/same keys, combinations. |
369 // - Removing over missing and present keys, combinations. | 411 // - Removing over missing and present keys, combinations. |
370 // - Clearing. | 412 // - Clearing. |
371 std::vector<std::string> complex_list; | 413 std::vector<std::string> complex_list; |
372 std::set<std::string> complex_set; | 414 std::set<std::string> complex_set; |
373 DictionaryValue complex_dict; | 415 DictionaryValue complex_dict; |
| 416 DictionaryValue complex_changed_dict; |
374 | 417 |
375 EXPECT_PRED_FORMAT3(SettingsEq, | 418 EXPECT_PRED_FORMAT4(SettingsEq, |
376 dict1_.get(), &set1_, storage_->Set(key1_, *val1_)); | 419 dict1_.get(), empty_dict_.get(), &set1_, storage_->Set(key1_, *val1_)); |
377 EXPECT_PRED_FORMAT3(SettingsEq, | 420 EXPECT_PRED_FORMAT4(SettingsEq, |
378 dict1_.get(), &empty_set_, storage_->Set(key1_, *val1_)); | 421 dict1_.get(), dict1_.get(), &empty_set_, storage_->Set(key1_, *val1_)); |
379 | 422 |
380 complex_dict.Clear(); | 423 complex_dict.Clear(); |
381 complex_dict.Set(key1_, val2_->DeepCopy()); | 424 complex_dict.Set(key1_, val2_->DeepCopy()); |
382 EXPECT_PRED_FORMAT3(SettingsEq, | 425 EXPECT_PRED_FORMAT4(SettingsEq, |
383 &complex_dict, &set1_, storage_->Set(key1_, *val2_)); | 426 &complex_dict, dict1_.get(), &set1_, storage_->Set(key1_, *val2_)); |
384 | 427 |
385 EXPECT_PRED_FORMAT3(SettingsEq, | 428 EXPECT_PRED_FORMAT4(SettingsEq, |
386 NULL, &set1_, storage_->Remove(key1_)); | 429 NULL, &complex_dict, &set1_, storage_->Remove(key1_)); |
387 EXPECT_PRED_FORMAT3(SettingsEq, | 430 EXPECT_PRED_FORMAT4(SettingsEq, |
388 NULL, &empty_set_, storage_->Remove(key1_)); | 431 NULL, empty_dict_.get(), &empty_set_, storage_->Remove(key1_)); |
389 | 432 |
390 EXPECT_PRED_FORMAT3(SettingsEq, | 433 EXPECT_PRED_FORMAT4(SettingsEq, |
391 dict1_.get(), &set1_, storage_->Set(key1_, *val1_)); | 434 dict1_.get(), empty_dict_.get(), &set1_, storage_->Set(key1_, *val1_)); |
392 EXPECT_PRED_FORMAT3(SettingsEq, | 435 EXPECT_PRED_FORMAT4(SettingsEq, |
393 NULL, &set1_, storage_->Clear()); | 436 NULL, dict1_.get(), &set1_, storage_->Clear()); |
394 EXPECT_PRED_FORMAT3(SettingsEq, | 437 EXPECT_PRED_FORMAT4(SettingsEq, |
395 NULL, &empty_set_, storage_->Clear()); | 438 NULL, empty_dict_.get(), &empty_set_, storage_->Clear()); |
396 | 439 |
397 EXPECT_PRED_FORMAT3(SettingsEq, | 440 EXPECT_PRED_FORMAT4(SettingsEq, |
398 dict12_.get(), &set12_, storage_->Set(*dict12_)); | 441 dict12_.get(), empty_dict_.get(), &set12_, storage_->Set(*dict12_)); |
399 EXPECT_PRED_FORMAT3(SettingsEq, | 442 EXPECT_PRED_FORMAT4(SettingsEq, |
400 dict12_.get(), &empty_set_, storage_->Set(*dict12_)); | 443 dict12_.get(), dict12_.get(), &empty_set_, storage_->Set(*dict12_)); |
401 EXPECT_PRED_FORMAT3(SettingsEq, | 444 EXPECT_PRED_FORMAT4(SettingsEq, |
402 dict123_.get(), &set3_, storage_->Set(*dict123_)); | 445 dict123_.get(), dict12_.get(), &set3_, storage_->Set(*dict123_)); |
403 | 446 |
404 complex_dict.Clear(); | 447 complex_dict.Clear(); |
405 complex_dict.Set(key1_, val2_->DeepCopy()); | 448 complex_dict.Set(key1_, val2_->DeepCopy()); |
406 complex_dict.Set(key2_, val2_->DeepCopy()); | 449 complex_dict.Set(key2_, val2_->DeepCopy()); |
407 complex_dict.Set("asdf", val1_->DeepCopy()); | 450 complex_dict.Set("asdf", val1_->DeepCopy()); |
408 complex_dict.Set("qwerty", val3_->DeepCopy()); | 451 complex_dict.Set("qwerty", val3_->DeepCopy()); |
| 452 complex_changed_dict.Clear(); |
| 453 complex_changed_dict.Set(key1_, val1_->DeepCopy()); |
| 454 complex_changed_dict.Set(key2_, val2_->DeepCopy()); |
409 complex_set.clear(); | 455 complex_set.clear(); |
410 complex_set.insert(key1_); | 456 complex_set.insert(key1_); |
411 complex_set.insert("asdf"); | 457 complex_set.insert("asdf"); |
412 complex_set.insert("qwerty"); | 458 complex_set.insert("qwerty"); |
413 EXPECT_PRED_FORMAT3(SettingsEq, | 459 EXPECT_PRED_FORMAT4(SettingsEq, |
414 &complex_dict, &complex_set, storage_->Set(complex_dict)); | 460 &complex_dict, &complex_changed_dict, &complex_set, |
| 461 storage_->Set(complex_dict)); |
415 | 462 |
416 EXPECT_PRED_FORMAT3(SettingsEq, | 463 complex_changed_dict.Clear(); |
417 NULL, &set12_, storage_->Remove(list12_)); | 464 complex_changed_dict.Set(key1_, val2_->DeepCopy()); |
418 EXPECT_PRED_FORMAT3(SettingsEq, | 465 complex_changed_dict.Set(key2_, val2_->DeepCopy()); |
419 NULL, &empty_set_, storage_->Remove(list12_)); | 466 EXPECT_PRED_FORMAT4(SettingsEq, |
| 467 NULL, &complex_changed_dict, &set12_, storage_->Remove(list12_)); |
| 468 EXPECT_PRED_FORMAT4(SettingsEq, |
| 469 NULL, empty_dict_.get(), &empty_set_, storage_->Remove(list12_)); |
420 | 470 |
421 complex_list.clear(); | 471 complex_list.clear(); |
422 complex_list.push_back(key1_); | 472 complex_list.push_back(key1_); |
423 complex_list.push_back("asdf"); | 473 complex_list.push_back("asdf"); |
| 474 complex_changed_dict.Clear(); |
| 475 complex_changed_dict.Set("asdf", val1_->DeepCopy()); |
424 complex_set.clear(); | 476 complex_set.clear(); |
425 complex_set.insert("asdf"); | 477 complex_set.insert("asdf"); |
426 EXPECT_PRED_FORMAT3(SettingsEq, | 478 EXPECT_PRED_FORMAT4(SettingsEq, |
427 NULL, &complex_set, storage_->Remove(complex_list)); | 479 NULL, |
| 480 &complex_changed_dict, |
| 481 &complex_set, |
| 482 storage_->Remove(complex_list)); |
428 | 483 |
| 484 complex_changed_dict.Clear(); |
| 485 complex_changed_dict.Set(key3_, val3_->DeepCopy()); |
| 486 complex_changed_dict.Set("qwerty", val3_->DeepCopy()); |
429 complex_set.clear(); | 487 complex_set.clear(); |
430 complex_set.insert(key3_); | 488 complex_set.insert(key3_); |
431 complex_set.insert("qwerty"); | 489 complex_set.insert("qwerty"); |
432 EXPECT_PRED_FORMAT3(SettingsEq, | 490 EXPECT_PRED_FORMAT4(SettingsEq, |
433 NULL, &complex_set, storage_->Clear()); | 491 NULL, &complex_changed_dict, &complex_set, storage_->Clear()); |
434 EXPECT_PRED_FORMAT3(SettingsEq, | 492 EXPECT_PRED_FORMAT4(SettingsEq, |
435 NULL, &empty_set_, storage_->Clear()); | 493 NULL, empty_dict_.get(), &empty_set_, storage_->Clear()); |
436 } | 494 } |
OLD | NEW |