OLD | NEW |
| (Empty) |
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 | |
OLD | NEW |