| 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 <limits> | 5 #include <limits> |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/string16.h" | 8 #include "base/string16.h" |
| 9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 12 |
| 13 namespace base { | 13 namespace base { |
| 14 | 14 |
| 15 TEST(ValuesTest, Basic) { | 15 TEST(ValuesTest, Basic) { |
| 16 // Test basic dictionary getting/setting | 16 // Test basic dictionary getting/setting |
| 17 DictionaryValue settings; | 17 DictionaryValue settings; |
| 18 std::string homepage = "http://google.com"; | 18 std::string homepage = "http://google.com"; |
| 19 ASSERT_FALSE(settings.GetString("global.homepage", &homepage)); | 19 ASSERT_FALSE(settings.GetString("global.homepage", &homepage)); |
| 20 ASSERT_EQ(std::string("http://google.com"), homepage); | 20 ASSERT_EQ(std::string("http://google.com"), homepage); |
| 21 | 21 |
| 22 ASSERT_FALSE(settings.Get("global", NULL)); | 22 ASSERT_FALSE(settings.Get("global", NULL)); |
| 23 settings.Set("global", Value::CreateBooleanValue(true)); | 23 settings.Set("global", TrueValue()); |
| 24 ASSERT_TRUE(settings.Get("global", NULL)); | 24 ASSERT_TRUE(settings.Get("global", NULL)); |
| 25 settings.SetString("global.homepage", "http://scurvy.com"); | 25 settings.SetString("global.homepage", "http://scurvy.com"); |
| 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( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 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; |
| 54 ASSERT_TRUE(bookmark->GetString("url", &bookmark_url)); | 54 ASSERT_TRUE(bookmark->GetString("url", &bookmark_url)); |
| 55 ASSERT_EQ(std::string("http://froogle.com"), bookmark_url); | 55 ASSERT_EQ(std::string("http://froogle.com"), bookmark_url); |
| 56 } | 56 } |
| 57 | 57 |
| 58 TEST(ValuesTest, List) { | 58 TEST(ValuesTest, List) { |
| 59 scoped_ptr<ListValue> mixed_list(new ListValue()); | 59 scoped_ptr<ListValue> mixed_list(new ListValue()); |
| 60 mixed_list->Set(0, Value::CreateBooleanValue(true)); | 60 mixed_list->Set(0, TrueValue()); |
| 61 mixed_list->Set(1, Value::CreateIntegerValue(42)); | 61 mixed_list->Set(1, NumberValue::New(42)); |
| 62 mixed_list->Set(2, Value::CreateDoubleValue(88.8)); | 62 mixed_list->Set(2, NumberValue::New(88.8)); |
| 63 mixed_list->Set(3, Value::CreateStringValue("foo")); | 63 mixed_list->Set(3, StringValue::New("foo")); |
| 64 ASSERT_EQ(4u, mixed_list->GetSize()); | 64 ASSERT_EQ(4u, mixed_list->GetSize()); |
| 65 | 65 |
| 66 Value *value = NULL; | 66 Value* value = NULL; |
| 67 bool bool_value = false; | 67 bool bool_value = false; |
| 68 int int_value = 0; | 68 int int_value = 0; |
| 69 double double_value = 0.0; | 69 double double_value = 0.0; |
| 70 std::string string_value; | 70 std::string string_value; |
| 71 | 71 |
| 72 ASSERT_FALSE(mixed_list->Get(4, &value)); | 72 ASSERT_FALSE(mixed_list->Get(4, &value)); |
| 73 | 73 |
| 74 ASSERT_FALSE(mixed_list->GetInteger(0, &int_value)); | 74 ASSERT_FALSE(mixed_list->GetInteger(0, &int_value)); |
| 75 ASSERT_EQ(0, int_value); | 75 ASSERT_EQ(0, int_value); |
| 76 ASSERT_FALSE(mixed_list->GetBoolean(1, &bool_value)); | 76 ASSERT_FALSE(mixed_list->GetBoolean(1, &bool_value)); |
| 77 ASSERT_FALSE(bool_value); | 77 ASSERT_FALSE(bool_value); |
| 78 ASSERT_FALSE(mixed_list->GetString(2, &string_value)); | 78 ASSERT_FALSE(mixed_list->GetString(2, &string_value)); |
| 79 ASSERT_EQ("", string_value); | 79 ASSERT_EQ("", string_value); |
| 80 ASSERT_FALSE(mixed_list->GetInteger(2, &int_value)); | 80 ASSERT_FALSE(mixed_list->GetInteger(2, &int_value)); |
| 81 ASSERT_EQ(0, int_value); | 81 ASSERT_EQ(0, int_value); |
| 82 ASSERT_FALSE(mixed_list->GetBoolean(3, &bool_value)); | 82 ASSERT_FALSE(mixed_list->GetBoolean(3, &bool_value)); |
| 83 ASSERT_FALSE(bool_value); | 83 ASSERT_FALSE(bool_value); |
| 84 | 84 |
| 85 ASSERT_TRUE(mixed_list->GetBoolean(0, &bool_value)); | 85 ASSERT_TRUE(mixed_list->GetBoolean(0, &bool_value)); |
| 86 ASSERT_TRUE(bool_value); | 86 ASSERT_TRUE(bool_value); |
| 87 ASSERT_TRUE(mixed_list->GetInteger(1, &int_value)); | 87 ASSERT_TRUE(mixed_list->GetInteger(1, &int_value)); |
| 88 ASSERT_EQ(42, int_value); | 88 ASSERT_EQ(42, int_value); |
| 89 // implicit conversion from Integer to Double should be possible. | 89 // Implicit conversion from Integer to Double should be possible. |
| 90 ASSERT_TRUE(mixed_list->GetDouble(1, &double_value)); | 90 ASSERT_TRUE(mixed_list->GetDouble(1, &double_value)); |
| 91 ASSERT_EQ(42, double_value); | 91 ASSERT_EQ(42, double_value); |
| 92 ASSERT_TRUE(mixed_list->GetDouble(2, &double_value)); | 92 ASSERT_TRUE(mixed_list->GetDouble(2, &double_value)); |
| 93 ASSERT_EQ(88.8, double_value); | 93 ASSERT_EQ(88.8, double_value); |
| 94 ASSERT_TRUE(mixed_list->GetString(3, &string_value)); | 94 ASSERT_TRUE(mixed_list->GetString(3, &string_value)); |
| 95 ASSERT_EQ("foo", string_value); | 95 ASSERT_EQ("foo", string_value); |
| 96 } | 96 } |
| 97 | 97 |
| 98 TEST(ValuesTest, BinaryValue) { | 98 TEST(ValuesTest, BinaryValue) { |
| 99 char* buffer = NULL; | 99 char* buffer = NULL; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 122 memset(stack_buffer, '!', 42); | 122 memset(stack_buffer, '!', 42); |
| 123 binary.reset(BinaryValue::CreateWithCopiedBuffer(stack_buffer, 42)); | 123 binary.reset(BinaryValue::CreateWithCopiedBuffer(stack_buffer, 42)); |
| 124 ASSERT_TRUE(binary.get()); | 124 ASSERT_TRUE(binary.get()); |
| 125 ASSERT_TRUE(binary->GetBuffer()); | 125 ASSERT_TRUE(binary->GetBuffer()); |
| 126 ASSERT_NE(stack_buffer, binary->GetBuffer()); | 126 ASSERT_NE(stack_buffer, binary->GetBuffer()); |
| 127 ASSERT_EQ(42U, binary->GetSize()); | 127 ASSERT_EQ(42U, binary->GetSize()); |
| 128 ASSERT_EQ(0, memcmp(stack_buffer, binary->GetBuffer(), binary->GetSize())); | 128 ASSERT_EQ(0, memcmp(stack_buffer, binary->GetBuffer(), binary->GetSize())); |
| 129 } | 129 } |
| 130 | 130 |
| 131 TEST(ValuesTest, StringValue) { | 131 TEST(ValuesTest, StringValue) { |
| 132 // Test overloaded CreateStringValue. | 132 // Test overloaded StringValue::New. |
| 133 scoped_ptr<Value> narrow_value(Value::CreateStringValue("narrow")); | 133 scoped_ptr<Value> narrow_value(StringValue::New("narrow")); |
| 134 ASSERT_TRUE(narrow_value.get()); | 134 ASSERT_TRUE(narrow_value.get()); |
| 135 ASSERT_TRUE(narrow_value->IsType(Value::TYPE_STRING)); | 135 ASSERT_TRUE(narrow_value->IsType(Value::TYPE_STRING)); |
| 136 scoped_ptr<Value> utf16_value( | 136 scoped_ptr<Value> utf16_value(StringValue::New(ASCIIToUTF16("utf16"))); |
| 137 Value::CreateStringValue(ASCIIToUTF16("utf16"))); | |
| 138 ASSERT_TRUE(utf16_value.get()); | 137 ASSERT_TRUE(utf16_value.get()); |
| 139 ASSERT_TRUE(utf16_value->IsType(Value::TYPE_STRING)); | 138 ASSERT_TRUE(utf16_value->IsType(Value::TYPE_STRING)); |
| 140 | 139 |
| 141 // Test overloaded GetString. | 140 // Test overloaded GetString. |
| 142 std::string narrow = "http://google.com"; | 141 std::string narrow = "http://google.com"; |
| 143 string16 utf16 = ASCIIToUTF16("http://google.com"); | 142 string16 utf16 = ASCIIToUTF16("http://google.com"); |
| 144 ASSERT_TRUE(narrow_value->GetAsString(&narrow)); | 143 ASSERT_TRUE(narrow_value->GetAsString(&narrow)); |
| 145 ASSERT_TRUE(narrow_value->GetAsString(&utf16)); | 144 ASSERT_TRUE(narrow_value->GetAsString(&utf16)); |
| 146 ASSERT_EQ(std::string("narrow"), narrow); | 145 ASSERT_EQ(std::string("narrow"), narrow); |
| 147 ASSERT_EQ(ASCIIToUTF16("narrow"), utf16); | 146 ASSERT_EQ(ASCIIToUTF16("narrow"), utf16); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 list.Append(new DeletionTestValue(&deletion_flag)); | 188 list.Append(new DeletionTestValue(&deletion_flag)); |
| 190 EXPECT_FALSE(deletion_flag); | 189 EXPECT_FALSE(deletion_flag); |
| 191 list.Clear(); | 190 list.Clear(); |
| 192 EXPECT_TRUE(deletion_flag); | 191 EXPECT_TRUE(deletion_flag); |
| 193 } | 192 } |
| 194 | 193 |
| 195 { | 194 { |
| 196 ListValue list; | 195 ListValue list; |
| 197 list.Append(new DeletionTestValue(&deletion_flag)); | 196 list.Append(new DeletionTestValue(&deletion_flag)); |
| 198 EXPECT_FALSE(deletion_flag); | 197 EXPECT_FALSE(deletion_flag); |
| 199 EXPECT_TRUE(list.Set(0, Value::CreateNullValue())); | 198 EXPECT_TRUE(list.Set(0, NullValue())); |
| 200 EXPECT_TRUE(deletion_flag); | 199 EXPECT_TRUE(deletion_flag); |
| 201 } | 200 } |
| 202 } | 201 } |
| 203 | 202 |
| 204 TEST(ValuesTest, ListRemoval) { | 203 TEST(ValuesTest, ListRemoval) { |
| 205 bool deletion_flag = true; | 204 bool deletion_flag = true; |
| 206 Value* removed_item = NULL; | 205 Value* removed_item = NULL; |
| 207 | 206 |
| 208 { | 207 { |
| 209 ListValue list; | 208 ListValue list; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 dict.Set(key, new DeletionTestValue(&deletion_flag)); | 259 dict.Set(key, new DeletionTestValue(&deletion_flag)); |
| 261 EXPECT_FALSE(deletion_flag); | 260 EXPECT_FALSE(deletion_flag); |
| 262 dict.Clear(); | 261 dict.Clear(); |
| 263 EXPECT_TRUE(deletion_flag); | 262 EXPECT_TRUE(deletion_flag); |
| 264 } | 263 } |
| 265 | 264 |
| 266 { | 265 { |
| 267 DictionaryValue dict; | 266 DictionaryValue dict; |
| 268 dict.Set(key, new DeletionTestValue(&deletion_flag)); | 267 dict.Set(key, new DeletionTestValue(&deletion_flag)); |
| 269 EXPECT_FALSE(deletion_flag); | 268 EXPECT_FALSE(deletion_flag); |
| 270 dict.Set(key, Value::CreateNullValue()); | 269 dict.Set(key, NullValue()); |
| 271 EXPECT_TRUE(deletion_flag); | 270 EXPECT_TRUE(deletion_flag); |
| 272 } | 271 } |
| 273 } | 272 } |
| 274 | 273 |
| 275 TEST(ValuesTest, DictionaryRemoval) { | 274 TEST(ValuesTest, DictionaryRemoval) { |
| 276 std::string key = "test"; | 275 std::string key = "test"; |
| 277 bool deletion_flag = true; | 276 bool deletion_flag = true; |
| 278 Value* removed_item = NULL; | 277 Value* removed_item = NULL; |
| 279 | 278 |
| 280 { | 279 { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 298 EXPECT_FALSE(deletion_flag); | 297 EXPECT_FALSE(deletion_flag); |
| 299 EXPECT_TRUE(dict.HasKey(key)); | 298 EXPECT_TRUE(dict.HasKey(key)); |
| 300 EXPECT_TRUE(dict.Remove(key, NULL)); | 299 EXPECT_TRUE(dict.Remove(key, NULL)); |
| 301 EXPECT_TRUE(deletion_flag); | 300 EXPECT_TRUE(deletion_flag); |
| 302 EXPECT_FALSE(dict.HasKey(key)); | 301 EXPECT_FALSE(dict.HasKey(key)); |
| 303 } | 302 } |
| 304 } | 303 } |
| 305 | 304 |
| 306 TEST(ValuesTest, DictionaryWithoutPathExpansion) { | 305 TEST(ValuesTest, DictionaryWithoutPathExpansion) { |
| 307 DictionaryValue dict; | 306 DictionaryValue dict; |
| 308 dict.Set("this.is.expanded", Value::CreateNullValue()); | 307 dict.Set("this.is.expanded", NullValue()); |
| 309 dict.SetWithoutPathExpansion("this.isnt.expanded", Value::CreateNullValue()); | 308 dict.SetWithoutPathExpansion("this.isnt.expanded", NullValue()); |
| 310 | 309 |
| 311 EXPECT_FALSE(dict.HasKey("this.is.expanded")); | 310 EXPECT_FALSE(dict.HasKey("this.is.expanded")); |
| 312 EXPECT_TRUE(dict.HasKey("this")); | 311 EXPECT_TRUE(dict.HasKey("this")); |
| 313 Value* value1; | 312 Value* value1; |
| 314 EXPECT_TRUE(dict.Get("this", &value1)); | 313 EXPECT_TRUE(dict.Get("this", &value1)); |
| 315 DictionaryValue* value2; | 314 DictionaryValue* value2; |
| 316 ASSERT_TRUE(dict.GetDictionaryWithoutPathExpansion("this", &value2)); | 315 ASSERT_TRUE(dict.GetDictionaryWithoutPathExpansion("this", &value2)); |
| 317 EXPECT_EQ(value1, value2); | 316 EXPECT_EQ(value1, value2); |
| 318 EXPECT_EQ(1U, value2->size()); | 317 EXPECT_EQ(1U, value2->size()); |
| 319 | 318 |
| 320 EXPECT_TRUE(dict.HasKey("this.isnt.expanded")); | 319 EXPECT_TRUE(dict.HasKey("this.isnt.expanded")); |
| 321 Value* value3; | 320 Value* value3; |
| 322 EXPECT_FALSE(dict.Get("this.isnt.expanded", &value3)); | 321 EXPECT_FALSE(dict.Get("this.isnt.expanded", &value3)); |
| 323 Value* value4; | 322 Value* value4; |
| 324 ASSERT_TRUE(dict.GetWithoutPathExpansion("this.isnt.expanded", &value4)); | 323 ASSERT_TRUE(dict.GetWithoutPathExpansion("this.isnt.expanded", &value4)); |
| 325 EXPECT_EQ(Value::TYPE_NULL, value4->GetType()); | 324 EXPECT_EQ(Value::TYPE_NULL, value4->GetType()); |
| 326 } | 325 } |
| 327 | 326 |
| 328 TEST(ValuesTest, DeepCopy) { | 327 TEST(ValuesTest, DeepCopy) { |
| 329 DictionaryValue original_dict; | 328 DictionaryValue original_dict; |
| 330 Value* original_null = Value::CreateNullValue(); | 329 Value* original_null = NullValue(); |
| 331 original_dict.Set("null", original_null); | 330 original_dict.Set("null", original_null); |
| 332 FundamentalValue* original_bool = Value::CreateBooleanValue(true); | 331 BooleanValue* original_bool = TrueValue(); |
| 333 original_dict.Set("bool", original_bool); | 332 original_dict.Set("bool", original_bool); |
| 334 FundamentalValue* original_int = Value::CreateIntegerValue(42); | 333 NumberValue* original_int = NumberValue::New(42); |
| 335 original_dict.Set("int", original_int); | 334 original_dict.Set("int", original_int); |
| 336 FundamentalValue* original_double = Value::CreateDoubleValue(3.14); | 335 NumberValue* original_double = NumberValue::New(3.14); |
| 337 original_dict.Set("double", original_double); | 336 original_dict.Set("double", original_double); |
| 338 StringValue* original_string = Value::CreateStringValue("hello"); | 337 StringValue* original_string = StringValue::New("hello"); |
| 339 original_dict.Set("string", original_string); | 338 original_dict.Set("string", original_string); |
| 340 StringValue* original_string16 = | 339 StringValue* original_string16 = StringValue::New(ASCIIToUTF16("hello16")); |
| 341 Value::CreateStringValue(ASCIIToUTF16("hello16")); | |
| 342 original_dict.Set("string16", original_string16); | 340 original_dict.Set("string16", original_string16); |
| 343 | 341 |
| 344 char* original_buffer = new char[42]; | 342 char* original_buffer = new char[42]; |
| 345 memset(original_buffer, '!', 42); | 343 memset(original_buffer, '!', 42); |
| 346 BinaryValue* original_binary = BinaryValue::Create(original_buffer, 42); | 344 BinaryValue* original_binary = BinaryValue::Create(original_buffer, 42); |
| 347 original_dict.Set("binary", original_binary); | 345 original_dict.Set("binary", original_binary); |
| 348 | 346 |
| 349 ListValue* original_list = new ListValue(); | 347 ListValue* original_list = new ListValue(); |
| 350 FundamentalValue* original_list_element_0 = Value::CreateIntegerValue(0); | 348 NumberValue* original_list_element_0 = NumberValue::New(0); |
| 351 original_list->Append(original_list_element_0); | 349 original_list->Append(original_list_element_0); |
| 352 FundamentalValue* original_list_element_1 = Value::CreateIntegerValue(1); | 350 NumberValue* original_list_element_1 = NumberValue::New(1); |
| 353 original_list->Append(original_list_element_1); | 351 original_list->Append(original_list_element_1); |
| 354 original_dict.Set("list", original_list); | 352 original_dict.Set("list", original_list); |
| 355 | 353 |
| 356 scoped_ptr<DictionaryValue> copy_dict(original_dict.DeepCopy()); | 354 scoped_ptr<DictionaryValue> copy_dict(original_dict.DeepCopy()); |
| 357 ASSERT_TRUE(copy_dict.get()); | 355 ASSERT_TRUE(copy_dict.get()); |
| 358 ASSERT_NE(copy_dict.get(), &original_dict); | 356 ASSERT_NE(copy_dict.get(), &original_dict); |
| 359 | 357 |
| 360 Value* copy_null = NULL; | 358 Value* copy_null = NULL; |
| 361 ASSERT_TRUE(copy_dict->Get("null", ©_null)); | 359 ASSERT_TRUE(copy_dict->Get("null", ©_null)); |
| 362 ASSERT_TRUE(copy_null); | 360 ASSERT_TRUE(copy_null); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 Value* copy_list_element_1; | 442 Value* copy_list_element_1; |
| 445 ASSERT_TRUE(copy_list->Get(1, ©_list_element_1)); | 443 ASSERT_TRUE(copy_list->Get(1, ©_list_element_1)); |
| 446 ASSERT_TRUE(copy_list_element_1); | 444 ASSERT_TRUE(copy_list_element_1); |
| 447 ASSERT_NE(copy_list_element_1, original_list_element_1); | 445 ASSERT_NE(copy_list_element_1, original_list_element_1); |
| 448 int copy_list_element_1_value; | 446 int copy_list_element_1_value; |
| 449 ASSERT_TRUE(copy_list_element_1->GetAsInteger(©_list_element_1_value)); | 447 ASSERT_TRUE(copy_list_element_1->GetAsInteger(©_list_element_1_value)); |
| 450 ASSERT_EQ(1, copy_list_element_1_value); | 448 ASSERT_EQ(1, copy_list_element_1_value); |
| 451 } | 449 } |
| 452 | 450 |
| 453 TEST(ValuesTest, Equals) { | 451 TEST(ValuesTest, Equals) { |
| 454 Value* null1 = Value::CreateNullValue(); | 452 Value* null1 = NullValue(); |
| 455 Value* null2 = Value::CreateNullValue(); | 453 Value* null2 = NullValue(); |
| 456 EXPECT_NE(null1, null2); | 454 EXPECT_NE(null1, null2); |
| 457 EXPECT_TRUE(null1->Equals(null2)); | 455 EXPECT_TRUE(null1->Equals(null2)); |
| 458 | 456 |
| 459 Value* boolean = Value::CreateBooleanValue(false); | 457 Value* boolean = FalseValue(); |
| 460 EXPECT_FALSE(null1->Equals(boolean)); | 458 EXPECT_FALSE(null1->Equals(boolean)); |
| 461 delete null1; | 459 delete null1; |
| 462 delete null2; | 460 delete null2; |
| 463 delete boolean; | 461 delete boolean; |
| 464 | 462 |
| 465 DictionaryValue dv; | 463 DictionaryValue dv; |
| 466 dv.SetBoolean("a", false); | 464 dv.SetBoolean("a", false); |
| 467 dv.SetInteger("b", 2); | 465 dv.SetInteger("b", 2); |
| 468 dv.SetDouble("c", 2.5); | 466 dv.SetDouble("c", 2.5); |
| 469 dv.SetString("d1", "string"); | 467 dv.SetString("d1", "string"); |
| 470 dv.SetString("d2", ASCIIToUTF16("http://google.com")); | 468 dv.SetString("d2", ASCIIToUTF16("http://google.com")); |
| 471 dv.Set("e", Value::CreateNullValue()); | 469 dv.Set("e", NullValue()); |
| 472 | 470 |
| 473 scoped_ptr<DictionaryValue> copy; | 471 scoped_ptr<DictionaryValue> copy; |
| 474 copy.reset(dv.DeepCopy()); | 472 copy.reset(dv.DeepCopy()); |
| 475 EXPECT_TRUE(dv.Equals(copy.get())); | 473 EXPECT_TRUE(dv.Equals(copy.get())); |
| 476 | 474 |
| 477 ListValue* list = new ListValue; | 475 ListValue* list = new ListValue; |
| 478 list->Append(Value::CreateNullValue()); | 476 list->Append(NullValue()); |
| 479 list->Append(new DictionaryValue); | 477 list->Append(new DictionaryValue); |
| 480 dv.Set("f", list); | 478 dv.Set("f", list); |
| 481 | 479 |
| 482 EXPECT_FALSE(dv.Equals(copy.get())); | 480 EXPECT_FALSE(dv.Equals(copy.get())); |
| 483 copy->Set("f", list->DeepCopy()); | 481 copy->Set("f", list->DeepCopy()); |
| 484 EXPECT_TRUE(dv.Equals(copy.get())); | 482 EXPECT_TRUE(dv.Equals(copy.get())); |
| 485 | 483 |
| 486 list->Append(Value::CreateBooleanValue(true)); | 484 list->Append(TrueValue()); |
| 487 EXPECT_FALSE(dv.Equals(copy.get())); | 485 EXPECT_FALSE(dv.Equals(copy.get())); |
| 488 | 486 |
| 489 // Check if Equals detects differences in only the keys. | 487 // Check if Equals detects differences in only the keys. |
| 490 copy.reset(dv.DeepCopy()); | 488 copy.reset(dv.DeepCopy()); |
| 491 EXPECT_TRUE(dv.Equals(copy.get())); | 489 EXPECT_TRUE(dv.Equals(copy.get())); |
| 492 copy->Remove("a", NULL); | 490 copy->Remove("a", NULL); |
| 493 copy->SetBoolean("aa", false); | 491 copy->SetBoolean("aa", false); |
| 494 EXPECT_FALSE(dv.Equals(copy.get())); | 492 EXPECT_FALSE(dv.Equals(copy.get())); |
| 495 } | 493 } |
| 496 | 494 |
| 497 TEST(ValuesTest, StaticEquals) { | 495 TEST(ValuesTest, StaticEquals) { |
| 498 scoped_ptr<Value> null1(Value::CreateNullValue()); | 496 scoped_ptr<Value> null1(NullValue()); |
| 499 scoped_ptr<Value> null2(Value::CreateNullValue()); | 497 scoped_ptr<Value> null2(NullValue()); |
| 500 EXPECT_TRUE(Value::Equals(null1.get(), null2.get())); | 498 EXPECT_TRUE(Value::Equals(null1.get(), null2.get())); |
| 501 EXPECT_TRUE(Value::Equals(NULL, NULL)); | 499 EXPECT_TRUE(Value::Equals(NULL, NULL)); |
| 502 | 500 |
| 503 scoped_ptr<Value> i42(Value::CreateIntegerValue(42)); | 501 scoped_ptr<Value> i42(NumberValue::New(42)); |
| 504 scoped_ptr<Value> j42(Value::CreateIntegerValue(42)); | 502 scoped_ptr<Value> j42(NumberValue::New(42)); |
| 505 scoped_ptr<Value> i17(Value::CreateIntegerValue(17)); | 503 scoped_ptr<Value> i17(NumberValue::New(17)); |
| 506 EXPECT_TRUE(Value::Equals(i42.get(), i42.get())); | 504 EXPECT_TRUE(Value::Equals(i42.get(), i42.get())); |
| 507 EXPECT_TRUE(Value::Equals(j42.get(), i42.get())); | 505 EXPECT_TRUE(Value::Equals(j42.get(), i42.get())); |
| 508 EXPECT_TRUE(Value::Equals(i42.get(), j42.get())); | 506 EXPECT_TRUE(Value::Equals(i42.get(), j42.get())); |
| 509 EXPECT_FALSE(Value::Equals(i42.get(), i17.get())); | 507 EXPECT_FALSE(Value::Equals(i42.get(), i17.get())); |
| 510 EXPECT_FALSE(Value::Equals(i42.get(), NULL)); | 508 EXPECT_FALSE(Value::Equals(i42.get(), NULL)); |
| 511 EXPECT_FALSE(Value::Equals(NULL, i42.get())); | 509 EXPECT_FALSE(Value::Equals(NULL, i42.get())); |
| 512 | 510 |
| 513 // NULL and Value::CreateNullValue() are intentionally different: We need | 511 // NULL and NullValue() are intentionally different: We need |
| 514 // support for NULL as a return value for "undefined" without caring for | 512 // support for NULL as a return value for "undefined" without caring for |
| 515 // ownership of the pointer. | 513 // ownership of the pointer. |
| 516 EXPECT_FALSE(Value::Equals(null1.get(), NULL)); | 514 EXPECT_FALSE(Value::Equals(null1.get(), NULL)); |
| 517 EXPECT_FALSE(Value::Equals(NULL, null1.get())); | 515 EXPECT_FALSE(Value::Equals(NULL, null1.get())); |
| 518 } | 516 } |
| 519 | 517 |
| 520 TEST(ValuesTest, DeepCopyCovariantReturnTypes) { | 518 TEST(ValuesTest, DeepCopyCovariantReturnTypes) { |
| 521 DictionaryValue original_dict; | 519 DictionaryValue original_dict; |
| 522 Value* original_null = Value::CreateNullValue(); | 520 Value* original_null = NullValue(); |
| 523 original_dict.Set("null", original_null); | 521 original_dict.Set("null", original_null); |
| 524 FundamentalValue* original_bool = Value::CreateBooleanValue(true); | 522 BooleanValue* original_bool = TrueValue(); |
| 525 original_dict.Set("bool", original_bool); | 523 original_dict.Set("bool", original_bool); |
| 526 FundamentalValue* original_int = Value::CreateIntegerValue(42); | 524 NumberValue* original_int = NumberValue::New(42); |
| 527 original_dict.Set("int", original_int); | 525 original_dict.Set("int", original_int); |
| 528 FundamentalValue* original_double = Value::CreateDoubleValue(3.14); | 526 NumberValue* original_double = NumberValue::New(3.14); |
| 529 original_dict.Set("double", original_double); | 527 original_dict.Set("double", original_double); |
| 530 StringValue* original_string = Value::CreateStringValue("hello"); | 528 StringValue* original_string = StringValue::New("hello"); |
| 531 original_dict.Set("string", original_string); | 529 original_dict.Set("string", original_string); |
| 532 StringValue* original_string16 = | 530 StringValue* original_string16 = StringValue::New(ASCIIToUTF16("hello16")); |
| 533 Value::CreateStringValue(ASCIIToUTF16("hello16")); | |
| 534 original_dict.Set("string16", original_string16); | 531 original_dict.Set("string16", original_string16); |
| 535 | 532 |
| 536 char* original_buffer = new char[42]; | 533 char* original_buffer = new char[42]; |
| 537 memset(original_buffer, '!', 42); | 534 memset(original_buffer, '!', 42); |
| 538 BinaryValue* original_binary = BinaryValue::Create(original_buffer, 42); | 535 BinaryValue* original_binary = BinaryValue::Create(original_buffer, 42); |
| 539 original_dict.Set("binary", original_binary); | 536 original_dict.Set("binary", original_binary); |
| 540 | 537 |
| 541 ListValue* original_list = new ListValue(); | 538 ListValue* original_list = new ListValue(); |
| 542 FundamentalValue* original_list_element_0 = Value::CreateIntegerValue(0); | 539 NumberValue* original_list_element_0 = NumberValue::New(0); |
| 543 original_list->Append(original_list_element_0); | 540 original_list->Append(original_list_element_0); |
| 544 FundamentalValue* original_list_element_1 = Value::CreateIntegerValue(1); | 541 NumberValue* original_list_element_1 = NumberValue::New(1); |
| 545 original_list->Append(original_list_element_1); | 542 original_list->Append(original_list_element_1); |
| 546 original_dict.Set("list", original_list); | 543 original_dict.Set("list", original_list); |
| 547 | 544 |
| 548 Value* original_dict_value = &original_dict; | 545 Value* original_dict_value = &original_dict; |
| 549 Value* original_bool_value = original_bool; | 546 Value* original_bool_value = original_bool; |
| 550 Value* original_int_value = original_int; | 547 Value* original_int_value = original_int; |
| 551 Value* original_double_value = original_double; | 548 Value* original_double_value = original_double; |
| 552 Value* original_string_value = original_string; | 549 Value* original_string_value = original_string; |
| 553 Value* original_string16_value = original_string16; | 550 Value* original_string16_value = original_string16; |
| 554 Value* original_binary_value = original_binary; | 551 Value* original_binary_value = original_binary; |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 EXPECT_EQ(2U, root->size()); | 628 EXPECT_EQ(2U, root->size()); |
| 632 } | 629 } |
| 633 | 630 |
| 634 // Make sure nested values don't get pruned. | 631 // Make sure nested values don't get pruned. |
| 635 { | 632 { |
| 636 ListValue* inner = new ListValue; | 633 ListValue* inner = new ListValue; |
| 637 root->Set("list_with_empty_children", inner); | 634 root->Set("list_with_empty_children", inner); |
| 638 ListValue* inner2 = new ListValue; | 635 ListValue* inner2 = new ListValue; |
| 639 inner->Append(new DictionaryValue); | 636 inner->Append(new DictionaryValue); |
| 640 inner->Append(inner2); | 637 inner->Append(inner2); |
| 641 inner2->Append(Value::CreateStringValue("hello")); | 638 inner2->Append(StringValue::New("hello")); |
| 642 root.reset(root->DeepCopyWithoutEmptyChildren()); | 639 root.reset(root->DeepCopyWithoutEmptyChildren()); |
| 643 EXPECT_EQ(3U, root->size()); | 640 EXPECT_EQ(3U, root->size()); |
| 644 EXPECT_TRUE(root->GetList("list_with_empty_children", &inner)); | 641 EXPECT_TRUE(root->GetList("list_with_empty_children", &inner)); |
| 645 EXPECT_EQ(1U, inner->GetSize()); // Dictionary was pruned. | 642 EXPECT_EQ(1U, inner->GetSize()); // Dictionary was pruned. |
| 646 EXPECT_TRUE(inner->GetList(0, &inner2)); | 643 EXPECT_TRUE(inner->GetList(0, &inner2)); |
| 647 EXPECT_EQ(1U, inner2->GetSize()); | 644 EXPECT_EQ(1U, inner2->GetSize()); |
| 648 } | 645 } |
| 649 } | 646 } |
| 650 | 647 |
| 651 TEST(ValuesTest, MergeDictionary) { | 648 TEST(ValuesTest, MergeDictionary) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 687 std::string sub_collide_key_value; | 684 std::string sub_collide_key_value; |
| 688 EXPECT_TRUE(res_sub_dict->GetString("sub_collide_key", | 685 EXPECT_TRUE(res_sub_dict->GetString("sub_collide_key", |
| 689 &sub_collide_key_value)); | 686 &sub_collide_key_value)); |
| 690 EXPECT_EQ("sub_collide_key_value_merge", sub_collide_key_value); // Replaced. | 687 EXPECT_EQ("sub_collide_key_value_merge", sub_collide_key_value); // Replaced. |
| 691 std::string sub_merge_key_value; | 688 std::string sub_merge_key_value; |
| 692 EXPECT_TRUE(res_sub_dict->GetString("sub_merge_key", &sub_merge_key_value)); | 689 EXPECT_TRUE(res_sub_dict->GetString("sub_merge_key", &sub_merge_key_value)); |
| 693 EXPECT_EQ("sub_merge_key_value_merge", sub_merge_key_value); // Merged in. | 690 EXPECT_EQ("sub_merge_key_value_merge", sub_merge_key_value); // Merged in. |
| 694 } | 691 } |
| 695 | 692 |
| 696 } // namespace base | 693 } // namespace base |
| OLD | NEW |