1 // Copyright (C) 2013 Google Inc.
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
7 // http://www.apache.org/licenses/LICENSE-2.0
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.
15 #include "util/json.h"
17 #include <libaddressinput/util/scoped_ptr.h>
21 #include <gtest/gtest.h>
24 namespace addressinput {
28 // Tests for Json object.
29 class JsonTest : public testing::Test {
31 JsonTest() : json_(Json::Build()) {}
32 virtual ~JsonTest() {}
35 scoped_ptr<Json> json_;
38 TEST_F(JsonTest, EmptyStringIsNotValid) {
39 EXPECT_FALSE(json_->ParseObject(std::string()));
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));
48 TEST_F(JsonTest, InvalidJsonIsNotValid) {
49 EXPECT_FALSE(json_->ParseObject("{"));
52 TEST_F(JsonTest, OneKeyIsValid) {
53 ASSERT_TRUE(json_->ParseObject("{\"key\": \"value\"}"));
55 ASSERT_TRUE(json_->GetStringValueForKey("key", &value));
56 EXPECT_EQ("value", value);
59 TEST_F(JsonTest, EmptyStringKeyIsNotInObject) {
60 ASSERT_TRUE(json_->ParseObject("{\"key\": \"value\"}"));
61 EXPECT_FALSE(json_->GetStringValueForKey(std::string(), NULL));
64 TEST_F(JsonTest, EmptyKeyIsValid) {
65 ASSERT_TRUE(json_->ParseObject("{\"\": \"value\"}"));
67 EXPECT_TRUE(json_->GetStringValueForKey(std::string(), &value));
68 EXPECT_EQ("value", value);
71 TEST_F(JsonTest, EmptyValueIsValid) {
72 ASSERT_TRUE(json_->ParseObject("{\"key\": \"\"}"));
74 EXPECT_TRUE(json_->GetStringValueForKey("key", &value));
75 EXPECT_EQ(std::string(), value);
78 TEST_F(JsonTest, Utf8EncodingIsValid) {
79 ASSERT_TRUE(json_->ParseObject("{\"key\": \"Ü\"}"));
81 EXPECT_TRUE(json_->GetStringValueForKey("key", &value));
82 EXPECT_EQ("Ü", value);
85 TEST_F(JsonTest, InvalidUtf8IsNotValid) {
86 EXPECT_FALSE(json_->ParseObject("{\"key\": \"\xC3\x28\"}"));
89 TEST_F(JsonTest, NullInMiddleIsNotValid) {
90 static const char kJson[] = "{\"key\": \"val\0ue\"}";
91 EXPECT_FALSE(json_->ParseObject(std::string(kJson, sizeof kJson - 1)));
94 TEST_F(JsonTest, TwoKeysAreValid) {
96 json_->ParseObject("{\"key1\": \"value1\", \"key2\": \"value2\"}"));
98 EXPECT_TRUE(json_->GetStringValueForKey("key1", &value));
99 EXPECT_EQ("value1", value);
101 EXPECT_TRUE(json_->GetStringValueForKey("key2", &value));
102 EXPECT_EQ("value2", value);
105 TEST_F(JsonTest, ListIsNotValid) {
106 EXPECT_FALSE(json_->ParseObject("[]"));
109 TEST_F(JsonTest, StringIsNotValid) {
110 EXPECT_FALSE(json_->ParseObject("\"value\""));
113 TEST_F(JsonTest, NumberIsNotValid) {
114 EXPECT_FALSE(json_->ParseObject("3"));
117 TEST_F(JsonTest, GetJsonValue) {
118 ASSERT_TRUE(json_->ParseObject("{\"dict\": {\"key\": \"value\"}}"));
120 scoped_ptr<Json> dict;
121 ASSERT_TRUE(json_->GetJsonValueForKey("dict", &dict));
122 ASSERT_TRUE(dict != NULL);
124 std::string string_value;
125 EXPECT_TRUE(dict->GetStringValueForKey("key", &string_value));
126 EXPECT_EQ("value", string_value);
129 TEST_F(JsonTest, GetMissingJsonValue) {
130 ASSERT_TRUE(json_->ParseObject("{\"dict\": {\"key\": \"value\"}}"));
132 scoped_ptr<Json> dict;
133 EXPECT_FALSE(json_->GetJsonValueForKey("not-dict", &dict));
134 EXPECT_TRUE(dict == NULL);
137 TEST_F(JsonTest, GetNullJsonValue) {
138 ASSERT_TRUE(json_->ParseObject("{\"dict\": {\"key\": \"value\"}}"));
139 EXPECT_TRUE(json_->GetJsonValueForKey("dict", NULL));
145 } // namespace addressinput