From 350c960fe66ddd087e7848f27eeba5d98b2eeeae Mon Sep 17 00:00:00 2001 From: Shin Mao Date: Mon, 13 Mar 2017 16:35:31 -0700 Subject: Added tests for XmlMembersMapping. Ref #10675. --- .../tests/XmlSerializer/XmlSerializerTests.cs | 68 +++++++++++++++++++ .../tests/SerializationTypes.cs | 78 +++++++++++++++++++++- 2 files changed, 145 insertions(+), 1 deletion(-) diff --git a/src/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs b/src/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs index 6d73660ab8..e74fea849b 100644 --- a/src/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs +++ b/src/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs @@ -3000,6 +3000,74 @@ string.Format(@" var cg = new MycodeGenerator(); Assert.NotNull(cg); } + +#if ReflectionOnly + [ActiveIssue(10675)] +#endif + [Fact] + public static void XmlMembersMapping_SimpleType() + { + string memberName = "GetData"; + var getDataRequestBodyValue = new GetDataRequestBody(3); + var getDataRequestBodyActual = RoundTripWithXmlMembersMapping(getDataRequestBodyValue, memberName, "\r\n\r\n 3\r\n"); + + Assert.NotNull(getDataRequestBodyActual); + Assert.Equal(getDataRequestBodyValue.value, getDataRequestBodyActual.value); + } + +#if ReflectionOnly + [ActiveIssue(10675)] +#endif + [Fact] + public static void XmlMembersMapping_CompositeType() + { + string memberName = "GetDataUsingDataContract"; + var requestBodyValue = new GetDataUsingDataContractRequestBody() { composite = new CompositeTypeForXmlMembersMapping() { BoolValue = true, StringValue = "foo" } }; + var requestBodyActual = RoundTripWithXmlMembersMapping(requestBodyValue, memberName, "\r\n\r\n \r\n true\r\n foo\r\n \r\n"); + + Assert.NotNull(requestBodyActual); + Assert.Equal(requestBodyValue.composite.BoolValue, requestBodyActual.composite.BoolValue); + Assert.Equal(requestBodyValue.composite.StringValue, requestBodyActual.composite.StringValue); + } + + private static T RoundTripWithXmlMembersMapping(object requestBodyValue, string memberName, string baseline, bool skipStringCompare = false) where T : class + { + var member = new XmlReflectionMember(); + member.MemberName = memberName; + member.MemberType = typeof(T); + member.XmlAttributes = new XmlAttributes(); + var elementAttribute = new XmlElementAttribute(); + elementAttribute.ElementName = memberName; + string ns = "http://tempuri.org/"; + elementAttribute.Namespace = ns; + member.XmlAttributes.XmlElements.Add(elementAttribute); + + var importer = new XmlReflectionImporter(null, ns); + var membersMapping = importer.ImportMembersMapping(null, ns, new XmlReflectionMember[] { member }, false); + var serializer = XmlSerializer.FromMappings(new XmlMapping[] { membersMapping })[0]; + using (var ms = new MemoryStream()) + { + object[] value = new object[] { requestBodyValue }; + serializer.Serialize(ms, value); + ms.Flush(); + ms.Position = 0; + string actualOutput = new StreamReader(ms).ReadToEnd(); + if (!skipStringCompare) + { + Utils.CompareResult result = Utils.Compare(baseline, actualOutput); + Assert.True(result.Equal, string.Format("{1}{0}Test failed for input: {2}{0}Expected: {3}{0}Actual: {4}", + Environment.NewLine, result.ErrorMessage, value, baseline, actualOutput)); + } + + ms.Position = 0; + var actual = serializer.Deserialize(ms) as object[]; + Assert.NotNull(actual); + Assert.Equal(value.Length, actual.Length); + var requestBodyActual = actual[0] as T; + return requestBodyActual; + } + } + private static Stream GenerateStreamFromString(string s) { var stream = new MemoryStream(); diff --git a/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs b/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs index e58283e069..e3f87ba168 100644 --- a/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs +++ b/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs @@ -4232,4 +4232,80 @@ public class MySpecialOrder : MyOrder public class MySpecialOrder2 : MyOrder { public int SecondaryID; -} \ No newline at end of file +} + +[System.Runtime.Serialization.DataContractAttribute(Namespace = "http://tempuri.org/")] +public partial class GetDataRequestBody +{ + + [System.Runtime.Serialization.DataMemberAttribute(Order = 0)] + public int value; + + public GetDataRequestBody() + { + } + + public GetDataRequestBody(int value) + { + this.value = value; + } +} + +[System.Runtime.Serialization.DataContractAttribute(Namespace = "http://tempuri.org/")] +public partial class GetDataUsingDataContractRequestBody +{ + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false, Order = 0)] + public CompositeTypeForXmlMembersMapping composite; + + public GetDataUsingDataContractRequestBody() + { + } + + public GetDataUsingDataContractRequestBody(CompositeTypeForXmlMembersMapping composite) + { + this.composite = composite; + } +} + +[System.Runtime.Serialization.DataContractAttribute(Name = "CompositeType", Namespace = "http://tempuri.org/")] +[System.SerializableAttribute()] +public partial class CompositeTypeForXmlMembersMapping +{ + private bool BoolValueField; + + [System.Runtime.Serialization.OptionalFieldAttribute()] + private string StringValueField; + + [System.Runtime.Serialization.DataMemberAttribute(IsRequired = true)] + public bool BoolValue + { + get + { + return this.BoolValueField; + } + set + { + if ((this.BoolValueField.Equals(value) != true)) + { + this.BoolValueField = value; + } + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] + public string StringValue + { + get + { + return this.StringValueField; + } + set + { + if ((object.ReferenceEquals(this.StringValueField, value) != true)) + { + this.StringValueField = value; + } + } + } +} -- cgit v1.2.3 From f07da876871c133e019c86ac1623777fe9f21e54 Mon Sep 17 00:00:00 2001 From: Shin Mao Date: Tue, 14 Mar 2017 13:51:15 -0700 Subject: Add test for primitive value. --- .../tests/XmlSerializer/XmlSerializerTests.cs | 19 ++++++++++++++++--- .../tests/SerializationTypes.cs | 16 ++++------------ 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs b/src/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs index e74fea849b..f6277d9104 100644 --- a/src/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs +++ b/src/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs @@ -3001,6 +3001,20 @@ string.Format(@" Assert.NotNull(cg); } +#if ReflectionOnly + [ActiveIssue(10675)] +#endif + [Fact] + public static void XmlMembersMapping_PrimitiveValue() + { + string memberName = "value"; + var getDataRequestBodyValue = 3; + var getDataRequestBodyActual = RoundTripWithXmlMembersMapping(getDataRequestBodyValue, memberName, "\r\n3"); + + Assert.NotNull(getDataRequestBodyActual); + Assert.Equal(getDataRequestBodyValue, getDataRequestBodyActual); + } + #if ReflectionOnly [ActiveIssue(10675)] #endif @@ -3030,7 +3044,7 @@ string.Format(@" Assert.Equal(requestBodyValue.composite.StringValue, requestBodyActual.composite.StringValue); } - private static T RoundTripWithXmlMembersMapping(object requestBodyValue, string memberName, string baseline, bool skipStringCompare = false) where T : class + private static T RoundTripWithXmlMembersMapping(object requestBodyValue, string memberName, string baseline, bool skipStringCompare = false) { var member = new XmlReflectionMember(); member.MemberName = memberName; @@ -3063,8 +3077,7 @@ string.Format(@" var actual = serializer.Deserialize(ms) as object[]; Assert.NotNull(actual); Assert.Equal(value.Length, actual.Length); - var requestBodyActual = actual[0] as T; - return requestBodyActual; + return (T)actual[0]; } } diff --git a/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs b/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs index e3f87ba168..7e63045e58 100644 --- a/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs +++ b/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs @@ -4237,7 +4237,6 @@ public class MySpecialOrder2 : MyOrder [System.Runtime.Serialization.DataContractAttribute(Namespace = "http://tempuri.org/")] public partial class GetDataRequestBody { - [System.Runtime.Serialization.DataMemberAttribute(Order = 0)] public int value; @@ -4254,7 +4253,6 @@ public partial class GetDataRequestBody [System.Runtime.Serialization.DataContractAttribute(Namespace = "http://tempuri.org/")] public partial class GetDataUsingDataContractRequestBody { - [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false, Order = 0)] public CompositeTypeForXmlMembersMapping composite; @@ -4282,14 +4280,11 @@ public partial class CompositeTypeForXmlMembersMapping { get { - return this.BoolValueField; + return BoolValueField; } set { - if ((this.BoolValueField.Equals(value) != true)) - { - this.BoolValueField = value; - } + BoolValueField = value; } } @@ -4298,14 +4293,11 @@ public partial class CompositeTypeForXmlMembersMapping { get { - return this.StringValueField; + return StringValueField; } set { - if ((object.ReferenceEquals(this.StringValueField, value) != true)) - { - this.StringValueField = value; - } + StringValueField = value; } } } -- cgit v1.2.3