summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2013-05-08 17:37:34 +0000
committerAndrew Stitcher <astitcher@apache.org>2013-05-08 17:37:34 +0000
commitccf2ee09ecdf14fffe84a815b2e88572707e9cc4 (patch)
treeef497159a145942ed4aa8e1fe1fa7d3e82dc2a8d /qpid/cpp/src
parent44f7fb8aa3039369636862dac8a84d16f45138ee (diff)
downloadqpid-python-ccf2ee09ecdf14fffe84a815b2e88572707e9cc4.tar.gz
QPID-4822: Allow Variant::parse() to produce VAR_UINT64 types.
- Extend qpid::messaging::Variant string parser to output unsigned 64 bit type where relevant (positive integer larger than signed 64 bits) - Added some unit tests for the qpid::messageing::Variant string parser git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1480376 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/types/Variant.cpp5
-rw-r--r--qpid/cpp/src/tests/Variant.cpp27
2 files changed, 31 insertions, 1 deletions
diff --git a/qpid/cpp/src/qpid/types/Variant.cpp b/qpid/cpp/src/qpid/types/Variant.cpp
index 8c9837e765..7a5f36851a 100644
--- a/qpid/cpp/src/qpid/types/Variant.cpp
+++ b/qpid/cpp/src/qpid/types/Variant.cpp
@@ -122,7 +122,7 @@ class VariantImpl
} else {
T r = boost::lexical_cast<T>(s.substr(1));
if (std::numeric_limits<T>::is_signed) {
- return -r;
+ return -r;
} else {
if (r==0) return 0;
}
@@ -804,6 +804,9 @@ Variant& Variant::parse(const std::string& s)
return operator=(asInt64());
} catch (const InvalidConversion&) {}
try {
+ return operator=(asUint64());
+ } catch (const InvalidConversion&) {}
+ try {
return operator=(asDouble());
} catch (const InvalidConversion&) {}
try {
diff --git a/qpid/cpp/src/tests/Variant.cpp b/qpid/cpp/src/tests/Variant.cpp
index 6d629bbb4a..d2394bfbad 100644
--- a/qpid/cpp/src/tests/Variant.cpp
+++ b/qpid/cpp/src/tests/Variant.cpp
@@ -780,6 +780,33 @@ QPID_AUTO_TEST_CASE(testBufferEncoding)
BOOST_CHECK_THROW(MapCodec::encode(inMap, buffer), std::exception);
}
+QPID_AUTO_TEST_CASE(parse)
+{
+ Variant a;
+ a.parse("What a fine mess");
+ BOOST_CHECK(a.getType()==types::VAR_STRING);
+ a.parse("true");
+ BOOST_CHECK(a.getType()==types::VAR_BOOL);
+ a.parse("FalsE");
+ BOOST_CHECK(a.getType()==types::VAR_BOOL);
+ a.parse("3.1415926");
+ BOOST_CHECK(a.getType()==types::VAR_DOUBLE);
+ a.parse("-7.2e-15");
+ BOOST_CHECK(a.getType()==types::VAR_DOUBLE);
+ a.parse("9223372036854775807");
+ BOOST_CHECK(a.getType()==types::VAR_INT64);
+ a.parse("9223372036854775808");
+ BOOST_CHECK(a.getType()==types::VAR_UINT64);
+ a.parse("-9223372036854775807");
+ BOOST_CHECK(a.getType()==types::VAR_INT64);
+ a.parse("-9223372036854775808");
+ BOOST_CHECK(a.getType()==types::VAR_DOUBLE);
+ a.parse("18446744073709551615");
+ BOOST_CHECK(a.getType()==types::VAR_UINT64);
+ a.parse("18446744073709551616");
+ BOOST_CHECK(a.getType()==types::VAR_DOUBLE);
+}
+
QPID_AUTO_TEST_SUITE_END()
}} // namespace qpid::tests