summaryrefslogtreecommitdiff
path: root/cpp/test/object.cc
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@users.sourceforge.jp>2010-04-25 18:08:14 +0900
committerfrsyuki <frsyuki@users.sourceforge.jp>2010-04-25 18:08:14 +0900
commit9fbca83ac0ba0017d22cd84b696cff3baa1cde23 (patch)
tree154feafc1ade3636b1394348ff9df82f1281f280 /cpp/test/object.cc
parentd19bfaa2cb16eaabee79922f7d8b59ef9bccb592 (diff)
downloadmsgpack-python-9fbca83ac0ba0017d22cd84b696cff3baa1cde23.tar.gz
cpp: add test/{zone,pack_unpack,streaming,object,convert,buffer}.cc
Diffstat (limited to 'cpp/test/object.cc')
-rw-r--r--cpp/test/object.cc134
1 files changed, 134 insertions, 0 deletions
diff --git a/cpp/test/object.cc b/cpp/test/object.cc
new file mode 100644
index 0000000..5390c4a
--- /dev/null
+++ b/cpp/test/object.cc
@@ -0,0 +1,134 @@
+#include <msgpack.hpp>
+#include <gtest/gtest.h>
+
+struct myclass {
+ myclass() : num(0), str("default") { }
+
+ myclass(int num, const std::string& str) :
+ num(0), str("default") { }
+
+ ~myclass() { }
+
+ int num;
+ std::string str;
+
+ MSGPACK_DEFINE(num, str);
+
+ bool operator==(const myclass& o) const
+ {
+ return num == o.num && str == o.str;
+ }
+};
+
+std::ostream& operator<<(std::ostream& o, const myclass& m)
+{
+ return o << "myclass("<<m.num<<",\""<<m.str<<"\")";
+}
+
+
+TEST(object, convert)
+{
+ myclass m1;
+
+ msgpack::sbuffer sbuf;
+ msgpack::pack(sbuf, m1);
+
+ msgpack::zone z;
+ msgpack::object obj;
+
+ msgpack::unpack_return ret =
+ msgpack::unpack(sbuf.data(), sbuf.size(), NULL, &z, &obj);
+ EXPECT_EQ(ret, msgpack::UNPACK_SUCCESS);
+
+ myclass m2;
+ obj.convert(&m2);
+
+ EXPECT_EQ(m1, m2);
+}
+
+
+TEST(object, as)
+{
+ myclass m1;
+
+ msgpack::sbuffer sbuf;
+ msgpack::pack(sbuf, m1);
+
+ msgpack::zone z;
+ msgpack::object obj;
+
+ msgpack::unpack_return ret =
+ msgpack::unpack(sbuf.data(), sbuf.size(), NULL, &z, &obj);
+ EXPECT_EQ(ret, msgpack::UNPACK_SUCCESS);
+
+ EXPECT_EQ(m1, obj.as<myclass>());
+}
+
+
+TEST(object, print)
+{
+ msgpack::object obj;
+ std::cout << obj << std::endl;
+}
+
+
+TEST(object, is_nil)
+{
+ msgpack::object obj;
+ EXPECT_TRUE(obj.is_nil());
+}
+
+
+TEST(object, type_error)
+{
+ msgpack::object obj(1);
+ EXPECT_THROW(obj.as<std::string>(), msgpack::type_error);
+ EXPECT_THROW(obj.as<std::vector<int> >(), msgpack::type_error);
+ EXPECT_EQ(1, obj.as<int>());
+ EXPECT_EQ(1, obj.as<short>());
+ EXPECT_EQ(1u, obj.as<unsigned int>());
+ EXPECT_EQ(1u, obj.as<unsigned long>());
+}
+
+
+TEST(object, equal_primitive)
+{
+ msgpack::object obj_nil;
+ EXPECT_EQ(obj_nil, msgpack::object());
+
+ msgpack::object obj_int(1);
+ EXPECT_EQ(obj_int, msgpack::object(1));
+ EXPECT_EQ(obj_int, 1);
+
+ msgpack::object obj_double(1.2);
+ EXPECT_EQ(obj_double, msgpack::object(1.2));
+ EXPECT_EQ(obj_double, 1.2);
+
+ msgpack::object obj_bool(true);
+ EXPECT_EQ(obj_bool, msgpack::object(true));
+ EXPECT_EQ(obj_bool, true);
+}
+
+
+TEST(object, construct_primitive)
+{
+ msgpack::object obj_nil;
+ EXPECT_EQ(msgpack::type::NIL, obj_nil.type);
+
+ msgpack::object obj_uint(1);
+ EXPECT_EQ(msgpack::type::POSITIVE_INTEGER, obj_uint.type);
+ EXPECT_EQ(1u, obj_uint.via.u64);
+
+ msgpack::object obj_int(-1);
+ EXPECT_EQ(msgpack::type::NEGATIVE_INTEGER, obj_int.type);
+ EXPECT_EQ(-1, obj_int.via.i64);
+
+ msgpack::object obj_double(1.2);
+ EXPECT_EQ(msgpack::type::DOUBLE, obj_double.type);
+ EXPECT_EQ(1.2, obj_double.via.dec);
+
+ msgpack::object obj_bool(true);
+ EXPECT_EQ(msgpack::type::BOOLEAN, obj_bool.type);
+ EXPECT_EQ(true, obj_bool.via.boolean);
+}
+