From 248f1fe188fe2307b9dcf2c87a83b653eaa1920c Mon Sep 17 00:00:00 2001 From: "Rafael H. Schloming" Date: Sat, 26 Dec 2009 12:42:57 +0000 Subject: synchronized with trunk except for ruby dir git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/qpid.rnr@893970 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/tests/FieldTable.cpp | 160 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 144 insertions(+), 16 deletions(-) (limited to 'cpp/src/tests/FieldTable.cpp') diff --git a/cpp/src/tests/FieldTable.cpp b/cpp/src/tests/FieldTable.cpp index 315801b428..fe2a14ec03 100644 --- a/cpp/src/tests/FieldTable.cpp +++ b/cpp/src/tests/FieldTable.cpp @@ -7,9 +7,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -19,21 +19,26 @@ * */ #include +#include "qpid/framing/Array.h" #include "qpid/framing/FieldTable.h" #include "qpid/framing/FieldValue.h" -#include +#include "qpid/framing/List.h" +#include "qpid/sys/alloca.h" #include "unit_test.h" using namespace qpid::framing; +namespace qpid { +namespace tests { + QPID_AUTO_TEST_SUITE(FieldTableTestSuite) QPID_AUTO_TEST_CASE(testMe) { FieldTable ft; ft.setString("A", "BCDE"); - BOOST_CHECK(string("BCDE") == ft.getString("A")); + BOOST_CHECK(string("BCDE") == ft.getAsString("A")); char buff[100]; Buffer wbuffer(buff, 100); @@ -42,7 +47,7 @@ QPID_AUTO_TEST_CASE(testMe) Buffer rbuffer(buff, 100); FieldTable ft2; rbuffer.get(ft2); - BOOST_CHECK(string("BCDE") == ft2.getString("A")); + BOOST_CHECK(string("BCDE") == ft2.getAsString("A")); } @@ -55,11 +60,11 @@ QPID_AUTO_TEST_CASE(testAssignment) a.setInt("B", 1234); b = a; a.setString("A", "CCCC"); - - BOOST_CHECK(string("CCCC") == a.getString("A")); - BOOST_CHECK(string("BBBB") == b.getString("A")); - BOOST_CHECK_EQUAL(1234, a.getInt("B")); - BOOST_CHECK_EQUAL(1234, b.getInt("B")); + + BOOST_CHECK(string("CCCC") == a.getAsString("A")); + BOOST_CHECK(string("BBBB") == b.getAsString("A")); + BOOST_CHECK_EQUAL(1234, a.getAsInt("B")); + BOOST_CHECK_EQUAL(1234, b.getAsInt("B")); BOOST_CHECK(IntegerValue(1234) == *a.get("B")); BOOST_CHECK(IntegerValue(1234) == *b.get("B")); @@ -67,19 +72,142 @@ QPID_AUTO_TEST_CASE(testAssignment) { FieldTable c; c = a; - - char* buff = static_cast(::alloca(c.size())); - Buffer wbuffer(buff, c.size()); + + char* buff = static_cast(::alloca(c.encodedSize())); + Buffer wbuffer(buff, c.encodedSize()); wbuffer.put(c); - Buffer rbuffer(buff, c.size()); + Buffer rbuffer(buff, c.encodedSize()); rbuffer.get(d); BOOST_CHECK_EQUAL(c, d); - BOOST_CHECK(string("CCCC") == c.getString("A")); + BOOST_CHECK(string("CCCC") == c.getAsString("A")); BOOST_CHECK(IntegerValue(1234) == *c.get("B")); } - BOOST_CHECK(string("CCCC") == d.getString("A")); + BOOST_CHECK(string("CCCC") == d.getAsString("A")); BOOST_CHECK(IntegerValue(1234) == *d.get("B")); } + +QPID_AUTO_TEST_CASE(testNestedValues) +{ + double d = 1.2345; + uint32_t u = 101; + char buff[1000]; + { + FieldTable a; + FieldTable b; + std::vector items; + items.push_back("one"); + items.push_back("two"); + Array c(items); + List list; + list.push_back(List::ValuePtr(new Str16Value("red"))); + list.push_back(List::ValuePtr(new Unsigned32Value(u))); + list.push_back(List::ValuePtr(new Str8Value("yellow"))); + list.push_back(List::ValuePtr(new DoubleValue(d))); + + a.setString("id", "A"); + b.setString("id", "B"); + a.setTable("B", b); + a.setArray("C", c); + a.set("my-list", FieldTable::ValuePtr(new ListValue(list))); + + + Buffer wbuffer(buff, 100); + wbuffer.put(a); + } + { + Buffer rbuffer(buff, 100); + FieldTable a; + FieldTable b; + Array c; + rbuffer.get(a); + BOOST_CHECK(string("A") == a.getAsString("id")); + a.getTable("B", b); + BOOST_CHECK(string("B") == b.getAsString("id")); + a.getArray("C", c); + std::vector items; + c.collect(items); + BOOST_CHECK((uint) 2 == items.size()); + BOOST_CHECK(string("one") == items[0]); + BOOST_CHECK(string("two") == items[1]); + + List list; + BOOST_CHECK(a.get("my-list")->get(list)); + List::const_iterator i = list.begin(); + BOOST_CHECK(i != list.end()); + BOOST_CHECK_EQUAL(std::string("red"), (*i)->get()); + + i++; + BOOST_CHECK(i != list.end()); + BOOST_CHECK_EQUAL(u, (uint32_t) (*i)->get()); + + i++; + BOOST_CHECK(i != list.end()); + BOOST_CHECK_EQUAL(std::string("yellow"), (*i)->get()); + + i++; + BOOST_CHECK(i != list.end()); + BOOST_CHECK_EQUAL(d, (*i)->get()); + + i++; + BOOST_CHECK(i == list.end()); + } +} + +QPID_AUTO_TEST_CASE(testFloatAndDouble) +{ + char buff[100]; + float f = 5.672f; + double d = 56.720001; + { + FieldTable a; + a.setString("string", "abc"); + a.setInt("int", 5672); + a.setFloat("float", f); + a.setDouble("double", d); + + Buffer wbuffer(buff, 100); + wbuffer.put(a); + } + { + Buffer rbuffer(buff, 100); + FieldTable a; + rbuffer.get(a); + BOOST_CHECK(string("abc") == a.getAsString("string")); + BOOST_CHECK(5672 == a.getAsInt("int")); + float f2; + BOOST_CHECK(!a.getFloat("string", f2)); + BOOST_CHECK(!a.getFloat("int", f2)); + BOOST_CHECK(a.getFloat("float", f2)); + BOOST_CHECK(f2 == f); + + double d2; + BOOST_CHECK(!a.getDouble("string", d2)); + BOOST_CHECK(!a.getDouble("int", d2)); + BOOST_CHECK(a.getDouble("double", d2)); + BOOST_CHECK(d2 == d); + } +} + +QPID_AUTO_TEST_CASE(test64GetAndSetConverts) +{ + FieldTable args; + args.setInt64("a",100); + args.setInt64("b",-(int64_t) ((int64_t) 1<<34)); + + args.setUInt64("c",1u); + args.setUInt64("d",(uint64_t) ((uint64_t) 1<<34)); + BOOST_CHECK_EQUAL(1u, args.getAsUInt64("c")); + BOOST_CHECK_EQUAL(100u, args.getAsUInt64("a")); + BOOST_CHECK_EQUAL(1, args.getAsInt64("c")); + BOOST_CHECK_EQUAL(100, args.getAsInt64("a")); + BOOST_CHECK_EQUAL(-(int64_t) ((int64_t) 1<<34), args.getAsInt64("b")); + BOOST_CHECK_EQUAL((uint64_t) ((uint64_t) 1<<34), args.getAsUInt64("d")); + BOOST_CHECK_EQUAL((int64_t) ((int64_t) 1<<34), args.getAsInt64("d")); + +} + QPID_AUTO_TEST_SUITE_END() + +}} // namespace qpid::tests -- cgit v1.2.1