diff --git a/UnitTests/PListObjectTests.cs b/UnitTests/PListObjectTests.cs index 32e2bfe..1df301c 100644 --- a/UnitTests/PListObjectTests.cs +++ b/UnitTests/PListObjectTests.cs @@ -87,7 +87,11 @@ public void TestIntegerXmlSerialization () using (var stream = GetType ().Assembly.GetManifestResourceStream ("UnitTests.TestData.PropertyLists.xml-integers.plist")) { var buffer = new byte [stream.Length]; +#if NET7_0_OR_GREATER + stream.ReadExactly (buffer, 0, buffer.Length); +#else stream.Read (buffer, 0, buffer.Length); +#endif expected = Encoding.UTF8.GetString (buffer); } @@ -117,6 +121,25 @@ public void TestIntegerBinarySerialization () Assert.That (integer.Value, Is.EqualTo (kvp.Value)); } } + + [Test] + public void TestStrings () + { + PDictionary plist; + + using (var stream = GetType ().Assembly.GetManifestResourceStream ($"UnitTests.TestData.PropertyLists.strings.plist")) + plist = (PDictionary) PObject.FromStream (stream); + + Assert.That (plist.Count, Is.EqualTo (2)); + + Assert.That (plist.TryGetValue ("KeyA", out var valueA), Is.True); + Assert.That (valueA.Value, Is.EqualTo ("ValueA")); + Assert.That (plist.TryGetStringValue ("KeyA", out var valueAString)); + Assert.That (valueAString, Is.EqualTo ("ValueA")); + + Assert.That (plist.TryGetStringValue ("✅", out var emojiValue), Is.True); + Assert.That (emojiValue, Is.EqualTo ("❌")); + } } } diff --git a/UnitTests/TestData/PropertyLists/strings.plist b/UnitTests/TestData/PropertyLists/strings.plist new file mode 100644 index 0000000..14289c7 --- /dev/null +++ b/UnitTests/TestData/PropertyLists/strings.plist @@ -0,0 +1,10 @@ + + + + + KeyA + ValueA + + + + diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index 02f6d4d..0a3b12a 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -1,7 +1,7 @@ - net472 + net472;net10.0 @@ -10,6 +10,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + + @@ -29,5 +31,6 @@ + diff --git a/Xamarin.MacDev/PListObject.cs b/Xamarin.MacDev/PListObject.cs index 269461b..f59baad 100644 --- a/Xamarin.MacDev/PListObject.cs +++ b/Xamarin.MacDev/PListObject.cs @@ -677,6 +677,17 @@ public bool TryGetValue (string key, [NotNullWhen (true)] out T? value) where return false; } + public bool TryGetStringValue (string key, [NotNullWhen (true)] out string? value) + { + if (TryGetValue (key, out var obj)) { + value = obj.Value; + return true; + } + + value = null; + return false; + } + #if POBJECT_MONOMAC public override NSObject Convert () {