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 15 matching lines...) Expand all Loading... |
26 ASSERT_TRUE(settings.Get("global", NULL)); | 26 ASSERT_TRUE(settings.Get("global", NULL)); |
27 homepage = "http://google.com"; | 27 homepage = "http://google.com"; |
28 ASSERT_TRUE(settings.GetString("global.homepage", &homepage)); | 28 ASSERT_TRUE(settings.GetString("global.homepage", &homepage)); |
29 ASSERT_EQ(std::string("http://scurvy.com"), homepage); | 29 ASSERT_EQ(std::string("http://scurvy.com"), homepage); |
30 | 30 |
31 // Test storing a dictionary in a list. | 31 // Test storing a dictionary in a list. |
32 ListValue* toolbar_bookmarks; | 32 ListValue* toolbar_bookmarks; |
33 ASSERT_FALSE( | 33 ASSERT_FALSE( |
34 settings.GetList("global.toolbar.bookmarks", &toolbar_bookmarks)); | 34 settings.GetList("global.toolbar.bookmarks", &toolbar_bookmarks)); |
35 | 35 |
36 toolbar_bookmarks = new ListValue; | 36 scoped_ptr<ListValue> new_toolbar_bookmarks(new ListValue); |
37 settings.Set("global.toolbar.bookmarks", make_scoped_ptr(toolbar_bookmarks)); | 37 settings.Set("global.toolbar.bookmarks", new_toolbar_bookmarks.Pass()); |
38 ASSERT_TRUE(settings.GetList("global.toolbar.bookmarks", &toolbar_bookmarks)); | 38 ASSERT_TRUE(settings.GetList("global.toolbar.bookmarks", &toolbar_bookmarks)); |
39 | 39 |
40 DictionaryValue* new_bookmark = new DictionaryValue; | 40 scoped_ptr<DictionaryValue> new_bookmark(new DictionaryValue); |
41 new_bookmark->SetString("name", "Froogle"); | 41 new_bookmark->SetString("name", "Froogle"); |
42 new_bookmark->SetString("url", "http://froogle.com"); | 42 new_bookmark->SetString("url", "http://froogle.com"); |
43 toolbar_bookmarks->Append(new_bookmark); | 43 toolbar_bookmarks->Append(new_bookmark.Pass()); |
44 | 44 |
45 ListValue* bookmark_list; | 45 ListValue* bookmark_list; |
46 ASSERT_TRUE(settings.GetList("global.toolbar.bookmarks", &bookmark_list)); | 46 ASSERT_TRUE(settings.GetList("global.toolbar.bookmarks", &bookmark_list)); |
47 DictionaryValue* bookmark; | 47 DictionaryValue* bookmark; |
48 ASSERT_EQ(1U, bookmark_list->GetSize()); | 48 ASSERT_EQ(1U, bookmark_list->GetSize()); |
49 ASSERT_TRUE(bookmark_list->GetDictionary(0, &bookmark)); | 49 ASSERT_TRUE(bookmark_list->GetDictionary(0, &bookmark)); |
50 std::string bookmark_name = "Unnamed"; | 50 std::string bookmark_name = "Unnamed"; |
51 ASSERT_TRUE(bookmark->GetString("name", &bookmark_name)); | 51 ASSERT_TRUE(bookmark->GetString("name", &bookmark_name)); |
52 ASSERT_EQ(std::string("Froogle"), bookmark_name); | 52 ASSERT_EQ(std::string("Froogle"), bookmark_name); |
53 std::string bookmark_url; | 53 std::string bookmark_url; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 } | 105 } |
106 | 106 |
107 TEST(ValuesTest, BinaryValue) { | 107 TEST(ValuesTest, BinaryValue) { |
108 // Default constructor creates a BinaryValue with a null buffer and size 0. | 108 // Default constructor creates a BinaryValue with a null buffer and size 0. |
109 scoped_ptr<BinaryValue> binary(new BinaryValue()); | 109 scoped_ptr<BinaryValue> binary(new BinaryValue()); |
110 ASSERT_TRUE(binary.get()); | 110 ASSERT_TRUE(binary.get()); |
111 ASSERT_EQ(NULL, binary->GetBuffer()); | 111 ASSERT_EQ(NULL, binary->GetBuffer()); |
112 ASSERT_EQ(0U, binary->GetSize()); | 112 ASSERT_EQ(0U, binary->GetSize()); |
113 | 113 |
114 // Test the common case of a non-empty buffer | 114 // Test the common case of a non-empty buffer |
115 char* buffer = new char[15]; | 115 scoped_ptr<char[]> buffer(new char[15]); |
116 binary.reset(new BinaryValue(scoped_ptr<char[]>(buffer), 15)); | 116 char* original_buffer = buffer.get(); |
| 117 binary.reset(new BinaryValue(buffer.Pass(), 15)); |
117 ASSERT_TRUE(binary.get()); | 118 ASSERT_TRUE(binary.get()); |
118 ASSERT_TRUE(binary->GetBuffer()); | 119 ASSERT_TRUE(binary->GetBuffer()); |
119 ASSERT_EQ(buffer, binary->GetBuffer()); | 120 ASSERT_EQ(original_buffer, binary->GetBuffer()); |
120 ASSERT_EQ(15U, binary->GetSize()); | 121 ASSERT_EQ(15U, binary->GetSize()); |
121 | 122 |
122 char stack_buffer[42]; | 123 char stack_buffer[42]; |
123 memset(stack_buffer, '!', 42); | 124 memset(stack_buffer, '!', 42); |
124 binary.reset(BinaryValue::CreateWithCopiedBuffer(stack_buffer, 42)); | 125 binary.reset(BinaryValue::CreateWithCopiedBuffer(stack_buffer, 42)); |
125 ASSERT_TRUE(binary.get()); | 126 ASSERT_TRUE(binary.get()); |
126 ASSERT_TRUE(binary->GetBuffer()); | 127 ASSERT_TRUE(binary->GetBuffer()); |
127 ASSERT_NE(stack_buffer, binary->GetBuffer()); | 128 ASSERT_NE(stack_buffer, binary->GetBuffer()); |
128 ASSERT_EQ(42U, binary->GetSize()); | 129 ASSERT_EQ(42U, binary->GetSize()); |
129 ASSERT_EQ(0, memcmp(stack_buffer, binary->GetBuffer(), binary->GetSize())); | 130 ASSERT_EQ(0, memcmp(stack_buffer, binary->GetBuffer(), binary->GetSize())); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 | 188 |
188 private: | 189 private: |
189 bool* deletion_flag_; | 190 bool* deletion_flag_; |
190 }; | 191 }; |
191 | 192 |
192 TEST(ValuesTest, ListDeletion) { | 193 TEST(ValuesTest, ListDeletion) { |
193 bool deletion_flag = true; | 194 bool deletion_flag = true; |
194 | 195 |
195 { | 196 { |
196 ListValue list; | 197 ListValue list; |
197 list.Append(new DeletionTestValue(&deletion_flag)); | 198 list.Append(make_scoped_ptr(new DeletionTestValue(&deletion_flag))); |
198 EXPECT_FALSE(deletion_flag); | 199 EXPECT_FALSE(deletion_flag); |
199 } | 200 } |
200 EXPECT_TRUE(deletion_flag); | 201 EXPECT_TRUE(deletion_flag); |
201 | 202 |
202 { | 203 { |
203 ListValue list; | 204 ListValue list; |
204 list.Append(new DeletionTestValue(&deletion_flag)); | 205 list.Append(make_scoped_ptr(new DeletionTestValue(&deletion_flag))); |
205 EXPECT_FALSE(deletion_flag); | 206 EXPECT_FALSE(deletion_flag); |
206 list.Clear(); | 207 list.Clear(); |
207 EXPECT_TRUE(deletion_flag); | 208 EXPECT_TRUE(deletion_flag); |
208 } | 209 } |
209 | 210 |
210 { | 211 { |
211 ListValue list; | 212 ListValue list; |
212 list.Append(new DeletionTestValue(&deletion_flag)); | 213 list.Append(make_scoped_ptr(new DeletionTestValue(&deletion_flag))); |
213 EXPECT_FALSE(deletion_flag); | 214 EXPECT_FALSE(deletion_flag); |
214 EXPECT_TRUE(list.Set(0, Value::CreateNullValue())); | 215 EXPECT_TRUE(list.Set(0, Value::CreateNullValue())); |
215 EXPECT_TRUE(deletion_flag); | 216 EXPECT_TRUE(deletion_flag); |
216 } | 217 } |
217 } | 218 } |
218 | 219 |
219 TEST(ValuesTest, ListRemoval) { | 220 TEST(ValuesTest, ListRemoval) { |
220 bool deletion_flag = true; | 221 bool deletion_flag = true; |
221 scoped_ptr<Value> removed_item; | 222 scoped_ptr<Value> removed_item; |
222 | 223 |
223 { | 224 { |
224 ListValue list; | 225 ListValue list; |
225 list.Append(new DeletionTestValue(&deletion_flag)); | 226 list.Append(make_scoped_ptr(new DeletionTestValue(&deletion_flag))); |
226 EXPECT_FALSE(deletion_flag); | 227 EXPECT_FALSE(deletion_flag); |
227 EXPECT_EQ(1U, list.GetSize()); | 228 EXPECT_EQ(1U, list.GetSize()); |
228 EXPECT_FALSE(list.Remove(std::numeric_limits<size_t>::max(), | 229 EXPECT_FALSE(list.Remove(std::numeric_limits<size_t>::max(), |
229 &removed_item)); | 230 &removed_item)); |
230 EXPECT_FALSE(list.Remove(1, &removed_item)); | 231 EXPECT_FALSE(list.Remove(1, &removed_item)); |
231 EXPECT_TRUE(list.Remove(0, &removed_item)); | 232 EXPECT_TRUE(list.Remove(0, &removed_item)); |
232 ASSERT_TRUE(removed_item); | 233 ASSERT_TRUE(removed_item); |
233 EXPECT_EQ(0U, list.GetSize()); | 234 EXPECT_EQ(0U, list.GetSize()); |
234 } | 235 } |
235 EXPECT_FALSE(deletion_flag); | 236 EXPECT_FALSE(deletion_flag); |
236 removed_item.reset(); | 237 removed_item.reset(); |
237 EXPECT_TRUE(deletion_flag); | 238 EXPECT_TRUE(deletion_flag); |
238 | 239 |
239 { | 240 { |
240 ListValue list; | 241 ListValue list; |
241 list.Append(new DeletionTestValue(&deletion_flag)); | 242 list.Append(make_scoped_ptr(new DeletionTestValue(&deletion_flag))); |
242 EXPECT_FALSE(deletion_flag); | 243 EXPECT_FALSE(deletion_flag); |
243 EXPECT_TRUE(list.Remove(0, NULL)); | 244 EXPECT_TRUE(list.Remove(0, NULL)); |
244 EXPECT_TRUE(deletion_flag); | 245 EXPECT_TRUE(deletion_flag); |
245 EXPECT_EQ(0U, list.GetSize()); | 246 EXPECT_EQ(0U, list.GetSize()); |
246 } | 247 } |
247 | 248 |
248 { | 249 { |
249 ListValue list; | 250 ListValue list; |
250 DeletionTestValue* value = new DeletionTestValue(&deletion_flag); | 251 scoped_ptr<DeletionTestValue> value(new DeletionTestValue(&deletion_flag)); |
251 list.Append(value); | 252 DeletionTestValue* original_value = value.get(); |
| 253 list.Append(value.Pass()); |
252 EXPECT_FALSE(deletion_flag); | 254 EXPECT_FALSE(deletion_flag); |
253 size_t index = 0; | 255 size_t index = 0; |
254 list.Remove(*value, &index); | 256 list.Remove(*original_value, &index); |
255 EXPECT_EQ(0U, index); | 257 EXPECT_EQ(0U, index); |
256 EXPECT_TRUE(deletion_flag); | 258 EXPECT_TRUE(deletion_flag); |
257 EXPECT_EQ(0U, list.GetSize()); | 259 EXPECT_EQ(0U, list.GetSize()); |
258 } | 260 } |
259 } | 261 } |
260 | 262 |
261 TEST(ValuesTest, DictionaryDeletion) { | 263 TEST(ValuesTest, DictionaryDeletion) { |
262 std::string key = "test"; | 264 std::string key = "test"; |
263 bool deletion_flag = true; | 265 bool deletion_flag = true; |
264 | 266 |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 | 385 |
384 removed_item.reset(); | 386 removed_item.reset(); |
385 EXPECT_TRUE(dict.RemovePath("a.long.key.path", &removed_item)); | 387 EXPECT_TRUE(dict.RemovePath("a.long.key.path", &removed_item)); |
386 ASSERT_TRUE(removed_item); | 388 ASSERT_TRUE(removed_item); |
387 EXPECT_TRUE(removed_item->IsType(base::Value::TYPE_BOOLEAN)); | 389 EXPECT_TRUE(removed_item->IsType(base::Value::TYPE_BOOLEAN)); |
388 EXPECT_TRUE(dict.empty()); | 390 EXPECT_TRUE(dict.empty()); |
389 } | 391 } |
390 | 392 |
391 TEST(ValuesTest, DeepCopy) { | 393 TEST(ValuesTest, DeepCopy) { |
392 DictionaryValue original_dict; | 394 DictionaryValue original_dict; |
393 Value* original_null = Value::CreateNullValue(); | 395 scoped_ptr<Value> scoped_null(Value::CreateNullValue()); |
394 original_dict.Set("null", make_scoped_ptr(original_null)); | 396 Value* original_null = scoped_null.get(); |
395 FundamentalValue* original_bool = new FundamentalValue(true); | 397 original_dict.Set("null", scoped_null.Pass()); |
396 original_dict.Set("bool", make_scoped_ptr(original_bool)); | 398 scoped_ptr<FundamentalValue> scoped_bool(new FundamentalValue(true)); |
397 FundamentalValue* original_int = new FundamentalValue(42); | 399 FundamentalValue* original_bool = scoped_bool.get(); |
398 original_dict.Set("int", make_scoped_ptr(original_int)); | 400 original_dict.Set("bool", scoped_bool.Pass()); |
399 FundamentalValue* original_double = new FundamentalValue(3.14); | 401 scoped_ptr<FundamentalValue> scoped_int(new FundamentalValue(42)); |
400 original_dict.Set("double", make_scoped_ptr(original_double)); | 402 FundamentalValue* original_int = scoped_int.get(); |
401 StringValue* original_string = new StringValue("hello"); | 403 original_dict.Set("int", scoped_int.Pass()); |
402 original_dict.Set("string", make_scoped_ptr(original_string)); | 404 scoped_ptr<FundamentalValue> scoped_double(new FundamentalValue(3.14)); |
403 StringValue* original_string16 = new StringValue(ASCIIToUTF16("hello16")); | 405 FundamentalValue* original_double = scoped_double.get(); |
404 original_dict.Set("string16", make_scoped_ptr(original_string16)); | 406 original_dict.Set("double", scoped_double.Pass()); |
| 407 scoped_ptr<StringValue> scoped_string(new StringValue("hello")); |
| 408 StringValue* original_string = scoped_string.get(); |
| 409 original_dict.Set("string", scoped_string.Pass()); |
| 410 scoped_ptr<StringValue> scoped_string16( |
| 411 new StringValue(ASCIIToUTF16("hello16"))); |
| 412 StringValue* original_string16 = scoped_string16.get(); |
| 413 original_dict.Set("string16", scoped_string16.Pass()); |
405 | 414 |
406 scoped_ptr<char[]> original_buffer(new char[42]); | 415 scoped_ptr<char[]> original_buffer(new char[42]); |
407 memset(original_buffer.get(), '!', 42); | 416 memset(original_buffer.get(), '!', 42); |
408 BinaryValue* original_binary = new BinaryValue(original_buffer.Pass(), 42); | 417 scoped_ptr<BinaryValue> scoped_binary( |
409 original_dict.Set("binary", original_binary); | 418 new BinaryValue(original_buffer.Pass(), 42)); |
| 419 BinaryValue* original_binary = scoped_binary.get(); |
| 420 original_dict.Set("binary", scoped_binary.Pass()); |
410 | 421 |
411 ListValue* original_list = new ListValue(); | 422 scoped_ptr<ListValue> scoped_list(new ListValue()); |
412 FundamentalValue* original_list_element_0 = new FundamentalValue(0); | 423 Value* original_list = scoped_list.get(); |
413 original_list->Append(original_list_element_0); | 424 scoped_ptr<FundamentalValue> scoped_list_element_0(new FundamentalValue(0)); |
414 FundamentalValue* original_list_element_1 = new FundamentalValue(1); | 425 Value* original_list_element_0 = scoped_list_element_0.get(); |
415 original_list->Append(original_list_element_1); | 426 scoped_list->Append(scoped_list_element_0.Pass()); |
416 original_dict.Set("list", make_scoped_ptr(original_list)); | 427 scoped_ptr<FundamentalValue> scoped_list_element_1(new FundamentalValue(1)); |
| 428 Value* original_list_element_1 = scoped_list_element_1.get(); |
| 429 scoped_list->Append(scoped_list_element_1.Pass()); |
| 430 original_dict.Set("list", scoped_list.Pass()); |
417 | 431 |
418 DictionaryValue* original_nested_dictionary = new DictionaryValue(); | 432 scoped_ptr<DictionaryValue> scoped_nested_dictionary(new DictionaryValue()); |
419 original_nested_dictionary->SetString("key", "value"); | 433 Value* original_nested_dictionary = scoped_nested_dictionary.get(); |
420 original_dict.Set("dictionary", make_scoped_ptr(original_nested_dictionary)); | 434 scoped_nested_dictionary->SetString("key", "value"); |
| 435 original_dict.Set("dictionary", scoped_nested_dictionary.Pass()); |
421 | 436 |
422 scoped_ptr<DictionaryValue> copy_dict = original_dict.CreateDeepCopy(); | 437 scoped_ptr<DictionaryValue> copy_dict = original_dict.CreateDeepCopy(); |
423 ASSERT_TRUE(copy_dict.get()); | 438 ASSERT_TRUE(copy_dict.get()); |
424 ASSERT_NE(copy_dict.get(), &original_dict); | 439 ASSERT_NE(copy_dict.get(), &original_dict); |
425 | 440 |
426 Value* copy_null = NULL; | 441 Value* copy_null = NULL; |
427 ASSERT_TRUE(copy_dict->Get("null", ©_null)); | 442 ASSERT_TRUE(copy_dict->Get("null", ©_null)); |
428 ASSERT_TRUE(copy_null); | 443 ASSERT_TRUE(copy_null); |
429 ASSERT_NE(copy_null, original_null); | 444 ASSERT_NE(copy_null, original_null); |
430 ASSERT_TRUE(copy_null->IsType(Value::TYPE_NULL)); | 445 ASSERT_TRUE(copy_null->IsType(Value::TYPE_NULL)); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 ASSERT_TRUE(copy_value); | 537 ASSERT_TRUE(copy_value); |
523 ASSERT_NE(copy_value, original_nested_dictionary); | 538 ASSERT_NE(copy_value, original_nested_dictionary); |
524 ASSERT_TRUE(copy_value->IsType(Value::TYPE_DICTIONARY)); | 539 ASSERT_TRUE(copy_value->IsType(Value::TYPE_DICTIONARY)); |
525 DictionaryValue* copy_nested_dictionary = NULL; | 540 DictionaryValue* copy_nested_dictionary = NULL; |
526 ASSERT_TRUE(copy_value->GetAsDictionary(©_nested_dictionary)); | 541 ASSERT_TRUE(copy_value->GetAsDictionary(©_nested_dictionary)); |
527 ASSERT_TRUE(copy_nested_dictionary); | 542 ASSERT_TRUE(copy_nested_dictionary); |
528 EXPECT_TRUE(copy_nested_dictionary->HasKey("key")); | 543 EXPECT_TRUE(copy_nested_dictionary->HasKey("key")); |
529 } | 544 } |
530 | 545 |
531 TEST(ValuesTest, Equals) { | 546 TEST(ValuesTest, Equals) { |
532 Value* null1 = Value::CreateNullValue(); | 547 scoped_ptr<Value> null1(Value::CreateNullValue()); |
533 Value* null2 = Value::CreateNullValue(); | 548 scoped_ptr<Value> null2(Value::CreateNullValue()); |
534 EXPECT_NE(null1, null2); | 549 EXPECT_NE(null1.get(), null2.get()); |
535 EXPECT_TRUE(null1->Equals(null2)); | 550 EXPECT_TRUE(null1->Equals(null2.get())); |
536 | 551 |
537 Value* boolean = new FundamentalValue(false); | 552 scoped_ptr<Value> boolean(new FundamentalValue(false)); |
538 EXPECT_FALSE(null1->Equals(boolean)); | 553 EXPECT_FALSE(null1->Equals(boolean.get())); |
539 delete null1; | |
540 delete null2; | |
541 delete boolean; | |
542 | 554 |
543 DictionaryValue dv; | 555 DictionaryValue dv; |
544 dv.SetBoolean("a", false); | 556 dv.SetBoolean("a", false); |
545 dv.SetInteger("b", 2); | 557 dv.SetInteger("b", 2); |
546 dv.SetDouble("c", 2.5); | 558 dv.SetDouble("c", 2.5); |
547 dv.SetString("d1", "string"); | 559 dv.SetString("d1", "string"); |
548 dv.SetString("d2", ASCIIToUTF16("http://google.com")); | 560 dv.SetString("d2", ASCIIToUTF16("http://google.com")); |
549 dv.Set("e", make_scoped_ptr(Value::CreateNullValue())); | 561 dv.Set("e", make_scoped_ptr(Value::CreateNullValue())); |
550 | 562 |
551 scoped_ptr<DictionaryValue> copy = dv.CreateDeepCopy(); | 563 scoped_ptr<DictionaryValue> copy = dv.CreateDeepCopy(); |
552 EXPECT_TRUE(dv.Equals(copy.get())); | 564 EXPECT_TRUE(dv.Equals(copy.get())); |
553 | 565 |
554 ListValue* list = new ListValue; | 566 scoped_ptr<ListValue> list(new ListValue); |
555 list->Append(Value::CreateNullValue()); | 567 ListValue* original_list = list.get(); |
556 list->Append(new DictionaryValue); | 568 list->Append(make_scoped_ptr(Value::CreateNullValue())); |
557 dv.Set("f", make_scoped_ptr(list)); | 569 list->Append(make_scoped_ptr(new DictionaryValue)); |
| 570 scoped_ptr<Value> list_copy(list->CreateDeepCopy()); |
558 | 571 |
| 572 dv.Set("f", list.Pass()); |
559 EXPECT_FALSE(dv.Equals(copy.get())); | 573 EXPECT_FALSE(dv.Equals(copy.get())); |
560 copy->Set("f", list->CreateDeepCopy()); | 574 copy->Set("f", list_copy.Pass()); |
561 EXPECT_TRUE(dv.Equals(copy.get())); | 575 EXPECT_TRUE(dv.Equals(copy.get())); |
562 | 576 |
563 list->Append(new FundamentalValue(true)); | 577 original_list->Append(make_scoped_ptr(new FundamentalValue(true))); |
564 EXPECT_FALSE(dv.Equals(copy.get())); | 578 EXPECT_FALSE(dv.Equals(copy.get())); |
565 | 579 |
566 // Check if Equals detects differences in only the keys. | 580 // Check if Equals detects differences in only the keys. |
567 copy = dv.CreateDeepCopy(); | 581 copy = dv.CreateDeepCopy(); |
568 EXPECT_TRUE(dv.Equals(copy.get())); | 582 EXPECT_TRUE(dv.Equals(copy.get())); |
569 copy->Remove("a", NULL); | 583 copy->Remove("a", NULL); |
570 copy->SetBoolean("aa", false); | 584 copy->SetBoolean("aa", false); |
571 EXPECT_FALSE(dv.Equals(copy.get())); | 585 EXPECT_FALSE(dv.Equals(copy.get())); |
572 } | 586 } |
573 | 587 |
(...skipping 15 matching lines...) Expand all Loading... |
589 | 603 |
590 // NULL and Value::CreateNullValue() are intentionally different: We need | 604 // NULL and Value::CreateNullValue() are intentionally different: We need |
591 // support for NULL as a return value for "undefined" without caring for | 605 // support for NULL as a return value for "undefined" without caring for |
592 // ownership of the pointer. | 606 // ownership of the pointer. |
593 EXPECT_FALSE(Value::Equals(null1.get(), NULL)); | 607 EXPECT_FALSE(Value::Equals(null1.get(), NULL)); |
594 EXPECT_FALSE(Value::Equals(NULL, null1.get())); | 608 EXPECT_FALSE(Value::Equals(NULL, null1.get())); |
595 } | 609 } |
596 | 610 |
597 TEST(ValuesTest, DeepCopyCovariantReturnTypes) { | 611 TEST(ValuesTest, DeepCopyCovariantReturnTypes) { |
598 DictionaryValue original_dict; | 612 DictionaryValue original_dict; |
599 Value* original_null = Value::CreateNullValue(); | 613 scoped_ptr<Value> scoped_null(Value::CreateNullValue()); |
600 original_dict.Set("null", make_scoped_ptr(original_null)); | 614 Value* original_null = scoped_null.get(); |
601 FundamentalValue* original_bool = new FundamentalValue(true); | 615 original_dict.Set("null", scoped_null.Pass()); |
602 original_dict.Set("bool", make_scoped_ptr(original_bool)); | 616 scoped_ptr<FundamentalValue> scoped_bool(new FundamentalValue(true)); |
603 FundamentalValue* original_int = new FundamentalValue(42); | 617 Value* original_bool = scoped_bool.get(); |
604 original_dict.Set("int", make_scoped_ptr(original_int)); | 618 original_dict.Set("bool", scoped_bool.Pass()); |
605 FundamentalValue* original_double = new FundamentalValue(3.14); | 619 scoped_ptr<FundamentalValue> scoped_int(new FundamentalValue(42)); |
606 original_dict.Set("double", make_scoped_ptr(original_double)); | 620 Value* original_int = scoped_int.get(); |
607 StringValue* original_string = new StringValue("hello"); | 621 original_dict.Set("int", scoped_int.Pass()); |
608 original_dict.Set("string", make_scoped_ptr(original_string)); | 622 scoped_ptr<FundamentalValue> scoped_double(new FundamentalValue(3.14)); |
609 StringValue* original_string16 = new StringValue(ASCIIToUTF16("hello16")); | 623 Value* original_double = scoped_double.get(); |
610 original_dict.Set("string16", make_scoped_ptr(original_string16)); | 624 original_dict.Set("double", scoped_double.Pass()); |
| 625 scoped_ptr<StringValue> scoped_string(new StringValue("hello")); |
| 626 Value* original_string = scoped_string.get(); |
| 627 original_dict.Set("string", scoped_string.Pass()); |
| 628 scoped_ptr<StringValue> scoped_string16( |
| 629 new StringValue(ASCIIToUTF16("hello16"))); |
| 630 Value* original_string16 = scoped_string16.get(); |
| 631 original_dict.Set("string16", scoped_string16.Pass()); |
611 | 632 |
612 scoped_ptr<char[]> original_buffer(new char[42]); | 633 scoped_ptr<char[]> original_buffer(new char[42]); |
613 memset(original_buffer.get(), '!', 42); | 634 memset(original_buffer.get(), '!', 42); |
614 BinaryValue* original_binary = new BinaryValue(original_buffer.Pass(), 42); | 635 scoped_ptr<BinaryValue> scoped_binary( |
615 original_dict.Set("binary", make_scoped_ptr(original_binary)); | 636 new BinaryValue(original_buffer.Pass(), 42)); |
| 637 Value* original_binary = scoped_binary.get(); |
| 638 original_dict.Set("binary", scoped_binary.Pass()); |
616 | 639 |
617 ListValue* original_list = new ListValue(); | 640 scoped_ptr<ListValue> scoped_list(new ListValue()); |
618 FundamentalValue* original_list_element_0 = new FundamentalValue(0); | 641 Value* original_list = scoped_list.get(); |
619 original_list->Append(original_list_element_0); | 642 scoped_ptr<FundamentalValue> scoped_list_element_0(new FundamentalValue(0)); |
620 FundamentalValue* original_list_element_1 = new FundamentalValue(1); | 643 scoped_list->Append(scoped_list_element_0.Pass()); |
621 original_list->Append(original_list_element_1); | 644 scoped_ptr<FundamentalValue> scoped_list_element_1(new FundamentalValue(1)); |
622 original_dict.Set("list", make_scoped_ptr(original_list)); | 645 scoped_list->Append(scoped_list_element_1.Pass()); |
| 646 original_dict.Set("list", scoped_list.Pass()); |
623 | 647 |
624 Value* original_dict_value = &original_dict; | 648 scoped_ptr<Value> copy_dict = original_dict.CreateDeepCopy(); |
625 Value* original_bool_value = original_bool; | 649 scoped_ptr<Value> copy_null = original_null->CreateDeepCopy(); |
626 Value* original_int_value = original_int; | 650 scoped_ptr<Value> copy_bool = original_bool->CreateDeepCopy(); |
627 Value* original_double_value = original_double; | 651 scoped_ptr<Value> copy_int = original_int->CreateDeepCopy(); |
628 Value* original_string_value = original_string; | 652 scoped_ptr<Value> copy_double = original_double->CreateDeepCopy(); |
629 Value* original_string16_value = original_string16; | 653 scoped_ptr<Value> copy_string = original_string->CreateDeepCopy(); |
630 Value* original_binary_value = original_binary; | 654 scoped_ptr<Value> copy_string16 = original_string16->CreateDeepCopy(); |
631 Value* original_list_value = original_list; | 655 scoped_ptr<Value> copy_binary = original_binary->CreateDeepCopy(); |
| 656 scoped_ptr<Value> copy_list = original_list->CreateDeepCopy(); |
632 | 657 |
633 scoped_ptr<Value> copy_dict_value = original_dict_value->CreateDeepCopy(); | 658 EXPECT_TRUE(original_dict.Equals(copy_dict.get())); |
634 scoped_ptr<Value> copy_bool_value = original_bool_value->CreateDeepCopy(); | 659 EXPECT_TRUE(original_null->Equals(copy_null.get())); |
635 scoped_ptr<Value> copy_int_value = original_int_value->CreateDeepCopy(); | 660 EXPECT_TRUE(original_bool->Equals(copy_bool.get())); |
636 scoped_ptr<Value> copy_double_value = original_double_value->CreateDeepCopy(); | 661 EXPECT_TRUE(original_int->Equals(copy_int.get())); |
637 scoped_ptr<Value> copy_string_value = original_string_value->CreateDeepCopy(); | 662 EXPECT_TRUE(original_double->Equals(copy_double.get())); |
638 scoped_ptr<Value> copy_string16_value = | 663 EXPECT_TRUE(original_string->Equals(copy_string.get())); |
639 original_string16_value->CreateDeepCopy(); | 664 EXPECT_TRUE(original_string16->Equals(copy_string16.get())); |
640 scoped_ptr<Value> copy_binary_value = original_binary_value->CreateDeepCopy(); | 665 EXPECT_TRUE(original_binary->Equals(copy_binary.get())); |
641 scoped_ptr<Value> copy_list_value = original_list_value->CreateDeepCopy(); | 666 EXPECT_TRUE(original_list->Equals(copy_list.get())); |
642 | |
643 EXPECT_TRUE(original_dict_value->Equals(copy_dict_value.get())); | |
644 EXPECT_TRUE(original_bool_value->Equals(copy_bool_value.get())); | |
645 EXPECT_TRUE(original_int_value->Equals(copy_int_value.get())); | |
646 EXPECT_TRUE(original_double_value->Equals(copy_double_value.get())); | |
647 EXPECT_TRUE(original_string_value->Equals(copy_string_value.get())); | |
648 EXPECT_TRUE(original_string16_value->Equals(copy_string16_value.get())); | |
649 EXPECT_TRUE(original_binary_value->Equals(copy_binary_value.get())); | |
650 EXPECT_TRUE(original_list_value->Equals(copy_list_value.get())); | |
651 } | 667 } |
652 | 668 |
653 TEST(ValuesTest, RemoveEmptyChildren) { | 669 TEST(ValuesTest, RemoveEmptyChildren) { |
654 scoped_ptr<DictionaryValue> root(new DictionaryValue); | 670 scoped_ptr<DictionaryValue> root(new DictionaryValue); |
655 // Remove empty lists and dictionaries. | 671 // Remove empty lists and dictionaries. |
656 root->Set("empty_dict", make_scoped_ptr(new DictionaryValue)); | 672 root->Set("empty_dict", make_scoped_ptr(new DictionaryValue)); |
657 root->Set("empty_list", make_scoped_ptr(new ListValue)); | 673 root->Set("empty_list", make_scoped_ptr(new ListValue)); |
658 root->SetWithoutPathExpansion("a.b.c.d.e", | 674 root->SetWithoutPathExpansion("a.b.c.d.e", |
659 make_scoped_ptr(new DictionaryValue)); | 675 make_scoped_ptr(new DictionaryValue)); |
660 root.reset(root->DeepCopyWithoutEmptyChildren()); | 676 root.reset(root->DeepCopyWithoutEmptyChildren()); |
661 EXPECT_TRUE(root->empty()); | 677 EXPECT_TRUE(root->empty()); |
662 | 678 |
663 // Make sure we don't prune too much. | 679 // Make sure we don't prune too much. |
664 root->SetBoolean("bool", true); | 680 root->SetBoolean("bool", true); |
665 root->Set("empty_dict", new DictionaryValue); | 681 root->Set("empty_dict", make_scoped_ptr(new DictionaryValue)); |
666 root->SetString("empty_string", std::string()); | 682 root->SetString("empty_string", std::string()); |
667 root.reset(root->DeepCopyWithoutEmptyChildren()); | 683 root.reset(root->DeepCopyWithoutEmptyChildren()); |
668 EXPECT_EQ(2U, root->size()); | 684 EXPECT_EQ(2U, root->size()); |
669 | 685 |
670 // Should do nothing. | 686 // Should do nothing. |
671 root.reset(root->DeepCopyWithoutEmptyChildren()); | 687 root.reset(root->DeepCopyWithoutEmptyChildren()); |
672 EXPECT_EQ(2U, root->size()); | 688 EXPECT_EQ(2U, root->size()); |
673 | 689 |
674 // Nested test cases. These should all reduce back to the bool and string | 690 // Nested test cases. These should all reduce back to the bool and string |
675 // set above. | 691 // set above. |
676 { | 692 { |
677 root->Set("a.b.c.d.e", new DictionaryValue); | 693 root->Set("a.b.c.d.e", make_scoped_ptr(new DictionaryValue)); |
678 root.reset(root->DeepCopyWithoutEmptyChildren()); | 694 root.reset(root->DeepCopyWithoutEmptyChildren()); |
679 EXPECT_EQ(2U, root->size()); | 695 EXPECT_EQ(2U, root->size()); |
680 } | 696 } |
681 { | 697 { |
682 scoped_ptr<DictionaryValue> inner(new DictionaryValue); | 698 scoped_ptr<DictionaryValue> inner(new DictionaryValue); |
683 inner->Set("empty_dict", new DictionaryValue); | 699 inner->Set("empty_dict", make_scoped_ptr(new DictionaryValue)); |
684 inner->Set("empty_list", new ListValue); | 700 inner->Set("empty_list", make_scoped_ptr(new ListValue)); |
685 root->Set("dict_with_empty_children", inner.Pass()); | 701 root->Set("dict_with_empty_children", inner.Pass()); |
686 root.reset(root->DeepCopyWithoutEmptyChildren()); | 702 root.reset(root->DeepCopyWithoutEmptyChildren()); |
687 EXPECT_EQ(2U, root->size()); | 703 EXPECT_EQ(2U, root->size()); |
688 } | 704 } |
689 { | 705 { |
690 scoped_ptr<ListValue> inner(new ListValue); | 706 scoped_ptr<ListValue> inner(new ListValue); |
691 inner->Append(make_scoped_ptr(new DictionaryValue)); | 707 inner->Append(make_scoped_ptr(new DictionaryValue)); |
692 inner->Append(make_scoped_ptr(new ListValue)); | 708 inner->Append(make_scoped_ptr(new ListValue)); |
693 root->Set("list_with_empty_children", inner.Pass()); | 709 root->Set("list_with_empty_children", inner.Pass()); |
694 root.reset(root->DeepCopyWithoutEmptyChildren()); | 710 root.reset(root->DeepCopyWithoutEmptyChildren()); |
(...skipping 11 matching lines...) Expand all Loading... |
706 inner2->Set("empty_list", make_scoped_ptr(new ListValue)); | 722 inner2->Set("empty_list", make_scoped_ptr(new ListValue)); |
707 root->Set("dict_with_empty_children", inner2.Pass()); | 723 root->Set("dict_with_empty_children", inner2.Pass()); |
708 root.reset(root->DeepCopyWithoutEmptyChildren()); | 724 root.reset(root->DeepCopyWithoutEmptyChildren()); |
709 EXPECT_EQ(2U, root->size()); | 725 EXPECT_EQ(2U, root->size()); |
710 } | 726 } |
711 | 727 |
712 // Make sure nested values don't get pruned. | 728 // Make sure nested values don't get pruned. |
713 { | 729 { |
714 scoped_ptr<ListValue> inner(new ListValue); | 730 scoped_ptr<ListValue> inner(new ListValue); |
715 scoped_ptr<ListValue> inner2(new ListValue); | 731 scoped_ptr<ListValue> inner2(new ListValue); |
716 inner2->Append(new StringValue("hello")); | 732 inner2->Append(make_scoped_ptr(new StringValue("hello"))); |
717 inner->Append(make_scoped_ptr(new DictionaryValue)); | 733 inner->Append(make_scoped_ptr(new DictionaryValue)); |
718 inner->Append(inner2.Pass()); | 734 inner->Append(inner2.Pass()); |
719 root->Set("list_with_empty_children", inner.Pass()); | 735 root->Set("list_with_empty_children", inner.Pass()); |
720 root.reset(root->DeepCopyWithoutEmptyChildren()); | 736 root.reset(root->DeepCopyWithoutEmptyChildren()); |
721 EXPECT_EQ(3U, root->size()); | 737 EXPECT_EQ(3U, root->size()); |
722 | 738 |
723 ListValue* inner_value, *inner_value2; | 739 ListValue* inner_value, *inner_value2; |
724 EXPECT_TRUE(root->GetList("list_with_empty_children", &inner_value)); | 740 EXPECT_TRUE(root->GetList("list_with_empty_children", &inner_value)); |
725 EXPECT_EQ(1U, inner_value->GetSize()); // Dictionary was pruned. | 741 EXPECT_EQ(1U, inner_value->GetSize()); // Dictionary was pruned. |
726 EXPECT_TRUE(inner_value->GetList(0, &inner_value2)); | 742 EXPECT_TRUE(inner_value->GetList(0, &inner_value2)); |
727 EXPECT_EQ(1U, inner_value2->GetSize()); | 743 EXPECT_EQ(1U, inner_value2->GetSize()); |
728 } | 744 } |
729 } | 745 } |
730 | 746 |
731 TEST(ValuesTest, MergeDictionary) { | 747 TEST(ValuesTest, MergeDictionary) { |
732 scoped_ptr<DictionaryValue> base(new DictionaryValue); | 748 scoped_ptr<DictionaryValue> base(new DictionaryValue); |
733 base->SetString("base_key", "base_key_value_base"); | 749 base->SetString("base_key", "base_key_value_base"); |
734 base->SetString("collide_key", "collide_key_value_base"); | 750 base->SetString("collide_key", "collide_key_value_base"); |
735 DictionaryValue* base_sub_dict = new DictionaryValue; | 751 scoped_ptr<DictionaryValue> base_sub_dict(new DictionaryValue); |
736 base_sub_dict->SetString("sub_base_key", "sub_base_key_value_base"); | 752 base_sub_dict->SetString("sub_base_key", "sub_base_key_value_base"); |
737 base_sub_dict->SetString("sub_collide_key", "sub_collide_key_value_base"); | 753 base_sub_dict->SetString("sub_collide_key", "sub_collide_key_value_base"); |
738 base->Set("sub_dict_key", base_sub_dict); | 754 base->Set("sub_dict_key", base_sub_dict.Pass()); |
739 | 755 |
740 scoped_ptr<DictionaryValue> merge(new DictionaryValue); | 756 scoped_ptr<DictionaryValue> merge(new DictionaryValue); |
741 merge->SetString("merge_key", "merge_key_value_merge"); | 757 merge->SetString("merge_key", "merge_key_value_merge"); |
742 merge->SetString("collide_key", "collide_key_value_merge"); | 758 merge->SetString("collide_key", "collide_key_value_merge"); |
743 DictionaryValue* merge_sub_dict = new DictionaryValue; | 759 scoped_ptr<DictionaryValue> merge_sub_dict(new DictionaryValue); |
744 merge_sub_dict->SetString("sub_merge_key", "sub_merge_key_value_merge"); | 760 merge_sub_dict->SetString("sub_merge_key", "sub_merge_key_value_merge"); |
745 merge_sub_dict->SetString("sub_collide_key", "sub_collide_key_value_merge"); | 761 merge_sub_dict->SetString("sub_collide_key", "sub_collide_key_value_merge"); |
746 merge->Set("sub_dict_key", merge_sub_dict); | 762 merge->Set("sub_dict_key", merge_sub_dict.Pass()); |
747 | 763 |
748 base->MergeDictionary(merge.get()); | 764 base->MergeDictionary(merge.get()); |
749 | 765 |
750 EXPECT_EQ(4U, base->size()); | 766 EXPECT_EQ(4U, base->size()); |
751 std::string base_key_value; | 767 std::string base_key_value; |
752 EXPECT_TRUE(base->GetString("base_key", &base_key_value)); | 768 EXPECT_TRUE(base->GetString("base_key", &base_key_value)); |
753 EXPECT_EQ("base_key_value_base", base_key_value); // Base value preserved. | 769 EXPECT_EQ("base_key_value_base", base_key_value); // Base value preserved. |
754 std::string collide_key_value; | 770 std::string collide_key_value; |
755 EXPECT_TRUE(base->GetString("collide_key", &collide_key_value)); | 771 EXPECT_TRUE(base->GetString("collide_key", &collide_key_value)); |
756 EXPECT_EQ("collide_key_value_merge", collide_key_value); // Replaced. | 772 EXPECT_EQ("collide_key_value_merge", collide_key_value); // Replaced. |
(...skipping 10 matching lines...) Expand all Loading... |
767 std::string sub_collide_key_value; | 783 std::string sub_collide_key_value; |
768 EXPECT_TRUE(res_sub_dict->GetString("sub_collide_key", | 784 EXPECT_TRUE(res_sub_dict->GetString("sub_collide_key", |
769 &sub_collide_key_value)); | 785 &sub_collide_key_value)); |
770 EXPECT_EQ("sub_collide_key_value_merge", sub_collide_key_value); // Replaced. | 786 EXPECT_EQ("sub_collide_key_value_merge", sub_collide_key_value); // Replaced. |
771 std::string sub_merge_key_value; | 787 std::string sub_merge_key_value; |
772 EXPECT_TRUE(res_sub_dict->GetString("sub_merge_key", &sub_merge_key_value)); | 788 EXPECT_TRUE(res_sub_dict->GetString("sub_merge_key", &sub_merge_key_value)); |
773 EXPECT_EQ("sub_merge_key_value_merge", sub_merge_key_value); // Merged in. | 789 EXPECT_EQ("sub_merge_key_value_merge", sub_merge_key_value); // Merged in. |
774 } | 790 } |
775 | 791 |
776 TEST(ValuesTest, MergeDictionaryDeepCopy) { | 792 TEST(ValuesTest, MergeDictionaryDeepCopy) { |
777 DictionaryValue* child = new DictionaryValue; | 793 scoped_ptr<DictionaryValue> child(new DictionaryValue); |
| 794 DictionaryValue* original_child = child.get(); |
778 child->SetString("test", "value"); | 795 child->SetString("test", "value"); |
779 EXPECT_EQ(1U, child->size()); | 796 EXPECT_EQ(1U, child->size()); |
780 | 797 |
781 std::string value; | 798 std::string value; |
782 EXPECT_TRUE(child->GetString("test", &value)); | 799 EXPECT_TRUE(child->GetString("test", &value)); |
783 EXPECT_EQ("value", value); | 800 EXPECT_EQ("value", value); |
784 | 801 |
785 scoped_ptr<DictionaryValue> base(new DictionaryValue); | 802 scoped_ptr<DictionaryValue> base(new DictionaryValue); |
786 base->Set("dict", child); | 803 base->Set("dict", child.Pass()); |
787 EXPECT_EQ(1U, base->size()); | 804 EXPECT_EQ(1U, base->size()); |
788 | 805 |
789 DictionaryValue* ptr; | 806 DictionaryValue* ptr; |
790 EXPECT_TRUE(base->GetDictionary("dict", &ptr)); | 807 EXPECT_TRUE(base->GetDictionary("dict", &ptr)); |
791 EXPECT_EQ(child, ptr); | 808 EXPECT_EQ(original_child, ptr); |
792 | 809 |
793 scoped_ptr<DictionaryValue> merged(new DictionaryValue); | 810 scoped_ptr<DictionaryValue> merged(new DictionaryValue); |
794 merged->MergeDictionary(base.get()); | 811 merged->MergeDictionary(base.get()); |
795 EXPECT_EQ(1U, merged->size()); | 812 EXPECT_EQ(1U, merged->size()); |
796 EXPECT_TRUE(merged->GetDictionary("dict", &ptr)); | 813 EXPECT_TRUE(merged->GetDictionary("dict", &ptr)); |
797 EXPECT_NE(child, ptr); | 814 EXPECT_NE(original_child, ptr); |
798 EXPECT_TRUE(ptr->GetString("test", &value)); | 815 EXPECT_TRUE(ptr->GetString("test", &value)); |
799 EXPECT_EQ("value", value); | 816 EXPECT_EQ("value", value); |
800 | 817 |
801 child->SetString("test", "overwrite"); | 818 original_child->SetString("test", "overwrite"); |
802 base.reset(); | 819 base.reset(); |
803 EXPECT_TRUE(ptr->GetString("test", &value)); | 820 EXPECT_TRUE(ptr->GetString("test", &value)); |
804 EXPECT_EQ("value", value); | 821 EXPECT_EQ("value", value); |
805 } | 822 } |
806 | 823 |
807 TEST(ValuesTest, DictionaryIterator) { | 824 TEST(ValuesTest, DictionaryIterator) { |
808 DictionaryValue dict; | 825 DictionaryValue dict; |
809 for (DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { | 826 for (DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { |
810 ADD_FAILURE(); | 827 ADD_FAILURE(); |
811 } | 828 } |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1120 EXPECT_FALSE(main_list.GetList(1, NULL)); | 1137 EXPECT_FALSE(main_list.GetList(1, NULL)); |
1121 EXPECT_FALSE(main_list.GetList(2, NULL)); | 1138 EXPECT_FALSE(main_list.GetList(2, NULL)); |
1122 EXPECT_FALSE(main_list.GetList(3, NULL)); | 1139 EXPECT_FALSE(main_list.GetList(3, NULL)); |
1123 EXPECT_FALSE(main_list.GetList(4, NULL)); | 1140 EXPECT_FALSE(main_list.GetList(4, NULL)); |
1124 EXPECT_FALSE(main_list.GetList(5, NULL)); | 1141 EXPECT_FALSE(main_list.GetList(5, NULL)); |
1125 EXPECT_TRUE(main_list.GetList(6, NULL)); | 1142 EXPECT_TRUE(main_list.GetList(6, NULL)); |
1126 EXPECT_FALSE(main_list.GetList(7, NULL)); | 1143 EXPECT_FALSE(main_list.GetList(7, NULL)); |
1127 } | 1144 } |
1128 | 1145 |
1129 } // namespace base | 1146 } // namespace base |
OLD | NEW |