From b507a380fb8e291cb2878bb5f2c920d5a0035983 Mon Sep 17 00:00:00 2001 From: Johann Studanski Date: Mon, 27 Jan 2025 18:21:22 +0100 Subject: [PATCH] Cleanup for NSString and NSDate, too --- plist-cil.test/ValuePreprocessorTests.cs | 17 ++++++++++++++--- plist-cil/BinaryPropertyListParser.cs | 4 ++-- plist-cil/NSDate.cs | 2 +- plist-cil/NSString.cs | 4 ++-- plist-cil/ValuePreprocessor.cs | 2 ++ 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/plist-cil.test/ValuePreprocessorTests.cs b/plist-cil.test/ValuePreprocessorTests.cs index 12869d8..07ff529 100644 --- a/plist-cil.test/ValuePreprocessorTests.cs +++ b/plist-cil.test/ValuePreprocessorTests.cs @@ -13,16 +13,27 @@ namespace plistcil.test [Fact] public static void TestPassiveDefaultPreprocessorsRegistered() { + byte[] testByteArray = [0x1, 0x2, 0x4, 0x8]; + Assert.Equal(true, ValuePreprocessor.Preprocess(true, ValuePreprocessor.Type.BOOL)); Assert.Equal(false, ValuePreprocessor.Preprocess(false, ValuePreprocessor.Type.BOOL)); Assert.Equal("true", ValuePreprocessor.Preprocess("true", ValuePreprocessor.Type.BOOL)); + Assert.Equal("42", ValuePreprocessor.Preprocess("42", ValuePreprocessor.Type.INTEGER)); + Assert.Equal(testByteArray, ValuePreprocessor.Preprocess(testByteArray, ValuePreprocessor.Type.INTEGER)); + Assert.Equal("3.14159", ValuePreprocessor.Preprocess("3.14159", ValuePreprocessor.Type.FLOATING_POINT)); + Assert.Equal(testByteArray, ValuePreprocessor.Preprocess(testByteArray, ValuePreprocessor.Type.FLOATING_POINT)); + Assert.Equal("2.71828", ValuePreprocessor.Preprocess("2.71828", ValuePreprocessor.Type.UNDEFINED_NUMBER)); + Assert.Equal("TestString", ValuePreprocessor.Preprocess("TestString", ValuePreprocessor.Type.STRING)); + Assert.Equal(testByteArray, ValuePreprocessor.Preprocess(testByteArray, ValuePreprocessor.Type.STRING)); + Assert.Equal("TestData", ValuePreprocessor.Preprocess("TestData", ValuePreprocessor.Type.DATA)); - byte[] value = [0x1, 0x2, 0x4, 0x8]; - Assert.Equal(value, ValuePreprocessor.Preprocess(value, ValuePreprocessor.Type.DATA)); + Assert.Equal(testByteArray, ValuePreprocessor.Preprocess(testByteArray, ValuePreprocessor.Type.DATA)); + + Assert.Equal(testByteArray, ValuePreprocessor.Preprocess(testByteArray, ValuePreprocessor.Type.DATE)); Assert.Equal("01.02.1903", ValuePreprocessor.Preprocess("01.02.1903", ValuePreprocessor.Type.DATE)); Assert.Equal(23.0, ValuePreprocessor.Preprocess(23.0, ValuePreprocessor.Type.DATE)); } @@ -105,7 +116,7 @@ namespace plistcil.test [Fact] public static void TestUnregisteredPreprocessorThrows() { - byte[] testArray = [0x1, 0x2, 0x4, 0x8]; + int[] testArray = [1, 2, 4, 8]; // there's no registered preprocessor for byte array arguments for STRING Assert.Throws(() => ValuePreprocessor.Preprocess(testArray, ValuePreprocessor.Type.STRING)); diff --git a/plist-cil/BinaryPropertyListParser.cs b/plist-cil/BinaryPropertyListParser.cs index 308b582..3559714 100644 --- a/plist-cil/BinaryPropertyListParser.cs +++ b/plist-cil/BinaryPropertyListParser.cs @@ -260,7 +260,7 @@ namespace Claunia.PropertyList PropertyListFormatException("The given binary property list contains a date object of an unknown type (" + objInfo + ")"); - return new NSDate(bytes.Slice(offset + 1, 8)); + return new NSDate(ValuePreprocessor.Preprocess(bytes.Slice(offset + 1, 8).ToArray(), ValuePreprocessor.Type.DATE)); } case 0x4: { @@ -274,7 +274,7 @@ namespace Claunia.PropertyList //ASCII String, each character is 1 byte ReadLengthAndOffset(bytes, objInfo, offset, out int length, out int stroffset); - return new NSString(bytes.Slice(offset + stroffset, length), Encoding.ASCII); + return new NSString(ValuePreprocessor.Preprocess(bytes.Slice(offset + stroffset, length).ToArray(), ValuePreprocessor.Type.STRING), Encoding.ASCII); } case 0x6: { diff --git a/plist-cil/NSDate.cs b/plist-cil/NSDate.cs index 2ff9778..d424925 100644 --- a/plist-cil/NSDate.cs +++ b/plist-cil/NSDate.cs @@ -52,7 +52,7 @@ namespace Claunia.PropertyList public NSDate(ReadOnlySpan bytes) => //dates are 8 byte big-endian double, seconds since the epoch - Date = EPOCH.AddSeconds(ValuePreprocessor.Preprocess(BinaryPropertyListParser.ParseDouble(bytes), ValuePreprocessor.Type.DATE)); + Date = EPOCH.AddSeconds(BinaryPropertyListParser.ParseDouble(bytes)); /// /// Parses a date from its textual representation. That representation has the following pattern: diff --git a/plist-cil/NSString.cs b/plist-cil/NSString.cs index 4426973..cfad91a 100644 --- a/plist-cil/NSString.cs +++ b/plist-cil/NSString.cs @@ -48,9 +48,9 @@ namespace Claunia.PropertyList public NSString(ReadOnlySpan bytes, Encoding encoding) { #if NATIVE_SPAN - Content = ValuePreprocessor.Preprocess(encoding.GetString(bytes), ValuePreprocessor.Type.STRING); + Content = encoding.GetString(bytes); #else - Content = ValuePreprocessor.Preprocess(encoding.GetString(bytes.ToArray()), ValuePreprocessor.Type.STRING); + Content = encoding.GetString(bytes.ToArray()); #endif } diff --git a/plist-cil/ValuePreprocessor.cs b/plist-cil/ValuePreprocessor.cs index 436fa3f..d205a8e 100644 --- a/plist-cil/ValuePreprocessor.cs +++ b/plist-cil/ValuePreprocessor.cs @@ -40,10 +40,12 @@ namespace Claunia.PropertyList { new TypeIdentifier(Type.FLOATING_POINT, typeof(byte[])), NullPreprocessor }, { new TypeIdentifier(Type.UNDEFINED_NUMBER, typeof(string)), NullPreprocessor }, { new TypeIdentifier(Type.STRING, typeof(string)), NullPreprocessor }, + { new TypeIdentifier(Type.STRING, typeof(byte[])), NullPreprocessor }, { new TypeIdentifier(Type.DATA, typeof(string)), NullPreprocessor }, { new TypeIdentifier(Type.DATA, typeof(byte[])), NullPreprocessor }, { new TypeIdentifier(Type.DATE, typeof(string)), NullPreprocessor }, { new TypeIdentifier(Type.DATE, typeof(double)), NullPreprocessor }, + { new TypeIdentifier(Type.DATE, typeof(byte[])), NullPreprocessor }, }; ///