summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@users.sourceforge.jp>2010-06-01 07:16:25 +0900
committerfrsyuki <frsyuki@users.sourceforge.jp>2010-06-01 07:16:25 +0900
commiteabcf15790a774ce718ae1738c6ddb407e1cd279 (patch)
treea69c899bd8d136a8fbb6934ea8b5d87a521e4e23 /cpp
parent684bca203ad862f30558429081d1a27681fe4559 (diff)
downloadmsgpack-python-eabcf15790a774ce718ae1738c6ddb407e1cd279.tar.gz
cpp: update tests
Diffstat (limited to 'cpp')
-rw-r--r--cpp/test/Makefile.am6
-rw-r--r--cpp/test/pack_unpack_c.cc70
-rw-r--r--cpp/test/streaming.cc19
-rw-r--r--cpp/test/streaming_c.cc57
4 files changed, 146 insertions, 6 deletions
diff --git a/cpp/test/Makefile.am b/cpp/test/Makefile.am
index f9c5f22..1f52215 100644
--- a/cpp/test/Makefile.am
+++ b/cpp/test/Makefile.am
@@ -6,7 +6,9 @@ AM_LDFLAGS = ../src/libmsgpack.la -lgtest_main
check_PROGRAMS = \
zone \
pack_unpack \
+ pack_unpack_c \
streaming \
+ streaming_c \
object \
convert \
buffer \
@@ -20,8 +22,12 @@ zone_SOURCES = zone.cc
pack_unpack_SOURCES = pack_unpack.cc
+pack_unpack_c_SOURCES = pack_unpack_c.cc
+
streaming_SOURCES = streaming.cc
+streaming_c_SOURCES = streaming_c.cc
+
object_SOURCES = object.cc
convert_SOURCES = convert.cc
diff --git a/cpp/test/pack_unpack_c.cc b/cpp/test/pack_unpack_c.cc
new file mode 100644
index 0000000..e9a0389
--- /dev/null
+++ b/cpp/test/pack_unpack_c.cc
@@ -0,0 +1,70 @@
+#include <msgpack.h>
+#include <gtest/gtest.h>
+#include <stdio.h>
+
+TEST(pack, num)
+{
+ msgpack_sbuffer* sbuf = msgpack_sbuffer_new();
+ msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write);
+
+ EXPECT_EQ(0, msgpack_pack_int(pk, 1));
+
+ msgpack_sbuffer_free(sbuf);
+ msgpack_packer_free(pk);
+}
+
+
+TEST(pack, array)
+{
+ msgpack_sbuffer* sbuf = msgpack_sbuffer_new();
+ msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write);
+
+ EXPECT_EQ(0, msgpack_pack_array(pk, 3));
+ EXPECT_EQ(0, msgpack_pack_int(pk, 1));
+ EXPECT_EQ(0, msgpack_pack_int(pk, 2));
+ EXPECT_EQ(0, msgpack_pack_int(pk, 3));
+
+ msgpack_sbuffer_free(sbuf);
+ msgpack_packer_free(pk);
+}
+
+
+TEST(unpack, sequence)
+{
+ msgpack_sbuffer* sbuf = msgpack_sbuffer_new();
+ msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write);
+
+ EXPECT_EQ(0, msgpack_pack_int(pk, 1));
+ EXPECT_EQ(0, msgpack_pack_int(pk, 2));
+ EXPECT_EQ(0, msgpack_pack_int(pk, 3));
+
+ msgpack_packer_free(pk);
+
+ bool success;
+ size_t offset = 0;
+
+ msgpack_unpacked msg;
+ msgpack_unpacked_init(&msg);
+
+ success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset);
+ EXPECT_TRUE(success);
+ EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type);
+ EXPECT_EQ(1, msg.data.via.u64);
+
+ success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset);
+ EXPECT_TRUE(success);
+ EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type);
+ EXPECT_EQ(2, msg.data.via.u64);
+
+ success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset);
+ EXPECT_TRUE(success);
+ EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type);
+ EXPECT_EQ(3, msg.data.via.u64);
+
+ success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset);
+ EXPECT_FALSE(success);
+
+ msgpack_sbuffer_free(sbuf);
+ msgpack_unpacked_destroy(&msg);
+}
+
diff --git a/cpp/test/streaming.cc b/cpp/test/streaming.cc
index c01b8be..e80c671 100644
--- a/cpp/test/streaming.cc
+++ b/cpp/test/streaming.cc
@@ -2,28 +2,33 @@
#include <gtest/gtest.h>
#include <sstream>
-
TEST(streaming, basic)
{
- std::ostringstream stream;
- msgpack::packer<std::ostream> pk(&stream);
+ msgpack::sbuffer buffer;
+ msgpack::packer<msgpack::sbuffer> pk(&buffer);
pk.pack(1);
pk.pack(2);
pk.pack(3);
- std::istringstream input(stream.str());
+ const char* input = buffer.data();
+ const char* const eof = input + buffer.size();
msgpack::unpacker pac;
+ msgpack::unpacked result;
int count = 0;
while(count < 3) {
pac.reserve_buffer(32*1024);
- size_t len = input.readsome(pac.buffer(), pac.buffer_capacity());
+ // read buffer into pac.buffer() upto
+ // pac.buffer_capacity() bytes.
+ size_t len = 1;
+ memcpy(pac.buffer(), input, len);
+ input += len;
+
pac.buffer_consumed(len);
- msgpack::unpacked result;
while(pac.next(&result)) {
msgpack::object obj = result.get();
switch(count++) {
@@ -38,6 +43,8 @@ TEST(streaming, basic)
return;
}
}
+
+ EXPECT_TRUE(input < eof);
}
}
diff --git a/cpp/test/streaming_c.cc b/cpp/test/streaming_c.cc
new file mode 100644
index 0000000..6c87ac6
--- /dev/null
+++ b/cpp/test/streaming_c.cc
@@ -0,0 +1,57 @@
+#include <msgpack.h>
+#include <gtest/gtest.h>
+#include <stdio.h>
+
+TEST(streaming, basic)
+{
+ msgpack_sbuffer* buffer = msgpack_sbuffer_new();
+
+ msgpack_packer* pk = msgpack_packer_new(buffer, msgpack_sbuffer_write);
+ EXPECT_EQ(0, msgpack_pack_int(pk, 1));
+ EXPECT_EQ(0, msgpack_pack_int(pk, 2));
+ EXPECT_EQ(0, msgpack_pack_int(pk, 3));
+ msgpack_packer_free(pk);
+
+ const char* input = buffer->data;
+ const char* const eof = input + buffer->size;
+
+ msgpack_unpacker pac;
+ msgpack_unpacker_init(&pac, MSGPACK_UNPACKER_INIT_BUFFER_SIZE);
+
+ msgpack_unpacked result;
+ msgpack_unpacked_init(&result);
+
+ int count = 0;
+ while(count < 3) {
+ msgpack_unpacker_reserve_buffer(&pac, 32*1024);
+
+ /* read buffer into msgpack_unapcker_buffer(&pac) upto
+ * msgpack_unpacker_buffer_capacity(&pac) bytes. */
+ size_t len = 1;
+ memcpy(msgpack_unpacker_buffer(&pac), input, len);
+ input += len;
+
+ msgpack_unpacker_buffer_consumed(&pac, len);
+
+ while(msgpack_unpacker_next(&pac, &result)) {
+ msgpack_object obj = result.data;
+ switch(count++) {
+ case 0:
+ EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, result.data.type);
+ EXPECT_EQ(1, result.data.via.u64);
+ break;
+ case 1:
+ EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, result.data.type);
+ EXPECT_EQ(2, result.data.via.u64);
+ break;
+ case 2:
+ EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, result.data.type);
+ EXPECT_EQ(3, result.data.via.u64);
+ return;
+ }
+ }
+
+ EXPECT_TRUE(input < eof);
+ }
+}
+