Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corefx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShin Mao <shmao@microsoft.com>2017-03-15 23:58:20 +0300
committerGitHub <noreply@github.com>2017-03-15 23:58:20 +0300
commit3d4a6a0917746ebe1be1b667e2705e3ab60b149e (patch)
treea1b07bc751017f468d39ec633b9b2f3040161bec /src
parent1d83f9020d1e19da0a128214af245b78458d90b0 (diff)
parentf07da876871c133e019c86ac1623777fe9f21e54 (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.cs81
-rw-r--r--src/System.Runtime.Serialization.Xml/tests/SerializationTypes.cs70
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;
+ }
+ }
+}