2 // System.Xml.DeserializationTests
\r
5 // Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
\r
7 // (C) 2003 Atsushi Enomoto
\r
13 using System.Xml.Serialization;
\r
14 using NUnit.Framework;
\r
15 using MonoTests.System.Xml.TestClasses;
\r
17 namespace MonoTests.System.XmlSerialization
\r
22 public string [] ArrayText;
\r
26 public class DeserializationTests
\r
30 private object Deserialize (Type t, string xml)
\r
32 StringReader sr = new StringReader (xml);
\r
33 XmlReader xr = new XmlTextReader (sr);
\r
34 return Deserialize (t, xr);
\r
37 private object DeserializeEncoded (Type t, string xml)
\r
39 StringReader sr = new StringReader (xml);
\r
40 XmlReader xr = new XmlTextReader (sr);
\r
41 return DeserializeEncoded (t, xr);
\r
44 private object Deserialize (Type t, XmlReader xr)
\r
46 XmlSerializer ser = new XmlSerializer (t);
\r
47 result = ser.Deserialize (xr);
\r
51 private object DeserializeEncoded (Type t, XmlReader xr)
\r
53 SoapReflectionImporter im = new SoapReflectionImporter ();
\r
54 XmlTypeMapping tm = im.ImportTypeMapping (t);
\r
55 XmlSerializer ser = new XmlSerializer (tm);
\r
56 result = ser.Deserialize (xr);
\r
61 public void SimpleDeserialize ()
\r
63 Deserialize (typeof (Sample), "<Sample><Text>Test.</Text></Sample>");
\r
64 Assertion.AssertEquals (typeof (Sample), result.GetType ());
\r
65 Sample sample = result as Sample;
\r
66 Assertion.AssertEquals ("Test.", sample.Text);
\r
70 public void DeserializeInt ()
\r
72 Deserialize (typeof (int), "<int>10</int>");
\r
73 Assertion.AssertEquals (typeof (int), result.GetType ());
\r
74 Assertion.AssertEquals (10, result);
\r
78 public void DeserializeSimpleArray ()
\r
80 Deserialize (typeof (Sample), "<Sample><ArrayText><string>Test1</string><string>Test2</string></ArrayText></Sample>");
\r
81 Assertion.AssertEquals (typeof (Sample), result.GetType ());
\r
82 Sample sample = result as Sample;
\r
83 Assertion.AssertEquals ("Test1", sample.ArrayText [0]);
\r
84 Assertion.AssertEquals ("Test2", sample.ArrayText [1]);
\r
88 public void DeserializeEmptyEnum ()
\r
90 Field f = Deserialize (typeof (Field), "<field modifiers=\"\" />") as Field;
\r
91 Assertion.AssertEquals (MapModifiers.Public, f.Modifiers);
\r
95 public void DeserializePrivateCollection ()
\r
97 MemoryStream ms = new MemoryStream ();
\r
98 Container c = new Container();
\r
101 XmlSerializer serializer = new XmlSerializer(typeof(Container));
\r
102 serializer.Serialize(ms, c);
\r
105 c = (Container) serializer.Deserialize (ms);
\r
106 Assertion.AssertEquals (1, c.Items[0]);
\r
110 [Category("NotDotNet")]
\r
111 [ExpectedException (typeof (InvalidOperationException))]
\r
112 public void DeserializeEmptyPrivateCollection ()
\r
114 MemoryStream ms = new MemoryStream ();
\r
115 Container2 c = new Container2(true);
\r
118 XmlSerializer serializer = new XmlSerializer(typeof(Container2));
\r
119 serializer.Serialize(ms, c);
\r
122 c = (Container2) serializer.Deserialize (ms);
\r
126 [Category("NotDotNet")]
\r
127 public void DeserializeArrayReferences ()
\r
129 string s = "<Sample xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">";
\r
130 s += "<ArrayText xmlns:n3=\"http://schemas.xmlsoap.org/soap/encoding/\" xsi:type=\"n3:Array\" n3:arrayType=\"xsd:string[2]\">";
\r
131 s += "<item href=\"#id-606830706\"></item>";
\r
132 s += "<item xsi:type=\"xsd:string\">Hola</item>";
\r
133 s += "</ArrayText>";
\r
134 s += "<string id=\"id-606830706\" xsi:type=\"xsd:string\">Adeu</string>";
\r
136 DeserializeEncoded (typeof(Sample), s);
\r
141 public void TestDeserializeXmlNodeArray ()
143 object ob = Deserialize (typeof(object), "<anyType at=\"1\"><elem1/><elem2/></anyType>");
144 Assertion.Assert ("Is node array", ob is XmlNode[]);
146 XmlNode[] nods = (XmlNode[]) ob;
147 Assertion.AssertEquals ("lengh", 3, nods.Length);
148 Assertion.Assert ("#1", nods[0] is XmlAttribute);
149 Assertion.AssertEquals ("#2", "at", ((XmlAttribute)nods[0]).LocalName);
150 Assertion.AssertEquals ("#3", "1", ((XmlAttribute)nods[0]).Value);
151 Assertion.Assert ("#4", nods[1] is XmlElement);
152 Assertion.AssertEquals ("#5", "elem1", ((XmlElement)nods[1]).LocalName);
153 Assertion.Assert ("#6", nods[2] is XmlElement);
154 Assertion.AssertEquals ("#7", "elem2", ((XmlElement)nods[2]).LocalName);
158 public void TestDeserializeXmlElement ()
160 object ob = Deserialize (typeof(XmlElement), "<elem/>");
161 Assertion.Assert ("#1", ob is XmlElement);
162 Assertion.AssertEquals ("#2", "elem", ((XmlElement)ob).LocalName);
166 public void TestDeserializeXmlCDataSection ()
168 CDataContainer c = (CDataContainer) Deserialize (typeof(CDataContainer), "<CDataContainer xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><cdata><![CDATA[data section contents]]></cdata></CDataContainer>");
169 Assertion.AssertNotNull ("#1", c.cdata);
170 Assertion.AssertEquals ("#2", "data section contents", c.cdata.Value);
174 public void TestDeserializeXmlNode ()
176 NodeContainer c = (NodeContainer) Deserialize (typeof(NodeContainer), "<NodeContainer xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><node>text</node></NodeContainer>");
177 Assertion.Assert ("#1", c.node is XmlText);
178 Assertion.AssertEquals ("#2", "text", c.node.Value);
182 public void TestDeserializeChoices ()
\r
184 Choices ch = (Choices) Deserialize (typeof(Choices), "<Choices><ChoiceZero>choice text</ChoiceZero></Choices>");
\r
185 Assertion.AssertEquals ("#1", "choice text", ch.MyChoice);
\r
186 Assertion.AssertEquals ("#2", ItemChoiceType.ChoiceZero, ch.ItemType);
\r
188 ch = (Choices) Deserialize (typeof(Choices), "<Choices><ChoiceOne>choice text</ChoiceOne></Choices>");
\r
189 Assertion.AssertEquals ("#1", "choice text", ch.MyChoice);
\r
190 Assertion.AssertEquals ("#2", ItemChoiceType.StrangeOne, ch.ItemType);
\r
192 ch = (Choices) Deserialize (typeof(Choices), "<Choices><ChoiceTwo>choice text</ChoiceTwo></Choices>");
\r
193 Assertion.AssertEquals ("#1", "choice text", ch.MyChoice);
\r
194 Assertion.AssertEquals ("#2", ItemChoiceType.ChoiceTwo, ch.ItemType);
\r
198 public void TestDeserializeNamesWithSpaces ()
\r
200 TestSpace ts = (TestSpace) Deserialize (typeof(TestSpace), "<Type_x0020_with_x0020_space xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' Attribute_x0020_with_x0020_space='5'><Element_x0020_with_x0020_space>4</Element_x0020_with_x0020_space></Type_x0020_with_x0020_space>");
201 Assertion.AssertEquals ("#1", 4, ts.elem);
\r
202 Assertion.AssertEquals ("#2", 5, ts.attr);
\r
206 public void TestDeserializeDefaults ()
208 ListDefaults d2 = (ListDefaults) Deserialize (typeof(ListDefaults), "<root/>");
210 Assertion.AssertNotNull ("list2", d2.list2);
211 Assertion.AssertNull ("list3", d2.list3);
212 Assertion.AssertNull ("list4", d2.list4);
213 Assertion.AssertNotNull ("list5", d2.list5);
214 Assertion.AssertNotNull ("ed", d2.ed);
215 Assertion.AssertNotNull ("str", d2.str);
217 d2 = (ListDefaults) Deserialize (typeof(ListDefaults), "<root></root>");
219 Assertion.AssertNotNull ("2 list2", d2.list2);
220 Assertion.AssertNull ("2 list3", d2.list3);
221 Assertion.AssertNull ("2 list4", d2.list4);
222 Assertion.AssertNotNull ("2 list5", d2.list5);
223 Assertion.AssertNotNull ("2 ed", d2.ed);
224 Assertion.AssertNotNull ("2 str", d2.str);
228 public void TestDeserializeChoiceArray ()
230 CompositeValueType v = (CompositeValueType) Deserialize (typeof(CompositeValueType), "<?xml version=\"1.0\" encoding=\"utf-16\"?><CompositeValueType xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><In>1</In><Es>2</Es></CompositeValueType>");
231 Assertion.AssertNotNull ("v.Items", v.Items);
232 Assertion.AssertNotNull ("v.ItemsElementName", v.ItemsElementName);
233 Assertion.AssertEquals ("v.Items.Length", 2, v.Items.Length);
\r
234 Assertion.AssertEquals ("v.ItemsElementName.Length", 2, v.ItemsElementName.Length);
\r
235 Assertion.AssertEquals ("v.Items[0]", 1, v.Items[0]);
\r
236 Assertion.AssertEquals ("v.Items[1]", 2, v.Items[1]);
\r
237 Assertion.AssertEquals ("v.ItemsElementName[0]", ItemsChoiceType.In, v.ItemsElementName[0]);
\r
238 Assertion.AssertEquals ("v.ItemsElementName[1]", ItemsChoiceType.Es, v.ItemsElementName[1]);
\r