From 9cbdf5e5eb6706601de10db7e4951080e496473c Mon Sep 17 00:00:00 2001 From: Steve Molloy Date: Tue, 23 Sep 2025 14:43:08 -0700 Subject: [PATCH] Re-add tests that were mysteriously removed when copilot created import/export tests. --- .../XmlSerializerTests.RuntimeOnly.cs | 72 ++++++++++++++++++- .../tests/XmlSerializer/XmlSerializerTests.cs | 2 +- 2 files changed, 71 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.RuntimeOnly.cs b/src/libraries/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.RuntimeOnly.cs index 25d42cde5895ef..3c04059c5e4249 100644 --- a/src/libraries/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.RuntimeOnly.cs +++ b/src/libraries/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.RuntimeOnly.cs @@ -43,9 +43,31 @@ public static void Xml_ByteArrayAsRoot() Assert.Equal(x, y); } + [Fact] + public static void Xml_ByteArrayNull() + { + Assert.Null(SerializeAndDeserialize(null, +@" +")); + byte[] x = new byte[] { 1, 2 }; + byte[] y = SerializeAndDeserialize(x, +@" +AQI="); + Assert.Equal(x, y); + } + [Fact] public static void Xml_CharAsRoot() { + Assert.StrictEqual(char.MinValue, SerializeAndDeserialize(char.MinValue, +@" +0")); + Assert.StrictEqual(char.MaxValue, SerializeAndDeserialize(char.MaxValue, +@" +65535")); + Assert.StrictEqual('a', SerializeAndDeserialize('a', +@" +97")); Assert.StrictEqual('\u00F1', SerializeAndDeserialize('\u00F1', @" 241")); @@ -2313,14 +2335,32 @@ public static void Xml_Soap_ObjectAsRoot() "\r\ntrue", () => ser)); + Assert.Equal( + "abc", + SerializeAndDeserialize( + "abc", + "\r\nabc", + () => ser)); + + var nullDeserialized = SerializeAndDeserialize( + null, + "\r\n", + () => ser); + Assert.NotNull(nullDeserialized); + Assert.True(typeof(object) == nullDeserialized.GetType()); + } + + [Fact] + public static void Xml_Soap_ObjectAsRoot_Nullable() + { XmlTypeMapping nullableTypeMapping = new SoapReflectionImporter().ImportTypeMapping(typeof(TypeWithNullableObject)); - var nullableSer = new XmlSerializer(nullableTypeMapping); + var ser = new XmlSerializer(nullableTypeMapping); var value = new TypeWithNullableObject { MyObject = null }; TypeWithNullableObject actual = SerializeAndDeserialize( value, "\r\n\r\n \r\n", - () => nullableSer); + () => ser); Assert.NotNull(actual); Assert.Null(actual.MyObject); } @@ -2449,6 +2489,34 @@ public static void XmlSerializationGeneratedCodeTest() Assert.NotNull(cg); } + [Fact] + // XmlTypeMapping is not included in System.Xml.XmlSerializer 4.0.0.0 facade in GAC + public static void Xml_FromMappings() + { + var types = new[] { typeof(Guid), typeof(List) }; + XmlReflectionImporter importer = new XmlReflectionImporter(); + XmlTypeMapping[] mappings = new XmlTypeMapping[types.Length]; + for (int i = 0; i < types.Length; i++) + { + mappings[i] = importer.ImportTypeMapping(types[i]); + } + var serializers = XmlSerializer.FromMappings(mappings, typeof(object)); + Xml_GuidAsRoot_Helper(serializers[0]); + Xml_ListGenericRoot_Helper(serializers[1]); + } + + [Fact] + // XmlTypeMapping is not included in System.Xml.XmlSerializer 4.0.0.0 facade in GAC + public static void Xml_ConstructorWithTypeMapping() + { + XmlTypeMapping mapping = null; + XmlSerializer serializer = null; + Assert.Throws(() => { new XmlSerializer(mapping); }); + + mapping = new XmlReflectionImporter(null, null).ImportTypeMapping(typeof(List)); + serializer = new XmlSerializer(mapping); + Xml_ListGenericRoot_Helper(serializer); + } [Fact] public static void XmlMembersMapping_PrimitiveValue() diff --git a/src/libraries/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs b/src/libraries/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs index c09c96481865b9..0f9d8decddd1d2 100644 --- a/src/libraries/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs +++ b/src/libraries/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs @@ -2984,4 +2984,4 @@ private static string GuessCachedName(string name) } throw new ArgumentException($"Cannot guess cached field name from switch name '{name}'"); } -} \ No newline at end of file +}