]>
git.proxmox.com Git - ceph.git/blob - ceph/src/test/formatter.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 * Ceph - scalable distributed file system
6 * Copyright (C) 2011 New Dream Network
8 * This is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License version 2.1, as published by the Free Software
11 * Foundation. See file COPYING.
15 #include "gtest/gtest.h"
16 #include "common/Formatter.h"
17 #include "common/HTMLFormatter.h"
23 using std::ostringstream
;
25 TEST(JsonFormatter
, Simple1
) {
27 JSONFormatter
fmt(false);
28 fmt
.open_object_section("foo");
34 ASSERT_EQ(oss
.str(), "{\"a\":1,\"b\":2,\"c\":3}");
37 TEST(JsonFormatter
, Simple2
) {
39 JSONFormatter
fmt(false);
40 fmt
.open_object_section("foo");
41 fmt
.open_object_section("bar");
42 fmt
.dump_int("int", 0xf00000000000ll
);
43 fmt
.dump_unsigned("unsigned", 0x8000000000000001llu
);
44 fmt
.dump_float("float", 1.234);
46 fmt
.dump_string("string", "str");
49 ASSERT_EQ(oss
.str(), "{\"bar\":{\"int\":263882790666240,\
50 \"unsigned\":9223372036854775809,\"float\":1.234},\
51 \"string\":\"str\"}");
54 TEST(JsonFormatter
, CunningFloats
) {
56 JSONFormatter
fmt(false);
57 fmt
.open_object_section("foo");
58 fmt
.dump_float("long", 1.0 / 7);
59 fmt
.dump_float("big", 12345678901234567890.0);
62 ASSERT_EQ(oss
.str(), "{\"long\":0.14285714285714285,\"big\":1.2345678901234567e+19}");
65 TEST(JsonFormatter
, Empty
) {
67 JSONFormatter
fmt(false);
69 ASSERT_EQ(oss
.str(), "");
72 TEST(XmlFormatter
, Simple1
) {
74 XMLFormatter
fmt(false);
75 fmt
.open_object_section("foo");
81 ASSERT_EQ(oss
.str(), "<foo><a>1</a><b>2</b><c>3</c></foo>");
84 TEST(XmlFormatter
, Simple2
) {
86 XMLFormatter
fmt(false);
87 fmt
.open_object_section("foo");
88 fmt
.open_object_section("bar");
89 fmt
.dump_int("int", 0xf00000000000ll
);
90 fmt
.dump_unsigned("unsigned", 0x8000000000000001llu
);
91 fmt
.dump_float("float", 1.234);
93 fmt
.dump_string("string", "str");
96 ASSERT_EQ(oss
.str(), "<foo><bar>\
97 <int>263882790666240</int>\
98 <unsigned>9223372036854775809</unsigned>\
100 </bar><string>str</string>\
104 TEST(XmlFormatter
, Empty
) {
106 XMLFormatter
fmt(false);
108 ASSERT_EQ(oss
.str(), "");
111 TEST(XmlFormatter
, DumpStream1
) {
113 XMLFormatter
fmt(false);
114 fmt
.dump_stream("blah") << "hithere";
116 ASSERT_EQ(oss
.str(), "<blah>hithere</blah>");
119 TEST(XmlFormatter
, DumpStream2
) {
121 XMLFormatter
fmt(false);
123 fmt
.open_array_section("foo");
124 fmt
.dump_stream("blah") << "hithere";
127 ASSERT_EQ(oss
.str(), "<foo><blah>hithere</blah></foo>");
130 TEST(XmlFormatter
, DumpStream3
) {
132 XMLFormatter
fmt(false);
134 fmt
.open_array_section("foo");
135 fmt
.dump_stream("blah") << "hithere";
136 fmt
.dump_float("pi", 0.128);
139 ASSERT_EQ(oss
.str(), "<foo><blah>hithere</blah><pi>0.128</pi></foo>");
142 TEST(XmlFormatter
, DTD
) {
144 XMLFormatter
fmt(false);
147 fmt
.open_array_section("foo");
148 fmt
.dump_stream("blah") << "hithere";
149 fmt
.dump_float("pi", 0.128);
152 ASSERT_EQ(oss
.str(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
153 "<foo><blah>hithere</blah><pi>0.128</pi></foo>");
156 TEST(XmlFormatter
, Clear
) {
158 XMLFormatter
fmt(false);
161 fmt
.open_array_section("foo");
162 fmt
.dump_stream("blah") << "hithere";
163 fmt
.dump_float("pi", 0.128);
166 ASSERT_EQ(oss
.str(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
167 "<foo><blah>hithere</blah><pi>0.128</pi></foo>");
171 ASSERT_EQ(oss2
.str(), "");
176 ASSERT_EQ(oss3
.str(), "");
179 TEST(XmlFormatter
, NamespaceTest
) {
181 XMLFormatter
fmt(false);
184 fmt
.open_array_section_in_ns("foo",
185 "http://s3.amazonaws.com/doc/2006-03-01/");
186 fmt
.dump_stream("blah") << "hithere";
187 fmt
.dump_float("pi", 0.128);
190 ASSERT_EQ(oss
.str(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
191 "<foo xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">"
192 "<blah>hithere</blah><pi>0.128</pi></foo>");
195 TEST(XmlFormatter
, DumpFormatNameSpaceTest
) {
197 XMLFormatter
fmt(false);
199 fmt
.dump_format_ns("foo",
200 "http://s3.amazonaws.com/doc/2006-03-01/",
203 ASSERT_EQ(oss1
.str(),
204 "<foo xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">bar</foo>");
206 // Testing with a null ns..should be same as dump format
209 fmt
.dump_format_ns("foo",NULL
,"%s","bar");
211 ASSERT_EQ(oss2
.str(),"<foo>bar</foo>");
214 TEST(HtmlFormatter
, Simple1
) {
216 HTMLFormatter
fmt(false);
217 fmt
.open_object_section("foo");
218 fmt
.dump_int("a", 1);
219 fmt
.dump_int("b", 2);
220 fmt
.dump_int("c", 3);
223 ASSERT_EQ(oss
.str(), "<foo><li>a: 1</li><li>b: 2</li><li>c: 3</li></foo>");
226 TEST(HtmlFormatter
, Simple2
) {
228 HTMLFormatter
fmt(false);
229 fmt
.open_object_section("foo");
230 fmt
.open_object_section("bar");
231 fmt
.dump_int("int", 0xf00000000000ll
);
232 fmt
.dump_unsigned("unsigned", 0x8000000000000001llu
);
233 fmt
.dump_float("float", 1.234);
235 fmt
.dump_string("string", "str");
238 ASSERT_EQ(oss
.str(), "<foo><bar>\
239 <li>int: 263882790666240</li>\
240 <li>unsigned: 9223372036854775809</li>\
241 <li>float: 1.234</li>\
242 </bar><li>string: str</li>\
246 TEST(HtmlFormatter
, Empty
) {
248 HTMLFormatter
fmt(false);
250 ASSERT_EQ(oss
.str(), "");
253 TEST(HtmlFormatter
, DumpStream1
) {
255 HTMLFormatter
fmt(false);
256 fmt
.dump_stream("blah") << "hithere";
258 ASSERT_EQ(oss
.str(), "<li>blah: hithere</li>");
261 TEST(HtmlFormatter
, DumpStream2
) {
263 HTMLFormatter
fmt(false);
265 fmt
.open_array_section("foo");
266 fmt
.dump_stream("blah") << "hithere";
269 ASSERT_EQ(oss
.str(), "<foo><li>blah: hithere</li></foo>");
272 TEST(HtmlFormatter
, DumpStream3
) {
274 HTMLFormatter
fmt(false);
276 fmt
.open_array_section("foo");
277 fmt
.dump_stream("blah") << "hithere";
278 fmt
.dump_float("pi", 0.128);
281 ASSERT_EQ(oss
.str(), "<foo><li>blah: hithere</li><li>pi: 0.128</li></foo>");
284 TEST(HtmlFormatter
, DTD
) {
286 HTMLFormatter
fmt(false);
288 fmt
.write_raw_data(HTMLFormatter::XML_1_DTD
);
289 fmt
.open_array_section("foo");
290 fmt
.dump_stream("blah") << "hithere";
291 fmt
.dump_float("pi", 0.128);
294 ASSERT_EQ(oss
.str(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
295 "<foo><li>blah: hithere</li><li>pi: 0.128</li></foo>");
298 TEST(HtmlFormatter
, Clear
) {
300 HTMLFormatter
fmt(false);
302 fmt
.write_raw_data(HTMLFormatter::XML_1_DTD
);
303 fmt
.open_array_section("foo");
304 fmt
.dump_stream("blah") << "hithere";
305 fmt
.dump_float("pi", 0.128);
308 ASSERT_EQ(oss
.str(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
309 "<foo><li>blah: hithere</li><li>pi: 0.128</li></foo>");
313 ASSERT_EQ(oss2
.str(), "");
318 ASSERT_EQ(oss3
.str(), "");
321 TEST(HtmlFormatter
, NamespaceTest
) {
323 HTMLFormatter
fmt(false);
325 fmt
.write_raw_data(HTMLFormatter::XML_1_DTD
);
326 fmt
.open_array_section_in_ns("foo",
327 "http://s3.amazonaws.com/doc/2006-03-01/");
328 fmt
.dump_stream("blah") << "hithere";
329 fmt
.dump_float("pi", 0.128);
332 ASSERT_EQ(oss
.str(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
333 "<foo xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">"
334 "<li>blah: hithere</li><li>pi: 0.128</li></foo>");
337 TEST(HtmlFormatter
, DumpFormatNameSpaceTest
) {
339 HTMLFormatter
fmt(false);
341 fmt
.dump_format_ns("foo",
342 "http://s3.amazonaws.com/doc/2006-03-01/",
345 ASSERT_EQ(oss1
.str(),
346 "<li xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">foo: bar</li>");
348 // Testing with a null ns..should be same as dump format
351 fmt
.dump_format_ns("foo",NULL
,"%s","bar");
353 ASSERT_EQ(oss2
.str(),"<li>foo: bar</li>");