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 <limits> | 5 #include <limits> |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/strings/string16.h" | 8 #include "base/strings/string16.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 EXPECT_FALSE(deletion_flag); | 305 EXPECT_FALSE(deletion_flag); |
306 EXPECT_TRUE(dict.HasKey(key)); | 306 EXPECT_TRUE(dict.HasKey(key)); |
307 EXPECT_TRUE(dict.Remove(key, NULL)); | 307 EXPECT_TRUE(dict.Remove(key, NULL)); |
308 EXPECT_TRUE(deletion_flag); | 308 EXPECT_TRUE(deletion_flag); |
309 EXPECT_FALSE(dict.HasKey(key)); | 309 EXPECT_FALSE(dict.HasKey(key)); |
310 } | 310 } |
311 } | 311 } |
312 | 312 |
313 TEST(ValuesTest, DictionaryWithoutPathExpansion) { | 313 TEST(ValuesTest, DictionaryWithoutPathExpansion) { |
314 DictionaryValue dict; | 314 DictionaryValue dict; |
| 315 dict.Set("this.is.expanded", make_scoped_ptr(Value::CreateNullValue())); |
| 316 dict.SetWithoutPathExpansion("this.isnt.expanded", |
| 317 make_scoped_ptr(Value::CreateNullValue())); |
| 318 |
| 319 EXPECT_FALSE(dict.HasKey("this.is.expanded")); |
| 320 EXPECT_TRUE(dict.HasKey("this")); |
| 321 Value* value1; |
| 322 EXPECT_TRUE(dict.Get("this", &value1)); |
| 323 DictionaryValue* value2; |
| 324 ASSERT_TRUE(dict.GetDictionaryWithoutPathExpansion("this", &value2)); |
| 325 EXPECT_EQ(value1, value2); |
| 326 EXPECT_EQ(1U, value2->size()); |
| 327 |
| 328 EXPECT_TRUE(dict.HasKey("this.isnt.expanded")); |
| 329 Value* value3; |
| 330 EXPECT_FALSE(dict.Get("this.isnt.expanded", &value3)); |
| 331 Value* value4; |
| 332 ASSERT_TRUE(dict.GetWithoutPathExpansion("this.isnt.expanded", &value4)); |
| 333 EXPECT_EQ(Value::TYPE_NULL, value4->GetType()); |
| 334 } |
| 335 |
| 336 // Tests the deprecated version of SetWithoutPathExpansion. |
| 337 // TODO(estade): remove. |
| 338 TEST(ValuesTest, DictionaryWithoutPathExpansionDeprecated) { |
| 339 DictionaryValue dict; |
315 dict.Set("this.is.expanded", Value::CreateNullValue()); | 340 dict.Set("this.is.expanded", Value::CreateNullValue()); |
316 dict.SetWithoutPathExpansion("this.isnt.expanded", Value::CreateNullValue()); | 341 dict.SetWithoutPathExpansion("this.isnt.expanded", Value::CreateNullValue()); |
317 | 342 |
318 EXPECT_FALSE(dict.HasKey("this.is.expanded")); | 343 EXPECT_FALSE(dict.HasKey("this.is.expanded")); |
319 EXPECT_TRUE(dict.HasKey("this")); | 344 EXPECT_TRUE(dict.HasKey("this")); |
320 Value* value1; | 345 Value* value1; |
321 EXPECT_TRUE(dict.Get("this", &value1)); | 346 EXPECT_TRUE(dict.Get("this", &value1)); |
322 DictionaryValue* value2; | 347 DictionaryValue* value2; |
323 ASSERT_TRUE(dict.GetDictionaryWithoutPathExpansion("this", &value2)); | 348 ASSERT_TRUE(dict.GetDictionaryWithoutPathExpansion("this", &value2)); |
324 EXPECT_EQ(value1, value2); | 349 EXPECT_EQ(value1, value2); |
325 EXPECT_EQ(1U, value2->size()); | 350 EXPECT_EQ(1U, value2->size()); |
326 | 351 |
327 EXPECT_TRUE(dict.HasKey("this.isnt.expanded")); | 352 EXPECT_TRUE(dict.HasKey("this.isnt.expanded")); |
328 Value* value3; | 353 Value* value3; |
329 EXPECT_FALSE(dict.Get("this.isnt.expanded", &value3)); | 354 EXPECT_FALSE(dict.Get("this.isnt.expanded", &value3)); |
330 Value* value4; | 355 Value* value4; |
331 ASSERT_TRUE(dict.GetWithoutPathExpansion("this.isnt.expanded", &value4)); | 356 ASSERT_TRUE(dict.GetWithoutPathExpansion("this.isnt.expanded", &value4)); |
332 EXPECT_EQ(Value::TYPE_NULL, value4->GetType()); | 357 EXPECT_EQ(Value::TYPE_NULL, value4->GetType()); |
333 } | 358 } |
334 | 359 |
335 TEST(ValuesTest, DictionaryRemovePath) { | 360 TEST(ValuesTest, DictionaryRemovePath) { |
336 DictionaryValue dict; | 361 DictionaryValue dict; |
337 dict.Set("a.long.way.down", new FundamentalValue(1)); | 362 dict.SetInteger("a.long.way.down", 1); |
338 dict.Set("a.long.key.path", new FundamentalValue(true)); | 363 dict.SetBoolean("a.long.key.path", true); |
339 | 364 |
340 scoped_ptr<Value> removed_item; | 365 scoped_ptr<Value> removed_item; |
341 EXPECT_TRUE(dict.RemovePath("a.long.way.down", &removed_item)); | 366 EXPECT_TRUE(dict.RemovePath("a.long.way.down", &removed_item)); |
342 ASSERT_TRUE(removed_item); | 367 ASSERT_TRUE(removed_item); |
343 EXPECT_TRUE(removed_item->IsType(base::Value::TYPE_INTEGER)); | 368 EXPECT_TRUE(removed_item->IsType(base::Value::TYPE_INTEGER)); |
344 EXPECT_FALSE(dict.HasKey("a.long.way.down")); | 369 EXPECT_FALSE(dict.HasKey("a.long.way.down")); |
345 EXPECT_FALSE(dict.HasKey("a.long.way")); | 370 EXPECT_FALSE(dict.HasKey("a.long.way")); |
346 EXPECT_TRUE(dict.Get("a.long.key.path", NULL)); | 371 EXPECT_TRUE(dict.Get("a.long.key.path", NULL)); |
347 | 372 |
348 removed_item.reset(); | 373 removed_item.reset(); |
349 EXPECT_FALSE(dict.RemovePath("a.long.way.down", &removed_item)); | 374 EXPECT_FALSE(dict.RemovePath("a.long.way.down", &removed_item)); |
350 EXPECT_FALSE(removed_item); | 375 EXPECT_FALSE(removed_item); |
351 EXPECT_TRUE(dict.Get("a.long.key.path", NULL)); | 376 EXPECT_TRUE(dict.Get("a.long.key.path", NULL)); |
352 | 377 |
353 removed_item.reset(); | 378 removed_item.reset(); |
354 EXPECT_TRUE(dict.RemovePath("a.long.key.path", &removed_item)); | 379 EXPECT_TRUE(dict.RemovePath("a.long.key.path", &removed_item)); |
355 ASSERT_TRUE(removed_item); | 380 ASSERT_TRUE(removed_item); |
356 EXPECT_TRUE(removed_item->IsType(base::Value::TYPE_BOOLEAN)); | 381 EXPECT_TRUE(removed_item->IsType(base::Value::TYPE_BOOLEAN)); |
357 EXPECT_TRUE(dict.empty()); | 382 EXPECT_TRUE(dict.empty()); |
358 } | 383 } |
359 | 384 |
360 TEST(ValuesTest, DeepCopy) { | 385 TEST(ValuesTest, DeepCopy) { |
361 DictionaryValue original_dict; | 386 DictionaryValue original_dict; |
362 Value* original_null = Value::CreateNullValue(); | 387 Value* original_null = Value::CreateNullValue(); |
363 original_dict.Set("null", original_null); | 388 original_dict.Set("null", make_scoped_ptr(original_null)); |
364 FundamentalValue* original_bool = new FundamentalValue(true); | 389 FundamentalValue* original_bool = new FundamentalValue(true); |
365 original_dict.Set("bool", original_bool); | 390 original_dict.Set("bool", make_scoped_ptr(original_bool)); |
366 FundamentalValue* original_int = new FundamentalValue(42); | 391 FundamentalValue* original_int = new FundamentalValue(42); |
367 original_dict.Set("int", original_int); | 392 original_dict.Set("int", make_scoped_ptr(original_int)); |
368 FundamentalValue* original_double = new FundamentalValue(3.14); | 393 FundamentalValue* original_double = new FundamentalValue(3.14); |
369 original_dict.Set("double", original_double); | 394 original_dict.Set("double", make_scoped_ptr(original_double)); |
370 StringValue* original_string = new StringValue("hello"); | 395 StringValue* original_string = new StringValue("hello"); |
371 original_dict.Set("string", original_string); | 396 original_dict.Set("string", make_scoped_ptr(original_string)); |
372 StringValue* original_string16 = new StringValue(ASCIIToUTF16("hello16")); | 397 StringValue* original_string16 = new StringValue(ASCIIToUTF16("hello16")); |
373 original_dict.Set("string16", original_string16); | 398 original_dict.Set("string16", make_scoped_ptr(original_string16)); |
374 | 399 |
375 scoped_ptr<char[]> original_buffer(new char[42]); | 400 scoped_ptr<char[]> original_buffer(new char[42]); |
376 memset(original_buffer.get(), '!', 42); | 401 memset(original_buffer.get(), '!', 42); |
377 BinaryValue* original_binary = new BinaryValue(original_buffer.Pass(), 42); | 402 BinaryValue* original_binary = new BinaryValue(original_buffer.Pass(), 42); |
378 original_dict.Set("binary", original_binary); | 403 original_dict.Set("binary", original_binary); |
379 | 404 |
380 ListValue* original_list = new ListValue(); | 405 ListValue* original_list = new ListValue(); |
381 FundamentalValue* original_list_element_0 = new FundamentalValue(0); | 406 FundamentalValue* original_list_element_0 = new FundamentalValue(0); |
382 original_list->Append(original_list_element_0); | 407 original_list->Append(original_list_element_0); |
383 FundamentalValue* original_list_element_1 = new FundamentalValue(1); | 408 FundamentalValue* original_list_element_1 = new FundamentalValue(1); |
384 original_list->Append(original_list_element_1); | 409 original_list->Append(original_list_element_1); |
385 original_dict.Set("list", original_list); | 410 original_dict.Set("list", make_scoped_ptr(original_list)); |
386 | 411 |
387 DictionaryValue* original_nested_dictionary = new DictionaryValue(); | 412 DictionaryValue* original_nested_dictionary = new DictionaryValue(); |
388 original_nested_dictionary->Set("key", new StringValue("value")); | 413 original_nested_dictionary->SetString("key", "value"); |
389 original_dict.Set("dictionary", original_nested_dictionary); | 414 original_dict.Set("dictionary", make_scoped_ptr(original_nested_dictionary)); |
390 | 415 |
391 scoped_ptr<DictionaryValue> copy_dict(original_dict.DeepCopy()); | 416 scoped_ptr<DictionaryValue> copy_dict(original_dict.DeepCopy()); |
392 ASSERT_TRUE(copy_dict.get()); | 417 ASSERT_TRUE(copy_dict.get()); |
393 ASSERT_NE(copy_dict.get(), &original_dict); | 418 ASSERT_NE(copy_dict.get(), &original_dict); |
394 | 419 |
395 Value* copy_null = NULL; | 420 Value* copy_null = NULL; |
396 ASSERT_TRUE(copy_dict->Get("null", ©_null)); | 421 ASSERT_TRUE(copy_dict->Get("null", ©_null)); |
397 ASSERT_TRUE(copy_null); | 422 ASSERT_TRUE(copy_null); |
398 ASSERT_NE(copy_null, original_null); | 423 ASSERT_NE(copy_null, original_null); |
399 ASSERT_TRUE(copy_null->IsType(Value::TYPE_NULL)); | 424 ASSERT_TRUE(copy_null->IsType(Value::TYPE_NULL)); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 delete null1; | 533 delete null1; |
509 delete null2; | 534 delete null2; |
510 delete boolean; | 535 delete boolean; |
511 | 536 |
512 DictionaryValue dv; | 537 DictionaryValue dv; |
513 dv.SetBoolean("a", false); | 538 dv.SetBoolean("a", false); |
514 dv.SetInteger("b", 2); | 539 dv.SetInteger("b", 2); |
515 dv.SetDouble("c", 2.5); | 540 dv.SetDouble("c", 2.5); |
516 dv.SetString("d1", "string"); | 541 dv.SetString("d1", "string"); |
517 dv.SetString("d2", ASCIIToUTF16("http://google.com")); | 542 dv.SetString("d2", ASCIIToUTF16("http://google.com")); |
518 dv.Set("e", Value::CreateNullValue()); | 543 dv.Set("e", make_scoped_ptr(Value::CreateNullValue())); |
519 | 544 |
520 scoped_ptr<DictionaryValue> copy; | 545 scoped_ptr<DictionaryValue> copy; |
521 copy.reset(dv.DeepCopy()); | 546 copy.reset(dv.DeepCopy()); |
522 EXPECT_TRUE(dv.Equals(copy.get())); | 547 EXPECT_TRUE(dv.Equals(copy.get())); |
523 | 548 |
524 ListValue* list = new ListValue; | 549 ListValue* list = new ListValue; |
525 list->Append(Value::CreateNullValue()); | 550 list->Append(Value::CreateNullValue()); |
526 list->Append(new DictionaryValue); | 551 list->Append(new DictionaryValue); |
527 dv.Set("f", list); | 552 dv.Set("f", make_scoped_ptr(list)); |
528 | 553 |
529 EXPECT_FALSE(dv.Equals(copy.get())); | 554 EXPECT_FALSE(dv.Equals(copy.get())); |
530 copy->Set("f", list->DeepCopy()); | 555 copy->Set("f", list->DeepCopy()); |
531 EXPECT_TRUE(dv.Equals(copy.get())); | 556 EXPECT_TRUE(dv.Equals(copy.get())); |
532 | 557 |
533 list->Append(new FundamentalValue(true)); | 558 list->Append(new FundamentalValue(true)); |
534 EXPECT_FALSE(dv.Equals(copy.get())); | 559 EXPECT_FALSE(dv.Equals(copy.get())); |
535 | 560 |
536 // Check if Equals detects differences in only the keys. | 561 // Check if Equals detects differences in only the keys. |
537 copy.reset(dv.DeepCopy()); | 562 copy.reset(dv.DeepCopy()); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
615 EXPECT_TRUE(original_double_value->Equals(copy_double_value.get())); | 640 EXPECT_TRUE(original_double_value->Equals(copy_double_value.get())); |
616 EXPECT_TRUE(original_string_value->Equals(copy_string_value.get())); | 641 EXPECT_TRUE(original_string_value->Equals(copy_string_value.get())); |
617 EXPECT_TRUE(original_string16_value->Equals(copy_string16_value.get())); | 642 EXPECT_TRUE(original_string16_value->Equals(copy_string16_value.get())); |
618 EXPECT_TRUE(original_binary_value->Equals(copy_binary_value.get())); | 643 EXPECT_TRUE(original_binary_value->Equals(copy_binary_value.get())); |
619 EXPECT_TRUE(original_list_value->Equals(copy_list_value.get())); | 644 EXPECT_TRUE(original_list_value->Equals(copy_list_value.get())); |
620 } | 645 } |
621 | 646 |
622 TEST(ValuesTest, RemoveEmptyChildren) { | 647 TEST(ValuesTest, RemoveEmptyChildren) { |
623 scoped_ptr<DictionaryValue> root(new DictionaryValue); | 648 scoped_ptr<DictionaryValue> root(new DictionaryValue); |
624 // Remove empty lists and dictionaries. | 649 // Remove empty lists and dictionaries. |
625 root->Set("empty_dict", new DictionaryValue); | 650 root->Set("empty_dict", make_scoped_ptr(new DictionaryValue)); |
626 root->Set("empty_list", new ListValue); | 651 root->Set("empty_list", make_scoped_ptr(new ListValue)); |
627 root->SetWithoutPathExpansion("a.b.c.d.e", new DictionaryValue); | 652 root->SetWithoutPathExpansion("a.b.c.d.e", |
| 653 make_scoped_ptr(new DictionaryValue)); |
628 root.reset(root->DeepCopyWithoutEmptyChildren()); | 654 root.reset(root->DeepCopyWithoutEmptyChildren()); |
629 EXPECT_TRUE(root->empty()); | 655 EXPECT_TRUE(root->empty()); |
630 | 656 |
631 // Make sure we don't prune too much. | 657 // Make sure we don't prune too much. |
632 root->SetBoolean("bool", true); | 658 root->SetBoolean("bool", true); |
633 root->Set("empty_dict", new DictionaryValue); | 659 root->Set("empty_dict", new DictionaryValue); |
634 root->SetString("empty_string", std::string()); | 660 root->SetString("empty_string", std::string()); |
635 root.reset(root->DeepCopyWithoutEmptyChildren()); | 661 root.reset(root->DeepCopyWithoutEmptyChildren()); |
636 EXPECT_EQ(2U, root->size()); | 662 EXPECT_EQ(2U, root->size()); |
637 | 663 |
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1086 EXPECT_FALSE(main_list.GetList(1, NULL)); | 1112 EXPECT_FALSE(main_list.GetList(1, NULL)); |
1087 EXPECT_FALSE(main_list.GetList(2, NULL)); | 1113 EXPECT_FALSE(main_list.GetList(2, NULL)); |
1088 EXPECT_FALSE(main_list.GetList(3, NULL)); | 1114 EXPECT_FALSE(main_list.GetList(3, NULL)); |
1089 EXPECT_FALSE(main_list.GetList(4, NULL)); | 1115 EXPECT_FALSE(main_list.GetList(4, NULL)); |
1090 EXPECT_FALSE(main_list.GetList(5, NULL)); | 1116 EXPECT_FALSE(main_list.GetList(5, NULL)); |
1091 EXPECT_TRUE(main_list.GetList(6, NULL)); | 1117 EXPECT_TRUE(main_list.GetList(6, NULL)); |
1092 EXPECT_FALSE(main_list.GetList(7, NULL)); | 1118 EXPECT_FALSE(main_list.GetList(7, NULL)); |
1093 } | 1119 } |
1094 | 1120 |
1095 } // namespace base | 1121 } // namespace base |
OLD | NEW |