2 // System.Xml.DeserializationTests
\r
5 // Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
\r
7 // (C) 2003 Atsushi Enomoto
\r
11 using System.Globalization;
\r
14 using System.Xml.Serialization;
\r
15 using NUnit.Framework;
\r
16 using MonoTests.System.Xml.TestClasses;
\r
18 namespace MonoTests.System.XmlSerialization
\r
23 public string [] ArrayText;
\r
27 public class DeserializationTests
\r
29 const string XmlSchemaNamespace = "http://www.w3.org/2001/XMLSchema";
\r
30 const string XmlSchemaInstanceNamespace = "http://www.w3.org/2001/XMLSchema-instance";
\r
31 const string SoapEncodingNamespace = "http://schemas.xmlsoap.org/soap/encoding/";
\r
32 const string WsdlTypesNamespace = "http://microsoft.com/wsdl/types/";
\r
33 const string ANamespace = "some:urn";
\r
34 const string AnotherNamespace = "another:urn";
\r
38 private object Deserialize (Type t, string xml)
\r
40 StringReader sr = new StringReader (xml);
\r
41 XmlReader xr = new XmlTextReader (sr);
\r
42 return Deserialize (t, xr);
\r
45 private object Deserialize (Type t, string xml, string defaultNamespace)
\r
47 StringReader sr = new StringReader (xml);
\r
48 XmlReader xr = new XmlTextReader (sr);
\r
49 return Deserialize (t, xr, defaultNamespace);
\r
52 private object Deserialize (Type t, string xml, XmlAttributeOverrides ao)
\r
54 StringReader sr = new StringReader (xml);
\r
55 XmlReader xr = new XmlTextReader (sr);
\r
56 return Deserialize (t, xr, ao);
\r
59 private object DeserializeEncoded (Type t, string xml)
\r
61 StringReader sr = new StringReader (xml);
\r
62 XmlReader xr = new XmlTextReader (sr);
\r
63 return DeserializeEncoded (t, xr);
\r
66 private object Deserialize (Type t, XmlReader xr)
\r
68 XmlSerializer ser = new XmlSerializer (t);
\r
69 result = ser.Deserialize (xr);
\r
73 private object Deserialize (Type t, XmlReader xr, string defaultNamespace)
\r
75 XmlSerializer ser = new XmlSerializer (t, defaultNamespace);
\r
76 result = ser.Deserialize (xr);
\r
80 private object Deserialize (Type t, XmlReader xr, XmlAttributeOverrides ao)
\r
82 XmlSerializer ser = new XmlSerializer (t, ao);
\r
83 result = ser.Deserialize (xr);
\r
87 private object DeserializeEncoded (Type t, XmlReader xr)
\r
89 SoapReflectionImporter im = new SoapReflectionImporter ();
\r
90 XmlTypeMapping tm = im.ImportTypeMapping (t);
\r
91 XmlSerializer ser = new XmlSerializer (tm);
\r
92 result = ser.Deserialize (xr);
\r
97 public void SimpleDeserialize ()
\r
99 Deserialize (typeof (Sample), "<Sample><Text>Test.</Text></Sample>");
\r
100 Assert.AreEqual (typeof (Sample), result.GetType ());
\r
101 Sample sample = result as Sample;
\r
102 Assert.AreEqual ("Test.", sample.Text);
\r
106 public void DeserializeInt ()
\r
108 Deserialize (typeof (int), "<int>10</int>");
\r
109 Assert.AreEqual (typeof (int), result.GetType ());
\r
110 Assert.AreEqual (10, result);
\r
114 public void DeserializeSimpleArray ()
\r
116 Deserialize (typeof (Sample), "<Sample><ArrayText><string>Test1</string><string>Test2</string></ArrayText></Sample>");
\r
117 Assert.AreEqual (typeof (Sample), result.GetType ());
\r
118 Sample sample = result as Sample;
\r
119 Assert.AreEqual ("Test1", sample.ArrayText[0]);
\r
120 Assert.AreEqual ("Test2", sample.ArrayText[1]);
\r
124 public void DeserializeEmptyEnum ()
\r
126 Field f = Deserialize (typeof (Field), "<field modifiers=\"\" />") as Field;
\r
127 Assert.AreEqual (MapModifiers.Public, f.Modifiers);
\r
131 public void DeserializePrivateCollection ()
\r
133 MemoryStream ms = new MemoryStream ();
\r
134 Container c = new Container();
\r
137 XmlSerializer serializer = new XmlSerializer(typeof(Container));
\r
138 serializer.Serialize(ms, c);
\r
141 c = (Container) serializer.Deserialize (ms);
\r
142 Assert.AreEqual (1, c.Items[0]);
\r
146 [Category("NotDotNet")]
\r
147 [ExpectedException (typeof (InvalidOperationException))]
\r
148 public void DeserializeEmptyPrivateCollection ()
\r
150 MemoryStream ms = new MemoryStream ();
\r
151 Container2 c = new Container2(true);
\r
154 XmlSerializer serializer = new XmlSerializer(typeof(Container2));
\r
155 serializer.Serialize(ms, c);
\r
158 c = (Container2) serializer.Deserialize (ms);
\r
162 [Category("NotDotNet")]
\r
163 public void DeserializeArrayReferences ()
\r
165 string s = "<Sample xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">";
\r
166 s += "<ArrayText xmlns:n3=\"http://schemas.xmlsoap.org/soap/encoding/\" xsi:type=\"n3:Array\" n3:arrayType=\"xsd:string[2]\">";
\r
167 s += "<item href=\"#id-606830706\"></item>";
\r
168 s += "<item xsi:type=\"xsd:string\">Hola</item>";
\r
169 s += "</ArrayText>";
\r
170 s += "<string id=\"id-606830706\" xsi:type=\"xsd:string\">Adeu</string>";
\r
172 DeserializeEncoded (typeof(Sample), s);
\r
177 public void TestDeserializeXmlNodeArray ()
\r
179 object ob = Deserialize (typeof(object), "<anyType at=\"1\"><elem1/><elem2/></anyType>");
\r
180 Assert.IsTrue (ob is XmlNode[], "Is node array");
\r
182 XmlNode[] nods = (XmlNode[]) ob;
\r
183 Assert.AreEqual (3, nods.Length, "lengh");
\r
184 Assert.IsTrue (nods[0] is XmlAttribute, "#1");
\r
185 Assert.AreEqual ("at", ((XmlAttribute) nods[0]).LocalName, "#2");
\r
186 Assert.AreEqual ("1", ((XmlAttribute) nods[0]).Value, "#3");
\r
187 Assert.IsTrue (nods[1] is XmlElement, "#4");
\r
188 Assert.AreEqual ("elem1", ((XmlElement) nods[1]).LocalName, "#5");
\r
189 Assert.IsTrue (nods[2] is XmlElement, "#6");
\r
190 Assert.AreEqual ("elem2", ((XmlElement) nods[2]).LocalName, "#7");
\r
194 public void TestDeserializeXmlElement ()
\r
196 object ob = Deserialize (typeof(XmlElement), "<elem/>");
\r
197 Assert.IsTrue (ob is XmlElement, "#1");
\r
198 Assert.AreEqual ("elem", ((XmlElement) ob).LocalName, "#2");
\r
202 public void TestDeserializeXmlCDataSection ()
\r
204 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>");
\r
205 Assert.IsNotNull (c.cdata, "#1");
\r
206 Assert.AreEqual ("data section contents", c.cdata.Value, "#2");
\r
210 public void TestDeserializeXmlNode ()
\r
212 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>");
\r
213 Assert.IsTrue (c.node is XmlText, "#1");
\r
214 Assert.AreEqual ("text", c.node.Value, "#2");
\r
218 public void TestDeserializeChoices ()
\r
220 Choices ch = (Choices) Deserialize (typeof(Choices), "<Choices><ChoiceZero>choice text</ChoiceZero></Choices>");
\r
221 Assert.AreEqual ("choice text", ch.MyChoice, "#A1");
\r
222 Assert.AreEqual (ItemChoiceType.ChoiceZero, ch.ItemType, "#A2");
\r
224 ch = (Choices) Deserialize (typeof(Choices), "<Choices><ChoiceOne>choice text</ChoiceOne></Choices>");
\r
225 Assert.AreEqual ("choice text", ch.MyChoice, "#B1");
\r
226 Assert.AreEqual (ItemChoiceType.StrangeOne, ch.ItemType, "#B2");
\r
228 ch = (Choices) Deserialize (typeof(Choices), "<Choices><ChoiceTwo>choice text</ChoiceTwo></Choices>");
\r
229 Assert.AreEqual ("choice text", ch.MyChoice, "#C1");
\r
230 Assert.AreEqual (ItemChoiceType.ChoiceTwo, ch.ItemType, "#C2");
\r
234 public void TestDeserializeNamesWithSpaces ()
\r
236 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>");
\r
237 Assert.AreEqual (4, ts.elem, "#1");
\r
238 Assert.AreEqual (5, ts.attr, "#2");
\r
242 public void TestDeserializeDefaults ()
\r
244 ListDefaults d2 = (ListDefaults) Deserialize (typeof(ListDefaults), "<root/>");
\r
246 Assert.IsNotNull (d2.list2, "#A1");
\r
247 Assert.IsNull (d2.list3, "#A2");
\r
248 Assert.IsNull (d2.list4, "#A3");
\r
249 Assert.IsNotNull (d2.list5, "#A4");
\r
250 Assert.IsNotNull (d2.ed, "#A5");
\r
251 Assert.IsNotNull (d2.str, "#A6");
\r
253 d2 = (ListDefaults) Deserialize (typeof(ListDefaults), "<root></root>");
\r
255 Assert.IsNotNull (d2.list2, "#B1");
\r
256 Assert.IsNull (d2.list3, "#B2");
\r
257 Assert.IsNull (d2.list4, "#B3");
\r
258 Assert.IsNotNull (d2.list5, "#B4");
\r
259 Assert.IsNotNull (d2.ed, "#B5");
\r
260 Assert.IsNotNull (d2.str, "#B6");
\r
264 public void TestDeserializeChoiceArray ()
\r
266 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>");
\r
267 Assert.IsNotNull (v.Items, "#1");
\r
268 Assert.IsNotNull (v.ItemsElementName, "#2");
\r
269 Assert.AreEqual (2, v.Items.Length, "#3");
\r
270 Assert.AreEqual (2, v.ItemsElementName.Length, "#4");
\r
271 Assert.AreEqual (1, v.Items[0], "#5");
\r
272 Assert.AreEqual (2, v.Items[1], "#6");
\r
273 Assert.AreEqual (ItemsChoiceType.In, v.ItemsElementName[0], "#7");
\r
274 Assert.AreEqual (ItemsChoiceType.Es, v.ItemsElementName[1], "#8");
\r
278 public void TestDeserializeCollection ()
\r
281 s0+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
282 s0+=" <Entity Name='node1'/>";
\r
283 s0+=" <Entity Name='node2'/>";
\r
284 s0+=" </ArrayOfEntity>";
\r
286 EntityCollection col = (EntityCollection) Deserialize (typeof(EntityCollection), s0);
\r
287 Assert.IsNotNull (col, "#1");
\r
288 Assert.AreEqual (2, col.Count, "#2");
\r
289 Assert.IsNull (col[0].Parent, "#3");
\r
290 Assert.IsNull (col[1].Parent, "#4");
\r
294 public void TestDeserializeEmptyCollection ()
\r
297 s1+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
\r
299 EntityCollection col = (EntityCollection) Deserialize (typeof(EntityCollection), s1);
\r
300 Assert.IsNotNull (col, "#A1");
\r
301 Assert.AreEqual (0, col.Count, "#A2");
\r
304 s1_1+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
305 s1_1+=" </ArrayOfEntity>";
\r
307 col = (EntityCollection) Deserialize (typeof(EntityCollection), s1_1);
\r
308 Assert.IsNotNull (col, "#B1");
\r
309 Assert.AreEqual (0, col.Count, "#B2");
\r
313 public void TestDeserializeNilCollectionIsNotNull ()
\r
316 s2+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true'/>";
\r
318 EntityCollection col = (EntityCollection) Deserialize (typeof(EntityCollection), s2);
\r
319 Assert.IsNotNull (col, "#1");
\r
320 Assert.AreEqual (0, col.Count, "#2");
\r
324 public void TestDeserializeObjectCollections ()
\r
327 s3+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
328 s3+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
329 s3+=" <Entity Name='node1'/>";
\r
330 s3+=" <Entity Name='node2'/>";
\r
331 s3+=" </Collection1>";
\r
332 s3+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
333 s3+=" <Entity Name='node1'/>";
\r
334 s3+=" <Entity Name='node2'/>";
\r
335 s3+=" </Collection2>";
\r
336 s3+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
337 s3+=" <Entity Name='node1'/>";
\r
338 s3+=" <Entity Name='node2'/>";
\r
339 s3+=" </Collection3>";
\r
340 s3+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
341 s3+=" <Entity Name='node1'/>";
\r
342 s3+=" <Entity Name='node2'/>";
\r
343 s3+=" </Collection4>";
\r
344 s3+="</Container>";
\r
346 EntityContainer cont = (EntityContainer) Deserialize (typeof(EntityContainer), s3);
\r
347 Assert.IsNotNull (cont, "#A1");
\r
349 Assert.IsNotNull (cont.Collection1, "#B1");
\r
350 Assert.AreEqual (2, cont.Collection1.Count, "#B2");
\r
351 Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
\r
352 Assert.AreEqual ("assigned", cont.Collection1[0].Parent, "#B4");
\r
353 Assert.AreEqual ("assigned", cont.Collection1[1].Parent, "#B5");
\r
355 Assert.IsNotNull (cont.Collection2, "#C1");
\r
356 Assert.AreEqual (2, cont.Collection2.Count, "#C2");
\r
357 Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
\r
358 Assert.AreEqual ("assigned", cont.Collection2[0].Parent, "#C4");
\r
359 Assert.AreEqual ("assigned", cont.Collection2[1].Parent, "#C5");
\r
361 Assert.IsNotNull (cont.Collection3, "#D1");
\r
362 Assert.AreEqual (2, cont.Collection3.Count, "#D2");
\r
363 Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
\r
364 Assert.AreEqual ("root", cont.Collection3[0].Parent, "#D4");
\r
365 Assert.AreEqual ("root", cont.Collection3[1].Parent, "#D5");
\r
367 Assert.IsNotNull (cont.Collection4, "#E1");
\r
368 Assert.AreEqual (2, cont.Collection4.Count, "#E2");
\r
369 Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
\r
370 Assert.AreEqual ("root", cont.Collection4[0].Parent, "#E4");
\r
371 Assert.AreEqual ("root", cont.Collection4[1].Parent, "#E5");
\r
375 public void TestDeserializeEmptyObjectCollections ()
\r
378 s4+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
379 s4+="</Container>";
\r
381 EntityContainer cont = (EntityContainer) Deserialize (typeof(EntityContainer), s4);
\r
382 Assert.IsNotNull (cont, "#A1");
\r
384 Assert.IsNotNull (cont.Collection1, "#B1");
\r
385 Assert.AreEqual (0, cont.Collection1.Count, "#B2");
\r
386 Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
\r
388 Assert.IsNotNull (cont.Collection2, "#C1");
\r
389 Assert.AreEqual (0, cont.Collection2.Count, "#C2");
\r
390 Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
\r
392 Assert.IsNotNull (cont.Collection3, "#D1");
\r
393 Assert.AreEqual (0, cont.Collection3.Count, "#D2");
\r
394 Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
\r
396 Assert.IsNotNull (cont.Collection4, "#E1");
\r
397 Assert.AreEqual (0, cont.Collection4.Count, "#E2");
\r
398 Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
\r
402 public void TestDeserializeObjectNilCollectionsAreNotNull ()
\r
405 s5+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
406 s5+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
\r
407 s5+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
\r
408 s5+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
\r
409 s5+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
\r
410 s5+="</Container>";
\r
412 EntityContainer cont = (EntityContainer) Deserialize (typeof(EntityContainer), s5);
\r
413 Assert.IsNotNull (cont, "#A1");
\r
415 Assert.IsNotNull (cont.Collection1, "#B1");
\r
416 Assert.AreEqual (0, cont.Collection1.Count, "#B2");
\r
417 Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
\r
419 Assert.IsNotNull (cont.Collection2, "#C1");
\r
420 Assert.AreEqual (0, cont.Collection2.Count, "#C2");
\r
421 Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
\r
423 Assert.IsNotNull (cont.Collection3, "#D1");
\r
424 Assert.AreEqual (0, cont.Collection3.Count, "#D2");
\r
425 Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
\r
427 Assert.IsNotNull (cont.Collection4, "#E1");
\r
428 Assert.AreEqual (0, cont.Collection4.Count, "#E2");
\r
429 Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
\r
433 public void TestDeserializeObjectEmptyCollections ()
\r
436 s6+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
437 s6+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
\r
438 s6+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
\r
439 s6+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
\r
440 s6+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
\r
441 s6+="</Container>";
\r
443 EntityContainer cont = (EntityContainer) Deserialize (typeof(EntityContainer), s6);
\r
444 Assert.IsNotNull (cont, "#A1");
\r
446 Assert.IsNotNull (cont.Collection1, "#B1");
\r
447 Assert.AreEqual (0, cont.Collection1.Count, "#B2");
\r
448 Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
\r
450 Assert.IsNotNull (cont.Collection2, "#C1");
\r
451 Assert.AreEqual (0, cont.Collection2.Count, "#C2");
\r
452 Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
\r
454 Assert.IsNotNull (cont.Collection3, "#D1");
\r
455 Assert.AreEqual (0, cont.Collection3.Count, "#D2");
\r
456 Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
\r
458 Assert.IsNotNull (cont.Collection4, "#E1");
\r
459 Assert.AreEqual (0, cont.Collection4.Count, "#E2");
\r
460 Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
\r
464 public void TestDeserializeObjectEmptyArrays ()
\r
467 s6+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
468 s6+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
\r
469 s6+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
\r
470 s6+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
\r
471 s6+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
\r
472 s6+="</Container>";
\r
474 ArrayEntityContainer cont = (ArrayEntityContainer) Deserialize (typeof(ArrayEntityContainer), s6);
\r
475 Assert.IsNotNull (cont, "#A1");
\r
477 Assert.IsNotNull (cont.Collection1, "#B1");
\r
478 Assert.AreEqual (0, cont.Collection1.Length, "#B2");
\r
480 Assert.IsNotNull (cont.Collection2, "#C1");
\r
481 Assert.AreEqual (0, cont.Collection2.Length, "#C2");
\r
483 Assert.IsNotNull (cont.Collection3, "#D1");
\r
484 Assert.AreEqual (0, cont.Collection3.Length, "#D2");
\r
486 Assert.IsNotNull (cont.Collection4, "#E1");
\r
487 Assert.AreEqual (0, cont.Collection4.Length, "#E2");
\r
491 public void TestDeserializeEmptyObjectArrays ()
\r
494 s4+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
495 s4+="</Container>";
\r
497 ArrayEntityContainer cont = (ArrayEntityContainer) Deserialize (typeof(ArrayEntityContainer), s4);
\r
498 Assert.IsNotNull (cont, "#A1");
\r
500 Assert.IsNull (cont.Collection1, "#B1");
\r
501 Assert.IsNull (cont.Collection2, "#B2");
\r
503 Assert.IsNotNull (cont.Collection3, "#C1");
\r
504 Assert.AreEqual (0, cont.Collection3.Length, "#C2");
\r
506 Assert.IsNotNull (cont.Collection4, "#D1");
\r
507 Assert.AreEqual (0, cont.Collection4.Length, "#D2");
\r
511 public void TestDeserializeObjectNilArrays ()
\r
514 s5+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
515 s5+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
\r
516 s5+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
\r
517 s5+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
\r
518 s5+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
\r
519 s5+="</Container>";
\r
521 ArrayEntityContainer cont = (ArrayEntityContainer) Deserialize (typeof(ArrayEntityContainer), s5);
\r
522 Assert.IsNotNull (cont, "#A1");
\r
524 Assert.IsNull (cont.Collection1, "#B1");
\r
525 Assert.IsNull (cont.Collection2, "#B2");
\r
526 Assert.IsNull (cont.Collection3, "#B3");
\r
528 Assert.IsNotNull (cont.Collection4, "#C1");
\r
529 Assert.AreEqual (0, cont.Collection4.Length, "#C2");
\r
533 public void TestDeserializeEmptyArray ()
\r
536 s1+="<ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
\r
538 Entity[] col = (Entity[]) Deserialize (typeof(Entity[]), s1);
\r
539 Assert.IsNotNull (col, "#A1");
\r
540 Assert.AreEqual (0, col.Length, "#A2");
\r
543 s1_1+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
544 s1_1+=" </ArrayOfEntity>";
\r
546 col = (Entity[]) Deserialize (typeof(Entity[]), s1_1);
\r
547 Assert.IsNotNull (col, "#B1");
\r
548 Assert.AreEqual (0, col.Length, "#B2");
\r
552 public void TestDeserializeNilArray ()
\r
555 s2 += "<ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true'/>";
\r
557 Entity[] col = (Entity[]) Deserialize (typeof(Entity[]), s2);
\r
558 Assert.IsNull (col, "#1");
\r
562 public void TestDeserializeObjectWithReadonlyCollection ()
\r
565 s3+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
566 s3+=" <Collection1>";
\r
567 s3+=" <Entity Name='node1'/>";
\r
568 s3+=" <Entity Name='node2'/>";
\r
569 s3+=" </Collection1>";
\r
570 s3+="</Container>";
\r
572 ObjectWithReadonlyCollection cont = (ObjectWithReadonlyCollection) Deserialize (typeof(ObjectWithReadonlyCollection), s3);
\r
573 Assert.IsNotNull (cont, "#1");
\r
574 Assert.IsNotNull (cont.Collection1, "#2");
\r
575 Assert.AreEqual (2, cont.Collection1.Count, "#3");
\r
576 Assert.AreEqual ("root", cont.Collection1.Container, "#4");
\r
577 Assert.AreEqual ("root", cont.Collection1[0].Parent, "#5");
\r
578 Assert.AreEqual ("root", cont.Collection1[1].Parent, "#6");
\r
582 [ExpectedException (typeof(InvalidOperationException))]
\r
583 public void TestDeserializeObjectWithReadonlyNulCollection ()
\r
586 s3+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
587 s3+=" <Collection1>";
\r
588 s3+=" <Entity Name='node1'/>";
\r
589 s3+=" <Entity Name='node2'/>";
\r
590 s3+=" </Collection1>";
\r
591 s3+="</Container>";
\r
593 Deserialize (typeof(ObjectWithReadonlyNulCollection), s3);
\r
597 public void TestDeserializeObjectWithReadonlyArray ()
\r
600 s3+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
\r
601 s3+=" <Collection1>";
\r
602 s3+=" <Entity Name='node1'/>";
\r
603 s3+=" <Entity Name='node2'/>";
\r
604 s3+=" </Collection1>";
\r
605 s3+="</Container>";
\r
607 ObjectWithReadonlyArray cont = (ObjectWithReadonlyArray) Deserialize (typeof(ObjectWithReadonlyArray), s3);
\r
608 Assert.IsNotNull (cont, "#1");
\r
609 Assert.IsNotNull (cont.Collection1, "#2");
\r
610 Assert.AreEqual (0, cont.Collection1.Length, "#3");
\r
614 public void TestDeserialize_EnumDefaultValue ()
\r
616 EnumDefaultValue e;
\r
618 e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue />");
\r
619 Assert.AreEqual (0, (int) e, "#1");
\r
621 e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue> e3</EnumDefaultValue>");
\r
622 Assert.AreEqual (EnumDefaultValue.e3, e, "#2");
\r
624 e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue>e1 e2</EnumDefaultValue>");
\r
625 Assert.AreEqual (EnumDefaultValue.e3, e, "#3");
\r
627 e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue> e1 e2 </EnumDefaultValue>");
\r
628 Assert.AreEqual (EnumDefaultValue.e1 | EnumDefaultValue.e2, e, "#4");
\r
632 public void TestDeserialize_EnumDefaultValueNF ()
\r
634 EnumDefaultValueNF e;
\r
636 e = (EnumDefaultValueNF) Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF>e3</EnumDefaultValueNF>");
\r
637 Assert.AreEqual (EnumDefaultValueNF.e3, e, "#A1");
\r
640 Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF />");
\r
641 Assert.Fail ("#B1");
\r
642 } catch (InvalidOperationException ex) {
\r
643 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
\r
644 Assert.IsNotNull (ex.InnerException, "#B3");
\r
645 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#B4");
\r
646 Assert.IsNotNull (ex.InnerException.Message, "#B5");
\r
647 Assert.IsTrue (ex.InnerException.Message.IndexOf ("''") != -1, "#B6");
\r
648 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#B7");
\r
652 Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF>e1 e3</EnumDefaultValueNF>");
\r
653 Assert.Fail ("#C1");
\r
654 } catch (InvalidOperationException ex) {
\r
655 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
\r
656 Assert.IsNotNull (ex.InnerException, "#C3");
\r
657 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#C4");
\r
658 Assert.IsNotNull (ex.InnerException.Message, "#C5");
\r
659 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'e1 e3'") != -1, "#C6");
\r
660 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#C7");
\r
664 Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF> e3</EnumDefaultValueNF>");
\r
665 Assert.Fail ("#D1");
\r
666 } catch (InvalidOperationException ex) {
\r
667 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
\r
668 Assert.IsNotNull (ex.InnerException, "#D3");
\r
669 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D4");
\r
670 Assert.IsNotNull (ex.InnerException.Message, "#D5");
\r
671 Assert.IsTrue (ex.InnerException.Message.IndexOf ("' e3'") != -1, "#D6");
\r
672 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#D7");
\r
676 Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF> </EnumDefaultValueNF>");
\r
677 Assert.Fail ("#E1");
\r
678 } catch (InvalidOperationException ex) {
\r
679 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");
\r
680 Assert.IsNotNull (ex.InnerException, "#E3");
\r
681 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#E4");
\r
682 Assert.IsNotNull (ex.InnerException.Message, "#E5");
\r
683 Assert.IsTrue (ex.InnerException.Message.IndexOf ("' '") != -1, "#E6");
\r
684 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#E7");
\r
688 Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF>1</EnumDefaultValueNF>");
\r
689 Assert.Fail ("#F1");
\r
690 } catch (InvalidOperationException ex) {
\r
691 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");
\r
692 Assert.IsNotNull (ex.InnerException, "#F3");
\r
693 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#F4");
\r
694 Assert.IsNotNull (ex.InnerException.Message, "#F5");
\r
695 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'1'") != -1, "#F6");
\r
696 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#F7");
\r
701 public void TestDeserialize_FlagEnum ()
\r
705 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum />");
\r
706 Assert.AreEqual (0, (int) e, "#A1");
\r
708 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>one</FlagEnum>");
\r
709 Assert.AreEqual (FlagEnum.e1, e, "#A2");
\r
711 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>one\u200atwo</FlagEnum>");
\r
712 Assert.AreEqual (FlagEnum.e1 | FlagEnum.e2, e, "#A3");
\r
714 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>one two four</FlagEnum>");
\r
715 Assert.AreEqual (FlagEnum.e1 | FlagEnum.e2 | FlagEnum.e4, e, "#A4");
\r
717 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum> two four </FlagEnum>");
\r
718 Assert.AreEqual (FlagEnum.e2 | FlagEnum.e4, e, "#A5");
\r
720 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>two four two</FlagEnum>");
\r
721 Assert.AreEqual (FlagEnum.e2 | FlagEnum.e4, e, "#A6");
\r
723 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>two four two\tone\u2002four\u200btwo one</FlagEnum>");
\r
724 Assert.AreEqual (FlagEnum.e1 | FlagEnum.e2 | FlagEnum.e4, e, "#A7");
\r
726 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum></FlagEnum>");
\r
727 Assert.AreEqual (0, (int) e, "#A8");
\r
729 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum> </FlagEnum>");
\r
730 Assert.AreEqual (0, (int) e, "#A9");
\r
733 Deserialize (typeof (FlagEnum), "<FlagEnum>1</FlagEnum>");
\r
734 Assert.Fail ("#B1");
\r
735 } catch (InvalidOperationException ex) {
\r
736 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
\r
737 Assert.IsNotNull (ex.InnerException, "#B3");
\r
738 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#B4");
\r
739 Assert.IsNotNull (ex.InnerException.Message, "#B5");
\r
740 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'1'") != -1, "#B6");
\r
741 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#B7");
\r
745 Deserialize (typeof (FlagEnum), "<FlagEnum>one,two</FlagEnum>");
\r
746 Assert.Fail ("#C1");
\r
747 } catch (InvalidOperationException ex) {
\r
748 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
\r
749 Assert.IsNotNull (ex.InnerException, "#C3");
\r
750 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#C4");
\r
751 Assert.IsNotNull (ex.InnerException.Message, "#C5");
\r
752 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'one,two'") != -1, "#C6");
\r
753 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#C7");
\r
757 Deserialize (typeof (FlagEnum), "<FlagEnum>one something</FlagEnum>");
\r
758 Assert.Fail ("#D1");
\r
759 } catch (InvalidOperationException ex) {
\r
760 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
\r
761 Assert.IsNotNull (ex.InnerException, "#D3");
\r
762 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D4");
\r
763 Assert.IsNotNull (ex.InnerException.Message, "#D5");
\r
764 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'something'") != -1, "#D6");
\r
765 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#D7");
\r
770 public void TestDeserialize_ZeroFlagEnum ()
\r
774 e = (ZeroFlagEnum) Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum />");
\r
775 Assert.AreEqual (ZeroFlagEnum.e0, e, "#A1");
\r
776 e = (ZeroFlagEnum) Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum></ZeroFlagEnum>");
\r
777 Assert.AreEqual (ZeroFlagEnum.e0, e, "#A2");
\r
780 Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum>four</ZeroFlagEnum>");
\r
781 Assert.Fail ("#B1");
\r
782 } catch (InvalidOperationException ex) {
\r
783 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
\r
784 Assert.IsNotNull (ex.InnerException, "#B3");
\r
785 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#B4");
\r
786 Assert.IsNotNull (ex.InnerException.Message, "#B5");
\r
787 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'four'") != -1, "#B6");
\r
788 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (ZeroFlagEnum).FullName) != -1, "#B7");
\r
792 Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum> o<n>e four </ZeroFlagEnum>");
\r
793 Assert.Fail ("#C1");
\r
794 } catch (InvalidOperationException ex) {
\r
795 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
\r
796 Assert.IsNotNull (ex.InnerException, "#C3");
\r
797 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#C4");
\r
798 Assert.IsNotNull (ex.InnerException.Message, "#C5");
\r
799 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'four'") != -1, "#C6");
\r
800 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (ZeroFlagEnum).FullName) != -1, "#C7");
\r
804 Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum>four o<n>e</ZeroFlagEnum>");
\r
805 Assert.Fail ("#D1");
\r
806 } catch (InvalidOperationException ex) {
\r
807 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
\r
808 Assert.IsNotNull (ex.InnerException, "#D3");
\r
809 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D4");
\r
810 Assert.IsNotNull (ex.InnerException.Message, "#D5");
\r
811 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'four'") != -1, "#D6");
\r
812 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (ZeroFlagEnum).FullName) != -1, "#D7");
\r
817 public void TestDeserialize_PrimitiveTypesContainer ()
\r
819 Deserialize (typeof (PrimitiveTypesContainer), string.Format (CultureInfo.InvariantCulture,
\r
820 "<?xml version='1.0' encoding='utf-16'?>" +
\r
821 "<PrimitiveTypesContainer xmlns:xsd='{0}' xmlns:xsi='{1}' xmlns='{2}'>" +
\r
822 "<Number xsi:type='xsd:int'>2004</Number>" +
\r
823 "<Name xsi:type='xsd:string'>some name</Name>" +
\r
824 "<Index xsi:type='xsd:unsignedByte'>56</Index>" +
\r
825 "<Password xsi:type='xsd:base64Binary'>8w8=</Password>" +
\r
826 "<PathSeparatorCharacter xmlns:q1='{3}' xsi:type='q1:char'>47</PathSeparatorCharacter>" +
\r
827 "</PrimitiveTypesContainer>", XmlSchemaNamespace,
\r
828 XmlSchemaInstanceNamespace, ANamespace, WsdlTypesNamespace));
\r
829 Assert.AreEqual (typeof (PrimitiveTypesContainer), result.GetType (), "#A1");
\r
831 PrimitiveTypesContainer deserialized = (PrimitiveTypesContainer) result;
\r
832 Assert.AreEqual (2004, deserialized.Number, "#A2");
\r
833 Assert.AreEqual ("some name", deserialized.Name, "#A3");
\r
834 Assert.AreEqual ((byte) 56, deserialized.Index, "#A4");
\r
835 Assert.AreEqual (new byte[] { 243, 15 }, deserialized.Password, "#A5");
\r
836 Assert.AreEqual ('/', deserialized.PathSeparatorCharacter, "#A6");
\r
838 DeserializeEncoded (typeof (PrimitiveTypesContainer), string.Format (CultureInfo.InvariantCulture,
\r
839 "<?xml version='1.0' encoding='utf-16'?>" +
\r
840 "<q1:PrimitiveTypesContainer xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' xmlns:q1='{2}'>" +
\r
841 "<Number xsi:type='xsd:int'>2004</Number>" +
\r
842 "<Name xsi:type='xsd:string'>some name</Name>" +
\r
843 "<Index xsi:type='xsd:unsignedByte'>56</Index>" +
\r
844 "<Password xsi:type='xsd:base64Binary'>8w8=</Password>" +
\r
845 "<PathSeparatorCharacter xmlns:q1='{3}' xsi:type='q1:char'>47</PathSeparatorCharacter>" +
\r
846 "</q1:PrimitiveTypesContainer>", XmlSchemaNamespace,
\r
847 XmlSchemaInstanceNamespace, AnotherNamespace, WsdlTypesNamespace));
\r
848 Assert.AreEqual (typeof (PrimitiveTypesContainer), result.GetType (), "#B1");
\r
850 deserialized = (PrimitiveTypesContainer) result;
\r
851 Assert.AreEqual (2004, deserialized.Number, "#B2");
\r
852 Assert.AreEqual ("some name", deserialized.Name, "#B3");
\r
853 Assert.AreEqual ((byte) 56, deserialized.Index, "#B4");
\r
854 Assert.AreEqual (new byte[] { 243, 15 }, deserialized.Password, "#B5");
\r
855 Assert.AreEqual ('/', deserialized.PathSeparatorCharacter, "#B6");
\r