summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2010-02-26 20:07:36 +0000
committerTed Ross <tross@apache.org>2010-02-26 20:07:36 +0000
commite37be70fb4ff467b05fdb84bd3983633b910e8ee (patch)
tree741c919d516333bad6140f324c52f1db2aa97972
parent89df8f99fae65ca333e7de527eadb9ef5382fb43 (diff)
downloadqpid-python-e37be70fb4ff467b05fdb84bd3983633b910e8ee.tar.gz
QPID-2423 - Add Constructors to set initial value of content for MapContent and ListContent
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@916803 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/include/qpid/messaging/ListContent.h1
-rw-r--r--qpid/cpp/include/qpid/messaging/MapContent.h1
-rw-r--r--qpid/cpp/src/qpid/messaging/ListContent.cpp6
-rw-r--r--qpid/cpp/src/qpid/messaging/MapContent.cpp6
-rw-r--r--qpid/cpp/src/tests/MessagingSessionTests.cpp53
5 files changed, 67 insertions, 0 deletions
diff --git a/qpid/cpp/include/qpid/messaging/ListContent.h b/qpid/cpp/include/qpid/messaging/ListContent.h
index 1c4e13716d..f57a920a88 100644
--- a/qpid/cpp/include/qpid/messaging/ListContent.h
+++ b/qpid/cpp/include/qpid/messaging/ListContent.h
@@ -42,6 +42,7 @@ class ListContent
typedef Variant::List::const_reverse_iterator const_reverse_iterator;
QPID_CLIENT_EXTERN ListContent(Message&);
+ QPID_CLIENT_EXTERN ListContent(Message&, const Variant::List&);
QPID_CLIENT_EXTERN ~ListContent();
QPID_CLIENT_EXTERN const_iterator begin() const;
diff --git a/qpid/cpp/include/qpid/messaging/MapContent.h b/qpid/cpp/include/qpid/messaging/MapContent.h
index b05cb31295..3a80a38732 100644
--- a/qpid/cpp/include/qpid/messaging/MapContent.h
+++ b/qpid/cpp/include/qpid/messaging/MapContent.h
@@ -47,6 +47,7 @@ class MapContent
typedef std::map<key_type, Variant>::reverse_iterator reverse_iterator;
QPID_CLIENT_EXTERN MapContent(Message&);
+ QPID_CLIENT_EXTERN MapContent(Message&, const Variant::Map&);
QPID_CLIENT_EXTERN ~MapContent();
QPID_CLIENT_EXTERN const_iterator begin() const;
diff --git a/qpid/cpp/src/qpid/messaging/ListContent.cpp b/qpid/cpp/src/qpid/messaging/ListContent.cpp
index 0c3ca5fc62..038c1fad0b 100644
--- a/qpid/cpp/src/qpid/messaging/ListContent.cpp
+++ b/qpid/cpp/src/qpid/messaging/ListContent.cpp
@@ -37,6 +37,11 @@ class ListContentImpl : public Variant
}
}
+ ListContentImpl(Message& m, const Variant::List& i) : Variant(i), msg(&m)
+ {
+ msg->getContent().clear();
+ }
+
void encode()
{
qpid::client::amqp0_10::ListCodec codec;
@@ -45,6 +50,7 @@ class ListContentImpl : public Variant
};
ListContent::ListContent(Message& m) : impl(new ListContentImpl(m)) {}
+ListContent::ListContent(Message& m, const Variant::List& i) : impl(new ListContentImpl(m, i)) {}
ListContent::~ListContent() { delete impl; }
ListContent& ListContent::operator=(const ListContent& l) { *impl = *l.impl; return *this; }
diff --git a/qpid/cpp/src/qpid/messaging/MapContent.cpp b/qpid/cpp/src/qpid/messaging/MapContent.cpp
index 6dba22be99..1f190b85aa 100644
--- a/qpid/cpp/src/qpid/messaging/MapContent.cpp
+++ b/qpid/cpp/src/qpid/messaging/MapContent.cpp
@@ -37,6 +37,11 @@ class MapContentImpl : public Variant
}
}
+ MapContentImpl(Message& m, const Variant::Map& i) : Variant(i), msg(&m)
+ {
+ msg->getContent().clear();
+ }
+
void encode()
{
qpid::client::amqp0_10::MapCodec codec;
@@ -46,6 +51,7 @@ class MapContentImpl : public Variant
};
MapContent::MapContent(Message& m) : impl(new MapContentImpl(m)) {}
+MapContent::MapContent(Message& m, const Variant::Map& i) : impl(new MapContentImpl(m, i)) {}
MapContent::~MapContent() { delete impl; }
MapContent& MapContent::operator=(const MapContent& m) { *impl = *m.impl; return *this; }
diff --git a/qpid/cpp/src/tests/MessagingSessionTests.cpp b/qpid/cpp/src/tests/MessagingSessionTests.cpp
index 9c6f066d64..98b92e809c 100644
--- a/qpid/cpp/src/tests/MessagingSessionTests.cpp
+++ b/qpid/cpp/src/tests/MessagingSessionTests.cpp
@@ -346,6 +346,25 @@ QPID_AUTO_TEST_CASE(testMapMessage)
fix.session.acknowledge();
}
+QPID_AUTO_TEST_CASE(testMapMessageWithInitial)
+{
+ QueueFixture fix;
+ Sender sender = fix.session.createSender(fix.queue);
+ Message out;
+ Variant::Map imap;
+ imap["abc"] = "def";
+ imap["pi"] = 3.14f;
+ MapContent content(out, imap);
+ content.encode();
+ sender.send(out);
+ Receiver receiver = fix.session.createReceiver(fix.queue);
+ Message in = receiver.fetch(5 * qpid::sys::TIME_SEC);
+ MapView view(in);
+ BOOST_CHECK_EQUAL(view["abc"].asString(), "def");
+ BOOST_CHECK_EQUAL(view["pi"].asFloat(), 3.14f);
+ fix.session.acknowledge();
+}
+
QPID_AUTO_TEST_CASE(testListMessage)
{
QueueFixture fix;
@@ -379,6 +398,40 @@ QPID_AUTO_TEST_CASE(testListMessage)
fix.session.acknowledge();
}
+QPID_AUTO_TEST_CASE(testListMessageWithInitial)
+{
+ QueueFixture fix;
+ Sender sender = fix.session.createSender(fix.queue);
+ Message out;
+ Variant::List ilist;
+ ilist.push_back(Variant("abc"));
+ ilist.push_back(Variant(1234));
+ ilist.push_back(Variant("def"));
+ ilist.push_back(Variant(56.789));
+ ListContent content(out, ilist);
+ content.encode();
+ sender.send(out);
+ Receiver receiver = fix.session.createReceiver(fix.queue);
+ Message in = receiver.fetch(5 * qpid::sys::TIME_SEC);
+ ListView view(in);
+ BOOST_CHECK_EQUAL(view.size(), content.size());
+ BOOST_CHECK_EQUAL(view.front().asString(), "abc");
+ BOOST_CHECK_EQUAL(view.back().asDouble(), 56.789);
+
+ ListView::const_iterator i = view.begin();
+ BOOST_CHECK(i != view.end());
+ BOOST_CHECK_EQUAL(i->asString(), "abc");
+ BOOST_CHECK(++i != view.end());
+ BOOST_CHECK_EQUAL(i->asInt64(), 1234);
+ BOOST_CHECK(++i != view.end());
+ BOOST_CHECK_EQUAL(i->asString(), "def");
+ BOOST_CHECK(++i != view.end());
+ BOOST_CHECK_EQUAL(i->asDouble(), 56.789);
+ BOOST_CHECK(++i == view.end());
+
+ fix.session.acknowledge();
+}
+
QPID_AUTO_TEST_CASE(testReject)
{
QueueFixture fix;