42 using io::CodedOutputStream;
43 using io::StringOutputStream;
68 ow_->StartObject(
"")->EndObject();
69 EXPECT_EQ(
"{}", CloseStreamAndGetString());
75 ->RenderString(
"test",
"value")
76 ->StartObject(
"empty")
79 EXPECT_EQ(
"{\"test\":\"value\",\"empty\":{}}", CloseStreamAndGetString());
84 ow_->StartList(
"")->EndList();
85 EXPECT_EQ(
"[]", CloseStreamAndGetString());
91 ->RenderString(
"test",
"value")
95 EXPECT_EQ(
"{\"test\":\"value\",\"empty\":[]}", CloseStreamAndGetString());
100 ow_->StartObject(
"")->RenderString(
"",
"value")->EndObject();
101 EXPECT_EQ(
"{\"\":\"value\"}", CloseStreamAndGetString());
107 ->StartObject(
"nested")
108 ->RenderString(
"field",
"value")
111 EXPECT_EQ(
"{\"nested\":{\"field\":\"value\"}}", CloseStreamAndGetString());
117 ->StartList(
"nested")
118 ->RenderString(
"",
"value")
121 EXPECT_EQ(
"{\"nested\":[\"value\"]}", CloseStreamAndGetString());
128 ->RenderString(
"field",
"value")
131 EXPECT_EQ(
"[{\"field\":\"value\"}]", CloseStreamAndGetString());
138 ->RenderString(
"",
"value")
141 EXPECT_EQ(
"[[\"value\"]]", CloseStreamAndGetString());
144 TEST_F(JsonObjectWriterTest, RenderPrimitives) {
145 ow_ =
new JsonObjectWriter(
"", out_stream_);
147 ->RenderBool(
"bool",
true)
148 ->RenderDouble(
"double", std::numeric_limits<double>::max())
149 ->RenderFloat(
"float", std::numeric_limits<float>::max())
150 ->RenderInt32(
"int", std::numeric_limits<int32>::min())
151 ->RenderInt64(
"long", std::numeric_limits<int64>::min())
152 ->RenderBytes(
"bytes",
"abracadabra")
153 ->RenderString(
"string",
"string")
154 ->RenderBytes(
"emptybytes",
"")
155 ->RenderString(
"emptystring",
string())
160 ValueAsString<double>(std::numeric_limits<double>::max()) +
163 ValueAsString<float>(std::numeric_limits<float>::max()) +
165 "\"int\":-2147483648,"
166 "\"long\":\"-9223372036854775808\","
167 "\"bytes\":\"YWJyYWNhZGFicmE=\","
168 "\"string\":\"string\","
169 "\"emptybytes\":\"\","
170 "\"emptystring\":\"\"}",
171 CloseStreamAndGetString());
174 TEST_F(JsonObjectWriterTest, BytesEncodesAsNonWebSafeBase64) {
178 ow_ =
new JsonObjectWriter(
"", out_stream_);
179 ow_->StartObject(
"")->RenderBytes(
"bytes", s)->EndObject();
181 EXPECT_EQ(
"{\"bytes\":\"/+8=\"}", CloseStreamAndGetString());
184 TEST_F(JsonObjectWriterTest, PrettyPrintList) {
185 ow_ =
new JsonObjectWriter(
" ", out_stream_);
188 ->RenderString(
"",
"item1")
189 ->RenderString(
"",
"item2")
190 ->RenderString(
"",
"item3")
204 CloseStreamAndGetString());
207 TEST_F(JsonObjectWriterTest, PrettyPrintObject) {
208 ow_ =
new JsonObjectWriter(
" ", out_stream_);
210 ->StartObject(
"items")
211 ->RenderString(
"key1",
"item1")
212 ->RenderString(
"key2",
"item2")
213 ->RenderString(
"key3",
"item3")
215 ->StartObject(
"empty")
221 " \"key1\": \"item1\",\n"
222 " \"key2\": \"item2\",\n"
223 " \"key3\": \"item3\"\n"
227 CloseStreamAndGetString());
230 TEST_F(JsonObjectWriterTest, PrettyPrintEmptyObjectInEmptyList) {
231 ow_ =
new JsonObjectWriter(
" ", out_stream_);
244 CloseStreamAndGetString());
247 TEST_F(JsonObjectWriterTest, PrettyPrintDoubleIndent) {
248 ow_ =
new JsonObjectWriter(
" ", out_stream_);
250 ->RenderBool(
"bool",
true)
251 ->RenderInt32(
"int", 42)
258 CloseStreamAndGetString());
261 TEST_F(JsonObjectWriterTest, StringsEscapedAndEnclosedInDoubleQuotes) {
262 ow_ =
new JsonObjectWriter(
"", out_stream_);
263 ow_->StartObject(
"")->RenderString(
"string",
"'<>&\\\"\r\n")->EndObject();
264 EXPECT_EQ(
"{\"string\":\"'\\u003c\\u003e&\\\\\\\"\\r\\n\"}",
265 CloseStreamAndGetString());
268 TEST_F(JsonObjectWriterTest, Stringification) {
269 ow_ =
new JsonObjectWriter(
"", out_stream_);
271 ->RenderDouble(
"double_nan", std::numeric_limits<double>::quiet_NaN())
272 ->RenderFloat(
"float_nan", std::numeric_limits<float>::quiet_NaN())
273 ->RenderDouble(
"double_pos", std::numeric_limits<double>::infinity())
274 ->RenderFloat(
"float_pos", std::numeric_limits<float>::infinity())
275 ->RenderDouble(
"double_neg", -std::numeric_limits<double>::infinity())
276 ->RenderFloat(
"float_neg", -std::numeric_limits<float>::infinity())
279 "{\"double_nan\":\"NaN\","
280 "\"float_nan\":\"NaN\","
281 "\"double_pos\":\"Infinity\","
282 "\"float_pos\":\"Infinity\","
283 "\"double_neg\":\"-Infinity\","
284 "\"float_neg\":\"-Infinity\"}",
285 CloseStreamAndGetString());
288 TEST_F(JsonObjectWriterTest, TestRegularByteEncoding) {
289 ow_ =
new JsonObjectWriter(
"", out_stream_);
291 ->RenderBytes(
"bytes",
"\x03\xef\xc0")
296 EXPECT_EQ(
"{\"bytes\":\"A+/A\"}", CloseStreamAndGetString());
299 TEST_F(JsonObjectWriterTest, TestWebsafeByteEncoding) {
300 ow_ =
new JsonObjectWriter(
"", out_stream_);
301 ow_->set_use_websafe_base64_for_bytes(
true);
303 ->RenderBytes(
"bytes",
"\x03\xef\xc0\x10")
307 EXPECT_EQ(
"{\"bytes\":\"A-_AEA==\"}", CloseStreamAndGetString());