mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-05-29 23:42:40 +02:00
commit
83ee2c82df
@ -583,7 +583,40 @@ inline std::ostream& operator<< (std::ostream& s, const msgpack::object& o)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case msgpack::type::STR:
|
case msgpack::type::STR:
|
||||||
(s << '"').write(o.via.str.ptr, o.via.str.size) << '"';
|
s << '"';
|
||||||
|
for (uint32_t i = 0; i < o.via.str.size; ++i) {
|
||||||
|
char c = o.via.str.ptr[i];
|
||||||
|
switch (c) {
|
||||||
|
case '\\':
|
||||||
|
s << "\\\\";
|
||||||
|
break;
|
||||||
|
case '"':
|
||||||
|
s << "\\\"";
|
||||||
|
break;
|
||||||
|
case '/':
|
||||||
|
s << "\\/";
|
||||||
|
break;
|
||||||
|
case '\b':
|
||||||
|
s << "\\b";
|
||||||
|
break;
|
||||||
|
case '\f':
|
||||||
|
s << "\\f";
|
||||||
|
break;
|
||||||
|
case '\n':
|
||||||
|
s << "\\n";
|
||||||
|
break;
|
||||||
|
case '\r':
|
||||||
|
s << "\\r";
|
||||||
|
break;
|
||||||
|
case '\t':
|
||||||
|
s << "\\t";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
s << c;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s << '"';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case msgpack::type::BIN:
|
case msgpack::type::BIN:
|
||||||
@ -612,11 +645,11 @@ inline std::ostream& operator<< (std::ostream& s, const msgpack::object& o)
|
|||||||
s << "{";
|
s << "{";
|
||||||
if(o.via.map.size != 0) {
|
if(o.via.map.size != 0) {
|
||||||
msgpack::object_kv* p(o.via.map.ptr);
|
msgpack::object_kv* p(o.via.map.ptr);
|
||||||
s << p->key << "=>" << p->val;
|
s << p->key << ':' << p->val;
|
||||||
++p;
|
++p;
|
||||||
for(msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
for(msgpack::object_kv* const pend(o.via.map.ptr + o.via.map.size);
|
||||||
p < pend; ++p) {
|
p < pend; ++p) {
|
||||||
s << ", " << p->key << "=>" << p->val;
|
s << ", " << p->key << ':' << p->val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s << "}";
|
s << "}";
|
||||||
|
@ -29,6 +29,7 @@ LIST (APPEND check_PROGRAMS
|
|||||||
msgpack_c.cpp
|
msgpack_c.cpp
|
||||||
reference.cpp
|
reference.cpp
|
||||||
limit.cpp
|
limit.cpp
|
||||||
|
json.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
IF (MSGPACK_BOOST)
|
IF (MSGPACK_BOOST)
|
||||||
|
@ -26,6 +26,7 @@ check_PROGRAMS = \
|
|||||||
reference_cpp11 \
|
reference_cpp11 \
|
||||||
reference \
|
reference \
|
||||||
limit \
|
limit \
|
||||||
|
json \
|
||||||
iterator_cpp11 \
|
iterator_cpp11 \
|
||||||
boost_optional
|
boost_optional
|
||||||
|
|
||||||
@ -78,6 +79,8 @@ reference_cpp11_SOURCES = reference_cpp11.cpp
|
|||||||
|
|
||||||
limit_SOURCES = limit.cpp
|
limit_SOURCES = limit.cpp
|
||||||
|
|
||||||
|
json_SOURCES = json.cpp
|
||||||
|
|
||||||
iterator_cpp11_SOURCES = iterator_cpp11.cpp
|
iterator_cpp11_SOURCES = iterator_cpp11.cpp
|
||||||
|
|
||||||
boost_optional_SOURCES = boost_optional.cpp
|
boost_optional_SOURCES = boost_optional.cpp
|
||||||
|
32
test/json.cpp
Normal file
32
test/json.cpp
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#include <msgpack.hpp>
|
||||||
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
TEST(json, basic_elements)
|
||||||
|
{
|
||||||
|
typedef std::map<std::string, int> map_s_i;
|
||||||
|
map_s_i msi;
|
||||||
|
msi.insert(map_s_i::value_type("Hello", 789));
|
||||||
|
msi.insert(map_s_i::value_type("World", -789));
|
||||||
|
|
||||||
|
msgpack::type::tuple<int, int, double, double, bool, bool, std::string, map_s_i>
|
||||||
|
t1(12, -34, 1.23, -4.56, true, false, "ABC", msi);
|
||||||
|
|
||||||
|
msgpack::zone z;
|
||||||
|
msgpack::object o(t1, z);
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << o;
|
||||||
|
EXPECT_EQ(ss.str(), "[12, -34, 1.23, -4.56, true, false, \"ABC\", {\"Hello\":789, \"World\":-789}]");
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(json, escape)
|
||||||
|
{
|
||||||
|
std::string s = "\"\\/\b\f\n\r\tabc";
|
||||||
|
|
||||||
|
msgpack::zone z;
|
||||||
|
msgpack::object o(s, z);
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << o;
|
||||||
|
EXPECT_EQ(ss.str(), "\"\\\"\\\\\\/\\b\\f\\n\\r\\tabc\"");
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user