15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <limits>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, Basic) {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test basic dictionary getting/setting
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue settings;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string homepage = "http://google.com";
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(settings.GetString("global.homepage", &homepage));
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(std::string("http://google.com"), homepage);
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(settings.Get("global", NULL));
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  settings.Set("global", new FundamentalValue(true));
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(settings.Get("global", NULL));
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  settings.SetString("global.homepage", "http://scurvy.com");
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(settings.Get("global", NULL));
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  homepage = "http://google.com";
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(settings.GetString("global.homepage", &homepage));
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(std::string("http://scurvy.com"), homepage);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test storing a dictionary in a list.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ListValue* toolbar_bookmarks;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    settings.GetList("global.toolbar.bookmarks", &toolbar_bookmarks));
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  toolbar_bookmarks = new ListValue;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  settings.Set("global.toolbar.bookmarks", toolbar_bookmarks);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(settings.GetList("global.toolbar.bookmarks", &toolbar_bookmarks));
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue* new_bookmark = new DictionaryValue;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_bookmark->SetString("name", "Froogle");
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  new_bookmark->SetString("url", "http://froogle.com");
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  toolbar_bookmarks->Append(new_bookmark);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ListValue* bookmark_list;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(settings.GetList("global.toolbar.bookmarks", &bookmark_list));
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue* bookmark;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(1U, bookmark_list->GetSize());
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bookmark_list->GetDictionary(0, &bookmark));
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string bookmark_name = "Unnamed";
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bookmark->GetString("name", &bookmark_name));
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(std::string("Froogle"), bookmark_name);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string bookmark_url;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bookmark->GetString("url", &bookmark_url));
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(std::string("http://froogle.com"), bookmark_url);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, List) {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ListValue> mixed_list(new ListValue());
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mixed_list->Set(0, new FundamentalValue(true));
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mixed_list->Set(1, new FundamentalValue(42));
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mixed_list->Set(2, new FundamentalValue(88.8));
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mixed_list->Set(3, new StringValue("foo"));
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(4u, mixed_list->GetSize());
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value *value = NULL;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool bool_value = false;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int int_value = 0;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double double_value = 0.0;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string string_value;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(mixed_list->Get(4, &value));
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(mixed_list->GetInteger(0, &int_value));
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(0, int_value);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(mixed_list->GetBoolean(1, &bool_value));
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(bool_value);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(mixed_list->GetString(2, &string_value));
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("", string_value);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(mixed_list->GetInteger(2, &int_value));
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(0, int_value);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(mixed_list->GetBoolean(3, &bool_value));
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(bool_value);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(mixed_list->GetBoolean(0, &bool_value));
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bool_value);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(mixed_list->GetInteger(1, &int_value));
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(42, int_value);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // implicit conversion from Integer to Double should be possible.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(mixed_list->GetDouble(1, &double_value));
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(42, double_value);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(mixed_list->GetDouble(2, &double_value));
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(88.8, double_value);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(mixed_list->GetString(3, &string_value));
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ("foo", string_value);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try searching in the mixed list.
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FundamentalValue sought_value(42);
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FundamentalValue not_found_value(false);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_NE(mixed_list->end(), mixed_list->Find(sought_value));
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE((*mixed_list->Find(sought_value))->GetAsInteger(&int_value));
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(42, int_value);
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(mixed_list->end(), mixed_list->Find(not_found_value));
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, BinaryValue) {
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Default constructor creates a BinaryValue with a null buffer and size 0.
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<BinaryValue> binary(new BinaryValue());
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(binary.get());
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(NULL, binary->GetBuffer());
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(0U, binary->GetSize());
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Test the common case of a non-empty buffer
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  char* buffer = new char[15];
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  binary.reset(new BinaryValue(scoped_ptr<char[]>(buffer), 15));
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(binary.get());
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(binary->GetBuffer());
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(buffer, binary->GetBuffer());
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(15U, binary->GetSize());
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  char stack_buffer[42];
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  memset(stack_buffer, '!', 42);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  binary.reset(BinaryValue::CreateWithCopiedBuffer(stack_buffer, 42));
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(binary.get());
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(binary->GetBuffer());
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(stack_buffer, binary->GetBuffer());
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(42U, binary->GetSize());
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(0, memcmp(stack_buffer, binary->GetBuffer(), binary->GetSize()));
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, StringValue) {
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Test overloaded StringValue constructor.
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Value> narrow_value(new StringValue("narrow"));
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(narrow_value.get());
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(narrow_value->IsType(Value::TYPE_STRING));
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Value> utf16_value(new StringValue(ASCIIToUTF16("utf16")));
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(utf16_value.get());
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(utf16_value->IsType(Value::TYPE_STRING));
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Test overloaded GetAsString.
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string narrow = "http://google.com";
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 utf16 = ASCIIToUTF16("http://google.com");
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const StringValue* string_value = NULL;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(narrow_value->GetAsString(&narrow));
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(narrow_value->GetAsString(&utf16));
1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(narrow_value->GetAsString(&string_value));
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(std::string("narrow"), narrow);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(ASCIIToUTF16("narrow"), utf16);
1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_EQ(string_value->GetString(), narrow);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(utf16_value->GetAsString(&narrow));
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(utf16_value->GetAsString(&utf16));
1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(utf16_value->GetAsString(&string_value));
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(std::string("utf16"), narrow);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(ASCIIToUTF16("utf16"), utf16);
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_EQ(string_value->GetString(), narrow);
1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Don't choke on NULL values.
1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(narrow_value->GetAsString(static_cast<string16*>(NULL)));
1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(narrow_value->GetAsString(static_cast<std::string*>(NULL)));
1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(narrow_value->GetAsString(
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                  static_cast<const StringValue**>(NULL)));
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is a Value object that allows us to tell if it's been
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// properly deleted by modifying the value of external flag on destruction.
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DeletionTestValue : public Value {
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit DeletionTestValue(bool* deletion_flag) : Value(TYPE_NULL) {
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Init(deletion_flag);  // Separate function so that we can use ASSERT_*
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init(bool* deletion_flag) {
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(deletion_flag);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    deletion_flag_ = deletion_flag;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *deletion_flag_ = false;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~DeletionTestValue() {
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *deletion_flag_ = true;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool* deletion_flag_;
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, ListDeletion) {
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool deletion_flag = true;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ListValue list;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list.Append(new DeletionTestValue(&deletion_flag));
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(deletion_flag);
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(deletion_flag);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ListValue list;
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list.Append(new DeletionTestValue(&deletion_flag));
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(deletion_flag);
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list.Clear();
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(deletion_flag);
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ListValue list;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list.Append(new DeletionTestValue(&deletion_flag));
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(deletion_flag);
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(list.Set(0, Value::CreateNullValue()));
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(deletion_flag);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, ListRemoval) {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool deletion_flag = true;
2173240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  scoped_ptr<Value> removed_item;
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ListValue list;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list.Append(new DeletionTestValue(&deletion_flag));
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(deletion_flag);
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(1U, list.GetSize());
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(list.Remove(std::numeric_limits<size_t>::max(),
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             &removed_item));
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(list.Remove(1, &removed_item));
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(list.Remove(0, &removed_item));
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(removed_item);
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(0U, list.GetSize());
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(deletion_flag);
2323240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  removed_item.reset();
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(deletion_flag);
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ListValue list;
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list.Append(new DeletionTestValue(&deletion_flag));
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(deletion_flag);
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(list.Remove(0, NULL));
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(deletion_flag);
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(0U, list.GetSize());
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ListValue list;
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DeletionTestValue* value = new DeletionTestValue(&deletion_flag);
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list.Append(value);
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(deletion_flag);
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    size_t index = 0;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    list.Remove(*value, &index);
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(0U, index);
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(deletion_flag);
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(0U, list.GetSize());
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, DictionaryDeletion) {
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string key = "test";
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool deletion_flag = true;
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DictionaryValue dict;
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dict.Set(key, new DeletionTestValue(&deletion_flag));
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(deletion_flag);
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(deletion_flag);
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DictionaryValue dict;
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dict.Set(key, new DeletionTestValue(&deletion_flag));
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(deletion_flag);
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dict.Clear();
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(deletion_flag);
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DictionaryValue dict;
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dict.Set(key, new DeletionTestValue(&deletion_flag));
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(deletion_flag);
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dict.Set(key, Value::CreateNullValue());
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(deletion_flag);
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, DictionaryRemoval) {
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string key = "test";
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool deletion_flag = true;
2883240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  scoped_ptr<Value> removed_item;
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DictionaryValue dict;
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dict.Set(key, new DeletionTestValue(&deletion_flag));
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(deletion_flag);
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(dict.HasKey(key));
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(dict.Remove("absent key", &removed_item));
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(dict.Remove(key, &removed_item));
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(dict.HasKey(key));
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(removed_item);
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(deletion_flag);
3013240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  removed_item.reset();
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(deletion_flag);
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DictionaryValue dict;
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dict.Set(key, new DeletionTestValue(&deletion_flag));
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(deletion_flag);
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(dict.HasKey(key));
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(dict.Remove(key, NULL));
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(deletion_flag);
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(dict.HasKey(key));
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, DictionaryWithoutPathExpansion) {
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue dict;
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dict.Set("this.is.expanded", Value::CreateNullValue());
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dict.SetWithoutPathExpansion("this.isnt.expanded", Value::CreateNullValue());
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(dict.HasKey("this.is.expanded"));
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(dict.HasKey("this"));
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* value1;
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(dict.Get("this", &value1));
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue* value2;
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dict.GetDictionaryWithoutPathExpansion("this", &value2));
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(value1, value2);
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1U, value2->size());
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(dict.HasKey("this.isnt.expanded"));
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* value3;
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(dict.Get("this.isnt.expanded", &value3));
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* value4;
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(dict.GetWithoutPathExpansion("this.isnt.expanded", &value4));
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Value::TYPE_NULL, value4->GetType());
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST(ValuesTest, DictionaryRemovePath) {
338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DictionaryValue dict;
3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  dict.Set("a.long.way.down", new FundamentalValue(1));
3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  dict.Set("a.long.key.path", new FundamentalValue(true));
341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<Value> removed_item;
343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(dict.RemovePath("a.long.way.down", &removed_item));
344f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ASSERT_TRUE(removed_item);
345f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removed_item->IsType(base::Value::TYPE_INTEGER));
346f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(dict.HasKey("a.long.way.down"));
347f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(dict.HasKey("a.long.way"));
348f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(dict.Get("a.long.key.path", NULL));
349f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
350f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  removed_item.reset();
351f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(dict.RemovePath("a.long.way.down", &removed_item));
352f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(removed_item);
353f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(dict.Get("a.long.key.path", NULL));
354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
355f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  removed_item.reset();
356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(dict.RemovePath("a.long.key.path", &removed_item));
357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ASSERT_TRUE(removed_item);
358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(removed_item->IsType(base::Value::TYPE_BOOLEAN));
359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(dict.empty());
360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, DeepCopy) {
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue original_dict;
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* original_null = Value::CreateNullValue();
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("null", original_null);
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FundamentalValue* original_bool = new FundamentalValue(true);
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("bool", original_bool);
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FundamentalValue* original_int = new FundamentalValue(42);
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("int", original_int);
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FundamentalValue* original_double = new FundamentalValue(3.14);
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("double", original_double);
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StringValue* original_string = new StringValue("hello");
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("string", original_string);
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StringValue* original_string16 = new StringValue(ASCIIToUTF16("hello16"));
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("string16", original_string16);
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<char[]> original_buffer(new char[42]);
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  memset(original_buffer.get(), '!', 42);
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BinaryValue* original_binary = new BinaryValue(original_buffer.Pass(), 42);
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("binary", original_binary);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ListValue* original_list = new ListValue();
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FundamentalValue* original_list_element_0 = new FundamentalValue(0);
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_list->Append(original_list_element_0);
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FundamentalValue* original_list_element_1 = new FundamentalValue(1);
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_list->Append(original_list_element_1);
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("list", original_list);
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue* original_nested_dictionary = new DictionaryValue();
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  original_nested_dictionary->Set("key", new StringValue("value"));
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("dictionary", original_nested_dictionary);
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<DictionaryValue> copy_dict(original_dict.DeepCopy());
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_dict.get());
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(copy_dict.get(), &original_dict);
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* copy_null = NULL;
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_dict->Get("null", &copy_null));
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_null);
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(copy_null, original_null);
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_null->IsType(Value::TYPE_NULL));
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* copy_bool = NULL;
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_dict->Get("bool", &copy_bool));
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_bool);
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(copy_bool, original_bool);
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_bool->IsType(Value::TYPE_BOOLEAN));
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool copy_bool_value = false;
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_bool->GetAsBoolean(&copy_bool_value));
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_bool_value);
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* copy_int = NULL;
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_dict->Get("int", &copy_int));
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_int);
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(copy_int, original_int);
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_int->IsType(Value::TYPE_INTEGER));
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int copy_int_value = 0;
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_int->GetAsInteger(&copy_int_value));
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(42, copy_int_value);
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* copy_double = NULL;
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_dict->Get("double", &copy_double));
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_double);
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(copy_double, original_double);
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_double->IsType(Value::TYPE_DOUBLE));
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double copy_double_value = 0;
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_double->GetAsDouble(&copy_double_value));
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(3.14, copy_double_value);
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* copy_string = NULL;
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_dict->Get("string", &copy_string));
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_string);
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(copy_string, original_string);
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_string->IsType(Value::TYPE_STRING));
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string copy_string_value;
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string16 copy_string16_value;
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_string->GetAsString(&copy_string_value));
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_string->GetAsString(&copy_string16_value));
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(std::string("hello"), copy_string_value);
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(ASCIIToUTF16("hello"), copy_string16_value);
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* copy_string16 = NULL;
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_dict->Get("string16", &copy_string16));
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_string16);
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(copy_string16, original_string16);
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_string16->IsType(Value::TYPE_STRING));
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_string16->GetAsString(&copy_string_value));
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_string16->GetAsString(&copy_string16_value));
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(std::string("hello16"), copy_string_value);
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(ASCIIToUTF16("hello16"), copy_string16_value);
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* copy_binary = NULL;
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_dict->Get("binary", &copy_binary));
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_binary);
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(copy_binary, original_binary);
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_binary->IsType(Value::TYPE_BINARY));
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(original_binary->GetBuffer(),
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static_cast<BinaryValue*>(copy_binary)->GetBuffer());
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(original_binary->GetSize(),
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static_cast<BinaryValue*>(copy_binary)->GetSize());
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(0, memcmp(original_binary->GetBuffer(),
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               static_cast<BinaryValue*>(copy_binary)->GetBuffer(),
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               original_binary->GetSize()));
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* copy_value = NULL;
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_dict->Get("list", &copy_value));
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_value);
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(copy_value, original_list);
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_value->IsType(Value::TYPE_LIST));
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ListValue* copy_list = NULL;
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_value->GetAsList(&copy_list));
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_list);
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(2U, copy_list->GetSize());
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* copy_list_element_0;
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_list->Get(0, &copy_list_element_0));
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_list_element_0);
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(copy_list_element_0, original_list_element_0);
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int copy_list_element_0_value;
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_list_element_0->GetAsInteger(&copy_list_element_0_value));
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(0, copy_list_element_0_value);
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* copy_list_element_1;
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_list->Get(1, &copy_list_element_1));
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_list_element_1);
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(copy_list_element_1, original_list_element_1);
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int copy_list_element_1_value;
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_list_element_1->GetAsInteger(&copy_list_element_1_value));
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(1, copy_list_element_1_value);
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  copy_value = NULL;
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_dict->Get("dictionary", &copy_value));
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_value);
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(copy_value, original_nested_dictionary);
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_value->IsType(Value::TYPE_DICTIONARY));
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue* copy_nested_dictionary = NULL;
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_value->GetAsDictionary(&copy_nested_dictionary));
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(copy_nested_dictionary);
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(copy_nested_dictionary->HasKey("key"));
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, Equals) {
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* null1 = Value::CreateNullValue();
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* null2 = Value::CreateNullValue();
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(null1, null2);
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(null1->Equals(null2));
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Value* boolean = new FundamentalValue(false);
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(null1->Equals(boolean));
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  delete null1;
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  delete null2;
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  delete boolean;
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue dv;
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dv.SetBoolean("a", false);
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dv.SetInteger("b", 2);
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dv.SetDouble("c", 2.5);
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dv.SetString("d1", "string");
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dv.SetString("d2", ASCIIToUTF16("http://google.com"));
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dv.Set("e", Value::CreateNullValue());
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<DictionaryValue> copy;
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  copy.reset(dv.DeepCopy());
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(dv.Equals(copy.get()));
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ListValue* list = new ListValue;
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list->Append(Value::CreateNullValue());
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list->Append(new DictionaryValue);
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dv.Set("f", list);
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(dv.Equals(copy.get()));
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  copy->Set("f", list->DeepCopy());
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(dv.Equals(copy.get()));
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  list->Append(new FundamentalValue(true));
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(dv.Equals(copy.get()));
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check if Equals detects differences in only the keys.
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  copy.reset(dv.DeepCopy());
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(dv.Equals(copy.get()));
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  copy->Remove("a", NULL);
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  copy->SetBoolean("aa", false);
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(dv.Equals(copy.get()));
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, StaticEquals) {
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Value> null1(Value::CreateNullValue());
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Value> null2(Value::CreateNullValue());
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(Value::Equals(null1.get(), null2.get()));
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(Value::Equals(NULL, NULL));
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Value> i42(new FundamentalValue(42));
5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Value> j42(new FundamentalValue(42));
5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Value> i17(new FundamentalValue(17));
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(Value::Equals(i42.get(), i42.get()));
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(Value::Equals(j42.get(), i42.get()));
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(Value::Equals(i42.get(), j42.get()));
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(Value::Equals(i42.get(), i17.get()));
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(Value::Equals(i42.get(), NULL));
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(Value::Equals(NULL, i42.get()));
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // NULL and Value::CreateNullValue() are intentionally different: We need
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // support for NULL as a return value for "undefined" without caring for
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ownership of the pointer.
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(Value::Equals(null1.get(), NULL));
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(Value::Equals(NULL, null1.get()));
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, DeepCopyCovariantReturnTypes) {
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue original_dict;
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* original_null = Value::CreateNullValue();
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("null", original_null);
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FundamentalValue* original_bool = new FundamentalValue(true);
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("bool", original_bool);
5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FundamentalValue* original_int = new FundamentalValue(42);
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("int", original_int);
5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FundamentalValue* original_double = new FundamentalValue(3.14);
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("double", original_double);
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StringValue* original_string = new StringValue("hello");
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("string", original_string);
5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StringValue* original_string16 = new StringValue(ASCIIToUTF16("hello16"));
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("string16", original_string16);
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<char[]> original_buffer(new char[42]);
5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  memset(original_buffer.get(), '!', 42);
5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BinaryValue* original_binary = new BinaryValue(original_buffer.Pass(), 42);
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("binary", original_binary);
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ListValue* original_list = new ListValue();
5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FundamentalValue* original_list_element_0 = new FundamentalValue(0);
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_list->Append(original_list_element_0);
5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FundamentalValue* original_list_element_1 = new FundamentalValue(1);
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_list->Append(original_list_element_1);
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  original_dict.Set("list", original_list);
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* original_dict_value = &original_dict;
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* original_bool_value = original_bool;
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* original_int_value = original_int;
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* original_double_value = original_double;
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* original_string_value = original_string;
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* original_string16_value = original_string16;
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* original_binary_value = original_binary;
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Value* original_list_value = original_list;
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Value> copy_dict_value(original_dict_value->DeepCopy());
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Value> copy_bool_value(original_bool_value->DeepCopy());
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Value> copy_int_value(original_int_value->DeepCopy());
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Value> copy_double_value(original_double_value->DeepCopy());
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Value> copy_string_value(original_string_value->DeepCopy());
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Value> copy_string16_value(original_string16_value->DeepCopy());
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Value> copy_binary_value(original_binary_value->DeepCopy());
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Value> copy_list_value(original_list_value->DeepCopy());
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(original_dict_value->Equals(copy_dict_value.get()));
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(original_bool_value->Equals(copy_bool_value.get()));
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(original_int_value->Equals(copy_int_value.get()));
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(original_double_value->Equals(copy_double_value.get()));
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(original_string_value->Equals(copy_string_value.get()));
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(original_string16_value->Equals(copy_string16_value.get()));
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(original_binary_value->Equals(copy_binary_value.get()));
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(original_list_value->Equals(copy_list_value.get()));
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, RemoveEmptyChildren) {
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<DictionaryValue> root(new DictionaryValue);
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Remove empty lists and dictionaries.
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root->Set("empty_dict", new DictionaryValue);
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root->Set("empty_list", new ListValue);
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root->SetWithoutPathExpansion("a.b.c.d.e", new DictionaryValue);
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root.reset(root->DeepCopyWithoutEmptyChildren());
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(root->empty());
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure we don't prune too much.
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root->SetBoolean("bool", true);
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root->Set("empty_dict", new DictionaryValue);
636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  root->SetString("empty_string", std::string());
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root.reset(root->DeepCopyWithoutEmptyChildren());
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(2U, root->size());
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Should do nothing.
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root.reset(root->DeepCopyWithoutEmptyChildren());
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(2U, root->size());
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Nested test cases.  These should all reduce back to the bool and string
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // set above.
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    root->Set("a.b.c.d.e", new DictionaryValue);
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    root.reset(root->DeepCopyWithoutEmptyChildren());
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(2U, root->size());
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DictionaryValue* inner = new DictionaryValue;
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    root->Set("dict_with_emtpy_children", inner);
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inner->Set("empty_dict", new DictionaryValue);
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inner->Set("empty_list", new ListValue);
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    root.reset(root->DeepCopyWithoutEmptyChildren());
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(2U, root->size());
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ListValue* inner = new ListValue;
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    root->Set("list_with_empty_children", inner);
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inner->Append(new DictionaryValue);
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inner->Append(new ListValue);
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    root.reset(root->DeepCopyWithoutEmptyChildren());
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(2U, root->size());
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Nested with siblings.
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ListValue* inner = new ListValue;
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    root->Set("list_with_empty_children", inner);
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inner->Append(new DictionaryValue);
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inner->Append(new ListValue);
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DictionaryValue* inner2 = new DictionaryValue;
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    root->Set("dict_with_empty_children", inner2);
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inner2->Set("empty_dict", new DictionaryValue);
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inner2->Set("empty_list", new ListValue);
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    root.reset(root->DeepCopyWithoutEmptyChildren());
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(2U, root->size());
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure nested values don't get pruned.
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ListValue* inner = new ListValue;
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    root->Set("list_with_empty_children", inner);
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ListValue* inner2 = new ListValue;
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inner->Append(new DictionaryValue);
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    inner->Append(inner2);
6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    inner2->Append(new StringValue("hello"));
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    root.reset(root->DeepCopyWithoutEmptyChildren());
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(3U, root->size());
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(root->GetList("list_with_empty_children", &inner));
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(1U, inner->GetSize());  // Dictionary was pruned.
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(inner->GetList(0, &inner2));
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(1U, inner2->GetSize());
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, MergeDictionary) {
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<DictionaryValue> base(new DictionaryValue);
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base->SetString("base_key", "base_key_value_base");
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base->SetString("collide_key", "collide_key_value_base");
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue* base_sub_dict = new DictionaryValue;
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base_sub_dict->SetString("sub_base_key", "sub_base_key_value_base");
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base_sub_dict->SetString("sub_collide_key", "sub_collide_key_value_base");
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base->Set("sub_dict_key", base_sub_dict);
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<DictionaryValue> merge(new DictionaryValue);
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  merge->SetString("merge_key", "merge_key_value_merge");
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  merge->SetString("collide_key", "collide_key_value_merge");
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue* merge_sub_dict = new DictionaryValue;
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  merge_sub_dict->SetString("sub_merge_key", "sub_merge_key_value_merge");
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  merge_sub_dict->SetString("sub_collide_key", "sub_collide_key_value_merge");
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  merge->Set("sub_dict_key", merge_sub_dict);
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base->MergeDictionary(merge.get());
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(4U, base->size());
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string base_key_value;
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(base->GetString("base_key", &base_key_value));
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("base_key_value_base", base_key_value); // Base value preserved.
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string collide_key_value;
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(base->GetString("collide_key", &collide_key_value));
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("collide_key_value_merge", collide_key_value); // Replaced.
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string merge_key_value;
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(base->GetString("merge_key", &merge_key_value));
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("merge_key_value_merge", merge_key_value); // Merged in.
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue* res_sub_dict;
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(base->GetDictionary("sub_dict_key", &res_sub_dict));
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(3U, res_sub_dict->size());
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string sub_base_key_value;
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(res_sub_dict->GetString("sub_base_key", &sub_base_key_value));
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("sub_base_key_value_base", sub_base_key_value); // Preserved.
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string sub_collide_key_value;
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(res_sub_dict->GetString("sub_collide_key",
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      &sub_collide_key_value));
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("sub_collide_key_value_merge", sub_collide_key_value); // Replaced.
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string sub_merge_key_value;
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(res_sub_dict->GetString("sub_merge_key", &sub_merge_key_value));
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("sub_merge_key_value_merge", sub_merge_key_value); // Merged in.
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, MergeDictionaryDeepCopy) {
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue* child = new DictionaryValue;
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  child->SetString("test", "value");
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1U, child->size());
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string value;
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(child->GetString("test", &value));
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("value", value);
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<DictionaryValue> base(new DictionaryValue);
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base->Set("dict", child);
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1U, base->size());
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue* ptr;
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(base->GetDictionary("dict", &ptr));
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(child, ptr);
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<DictionaryValue> merged(new DictionaryValue);
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  merged->MergeDictionary(base.get());
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1U, merged->size());
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(merged->GetDictionary("dict", &ptr));
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_NE(child, ptr);
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ptr->GetString("test", &value));
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("value", value);
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  child->SetString("test", "overwrite");
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base.reset();
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ptr->GetString("test", &value));
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("value", value);
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ValuesTest, DictionaryIterator) {
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DictionaryValue dict;
777c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) {
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ADD_FAILURE();
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringValue value1("value1");
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dict.Set("key1", value1.DeepCopy());
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool seen1 = false;
784c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) {
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_FALSE(seen1);
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ("key1", it.key());
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(value1.Equals(&it.value()));
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    seen1 = true;
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(seen1);
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringValue value2("value2");
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dict.Set("key2", value2.DeepCopy());
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool seen2 = seen1 = false;
795c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  for (DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) {
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (it.key() == "key1") {
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      EXPECT_FALSE(seen1);
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      EXPECT_TRUE(value1.Equals(&it.value()));
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      seen1 = true;
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else if (it.key() == "key2") {
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      EXPECT_FALSE(seen2);
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      EXPECT_TRUE(value2.Equals(&it.value()));
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      seen2 = true;
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ADD_FAILURE();
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(seen1);
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(seen2);
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
812a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// DictionaryValue/ListValue's Get*() methods should accept NULL as an out-value
813a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// and still return true/false based on success.
814a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST(ValuesTest, GetWithNullOutValue) {
815a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  DictionaryValue main_dict;
816a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ListValue main_list;
817a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
818a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  FundamentalValue bool_value(false);
819a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  FundamentalValue int_value(1234);
820a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  FundamentalValue double_value(12.34567);
821a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  StringValue string_value("foo");
822a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  BinaryValue binary_value;
823a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  DictionaryValue dict_value;
824a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ListValue list_value;
825a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
826a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_dict.Set("bool", bool_value.DeepCopy());
827a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_dict.Set("int", int_value.DeepCopy());
828a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_dict.Set("double", double_value.DeepCopy());
829a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_dict.Set("string", string_value.DeepCopy());
830a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_dict.Set("binary", binary_value.DeepCopy());
831a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_dict.Set("dict", dict_value.DeepCopy());
832a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_dict.Set("list", list_value.DeepCopy());
833a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
834a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_list.Append(bool_value.DeepCopy());
835a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_list.Append(int_value.DeepCopy());
836a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_list.Append(double_value.DeepCopy());
837a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_list.Append(string_value.DeepCopy());
838a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_list.Append(binary_value.DeepCopy());
839a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_list.Append(dict_value.DeepCopy());
840a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_list.Append(list_value.DeepCopy());
841a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
842a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.Get("bool", NULL));
843a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.Get("int", NULL));
844a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.Get("double", NULL));
845a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.Get("string", NULL));
846a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.Get("binary", NULL));
847a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.Get("dict", NULL));
848a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.Get("list", NULL));
849a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.Get("DNE", NULL));
850a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
851a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetBoolean("bool", NULL));
852a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBoolean("int", NULL));
853a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBoolean("double", NULL));
854a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBoolean("string", NULL));
855a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBoolean("binary", NULL));
856a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBoolean("dict", NULL));
857a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBoolean("list", NULL));
858a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBoolean("DNE", NULL));
859a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
860a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetInteger("bool", NULL));
861a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetInteger("int", NULL));
862a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetInteger("double", NULL));
863a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetInteger("string", NULL));
864a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetInteger("binary", NULL));
865a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetInteger("dict", NULL));
866a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetInteger("list", NULL));
867a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetInteger("DNE", NULL));
868a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
869a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Both int and double values can be obtained from GetDouble.
870a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDouble("bool", NULL));
871a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetDouble("int", NULL));
872a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetDouble("double", NULL));
873a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDouble("string", NULL));
874a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDouble("binary", NULL));
875a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDouble("dict", NULL));
876a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDouble("list", NULL));
877a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDouble("DNE", NULL));
878a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
879a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("bool", static_cast<std::string*>(NULL)));
880a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("int", static_cast<std::string*>(NULL)));
881a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("double", static_cast<std::string*>(NULL)));
882a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetString("string", static_cast<std::string*>(NULL)));
883a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("binary", static_cast<std::string*>(NULL)));
884a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("dict", static_cast<std::string*>(NULL)));
885a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("list", static_cast<std::string*>(NULL)));
886a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("DNE", static_cast<std::string*>(NULL)));
887a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
888a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("bool", static_cast<string16*>(NULL)));
889a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("int", static_cast<string16*>(NULL)));
890a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("double", static_cast<string16*>(NULL)));
891a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetString("string", static_cast<string16*>(NULL)));
892a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("binary", static_cast<string16*>(NULL)));
893a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("dict", static_cast<string16*>(NULL)));
894a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("list", static_cast<string16*>(NULL)));
895a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetString("DNE", static_cast<string16*>(NULL)));
896a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
897a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBinary("bool", NULL));
898a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBinary("int", NULL));
899a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBinary("double", NULL));
900a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBinary("string", NULL));
901a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetBinary("binary", NULL));
902a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBinary("dict", NULL));
903a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBinary("list", NULL));
904a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBinary("DNE", NULL));
905a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
906a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionary("bool", NULL));
907a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionary("int", NULL));
908a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionary("double", NULL));
909a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionary("string", NULL));
910a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionary("binary", NULL));
911a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetDictionary("dict", NULL));
912a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionary("list", NULL));
913a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionary("DNE", NULL));
914a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
915a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetList("bool", NULL));
916a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetList("int", NULL));
917a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetList("double", NULL));
918a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetList("string", NULL));
919a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetList("binary", NULL));
920a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetList("dict", NULL));
921a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetList("list", NULL));
922a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetList("DNE", NULL));
923a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
924a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetWithoutPathExpansion("bool", NULL));
925a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetWithoutPathExpansion("int", NULL));
926a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetWithoutPathExpansion("double", NULL));
927a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetWithoutPathExpansion("string", NULL));
928a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetWithoutPathExpansion("binary", NULL));
929a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetWithoutPathExpansion("dict", NULL));
930a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetWithoutPathExpansion("list", NULL));
931a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetWithoutPathExpansion("DNE", NULL));
932a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
933a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetBooleanWithoutPathExpansion("bool", NULL));
934a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBooleanWithoutPathExpansion("int", NULL));
935a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBooleanWithoutPathExpansion("double", NULL));
936a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBooleanWithoutPathExpansion("string", NULL));
937a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBooleanWithoutPathExpansion("binary", NULL));
938a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBooleanWithoutPathExpansion("dict", NULL));
939a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBooleanWithoutPathExpansion("list", NULL));
940a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetBooleanWithoutPathExpansion("DNE", NULL));
941a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
942a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetIntegerWithoutPathExpansion("bool", NULL));
943a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetIntegerWithoutPathExpansion("int", NULL));
944a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetIntegerWithoutPathExpansion("double", NULL));
945a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetIntegerWithoutPathExpansion("string", NULL));
946a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetIntegerWithoutPathExpansion("binary", NULL));
947a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetIntegerWithoutPathExpansion("dict", NULL));
948a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetIntegerWithoutPathExpansion("list", NULL));
949a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetIntegerWithoutPathExpansion("DNE", NULL));
950a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
951a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDoubleWithoutPathExpansion("bool", NULL));
952a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetDoubleWithoutPathExpansion("int", NULL));
953a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetDoubleWithoutPathExpansion("double", NULL));
954a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDoubleWithoutPathExpansion("string", NULL));
955a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDoubleWithoutPathExpansion("binary", NULL));
956a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDoubleWithoutPathExpansion("dict", NULL));
957a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDoubleWithoutPathExpansion("list", NULL));
958a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDoubleWithoutPathExpansion("DNE", NULL));
959a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
960a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
961a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "bool", static_cast<std::string*>(NULL)));
962a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
963a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "int", static_cast<std::string*>(NULL)));
964a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
965a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "double", static_cast<std::string*>(NULL)));
966a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetStringWithoutPathExpansion(
967a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "string", static_cast<std::string*>(NULL)));
968a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
969a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "binary", static_cast<std::string*>(NULL)));
970a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
971a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "dict", static_cast<std::string*>(NULL)));
972a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
973a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "list", static_cast<std::string*>(NULL)));
974a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
975a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "DNE", static_cast<std::string*>(NULL)));
976a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
977a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
978a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "bool", static_cast<string16*>(NULL)));
979a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
980a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "int", static_cast<string16*>(NULL)));
981a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
982a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "double", static_cast<string16*>(NULL)));
983a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetStringWithoutPathExpansion(
984a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "string", static_cast<string16*>(NULL)));
985a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
986a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "binary", static_cast<string16*>(NULL)));
987a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
988a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "dict", static_cast<string16*>(NULL)));
989a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
990a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "list", static_cast<string16*>(NULL)));
991a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetStringWithoutPathExpansion(
992a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      "DNE", static_cast<string16*>(NULL)));
993a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
994a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // There is no GetBinaryWithoutPathExpansion for some reason, but if there
995a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // were it should be tested here...
996a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
997a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionaryWithoutPathExpansion("bool", NULL));
998a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionaryWithoutPathExpansion("int", NULL));
999a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionaryWithoutPathExpansion("double", NULL));
1000a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionaryWithoutPathExpansion("string", NULL));
1001a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionaryWithoutPathExpansion("binary", NULL));
1002a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetDictionaryWithoutPathExpansion("dict", NULL));
1003a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionaryWithoutPathExpansion("list", NULL));
1004a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetDictionaryWithoutPathExpansion("DNE", NULL));
1005a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1006a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetListWithoutPathExpansion("bool", NULL));
1007a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetListWithoutPathExpansion("int", NULL));
1008a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetListWithoutPathExpansion("double", NULL));
1009a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetListWithoutPathExpansion("string", NULL));
1010a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetListWithoutPathExpansion("binary", NULL));
1011a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetListWithoutPathExpansion("dict", NULL));
1012a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_dict.GetListWithoutPathExpansion("list", NULL));
1013a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_dict.GetListWithoutPathExpansion("DNE", NULL));
1014a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1015a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.Get(0, NULL));
1016a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.Get(1, NULL));
1017a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.Get(2, NULL));
1018a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.Get(3, NULL));
1019a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.Get(4, NULL));
1020a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.Get(5, NULL));
1021a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.Get(6, NULL));
1022a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.Get(7, NULL));
1023a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1024a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.GetBoolean(0, NULL));
1025a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBoolean(1, NULL));
1026a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBoolean(2, NULL));
1027a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBoolean(3, NULL));
1028a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBoolean(4, NULL));
1029a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBoolean(5, NULL));
1030a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBoolean(6, NULL));
1031a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBoolean(7, NULL));
1032a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1033a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetInteger(0, NULL));
1034a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.GetInteger(1, NULL));
1035a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetInteger(2, NULL));
1036a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetInteger(3, NULL));
1037a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetInteger(4, NULL));
1038a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetInteger(5, NULL));
1039a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetInteger(6, NULL));
1040a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetInteger(7, NULL));
1041a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1042a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetDouble(0, NULL));
1043a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.GetDouble(1, NULL));
1044a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.GetDouble(2, NULL));
1045a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetDouble(3, NULL));
1046a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetDouble(4, NULL));
1047a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetDouble(5, NULL));
1048a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetDouble(6, NULL));
1049a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetDouble(7, NULL));
1050a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1051a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(0, static_cast<std::string*>(NULL)));
1052a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(1, static_cast<std::string*>(NULL)));
1053a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(2, static_cast<std::string*>(NULL)));
1054a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.GetString(3, static_cast<std::string*>(NULL)));
1055a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(4, static_cast<std::string*>(NULL)));
1056a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(5, static_cast<std::string*>(NULL)));
1057a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(6, static_cast<std::string*>(NULL)));
1058a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(7, static_cast<std::string*>(NULL)));
1059a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1060a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(0, static_cast<string16*>(NULL)));
1061a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(1, static_cast<string16*>(NULL)));
1062a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(2, static_cast<string16*>(NULL)));
1063a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.GetString(3, static_cast<string16*>(NULL)));
1064a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(4, static_cast<string16*>(NULL)));
1065a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(5, static_cast<string16*>(NULL)));
1066a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(6, static_cast<string16*>(NULL)));
1067a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetString(7, static_cast<string16*>(NULL)));
1068a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1069a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBinary(0, NULL));
1070a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBinary(1, NULL));
1071a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBinary(2, NULL));
1072a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBinary(3, NULL));
1073a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.GetBinary(4, NULL));
1074a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBinary(5, NULL));
1075a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBinary(6, NULL));
1076a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetBinary(7, NULL));
1077a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1078a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetDictionary(0, NULL));
1079a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetDictionary(1, NULL));
1080a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetDictionary(2, NULL));
1081a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetDictionary(3, NULL));
1082a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetDictionary(4, NULL));
1083a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.GetDictionary(5, NULL));
1084a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetDictionary(6, NULL));
1085a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetDictionary(7, NULL));
1086a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1087a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetList(0, NULL));
1088a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetList(1, NULL));
1089a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetList(2, NULL));
1090a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetList(3, NULL));
1091a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetList(4, NULL));
1092a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetList(5, NULL));
1093a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(main_list.GetList(6, NULL));
1094a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(main_list.GetList(7, NULL));
1095a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
1096a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace base
1098