From 7da23f2ec7b60e6a68e0a735b7aa3e1910605ffd Mon Sep 17 00:00:00 2001 From: Kenneth Anthony Giusti Date: Thu, 28 Oct 2010 21:33:52 +0000 Subject: QPID-2916: throw an exception when a data value cannot be encoded correctly as its type. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1028501 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/tests/Variant.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'qpid/cpp/src/tests/Variant.cpp') diff --git a/qpid/cpp/src/tests/Variant.cpp b/qpid/cpp/src/tests/Variant.cpp index 596bde36de..b4188f524b 100644 --- a/qpid/cpp/src/tests/Variant.cpp +++ b/qpid/cpp/src/tests/Variant.cpp @@ -20,10 +20,12 @@ */ #include #include "qpid/types/Variant.h" +#include "qpid/amqp_0_10/Codecs.h" #include "unit_test.h" using namespace qpid::types; +using namespace qpid::amqp_0_10; namespace qpid { namespace tests { @@ -686,6 +688,30 @@ QPID_AUTO_TEST_CASE(testEncoding) BOOST_CHECK_EQUAL(map.asMap()["a"].getEncoding(), map.asMap()["b"].getEncoding()); } +QPID_AUTO_TEST_CASE(testBufferEncoding) +{ + Variant a("abc"); + a.setEncoding("utf8"); + std::string buffer; + + Variant::Map inMap, outMap; + inMap["a"] = a; + + MapCodec::encode(inMap, buffer); + MapCodec::decode(buffer, outMap); + BOOST_CHECK_EQUAL(inMap, outMap); + + inMap["b"] = Variant(std::string(65535, 'X')); + inMap["b"].setEncoding("utf16"); + MapCodec::encode(inMap, buffer); + MapCodec::decode(buffer, outMap); + BOOST_CHECK_EQUAL(inMap, outMap); + + inMap["fail"] = Variant(std::string(65536, 'X')); + inMap["fail"].setEncoding("utf16"); + BOOST_CHECK_THROW(MapCodec::encode(inMap, buffer), std::exception); +} + QPID_AUTO_TEST_SUITE_END() }} // namespace qpid::tests -- cgit v1.2.1