Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / third_party / libaddressinput / chromium / cpp / test / util / json_test.cc
1 // Copyright (C) 2013 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "util/json.h"
16
17 #include <libaddressinput/util/scoped_ptr.h>
18
19 #include <string>
20
21 #include <gtest/gtest.h>
22
23 namespace i18n {
24 namespace addressinput {
25
26 namespace {
27
28 // Tests for Json object.
29 class JsonTest : public testing::Test {
30  public:
31   JsonTest() : json_(Json::Build()) {}
32   virtual ~JsonTest() {}
33
34  protected:
35   scoped_ptr<Json> json_;
36 };
37
38 TEST_F(JsonTest, EmptyStringIsNotValid) {
39   EXPECT_FALSE(json_->ParseObject(std::string()));
40 }
41
42 TEST_F(JsonTest, EmptyDictionaryContainsNoKeys) {
43   ASSERT_TRUE(json_->ParseObject("{}"));
44   EXPECT_FALSE(json_->GetStringValueForKey("key", NULL));
45   EXPECT_FALSE(json_->GetStringValueForKey(std::string(), NULL));
46 }
47
48 TEST_F(JsonTest, InvalidJsonIsNotValid) {
49   EXPECT_FALSE(json_->ParseObject("{"));
50 }
51
52 TEST_F(JsonTest, OneKeyIsValid) {
53   ASSERT_TRUE(json_->ParseObject("{\"key\": \"value\"}"));
54   std::string value;
55   ASSERT_TRUE(json_->GetStringValueForKey("key", &value));
56   EXPECT_EQ("value", value);
57 }
58
59 TEST_F(JsonTest, EmptyStringKeyIsNotInObject) {
60   ASSERT_TRUE(json_->ParseObject("{\"key\": \"value\"}"));
61   EXPECT_FALSE(json_->GetStringValueForKey(std::string(), NULL));
62 }
63
64 TEST_F(JsonTest, EmptyKeyIsValid) {
65   ASSERT_TRUE(json_->ParseObject("{\"\": \"value\"}"));
66   std::string value;
67   EXPECT_TRUE(json_->GetStringValueForKey(std::string(), &value));
68   EXPECT_EQ("value", value);
69 }
70
71 TEST_F(JsonTest, EmptyValueIsValid) {
72   ASSERT_TRUE(json_->ParseObject("{\"key\": \"\"}"));
73   std::string value;
74   EXPECT_TRUE(json_->GetStringValueForKey("key", &value));
75   EXPECT_EQ(std::string(), value);
76 }
77
78 TEST_F(JsonTest, Utf8EncodingIsValid) {
79   ASSERT_TRUE(json_->ParseObject("{\"key\": \"Ü\"}"));
80   std::string value;
81   EXPECT_TRUE(json_->GetStringValueForKey("key", &value));
82   EXPECT_EQ("Ü", value);
83 }
84
85 TEST_F(JsonTest, InvalidUtf8IsNotValid) {
86   EXPECT_FALSE(json_->ParseObject("{\"key\": \"\xC3\x28\"}"));
87 }
88
89 TEST_F(JsonTest, NullInMiddleIsNotValid) {
90   static const char kJson[] = "{\"key\": \"val\0ue\"}";
91   EXPECT_FALSE(json_->ParseObject(std::string(kJson, sizeof kJson - 1)));
92 }
93
94 TEST_F(JsonTest, TwoKeysAreValid) {
95   ASSERT_TRUE(
96       json_->ParseObject("{\"key1\": \"value1\", \"key2\": \"value2\"}"));
97   std::string value;
98   EXPECT_TRUE(json_->GetStringValueForKey("key1", &value));
99   EXPECT_EQ("value1", value);
100
101   EXPECT_TRUE(json_->GetStringValueForKey("key2", &value));
102   EXPECT_EQ("value2", value);
103 }
104
105 TEST_F(JsonTest, ListIsNotValid) {
106   EXPECT_FALSE(json_->ParseObject("[]"));
107 }
108
109 TEST_F(JsonTest, StringIsNotValid) {
110   EXPECT_FALSE(json_->ParseObject("\"value\""));
111 }
112
113 TEST_F(JsonTest, NumberIsNotValid) {
114   EXPECT_FALSE(json_->ParseObject("3"));
115 }
116
117 TEST_F(JsonTest, GetJsonValue) {
118   ASSERT_TRUE(json_->ParseObject("{\"dict\": {\"key\": \"value\"}}"));
119
120   scoped_ptr<Json> dict;
121   ASSERT_TRUE(json_->GetJsonValueForKey("dict", &dict));
122   ASSERT_TRUE(dict != NULL);
123
124   std::string string_value;
125   EXPECT_TRUE(dict->GetStringValueForKey("key", &string_value));
126   EXPECT_EQ("value", string_value);
127 }
128
129 TEST_F(JsonTest, GetMissingJsonValue) {
130   ASSERT_TRUE(json_->ParseObject("{\"dict\": {\"key\": \"value\"}}"));
131
132   scoped_ptr<Json> dict;
133   EXPECT_FALSE(json_->GetJsonValueForKey("not-dict", &dict));
134   EXPECT_TRUE(dict == NULL);
135 }
136
137 TEST_F(JsonTest, GetNullJsonValue) {
138   ASSERT_TRUE(json_->ParseObject("{\"dict\": {\"key\": \"value\"}}"));
139   EXPECT_TRUE(json_->GetJsonValueForKey("dict", NULL));
140 }
141
142
143 }  // namespace
144
145 }  // namespace addressinput
146 }  // namespace i18n