summaryrefslogtreecommitdiff
path: root/cpp/src/tests/amqp_0_10/serialize.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/tests/amqp_0_10/serialize.cpp')
-rw-r--r--cpp/src/tests/amqp_0_10/serialize.cpp85
1 files changed, 70 insertions, 15 deletions
diff --git a/cpp/src/tests/amqp_0_10/serialize.cpp b/cpp/src/tests/amqp_0_10/serialize.cpp
index 16559b3516..e479151ec0 100644
--- a/cpp/src/tests/amqp_0_10/serialize.cpp
+++ b/cpp/src/tests/amqp_0_10/serialize.cpp
@@ -20,6 +20,10 @@
*/
#include "unit_test.h"
+
+#include "qpid/framing/AMQFrame.h"
+#include "qpid/framing/Buffer.h"
+
#include "qpid/amqp_0_10/Packer.h"
#include "qpid/amqp_0_10/built_in_types.h"
#include "qpid/amqp_0_10/Codec.h"
@@ -28,6 +32,7 @@
#include "qpid/amqp_0_10/FrameHeader.h"
#include "qpid/amqp_0_10/Map.h"
#include "qpid/amqp_0_10/Unit.h"
+#include "tests/allSegmentTypes.h"
#include <boost/test/test_case_template.hpp>
#include <boost/type_traits/is_arithmetic.hpp>
@@ -266,21 +271,71 @@ BOOST_AUTO_TEST_CASE(testUnit) {
BOOST_CHECK_EQUAL(data, data2);
}
-// FIXME aconway 2008-04-07: TODO
-// BOOST_AUTO_TEST_CASE(testAllSegmentTypes) {
-// string data;
-// int n = allSegmentTypes(Codec::encode(data));
-
-// string data2;
-// Codec::Decoder<string::iterator> decode(data.begin(), data.size());
-// while (decode.pos() != data.end()) {
-// Unit unit;
-// decode(unit);
-// Codec::encode(back_insert(data));
-// --n;
-// }
-// BOOST_CHECK_EQUAL(n, 0);
-// BOOST_CHECK_EQUAL(data, data2);
+BOOST_AUTO_TEST_CASE(testArray) {
+ ArrayDomain<char> a;
+ a.resize(3, 'x');
+ string data;
+ Codec::encode(back_inserter(data))(a);
+
+ ArrayDomain<char> b;
+ Codec::decode(data.begin())(b);
+ BOOST_CHECK_EQUAL(b.size(), 3u);
+ string data3;
+ Codec::encode(back_inserter(data3))(a);
+ BOOST_CHECK_EQUAL(data, data3);
+
+ Array x;
+ Codec::decode(data.begin())(x);
+ BOOST_CHECK_EQUAL(x.size(), 3u);
+ BOOST_CHECK_EQUAL(x[0].size(), 1u);
+ BOOST_CHECK_EQUAL(*x[0].begin(), 'x');
+ BOOST_CHECK_EQUAL(*x[2].begin(), 'x');
+
+ string data2;
+ Codec::encode(back_inserter(data2))(x);
+ BOOST_CHECK_EQUAL(data,data2);
+}
+
+struct RecodeUnit {
+ template <class T>
+ void operator() (const T& t) {
+ using qpid::framing::Buffer;
+ using qpid::framing::AMQFrame;
+
+ Unit u(t);
+ connection::Start s;
+
+ string data;
+ Codec::encode(back_inserter(data))(u.getHeader())(u);
+ data.push_back(char(0xCE)); // Preview end-of-frame
+
+ Buffer buf(&data[0], data.size());
+ AMQFrame f;
+ f.decode(buf);
+
+ string data2(f.size(), ' ');
+ Buffer buf2(&data2[0], data.size());
+ f.encode(buf2);
+
+ BOOST_CHECK_EQUAL(data, data2);
+
+ Codec::Decoder<string::iterator> decode(data2.begin());
+ FrameHeader h;
+ decode(h);
+ Unit u2(h);
+ decode(u2);
+
+ string data3;
+ Codec::encode(back_inserter(data3))(u.getHeader())(u);
+
+ BOOST_CHECK_EQUAL(data3, data2);
+ }
+};
+
+// FIXME aconway 2008-04-08: TODO
+// BOOST_AUTO_TEST_CASE(testSerializeAllSegmentTypes) {
+// RecodeUnit recode;
+// allSegmentTypes(recode);
// }
QPID_AUTO_TEST_SUITE_END()