// // System.Xml.DeserializationTests // // Author: // Atsushi Enomoto // // (C) 2003 Atsushi Enomoto // // using System; using System.IO; using System.Xml; using System.Xml.Serialization; using NUnit.Framework; using MonoTests.System.Xml.TestClasses; namespace MonoTests.System.XmlSerialization { public class Sample { public string Text; public string [] ArrayText; } [TestFixture] public class DeserializationTests { object result; private object Deserialize (Type t, string xml) { StringReader sr = new StringReader (xml); XmlReader xr = new XmlTextReader (sr); return Deserialize (t, xr); } private object DeserializeEncoded (Type t, string xml) { StringReader sr = new StringReader (xml); XmlReader xr = new XmlTextReader (sr); return DeserializeEncoded (t, xr); } private object Deserialize (Type t, XmlReader xr) { XmlSerializer ser = new XmlSerializer (t); result = ser.Deserialize (xr); return result; } private object DeserializeEncoded (Type t, XmlReader xr) { SoapReflectionImporter im = new SoapReflectionImporter (); XmlTypeMapping tm = im.ImportTypeMapping (t); XmlSerializer ser = new XmlSerializer (tm); result = ser.Deserialize (xr); return result; } [Test] public void SimpleDeserialize () { Deserialize (typeof (Sample), "Test."); Assertion.AssertEquals (typeof (Sample), result.GetType ()); Sample sample = result as Sample; Assertion.AssertEquals ("Test.", sample.Text); } [Test] public void DeserializeInt () { Deserialize (typeof (int), "10"); Assertion.AssertEquals (typeof (int), result.GetType ()); Assertion.AssertEquals (10, result); } [Test] public void DeserializeSimpleArray () { Deserialize (typeof (Sample), "Test1Test2"); Assertion.AssertEquals (typeof (Sample), result.GetType ()); Sample sample = result as Sample; Assertion.AssertEquals ("Test1", sample.ArrayText [0]); Assertion.AssertEquals ("Test2", sample.ArrayText [1]); } [Test] public void DeserializeEmptyEnum () { Field f = Deserialize (typeof (Field), "") as Field; Assertion.AssertEquals (MapModifiers.Public, f.Modifiers); } [Test] public void DeserializePrivateCollection () { MemoryStream ms = new MemoryStream (); Container c = new Container(); c.Items.Add(1); XmlSerializer serializer = new XmlSerializer(typeof(Container)); serializer.Serialize(ms, c); ms.Position = 0; c = (Container) serializer.Deserialize (ms); Assertion.AssertEquals (1, c.Items[0]); } [Test] [Category("NotDotNet")] [ExpectedException (typeof (InvalidOperationException))] public void DeserializeEmptyPrivateCollection () { MemoryStream ms = new MemoryStream (); Container2 c = new Container2(true); c.Items.Add(1); XmlSerializer serializer = new XmlSerializer(typeof(Container2)); serializer.Serialize(ms, c); ms.Position = 0; c = (Container2) serializer.Deserialize (ms); } [Test] [Category("NotDotNet")] public void DeserializeArrayReferences () { string s = ""; s += ""; s += ""; s += "Hola"; s += ""; s += "Adeu"; s += ""; DeserializeEncoded (typeof(Sample), s); } [Test] public void TestDeserializeXmlNodeArray () { object ob = Deserialize (typeof(object), ""); Assertion.Assert ("Is node array", ob is XmlNode[]); XmlNode[] nods = (XmlNode[]) ob; Assertion.AssertEquals ("lengh", 3, nods.Length); Assertion.Assert ("#1", nods[0] is XmlAttribute); Assertion.AssertEquals ("#2", "at", ((XmlAttribute)nods[0]).LocalName); Assertion.AssertEquals ("#3", "1", ((XmlAttribute)nods[0]).Value); Assertion.Assert ("#4", nods[1] is XmlElement); Assertion.AssertEquals ("#5", "elem1", ((XmlElement)nods[1]).LocalName); Assertion.Assert ("#6", nods[2] is XmlElement); Assertion.AssertEquals ("#7", "elem2", ((XmlElement)nods[2]).LocalName); } [Test] public void TestDeserializeXmlElement () { object ob = Deserialize (typeof(XmlElement), ""); Assertion.Assert ("#1", ob is XmlElement); Assertion.AssertEquals ("#2", "elem", ((XmlElement)ob).LocalName); } [Test] public void TestDeserializeXmlCDataSection () { CDataContainer c = (CDataContainer) Deserialize (typeof(CDataContainer), ""); Assertion.AssertNotNull ("#1", c.cdata); Assertion.AssertEquals ("#2", "data section contents", c.cdata.Value); } [Test] public void TestDeserializeXmlNode () { NodeContainer c = (NodeContainer) Deserialize (typeof(NodeContainer), "text"); Assertion.Assert ("#1", c.node is XmlText); Assertion.AssertEquals ("#2", "text", c.node.Value); } [Test] public void TestDeserializeChoices () { Choices ch = (Choices) Deserialize (typeof(Choices), "choice text"); Assertion.AssertEquals ("#1", "choice text", ch.MyChoice); Assertion.AssertEquals ("#2", ItemChoiceType.ChoiceZero, ch.ItemType); ch = (Choices) Deserialize (typeof(Choices), "choice text"); Assertion.AssertEquals ("#1", "choice text", ch.MyChoice); Assertion.AssertEquals ("#2", ItemChoiceType.StrangeOne, ch.ItemType); ch = (Choices) Deserialize (typeof(Choices), "choice text"); Assertion.AssertEquals ("#1", "choice text", ch.MyChoice); Assertion.AssertEquals ("#2", ItemChoiceType.ChoiceTwo, ch.ItemType); } [Test] public void TestDeserializeNamesWithSpaces () { TestSpace ts = (TestSpace) Deserialize (typeof(TestSpace), "4"); Assertion.AssertEquals ("#1", 4, ts.elem); Assertion.AssertEquals ("#2", 5, ts.attr); } [Test] public void TestDeserializeDefaults () { ListDefaults d2 = (ListDefaults) Deserialize (typeof(ListDefaults), ""); Assertion.AssertNotNull ("list2", d2.list2); Assertion.AssertNull ("list3", d2.list3); Assertion.AssertNull ("list4", d2.list4); Assertion.AssertNotNull ("list5", d2.list5); Assertion.AssertNotNull ("ed", d2.ed); Assertion.AssertNotNull ("str", d2.str); d2 = (ListDefaults) Deserialize (typeof(ListDefaults), ""); Assertion.AssertNotNull ("2 list2", d2.list2); Assertion.AssertNull ("2 list3", d2.list3); Assertion.AssertNull ("2 list4", d2.list4); Assertion.AssertNotNull ("2 list5", d2.list5); Assertion.AssertNotNull ("2 ed", d2.ed); Assertion.AssertNotNull ("2 str", d2.str); } [Test] public void TestDeserializeChoiceArray () { CompositeValueType v = (CompositeValueType) Deserialize (typeof(CompositeValueType), "12"); Assertion.AssertNotNull ("v.Items", v.Items); Assertion.AssertNotNull ("v.ItemsElementName", v.ItemsElementName); Assertion.AssertEquals ("v.Items.Length", 2, v.Items.Length); Assertion.AssertEquals ("v.ItemsElementName.Length", 2, v.ItemsElementName.Length); Assertion.AssertEquals ("v.Items[0]", 1, v.Items[0]); Assertion.AssertEquals ("v.Items[1]", 2, v.Items[1]); Assertion.AssertEquals ("v.ItemsElementName[0]", ItemsChoiceType.In, v.ItemsElementName[0]); Assertion.AssertEquals ("v.ItemsElementName[1]", ItemsChoiceType.Es, v.ItemsElementName[1]); } } }