Upstream version 6.35.121.0
[platform/framework/web/crosswalk.git] / src / extensions / browser / value_store / value_store_change_unittest.cc
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/json/json_reader.h"
6 #include "base/json/json_writer.h"
7 #include "base/logging.h"
8 #include "base/values.h"
9 #include "extensions/browser/value_store/value_store_change.h"
10 #include "extensions/common/value_builder.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 using base::DictionaryValue;
14 using base::Value;
15 using extensions::DictionaryBuilder;
16 using extensions::ListBuilder;
17
18 namespace {
19
20 TEST(ValueStoreChangeTest, NullOldValue) {
21   ValueStoreChange change("key", NULL, base::Value::CreateStringValue("value"));
22
23   EXPECT_EQ("key", change.key());
24   EXPECT_EQ(NULL, change.old_value());
25   {
26     scoped_ptr<base::Value> expected(base::Value::CreateStringValue("value"));
27     EXPECT_TRUE(change.new_value()->Equals(expected.get()));
28   }
29 }
30
31 TEST(ValueStoreChangeTest, NullNewValue) {
32   ValueStoreChange change("key", base::Value::CreateStringValue("value"), NULL);
33
34   EXPECT_EQ("key", change.key());
35   {
36     scoped_ptr<base::Value> expected(base::Value::CreateStringValue("value"));
37     EXPECT_TRUE(change.old_value()->Equals(expected.get()));
38   }
39   EXPECT_EQ(NULL, change.new_value());
40 }
41
42 TEST(ValueStoreChangeTest, NonNullValues) {
43   ValueStoreChange change("key",
44                           base::Value::CreateStringValue("old_value"),
45                           base::Value::CreateStringValue("new_value"));
46
47   EXPECT_EQ("key", change.key());
48   {
49     scoped_ptr<base::Value> expected(
50         base::Value::CreateStringValue("old_value"));
51     EXPECT_TRUE(change.old_value()->Equals(expected.get()));
52   }
53   {
54     scoped_ptr<base::Value> expected(
55         base::Value::CreateStringValue("new_value"));
56     EXPECT_TRUE(change.new_value()->Equals(expected.get()));
57   }
58 }
59
60 TEST(ValueStoreChangeTest, ToJson) {
61   // Create a mildly complicated structure that has dots in it.
62   scoped_ptr<base::DictionaryValue> value = DictionaryBuilder()
63       .Set("key", "value")
64       .Set("key.with.dots", "value.with.dots")
65       .Set("tricked", DictionaryBuilder()
66           .Set("you", "nodots"))
67       .Set("tricked.you", "with.dots")
68       .Build();
69
70   ValueStoreChangeList change_list;
71   change_list.push_back(
72       ValueStoreChange("key", value->DeepCopy(), value->DeepCopy()));
73   change_list.push_back(
74       ValueStoreChange("key.with.dots", value->DeepCopy(), value->DeepCopy()));
75
76   std::string json = ValueStoreChange::ToJson(change_list);
77   scoped_ptr<base::Value> from_json(base::JSONReader::Read(json));
78   ASSERT_TRUE(from_json.get());
79
80   DictionaryBuilder v1(*value);
81   DictionaryBuilder v2(*value);
82   DictionaryBuilder v3(*value);
83   DictionaryBuilder v4(*value);
84   scoped_ptr<base::DictionaryValue> expected_from_json = DictionaryBuilder()
85       .Set("key", DictionaryBuilder()
86           .Set("oldValue", v1)
87           .Set("newValue", v2))
88       .Set("key.with.dots", DictionaryBuilder()
89           .Set("oldValue", v3)
90           .Set("newValue", v4))
91       .Build();
92
93   EXPECT_TRUE(from_json->Equals(expected_from_json.get()));
94 }
95
96 }  // namespace