From 742e1fa57a542d3d494a85882900f1c0278c3119 Mon Sep 17 00:00:00 2001 From: Luke Tomkus Date: Sun, 27 Apr 2025 15:26:10 -0400 Subject: [PATCH] Allow NSObject Wrap to handle lists of maps/dicts. Add corresponding test case. --- plist-cil.test/ParseTest.cs | 21 ++++++++++++++++++++- plist-cil/NSObject.cs | 10 +++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/plist-cil.test/ParseTest.cs b/plist-cil.test/ParseTest.cs index 2807538..deb0620 100644 --- a/plist-cil.test/ParseTest.cs +++ b/plist-cil.test/ParseTest.cs @@ -1,4 +1,4 @@ -// plist-cil - An open source library to Parse and generate property lists for .NET +// plist-cil - An open source library to Parse and generate property lists for .NET // Copyright (C) 2015 Natalia Portillo // // This code is based on: @@ -209,6 +209,16 @@ namespace plistcil.test map.Add("long", lng); map.Add("date", date); + List> listOfMaps = new() + { + new Dictionary + { + { "int", i }, + { "long", lng }, + { "date", date } + } + }; + var WrappedO = NSObject.Wrap((object)bl); Assert.True(WrappedO is (NSNumber)); Assert.True(WrappedO.ToObject().Equals(bl)); @@ -274,6 +284,15 @@ namespace plistcil.test Assert.True(((NSNumber)dict.ObjectForKey("long")).ToLong() == lng); Assert.True(((NSDate)dict.ObjectForKey("date")).Date.Equals(date)); + WrappedO = NSObject.Wrap((object)listOfMaps); + Assert.True(WrappedO is (NSArray)); + var arrayOfMaps = (NSArray)WrappedO; + Assert.True(arrayOfMaps.Count == 1); + var firstMap = (NSDictionary)arrayOfMaps[0]; + Assert.True(((NSNumber)firstMap.ObjectForKey("int")).ToLong() == i); + Assert.True(((NSNumber)firstMap.ObjectForKey("long")).ToLong() == lng); + Assert.True(((NSDate)firstMap.ObjectForKey("date")).Date.Equals(date)); + // TODO /* Object unWrappedO = WrappedO.ToObject(); diff --git a/plist-cil/NSObject.cs b/plist-cil/NSObject.cs index e9e245f..d367052 100644 --- a/plist-cil/NSObject.cs +++ b/plist-cil/NSObject.cs @@ -1,4 +1,4 @@ -// plist-cil - An open source library to parse and generate property lists for .NET +// plist-cil - An open source library to parse and generate property lists for .NET // Copyright (C) 2015 Natalia Portillo // // This code is based on: @@ -321,6 +321,14 @@ namespace Claunia.PropertyList if(typeof(List).IsAssignableFrom(c)) return Wrap(((List)o).ToArray()); + if(typeof(List>).IsAssignableFrom(c)) + { + var list = new NSArray(); + foreach(Dictionary dict in (List>)o) + list.Add(Wrap(dict)); + return list; + } + throw new PropertyListException($"Cannot wrap an object of type {o.GetType().Name}."); }