| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 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 "base/values.h" | 5 #include "base/values.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 std::string bookmark_name = "Unnamed"; | 55 std::string bookmark_name = "Unnamed"; |
| 56 ASSERT_TRUE(bookmark->GetString("name", &bookmark_name)); | 56 ASSERT_TRUE(bookmark->GetString("name", &bookmark_name)); |
| 57 ASSERT_EQ(std::string("Froogle"), bookmark_name); | 57 ASSERT_EQ(std::string("Froogle"), bookmark_name); |
| 58 std::string bookmark_url; | 58 std::string bookmark_url; |
| 59 ASSERT_TRUE(bookmark->GetString("url", &bookmark_url)); | 59 ASSERT_TRUE(bookmark->GetString("url", &bookmark_url)); |
| 60 ASSERT_EQ(std::string("http://froogle.com"), bookmark_url); | 60 ASSERT_EQ(std::string("http://froogle.com"), bookmark_url); |
| 61 } | 61 } |
| 62 | 62 |
| 63 TEST(ValuesTest, List) { | 63 TEST(ValuesTest, List) { |
| 64 std::unique_ptr<ListValue> mixed_list(new ListValue()); | 64 std::unique_ptr<ListValue> mixed_list(new ListValue()); |
| 65 mixed_list->Set(0, WrapUnique(new FundamentalValue(true))); | 65 mixed_list->Set(0, MakeUnique<FundamentalValue>(true)); |
| 66 mixed_list->Set(1, WrapUnique(new FundamentalValue(42))); | 66 mixed_list->Set(1, MakeUnique<FundamentalValue>(42)); |
| 67 mixed_list->Set(2, WrapUnique(new FundamentalValue(88.8))); | 67 mixed_list->Set(2, MakeUnique<FundamentalValue>(88.8)); |
| 68 mixed_list->Set(3, WrapUnique(new StringValue("foo"))); | 68 mixed_list->Set(3, MakeUnique<StringValue>("foo")); |
| 69 ASSERT_EQ(4u, mixed_list->GetSize()); | 69 ASSERT_EQ(4u, mixed_list->GetSize()); |
| 70 | 70 |
| 71 Value *value = NULL; | 71 Value *value = NULL; |
| 72 bool bool_value = false; | 72 bool bool_value = false; |
| 73 int int_value = 0; | 73 int int_value = 0; |
| 74 double double_value = 0.0; | 74 double double_value = 0.0; |
| 75 std::string string_value; | 75 std::string string_value; |
| 76 | 76 |
| 77 ASSERT_FALSE(mixed_list->Get(4, &value)); | 77 ASSERT_FALSE(mixed_list->Get(4, &value)); |
| 78 | 78 |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 | 193 |
| 194 private: | 194 private: |
| 195 bool* deletion_flag_; | 195 bool* deletion_flag_; |
| 196 }; | 196 }; |
| 197 | 197 |
| 198 TEST(ValuesTest, ListDeletion) { | 198 TEST(ValuesTest, ListDeletion) { |
| 199 bool deletion_flag = true; | 199 bool deletion_flag = true; |
| 200 | 200 |
| 201 { | 201 { |
| 202 ListValue list; | 202 ListValue list; |
| 203 list.Append(WrapUnique(new DeletionTestValue(&deletion_flag))); | 203 list.Append(MakeUnique<DeletionTestValue>(&deletion_flag)); |
| 204 EXPECT_FALSE(deletion_flag); | 204 EXPECT_FALSE(deletion_flag); |
| 205 } | 205 } |
| 206 EXPECT_TRUE(deletion_flag); | 206 EXPECT_TRUE(deletion_flag); |
| 207 | 207 |
| 208 { | 208 { |
| 209 ListValue list; | 209 ListValue list; |
| 210 list.Append(WrapUnique(new DeletionTestValue(&deletion_flag))); | 210 list.Append(MakeUnique<DeletionTestValue>(&deletion_flag)); |
| 211 EXPECT_FALSE(deletion_flag); | 211 EXPECT_FALSE(deletion_flag); |
| 212 list.Clear(); | 212 list.Clear(); |
| 213 EXPECT_TRUE(deletion_flag); | 213 EXPECT_TRUE(deletion_flag); |
| 214 } | 214 } |
| 215 | 215 |
| 216 { | 216 { |
| 217 ListValue list; | 217 ListValue list; |
| 218 list.Append(WrapUnique(new DeletionTestValue(&deletion_flag))); | 218 list.Append(MakeUnique<DeletionTestValue>(&deletion_flag)); |
| 219 EXPECT_FALSE(deletion_flag); | 219 EXPECT_FALSE(deletion_flag); |
| 220 EXPECT_TRUE(list.Set(0, Value::CreateNullValue())); | 220 EXPECT_TRUE(list.Set(0, Value::CreateNullValue())); |
| 221 EXPECT_TRUE(deletion_flag); | 221 EXPECT_TRUE(deletion_flag); |
| 222 } | 222 } |
| 223 } | 223 } |
| 224 | 224 |
| 225 TEST(ValuesTest, ListRemoval) { | 225 TEST(ValuesTest, ListRemoval) { |
| 226 bool deletion_flag = true; | 226 bool deletion_flag = true; |
| 227 std::unique_ptr<Value> removed_item; | 227 std::unique_ptr<Value> removed_item; |
| 228 | 228 |
| 229 { | 229 { |
| 230 ListValue list; | 230 ListValue list; |
| 231 list.Append(WrapUnique(new DeletionTestValue(&deletion_flag))); | 231 list.Append(MakeUnique<DeletionTestValue>(&deletion_flag)); |
| 232 EXPECT_FALSE(deletion_flag); | 232 EXPECT_FALSE(deletion_flag); |
| 233 EXPECT_EQ(1U, list.GetSize()); | 233 EXPECT_EQ(1U, list.GetSize()); |
| 234 EXPECT_FALSE(list.Remove(std::numeric_limits<size_t>::max(), | 234 EXPECT_FALSE(list.Remove(std::numeric_limits<size_t>::max(), |
| 235 &removed_item)); | 235 &removed_item)); |
| 236 EXPECT_FALSE(list.Remove(1, &removed_item)); | 236 EXPECT_FALSE(list.Remove(1, &removed_item)); |
| 237 EXPECT_TRUE(list.Remove(0, &removed_item)); | 237 EXPECT_TRUE(list.Remove(0, &removed_item)); |
| 238 ASSERT_TRUE(removed_item); | 238 ASSERT_TRUE(removed_item); |
| 239 EXPECT_EQ(0U, list.GetSize()); | 239 EXPECT_EQ(0U, list.GetSize()); |
| 240 } | 240 } |
| 241 EXPECT_FALSE(deletion_flag); | 241 EXPECT_FALSE(deletion_flag); |
| 242 removed_item.reset(); | 242 removed_item.reset(); |
| 243 EXPECT_TRUE(deletion_flag); | 243 EXPECT_TRUE(deletion_flag); |
| 244 | 244 |
| 245 { | 245 { |
| 246 ListValue list; | 246 ListValue list; |
| 247 list.Append(WrapUnique(new DeletionTestValue(&deletion_flag))); | 247 list.Append(MakeUnique<DeletionTestValue>(&deletion_flag)); |
| 248 EXPECT_FALSE(deletion_flag); | 248 EXPECT_FALSE(deletion_flag); |
| 249 EXPECT_TRUE(list.Remove(0, NULL)); | 249 EXPECT_TRUE(list.Remove(0, NULL)); |
| 250 EXPECT_TRUE(deletion_flag); | 250 EXPECT_TRUE(deletion_flag); |
| 251 EXPECT_EQ(0U, list.GetSize()); | 251 EXPECT_EQ(0U, list.GetSize()); |
| 252 } | 252 } |
| 253 | 253 |
| 254 { | 254 { |
| 255 ListValue list; | 255 ListValue list; |
| 256 std::unique_ptr<DeletionTestValue> value( | 256 std::unique_ptr<DeletionTestValue> value( |
| 257 new DeletionTestValue(&deletion_flag)); | 257 new DeletionTestValue(&deletion_flag)); |
| 258 DeletionTestValue* original_value = value.get(); | 258 DeletionTestValue* original_value = value.get(); |
| 259 list.Append(std::move(value)); | 259 list.Append(std::move(value)); |
| 260 EXPECT_FALSE(deletion_flag); | 260 EXPECT_FALSE(deletion_flag); |
| 261 size_t index = 0; | 261 size_t index = 0; |
| 262 list.Remove(*original_value, &index); | 262 list.Remove(*original_value, &index); |
| 263 EXPECT_EQ(0U, index); | 263 EXPECT_EQ(0U, index); |
| 264 EXPECT_TRUE(deletion_flag); | 264 EXPECT_TRUE(deletion_flag); |
| 265 EXPECT_EQ(0U, list.GetSize()); | 265 EXPECT_EQ(0U, list.GetSize()); |
| 266 } | 266 } |
| 267 } | 267 } |
| 268 | 268 |
| 269 TEST(ValuesTest, DictionaryDeletion) { | 269 TEST(ValuesTest, DictionaryDeletion) { |
| 270 std::string key = "test"; | 270 std::string key = "test"; |
| 271 bool deletion_flag = true; | 271 bool deletion_flag = true; |
| 272 | 272 |
| 273 { | 273 { |
| 274 DictionaryValue dict; | 274 DictionaryValue dict; |
| 275 dict.Set(key, WrapUnique(new DeletionTestValue(&deletion_flag))); | 275 dict.Set(key, MakeUnique<DeletionTestValue>(&deletion_flag)); |
| 276 EXPECT_FALSE(deletion_flag); | 276 EXPECT_FALSE(deletion_flag); |
| 277 } | 277 } |
| 278 EXPECT_TRUE(deletion_flag); | 278 EXPECT_TRUE(deletion_flag); |
| 279 | 279 |
| 280 { | 280 { |
| 281 DictionaryValue dict; | 281 DictionaryValue dict; |
| 282 dict.Set(key, WrapUnique(new DeletionTestValue(&deletion_flag))); | 282 dict.Set(key, MakeUnique<DeletionTestValue>(&deletion_flag)); |
| 283 EXPECT_FALSE(deletion_flag); | 283 EXPECT_FALSE(deletion_flag); |
| 284 dict.Clear(); | 284 dict.Clear(); |
| 285 EXPECT_TRUE(deletion_flag); | 285 EXPECT_TRUE(deletion_flag); |
| 286 } | 286 } |
| 287 | 287 |
| 288 { | 288 { |
| 289 DictionaryValue dict; | 289 DictionaryValue dict; |
| 290 dict.Set(key, WrapUnique(new DeletionTestValue(&deletion_flag))); | 290 dict.Set(key, MakeUnique<DeletionTestValue>(&deletion_flag)); |
| 291 EXPECT_FALSE(deletion_flag); | 291 EXPECT_FALSE(deletion_flag); |
| 292 dict.Set(key, Value::CreateNullValue()); | 292 dict.Set(key, Value::CreateNullValue()); |
| 293 EXPECT_TRUE(deletion_flag); | 293 EXPECT_TRUE(deletion_flag); |
| 294 } | 294 } |
| 295 } | 295 } |
| 296 | 296 |
| 297 TEST(ValuesTest, DictionaryRemoval) { | 297 TEST(ValuesTest, DictionaryRemoval) { |
| 298 std::string key = "test"; | 298 std::string key = "test"; |
| 299 bool deletion_flag = true; | 299 bool deletion_flag = true; |
| 300 std::unique_ptr<Value> removed_item; | 300 std::unique_ptr<Value> removed_item; |
| 301 | 301 |
| 302 { | 302 { |
| 303 DictionaryValue dict; | 303 DictionaryValue dict; |
| 304 dict.Set(key, WrapUnique(new DeletionTestValue(&deletion_flag))); | 304 dict.Set(key, MakeUnique<DeletionTestValue>(&deletion_flag)); |
| 305 EXPECT_FALSE(deletion_flag); | 305 EXPECT_FALSE(deletion_flag); |
| 306 EXPECT_TRUE(dict.HasKey(key)); | 306 EXPECT_TRUE(dict.HasKey(key)); |
| 307 EXPECT_FALSE(dict.Remove("absent key", &removed_item)); | 307 EXPECT_FALSE(dict.Remove("absent key", &removed_item)); |
| 308 EXPECT_TRUE(dict.Remove(key, &removed_item)); | 308 EXPECT_TRUE(dict.Remove(key, &removed_item)); |
| 309 EXPECT_FALSE(dict.HasKey(key)); | 309 EXPECT_FALSE(dict.HasKey(key)); |
| 310 ASSERT_TRUE(removed_item); | 310 ASSERT_TRUE(removed_item); |
| 311 } | 311 } |
| 312 EXPECT_FALSE(deletion_flag); | 312 EXPECT_FALSE(deletion_flag); |
| 313 removed_item.reset(); | 313 removed_item.reset(); |
| 314 EXPECT_TRUE(deletion_flag); | 314 EXPECT_TRUE(deletion_flag); |
| 315 | 315 |
| 316 { | 316 { |
| 317 DictionaryValue dict; | 317 DictionaryValue dict; |
| 318 dict.Set(key, WrapUnique(new DeletionTestValue(&deletion_flag))); | 318 dict.Set(key, MakeUnique<DeletionTestValue>(&deletion_flag)); |
| 319 EXPECT_FALSE(deletion_flag); | 319 EXPECT_FALSE(deletion_flag); |
| 320 EXPECT_TRUE(dict.HasKey(key)); | 320 EXPECT_TRUE(dict.HasKey(key)); |
| 321 EXPECT_TRUE(dict.Remove(key, NULL)); | 321 EXPECT_TRUE(dict.Remove(key, NULL)); |
| 322 EXPECT_TRUE(deletion_flag); | 322 EXPECT_TRUE(deletion_flag); |
| 323 EXPECT_FALSE(dict.HasKey(key)); | 323 EXPECT_FALSE(dict.HasKey(key)); |
| 324 } | 324 } |
| 325 } | 325 } |
| 326 | 326 |
| 327 TEST(ValuesTest, DictionaryWithoutPathExpansion) { | 327 TEST(ValuesTest, DictionaryWithoutPathExpansion) { |
| 328 DictionaryValue dict; | 328 DictionaryValue dict; |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 575 ListValue* original_list = list.get(); | 575 ListValue* original_list = list.get(); |
| 576 list->Append(Value::CreateNullValue()); | 576 list->Append(Value::CreateNullValue()); |
| 577 list->Append(WrapUnique(new DictionaryValue)); | 577 list->Append(WrapUnique(new DictionaryValue)); |
| 578 std::unique_ptr<Value> list_copy(list->CreateDeepCopy()); | 578 std::unique_ptr<Value> list_copy(list->CreateDeepCopy()); |
| 579 | 579 |
| 580 dv.Set("f", std::move(list)); | 580 dv.Set("f", std::move(list)); |
| 581 EXPECT_FALSE(dv.Equals(copy.get())); | 581 EXPECT_FALSE(dv.Equals(copy.get())); |
| 582 copy->Set("f", std::move(list_copy)); | 582 copy->Set("f", std::move(list_copy)); |
| 583 EXPECT_TRUE(dv.Equals(copy.get())); | 583 EXPECT_TRUE(dv.Equals(copy.get())); |
| 584 | 584 |
| 585 original_list->Append(WrapUnique(new FundamentalValue(true))); | 585 original_list->Append(MakeUnique<FundamentalValue>(true)); |
| 586 EXPECT_FALSE(dv.Equals(copy.get())); | 586 EXPECT_FALSE(dv.Equals(copy.get())); |
| 587 | 587 |
| 588 // Check if Equals detects differences in only the keys. | 588 // Check if Equals detects differences in only the keys. |
| 589 copy = dv.CreateDeepCopy(); | 589 copy = dv.CreateDeepCopy(); |
| 590 EXPECT_TRUE(dv.Equals(copy.get())); | 590 EXPECT_TRUE(dv.Equals(copy.get())); |
| 591 copy->Remove("a", NULL); | 591 copy->Remove("a", NULL); |
| 592 copy->SetBoolean("aa", false); | 592 copy->SetBoolean("aa", false); |
| 593 EXPECT_FALSE(dv.Equals(copy.get())); | 593 EXPECT_FALSE(dv.Equals(copy.get())); |
| 594 } | 594 } |
| 595 | 595 |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 732 inner2->Set("empty_list", WrapUnique(new ListValue)); | 732 inner2->Set("empty_list", WrapUnique(new ListValue)); |
| 733 root->Set("dict_with_empty_children", std::move(inner2)); | 733 root->Set("dict_with_empty_children", std::move(inner2)); |
| 734 root = root->DeepCopyWithoutEmptyChildren(); | 734 root = root->DeepCopyWithoutEmptyChildren(); |
| 735 EXPECT_EQ(2U, root->size()); | 735 EXPECT_EQ(2U, root->size()); |
| 736 } | 736 } |
| 737 | 737 |
| 738 // Make sure nested values don't get pruned. | 738 // Make sure nested values don't get pruned. |
| 739 { | 739 { |
| 740 std::unique_ptr<ListValue> inner(new ListValue); | 740 std::unique_ptr<ListValue> inner(new ListValue); |
| 741 std::unique_ptr<ListValue> inner2(new ListValue); | 741 std::unique_ptr<ListValue> inner2(new ListValue); |
| 742 inner2->Append(WrapUnique(new StringValue("hello"))); | 742 inner2->Append(MakeUnique<StringValue>("hello")); |
| 743 inner->Append(WrapUnique(new DictionaryValue)); | 743 inner->Append(WrapUnique(new DictionaryValue)); |
| 744 inner->Append(std::move(inner2)); | 744 inner->Append(std::move(inner2)); |
| 745 root->Set("list_with_empty_children", std::move(inner)); | 745 root->Set("list_with_empty_children", std::move(inner)); |
| 746 root = root->DeepCopyWithoutEmptyChildren(); | 746 root = root->DeepCopyWithoutEmptyChildren(); |
| 747 EXPECT_EQ(3U, root->size()); | 747 EXPECT_EQ(3U, root->size()); |
| 748 | 748 |
| 749 ListValue* inner_value, *inner_value2; | 749 ListValue* inner_value, *inner_value2; |
| 750 EXPECT_TRUE(root->GetList("list_with_empty_children", &inner_value)); | 750 EXPECT_TRUE(root->GetList("list_with_empty_children", &inner_value)); |
| 751 EXPECT_EQ(1U, inner_value->GetSize()); // Dictionary was pruned. | 751 EXPECT_EQ(1U, inner_value->GetSize()); // Dictionary was pruned. |
| 752 EXPECT_TRUE(inner_value->GetList(0, &inner_value2)); | 752 EXPECT_TRUE(inner_value->GetList(0, &inner_value2)); |
| (...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1147 EXPECT_FALSE(main_list.GetList(1, NULL)); | 1147 EXPECT_FALSE(main_list.GetList(1, NULL)); |
| 1148 EXPECT_FALSE(main_list.GetList(2, NULL)); | 1148 EXPECT_FALSE(main_list.GetList(2, NULL)); |
| 1149 EXPECT_FALSE(main_list.GetList(3, NULL)); | 1149 EXPECT_FALSE(main_list.GetList(3, NULL)); |
| 1150 EXPECT_FALSE(main_list.GetList(4, NULL)); | 1150 EXPECT_FALSE(main_list.GetList(4, NULL)); |
| 1151 EXPECT_FALSE(main_list.GetList(5, NULL)); | 1151 EXPECT_FALSE(main_list.GetList(5, NULL)); |
| 1152 EXPECT_TRUE(main_list.GetList(6, NULL)); | 1152 EXPECT_TRUE(main_list.GetList(6, NULL)); |
| 1153 EXPECT_FALSE(main_list.GetList(7, NULL)); | 1153 EXPECT_FALSE(main_list.GetList(7, NULL)); |
| 1154 } | 1154 } |
| 1155 | 1155 |
| 1156 } // namespace base | 1156 } // namespace base |
| OLD | NEW |