diff options
author | Shin Mao <shmao@microsoft.com> | 2017-03-15 23:58:20 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-15 23:58:20 +0300 |
commit | 3d4a6a0917746ebe1be1b667e2705e3ab60b149e (patch) | |
tree | a1b07bc751017f468d39ec633b9b2f3040161bec /src | |
parent | 1d83f9020d1e19da0a128214af245b78458d90b0 (diff) | |
parent | f07da876871c133e019c86ac1623777fe9f21e54 (diff) |
Merge pull request #17069 from shmao/XmlMembersMappingTests
Added tests for XmlMembersMapping.
Diffstat (limited to 'src')
-rw-r--r-- | src/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs | 81 | ||||
-rw-r--r-- | src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs | 70 |
2 files changed, 150 insertions, 1 deletions
diff --git a/src/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs b/src/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs index 6d73660ab8..f6277d9104 100644 --- a/src/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs +++ b/src/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs @@ -3000,6 +3000,87 @@ string.Format(@"<?xml version=""1.0"" encoding=""utf-8""?> var cg = new MycodeGenerator(); Assert.NotNull(cg); } + +#if ReflectionOnly + [ActiveIssue(10675)] +#endif + [Fact] + public static void XmlMembersMapping_PrimitiveValue() + { + string memberName = "value"; + var getDataRequestBodyValue = 3; + var getDataRequestBodyActual = RoundTripWithXmlMembersMapping<int>(getDataRequestBodyValue, memberName, "<?xml version=\"1.0\"?>\r\n<value xmlns=\"http://tempuri.org/\">3</value>"); + + Assert.NotNull(getDataRequestBodyActual); + Assert.Equal(getDataRequestBodyValue, getDataRequestBodyActual); + } + +#if ReflectionOnly + [ActiveIssue(10675)] +#endif + [Fact] + public static void XmlMembersMapping_SimpleType() + { + string memberName = "GetData"; + var getDataRequestBodyValue = new GetDataRequestBody(3); + var getDataRequestBodyActual = RoundTripWithXmlMembersMapping<GetDataRequestBody>(getDataRequestBodyValue, memberName, "<?xml version=\"1.0\"?>\r\n<GetData xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://tempuri.org/\">\r\n <value>3</value>\r\n</GetData>"); + + 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<GetDataUsingDataContractRequestBody>(requestBodyValue, memberName, "<?xml version=\"1.0\"?>\r\n<GetDataUsingDataContract xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://tempuri.org/\">\r\n <composite>\r\n <BoolValue>true</BoolValue>\r\n <StringValue>foo</StringValue>\r\n </composite>\r\n</GetDataUsingDataContract>"); + + Assert.NotNull(requestBodyActual); + Assert.Equal(requestBodyValue.composite.BoolValue, requestBodyActual.composite.BoolValue); + Assert.Equal(requestBodyValue.composite.StringValue, requestBodyActual.composite.StringValue); + } + + private static T RoundTripWithXmlMembersMapping<T>(object requestBodyValue, string memberName, string baseline, bool skipStringCompare = false) + { + 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); + return (T)actual[0]; + } + } + 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..7e63045e58 100644 --- a/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs +++ b/src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs @@ -4232,4 +4232,72 @@ 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 BoolValueField; + } + set + { + BoolValueField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue = false)] + public string StringValue + { + get + { + return StringValueField; + } + set + { + StringValueField = value; + } + } +} |