From 5d438870047a962bfa9c7b24b4a9a2c68fa2ef11 Mon Sep 17 00:00:00 2001 From: "Charles E. Rolke" Date: Tue, 5 Aug 2014 19:58:15 +0000 Subject: QPID-5964: Add SetContentObject support for list and map. Fix GetContentObject return value warning. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1615992 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/bindings/qpid/dotnet/src/Message.cpp | 5 ++- .../bindings/qpid/dotnet/src/TypeTranslator.cpp | 12 ++++++ .../test/messaging.test/messaging.test.message.cs | 44 ++++++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) (limited to 'qpid/cpp/bindings') diff --git a/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp b/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp index c62bf9446f..cbf477bcaa 100644 --- a/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp +++ b/qpid/cpp/bindings/qpid/dotnet/src/Message.cpp @@ -571,12 +571,13 @@ namespace Messaging { ThrowIfDisposed(); System::Exception ^ newException = nullptr; + System::Object ^ result = nullptr; try { ::qpid::types::Variant nativeObject = nativeObjPtr->getContentObject(); - return TypeTranslator::NativeToManagedObject(nativeObject); + result = TypeTranslator::NativeToManagedObject(nativeObject); } catch (const ::qpid::types::Exception & error) { @@ -588,6 +589,8 @@ namespace Messaging { { throw newException; } + + return result; } System::String ^ Message::MapAsString(System::Collections::Generic::Dictionary< diff --git a/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp b/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp index 3659f7f8b3..01ec8056c6 100644 --- a/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp +++ b/qpid/cpp/bindings/qpid/dotnet/src/TypeTranslator.cpp @@ -242,6 +242,18 @@ namespace Messaging { ::qpid::types::Uuid newUuid = ::qpid::types::Uuid(pinnedBuf); qpidVariant = newUuid; } + else if (QpidTypeCheck::ObjectIsMap(managedValue)) + { + ::qpid::types::Variant::Map newMap; + ManagedToNative((QpidMap ^)managedValue, newMap); + qpidVariant = newMap; + } + else if (QpidTypeCheck::ObjectIsList(managedValue)) + { + ::qpid::types::Variant::List newList; + ManagedToNative((QpidList ^)managedValue, newList); + qpidVariant = newList; + } else { throw gcnew System::NotImplementedException(); diff --git a/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs b/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs index 3912278148..bf9620d785 100644 --- a/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs +++ b/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs @@ -375,6 +375,50 @@ namespace Org.Apache.Qpid.Messaging.UnitTest gotThis = message.GetContentObject(); StringAssert.IsMatch("System.Guid", gotThis.GetType().ToString()); StringAssert.IsMatch("03020100-0504-0706-0809-0a0b0c0d0e0f", gotThis.ToString()); + + Dictionary content = new Dictionary(); + Dictionary subMap = new Dictionary(); + Collection colors = new Collection(); + + // Test object map + // add simple types + content["id"] = 987654321; + content["name"] = "Widget"; + content["percent"] = 0.99; + + // add nested amqp/map + subMap["name"] = "Smith"; + subMap["number"] = 354; + content["nestedMap"] = subMap; + + // add an amqp/list + colors.Add("red"); + colors.Add("green"); + colors.Add("white"); + // list contains null value + colors.Add(null); + content["colorsList"] = colors; + + // add one of each supported amqp data type + bool mybool2 = true; + content["mybool"] = mybool2; + + message.SetContentObject(content); + gotThis = message.GetContentObject(); + StringAssert.Contains("System.Collections.Generic.Dictionary`2[System.String,System.Object]", gotThis.GetType().ToString()); + // Can't compare objects as strings since the maps get reordered + // so compare each item + foreach (KeyValuePair kvp in content) + { + object gotObj = ((Dictionary)(gotThis))[kvp.Key]; + StringAssert.Contains(kvp.Value.ToString(), gotObj.ToString()); + } + + // test object list + message.SetContentObject(colors); + gotThis = message.GetContentObject(); + StringAssert.Contains("System.Collections.ObjectModel.Collection`1[System.Object]", gotThis.GetType().ToString()); + StringAssert.Contains(message.ListAsString(colors), message.ListAsString((Collection)gotThis)); } } } -- cgit v1.2.1