2 // System.Xml.DeserializationTests
5 // Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
7 // (C) 2003 Atsushi Enomoto
11 using System.Globalization;
14 using System.Xml.Serialization;
15 using NUnit.Framework;
16 using MonoTests.System.Xml.TestClasses;
18 namespace MonoTests.System.XmlSerialization
23 public string [] ArrayText;
27 public class DeserializationTests
29 const string XmlSchemaNamespace = "http://www.w3.org/2001/XMLSchema";
30 const string XmlSchemaInstanceNamespace = "http://www.w3.org/2001/XMLSchema-instance";
31 const string SoapEncodingNamespace = "http://schemas.xmlsoap.org/soap/encoding/";
32 const string WsdlTypesNamespace = "http://microsoft.com/wsdl/types/";
33 const string ANamespace = "some:urn";
34 const string AnotherNamespace = "another:urn";
38 private object Deserialize (Type t, string xml)
40 StringReader sr = new StringReader (xml);
41 XmlReader xr = new XmlTextReader (sr);
42 return Deserialize (t, xr);
45 private object Deserialize (Type t, string xml, string defaultNamespace)
47 StringReader sr = new StringReader (xml);
48 XmlReader xr = new XmlTextReader (sr);
49 return Deserialize (t, xr, defaultNamespace);
52 private object Deserialize (Type t, string xml, XmlAttributeOverrides ao)
54 StringReader sr = new StringReader (xml);
55 XmlReader xr = new XmlTextReader (sr);
56 return Deserialize (t, xr, ao);
59 private object DeserializeEncoded (Type t, string xml)
61 StringReader sr = new StringReader (xml);
62 XmlReader xr = new XmlTextReader (sr);
63 return DeserializeEncoded (t, xr);
66 private object Deserialize (Type t, XmlReader xr)
68 XmlSerializer ser = new XmlSerializer (t);
69 result = ser.Deserialize (xr);
73 private object Deserialize (Type t, XmlReader xr, string defaultNamespace)
75 XmlSerializer ser = new XmlSerializer (t, defaultNamespace);
76 result = ser.Deserialize (xr);
80 private object Deserialize (Type t, XmlReader xr, XmlAttributeOverrides ao)
82 XmlSerializer ser = new XmlSerializer (t, ao);
83 result = ser.Deserialize (xr);
87 private object DeserializeEncoded (Type t, XmlReader xr)
89 SoapReflectionImporter im = new SoapReflectionImporter ();
90 XmlTypeMapping tm = im.ImportTypeMapping (t);
91 XmlSerializer ser = new XmlSerializer (tm);
92 result = ser.Deserialize (xr);
97 public void SimpleDeserialize ()
99 Deserialize (typeof (Sample), "<Sample><Text>Test.</Text></Sample>");
100 Assert.AreEqual (typeof (Sample), result.GetType ());
101 Sample sample = result as Sample;
102 Assert.AreEqual ("Test.", sample.Text);
106 public void DeserializeInt ()
108 Deserialize (typeof (int), "<int>10</int>");
109 Assert.AreEqual (typeof (int), result.GetType ());
110 Assert.AreEqual (10, result);
114 public void DeserializeSimpleArray ()
116 Deserialize (typeof (Sample), "<Sample><ArrayText><string>Test1</string><string>Test2</string></ArrayText></Sample>");
117 Assert.AreEqual (typeof (Sample), result.GetType ());
118 Sample sample = result as Sample;
119 Assert.AreEqual ("Test1", sample.ArrayText[0]);
120 Assert.AreEqual ("Test2", sample.ArrayText[1]);
124 public void DeserializeEmptyEnum ()
126 Field f = Deserialize (typeof (Field), "<field modifiers=\"\" />") as Field;
127 Assert.AreEqual (MapModifiers.Public, f.Modifiers);
131 public void DeserializePrivateCollection ()
133 MemoryStream ms = new MemoryStream ();
134 Container c = new Container();
137 XmlSerializer serializer = new XmlSerializer(typeof(Container));
138 serializer.Serialize(ms, c);
141 c = (Container) serializer.Deserialize (ms);
142 Assert.AreEqual (1, c.Items[0]);
146 [Category("NotDotNet")]
147 [ExpectedException (typeof (InvalidOperationException))]
148 public void DeserializeEmptyPrivateCollection ()
150 MemoryStream ms = new MemoryStream ();
151 Container2 c = new Container2(true);
154 XmlSerializer serializer = new XmlSerializer(typeof(Container2));
155 serializer.Serialize(ms, c);
158 c = (Container2) serializer.Deserialize (ms);
162 [Category("NotDotNet")]
163 public void DeserializeArrayReferences ()
165 string s = "<Sample xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">";
166 s += "<ArrayText xmlns:n3=\"http://schemas.xmlsoap.org/soap/encoding/\" xsi:type=\"n3:Array\" n3:arrayType=\"xsd:string[2]\">";
167 s += "<item href=\"#id-606830706\"></item>";
168 s += "<item xsi:type=\"xsd:string\">Hola</item>";
170 s += "<string id=\"id-606830706\" xsi:type=\"xsd:string\">Adeu</string>";
172 DeserializeEncoded (typeof(Sample), s);
177 public void TestDeserializeXmlNodeArray ()
179 object ob = Deserialize (typeof(object), "<anyType at=\"1\"><elem1/><elem2/></anyType>");
180 Assert.IsTrue (ob is XmlNode[], "Is node array");
182 XmlNode[] nods = (XmlNode[]) ob;
183 Assert.AreEqual (3, nods.Length, "lengh");
184 Assert.IsTrue (nods[0] is XmlAttribute, "#1");
185 Assert.AreEqual ("at", ((XmlAttribute) nods[0]).LocalName, "#2");
186 Assert.AreEqual ("1", ((XmlAttribute) nods[0]).Value, "#3");
187 Assert.IsTrue (nods[1] is XmlElement, "#4");
188 Assert.AreEqual ("elem1", ((XmlElement) nods[1]).LocalName, "#5");
189 Assert.IsTrue (nods[2] is XmlElement, "#6");
190 Assert.AreEqual ("elem2", ((XmlElement) nods[2]).LocalName, "#7");
194 public void TestDeserializeXmlElement ()
196 object ob = Deserialize (typeof(XmlElement), "<elem/>");
197 Assert.IsTrue (ob is XmlElement, "#1");
198 Assert.AreEqual ("elem", ((XmlElement) ob).LocalName, "#2");
202 public void TestDeserializeXmlCDataSection ()
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>");
205 Assert.IsNotNull (c.cdata, "#1");
206 Assert.AreEqual ("data section contents", c.cdata.Value, "#2");
210 public void TestDeserializeXmlNode ()
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>");
213 Assert.IsTrue (c.node is XmlText, "#1");
214 Assert.AreEqual ("text", c.node.Value, "#2");
218 public void TestDeserializeChoices ()
220 Choices ch = (Choices) Deserialize (typeof(Choices), "<Choices><ChoiceZero>choice text</ChoiceZero></Choices>");
221 Assert.AreEqual ("choice text", ch.MyChoice, "#A1");
222 Assert.AreEqual (ItemChoiceType.ChoiceZero, ch.ItemType, "#A2");
224 ch = (Choices) Deserialize (typeof(Choices), "<Choices><ChoiceOne>choice text</ChoiceOne></Choices>");
225 Assert.AreEqual ("choice text", ch.MyChoice, "#B1");
226 Assert.AreEqual (ItemChoiceType.StrangeOne, ch.ItemType, "#B2");
228 ch = (Choices) Deserialize (typeof(Choices), "<Choices><ChoiceTwo>choice text</ChoiceTwo></Choices>");
229 Assert.AreEqual ("choice text", ch.MyChoice, "#C1");
230 Assert.AreEqual (ItemChoiceType.ChoiceTwo, ch.ItemType, "#C2");
234 public void TestDeserializeNamesWithSpaces ()
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>");
237 Assert.AreEqual (4, ts.elem, "#1");
238 Assert.AreEqual (5, ts.attr, "#2");
242 public void TestDeserializeDefaults ()
244 ListDefaults d2 = (ListDefaults) Deserialize (typeof(ListDefaults), "<root/>");
246 Assert.IsNotNull (d2.list2, "#A1");
247 Assert.IsNull (d2.list3, "#A2");
248 Assert.IsNull (d2.list4, "#A3");
249 Assert.IsNotNull (d2.list5, "#A4");
250 Assert.IsNotNull (d2.ed, "#A5");
251 Assert.IsNotNull (d2.str, "#A6");
253 d2 = (ListDefaults) Deserialize (typeof(ListDefaults), "<root></root>");
255 Assert.IsNotNull (d2.list2, "#B1");
256 Assert.IsNull (d2.list3, "#B2");
257 Assert.IsNull (d2.list4, "#B3");
258 Assert.IsNotNull (d2.list5, "#B4");
259 Assert.IsNotNull (d2.ed, "#B5");
260 Assert.IsNotNull (d2.str, "#B6");
264 public void TestDeserializeChoiceArray ()
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>");
267 Assert.IsNotNull (v.Items, "#1");
268 Assert.IsNotNull (v.ItemsElementName, "#2");
269 Assert.AreEqual (2, v.Items.Length, "#3");
270 Assert.AreEqual (2, v.ItemsElementName.Length, "#4");
271 Assert.AreEqual (1, v.Items[0], "#5");
272 Assert.AreEqual (2, v.Items[1], "#6");
273 Assert.AreEqual (ItemsChoiceType.In, v.ItemsElementName[0], "#7");
274 Assert.AreEqual (ItemsChoiceType.Es, v.ItemsElementName[1], "#8");
278 public void TestDeserializeCollection ()
281 s0+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
282 s0+=" <Entity Name='node1'/>";
283 s0+=" <Entity Name='node2'/>";
284 s0+=" </ArrayOfEntity>";
286 EntityCollection col = (EntityCollection) Deserialize (typeof(EntityCollection), s0);
287 Assert.IsNotNull (col, "#1");
288 Assert.AreEqual (2, col.Count, "#2");
289 Assert.IsNull (col[0].Parent, "#3");
290 Assert.IsNull (col[1].Parent, "#4");
294 public void TestDeserializeEmptyCollection ()
297 s1+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
299 EntityCollection col = (EntityCollection) Deserialize (typeof(EntityCollection), s1);
300 Assert.IsNotNull (col, "#A1");
301 Assert.AreEqual (0, col.Count, "#A2");
304 s1_1+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
305 s1_1+=" </ArrayOfEntity>";
307 col = (EntityCollection) Deserialize (typeof(EntityCollection), s1_1);
308 Assert.IsNotNull (col, "#B1");
309 Assert.AreEqual (0, col.Count, "#B2");
313 public void TestDeserializeNilCollectionIsNotNull ()
316 s2+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true'/>";
318 EntityCollection col = (EntityCollection) Deserialize (typeof(EntityCollection), s2);
319 Assert.IsNotNull (col, "#1");
320 Assert.AreEqual (0, col.Count, "#2");
324 public void TestDeserializeObjectCollections ()
327 s3+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
328 s3+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
329 s3+=" <Entity Name='node1'/>";
330 s3+=" <Entity Name='node2'/>";
331 s3+=" </Collection1>";
332 s3+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
333 s3+=" <Entity Name='node1'/>";
334 s3+=" <Entity Name='node2'/>";
335 s3+=" </Collection2>";
336 s3+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
337 s3+=" <Entity Name='node1'/>";
338 s3+=" <Entity Name='node2'/>";
339 s3+=" </Collection3>";
340 s3+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
341 s3+=" <Entity Name='node1'/>";
342 s3+=" <Entity Name='node2'/>";
343 s3+=" </Collection4>";
346 EntityContainer cont = (EntityContainer) Deserialize (typeof(EntityContainer), s3);
347 Assert.IsNotNull (cont, "#A1");
349 Assert.IsNotNull (cont.Collection1, "#B1");
350 Assert.AreEqual (2, cont.Collection1.Count, "#B2");
351 Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
352 Assert.AreEqual ("assigned", cont.Collection1[0].Parent, "#B4");
353 Assert.AreEqual ("assigned", cont.Collection1[1].Parent, "#B5");
355 Assert.IsNotNull (cont.Collection2, "#C1");
356 Assert.AreEqual (2, cont.Collection2.Count, "#C2");
357 Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
358 Assert.AreEqual ("assigned", cont.Collection2[0].Parent, "#C4");
359 Assert.AreEqual ("assigned", cont.Collection2[1].Parent, "#C5");
361 Assert.IsNotNull (cont.Collection3, "#D1");
362 Assert.AreEqual (2, cont.Collection3.Count, "#D2");
363 Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
364 Assert.AreEqual ("root", cont.Collection3[0].Parent, "#D4");
365 Assert.AreEqual ("root", cont.Collection3[1].Parent, "#D5");
367 Assert.IsNotNull (cont.Collection4, "#E1");
368 Assert.AreEqual (2, cont.Collection4.Count, "#E2");
369 Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
370 Assert.AreEqual ("root", cont.Collection4[0].Parent, "#E4");
371 Assert.AreEqual ("root", cont.Collection4[1].Parent, "#E5");
375 public void TestDeserializeEmptyObjectCollections ()
378 s4+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
381 EntityContainer cont = (EntityContainer) Deserialize (typeof(EntityContainer), s4);
382 Assert.IsNotNull (cont, "#A1");
384 Assert.IsNotNull (cont.Collection1, "#B1");
385 Assert.AreEqual (0, cont.Collection1.Count, "#B2");
386 Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
388 Assert.IsNotNull (cont.Collection2, "#C1");
389 Assert.AreEqual (0, cont.Collection2.Count, "#C2");
390 Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
392 Assert.IsNotNull (cont.Collection3, "#D1");
393 Assert.AreEqual (0, cont.Collection3.Count, "#D2");
394 Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
396 Assert.IsNotNull (cont.Collection4, "#E1");
397 Assert.AreEqual (0, cont.Collection4.Count, "#E2");
398 Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
402 public void TestDeserializeObjectNilCollectionsAreNotNull ()
405 s5+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
406 s5+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
407 s5+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
408 s5+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
409 s5+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
412 EntityContainer cont = (EntityContainer) Deserialize (typeof(EntityContainer), s5);
413 Assert.IsNotNull (cont, "#A1");
415 Assert.IsNotNull (cont.Collection1, "#B1");
416 Assert.AreEqual (0, cont.Collection1.Count, "#B2");
417 Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
419 Assert.IsNotNull (cont.Collection2, "#C1");
420 Assert.AreEqual (0, cont.Collection2.Count, "#C2");
421 Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
423 Assert.IsNotNull (cont.Collection3, "#D1");
424 Assert.AreEqual (0, cont.Collection3.Count, "#D2");
425 Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
427 Assert.IsNotNull (cont.Collection4, "#E1");
428 Assert.AreEqual (0, cont.Collection4.Count, "#E2");
429 Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
433 public void TestDeserializeObjectEmptyCollections ()
436 s6+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
437 s6+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
438 s6+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
439 s6+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
440 s6+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
443 EntityContainer cont = (EntityContainer) Deserialize (typeof(EntityContainer), s6);
444 Assert.IsNotNull (cont, "#A1");
446 Assert.IsNotNull (cont.Collection1, "#B1");
447 Assert.AreEqual (0, cont.Collection1.Count, "#B2");
448 Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
450 Assert.IsNotNull (cont.Collection2, "#C1");
451 Assert.AreEqual (0, cont.Collection2.Count, "#C2");
452 Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
454 Assert.IsNotNull (cont.Collection3, "#D1");
455 Assert.AreEqual (0, cont.Collection3.Count, "#D2");
456 Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
458 Assert.IsNotNull (cont.Collection4, "#E1");
459 Assert.AreEqual (0, cont.Collection4.Count, "#E2");
460 Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
464 public void TestDeserializeObjectEmptyArrays ()
467 s6+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
468 s6+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
469 s6+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
470 s6+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
471 s6+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
474 ArrayEntityContainer cont = (ArrayEntityContainer) Deserialize (typeof(ArrayEntityContainer), s6);
475 Assert.IsNotNull (cont, "#A1");
477 Assert.IsNotNull (cont.Collection1, "#B1");
478 Assert.AreEqual (0, cont.Collection1.Length, "#B2");
480 Assert.IsNotNull (cont.Collection2, "#C1");
481 Assert.AreEqual (0, cont.Collection2.Length, "#C2");
483 Assert.IsNotNull (cont.Collection3, "#D1");
484 Assert.AreEqual (0, cont.Collection3.Length, "#D2");
486 Assert.IsNotNull (cont.Collection4, "#E1");
487 Assert.AreEqual (0, cont.Collection4.Length, "#E2");
491 public void TestDeserializeEmptyObjectArrays ()
494 s4+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
497 ArrayEntityContainer cont = (ArrayEntityContainer) Deserialize (typeof(ArrayEntityContainer), s4);
498 Assert.IsNotNull (cont, "#A1");
500 Assert.IsNull (cont.Collection1, "#B1");
501 Assert.IsNull (cont.Collection2, "#B2");
503 Assert.IsNotNull (cont.Collection3, "#C1");
504 Assert.AreEqual (0, cont.Collection3.Length, "#C2");
506 Assert.IsNotNull (cont.Collection4, "#D1");
507 Assert.AreEqual (0, cont.Collection4.Length, "#D2");
511 public void TestDeserializeObjectNilArrays ()
514 s5+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
515 s5+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
516 s5+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
517 s5+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
518 s5+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
521 ArrayEntityContainer cont = (ArrayEntityContainer) Deserialize (typeof(ArrayEntityContainer), s5);
522 Assert.IsNotNull (cont, "#A1");
524 Assert.IsNull (cont.Collection1, "#B1");
525 Assert.IsNull (cont.Collection2, "#B2");
526 Assert.IsNull (cont.Collection3, "#B3");
528 Assert.IsNotNull (cont.Collection4, "#C1");
529 Assert.AreEqual (0, cont.Collection4.Length, "#C2");
533 public void TestDeserializeEmptyArray ()
536 s1+="<ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
538 Entity[] col = (Entity[]) Deserialize (typeof(Entity[]), s1);
539 Assert.IsNotNull (col, "#A1");
540 Assert.AreEqual (0, col.Length, "#A2");
543 s1_1+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
544 s1_1+=" </ArrayOfEntity>";
546 col = (Entity[]) Deserialize (typeof(Entity[]), s1_1);
547 Assert.IsNotNull (col, "#B1");
548 Assert.AreEqual (0, col.Length, "#B2");
552 public void TestDeserializeNilArray ()
555 s2 += "<ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true'/>";
557 Entity[] col = (Entity[]) Deserialize (typeof(Entity[]), s2);
558 Assert.IsNull (col, "#1");
562 public void TestDeserializeObjectWithReadonlyCollection ()
565 s3+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
566 s3+=" <Collection1>";
567 s3+=" <Entity Name='node1'/>";
568 s3+=" <Entity Name='node2'/>";
569 s3+=" </Collection1>";
572 ObjectWithReadonlyCollection cont = (ObjectWithReadonlyCollection) Deserialize (typeof(ObjectWithReadonlyCollection), s3);
573 Assert.IsNotNull (cont, "#1");
574 Assert.IsNotNull (cont.Collection1, "#2");
575 Assert.AreEqual (2, cont.Collection1.Count, "#3");
576 Assert.AreEqual ("root", cont.Collection1.Container, "#4");
577 Assert.AreEqual ("root", cont.Collection1[0].Parent, "#5");
578 Assert.AreEqual ("root", cont.Collection1[1].Parent, "#6");
582 [ExpectedException (typeof(InvalidOperationException))]
583 public void TestDeserializeObjectWithReadonlyNulCollection ()
586 s3+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
587 s3+=" <Collection1>";
588 s3+=" <Entity Name='node1'/>";
589 s3+=" <Entity Name='node2'/>";
590 s3+=" </Collection1>";
593 Deserialize (typeof(ObjectWithReadonlyNulCollection), s3);
597 public void TestDeserializeObjectWithReadonlyArray ()
600 s3+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
601 s3+=" <Collection1>";
602 s3+=" <Entity Name='node1'/>";
603 s3+=" <Entity Name='node2'/>";
604 s3+=" </Collection1>";
607 ObjectWithReadonlyArray cont = (ObjectWithReadonlyArray) Deserialize (typeof(ObjectWithReadonlyArray), s3);
608 Assert.IsNotNull (cont, "#1");
609 Assert.IsNotNull (cont.Collection1, "#2");
610 Assert.AreEqual (0, cont.Collection1.Length, "#3");
614 public void TestDeserialize_EnumDefaultValue ()
618 e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue />");
619 Assert.AreEqual (0, (int) e, "#1");
621 e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue> e3</EnumDefaultValue>");
622 Assert.AreEqual (EnumDefaultValue.e3, e, "#2");
624 e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue>e1 e2</EnumDefaultValue>");
625 Assert.AreEqual (EnumDefaultValue.e3, e, "#3");
627 e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue> e1 e2 </EnumDefaultValue>");
628 Assert.AreEqual (EnumDefaultValue.e1 | EnumDefaultValue.e2, e, "#4");
632 public void TestDeserialize_EnumDefaultValueNF ()
634 EnumDefaultValueNF e;
636 e = (EnumDefaultValueNF) Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF>e3</EnumDefaultValueNF>");
637 Assert.AreEqual (EnumDefaultValueNF.e3, e, "#A1");
640 Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF />");
642 } catch (InvalidOperationException ex) {
643 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
644 Assert.IsNotNull (ex.InnerException, "#B3");
645 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#B4");
646 Assert.IsNotNull (ex.InnerException.Message, "#B5");
647 Assert.IsTrue (ex.InnerException.Message.IndexOf ("''") != -1, "#B6");
648 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#B7");
652 Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF>e1 e3</EnumDefaultValueNF>");
654 } catch (InvalidOperationException ex) {
655 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
656 Assert.IsNotNull (ex.InnerException, "#C3");
657 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#C4");
658 Assert.IsNotNull (ex.InnerException.Message, "#C5");
659 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'e1 e3'") != -1, "#C6");
660 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#C7");
664 Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF> e3</EnumDefaultValueNF>");
666 } catch (InvalidOperationException ex) {
667 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
668 Assert.IsNotNull (ex.InnerException, "#D3");
669 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D4");
670 Assert.IsNotNull (ex.InnerException.Message, "#D5");
671 Assert.IsTrue (ex.InnerException.Message.IndexOf ("' e3'") != -1, "#D6");
672 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#D7");
676 Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF> </EnumDefaultValueNF>");
678 } catch (InvalidOperationException ex) {
679 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");
680 Assert.IsNotNull (ex.InnerException, "#E3");
681 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#E4");
682 Assert.IsNotNull (ex.InnerException.Message, "#E5");
683 Assert.IsTrue (ex.InnerException.Message.IndexOf ("' '") != -1, "#E6");
684 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#E7");
688 Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF>1</EnumDefaultValueNF>");
690 } catch (InvalidOperationException ex) {
691 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");
692 Assert.IsNotNull (ex.InnerException, "#F3");
693 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#F4");
694 Assert.IsNotNull (ex.InnerException.Message, "#F5");
695 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'1'") != -1, "#F6");
696 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#F7");
701 [Category ("NotWorking")] // DefaultValue should not be used when deserializing
702 public void TestDeserialize_Field ()
706 f = (Field) Deserialize (typeof (Field),
707 string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
708 "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag1='' flag2='' flag4='' modifiers='public' modifiers2='public' modifiers4='public' />",
709 XmlSchemaNamespace, XmlSchemaInstanceNamespace));
710 Assert.AreEqual ((FlagEnum) 0, f.Flags1, "#A1");
711 Assert.AreEqual ((FlagEnum) 0, f.Flags2, "#A2");
712 Assert.AreEqual ((FlagEnum) 0, f.Flags3, "#A3");
713 Assert.AreEqual ((FlagEnum) 0, f.Flags4, "#A4");
714 Assert.AreEqual (MapModifiers.Public, f.Modifiers, "#A5");
715 Assert.AreEqual (MapModifiers.Public, f.Modifiers2, "#A6");
716 Assert.AreEqual (MapModifiers.Public, f.Modifiers3, "#A7");
717 Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#A8");
718 Assert.AreEqual (MapModifiers.Public, f.Modifiers5, "#A9");
719 Assert.IsNull (f.Names, "#A10");
720 Assert.IsNull (f.Street, "#A11");
722 f = (Field) Deserialize (typeof (Field),
723 string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
724 "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag3='two' flag4='' modifiers='protected' modifiers2='public' />",
725 XmlSchemaNamespace, XmlSchemaInstanceNamespace));
726 Assert.AreEqual ((FlagEnum) 0, f.Flags1, "#B1");
727 Assert.AreEqual ((FlagEnum) 0, f.Flags2, "#B2");
728 Assert.AreEqual (FlagEnum.e2, f.Flags3, "#B3");
729 Assert.AreEqual ((FlagEnum) 0, f.Flags4, "#B4");
730 Assert.AreEqual (MapModifiers.Protected, f.Modifiers, "#B5");
731 Assert.AreEqual (MapModifiers.Public, f.Modifiers2, "#B6");
732 Assert.AreEqual (MapModifiers.Public, f.Modifiers3, "#B7");
733 Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#B8");
734 Assert.AreEqual (MapModifiers.Public, f.Modifiers5, "#B9");
735 Assert.IsNull (f.Names, "#B10");
736 Assert.IsNull (f.Street, "#B11");
738 f = (Field) Deserialize (typeof (Field),
739 string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
740 "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag1='two' flag2='two' flag4='' modifiers='public' modifiers2='protected' modifiers3='protected' modifiers4='public' modifiers5='protected' />",
741 XmlSchemaNamespace, XmlSchemaInstanceNamespace));
742 Assert.AreEqual (FlagEnum.e2, f.Flags1, "#C1");
743 Assert.AreEqual (FlagEnum.e2, f.Flags2, "#C2");
744 Assert.AreEqual ((FlagEnum) 0, f.Flags3, "#C3");
745 Assert.AreEqual ((FlagEnum) 0, f.Flags4, "#C4");
746 Assert.AreEqual (MapModifiers.Public, f.Modifiers, "#C5");
747 Assert.AreEqual (MapModifiers.Protected, f.Modifiers2, "#C6");
748 Assert.AreEqual (MapModifiers.Protected, f.Modifiers3, "#C7");
749 Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#C8");
750 Assert.AreEqual (MapModifiers.Protected, f.Modifiers5, "#C9");
751 Assert.IsNull (f.Names, "#C10");
752 Assert.IsNull (f.Street, "#C11");
755 f = (Field) Deserialize (typeof (Field),
756 string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
757 "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag2='444' />",
758 XmlSchemaNamespace, XmlSchemaInstanceNamespace));
760 } catch (InvalidOperationException ex) {
761 // There was an error generating the XML document
762 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
763 Assert.IsNotNull (ex.Message, "#D3");
764 Assert.IsNotNull (ex.InnerException, "#D4");
766 // '444' is not a valid value for MonoTests.System.Xml.TestClasses.FlagEnum
767 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D5");
768 Assert.IsNotNull (ex.InnerException.Message, "#D6");
769 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'444'") != -1, "#D7");
770 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#D8");
771 Assert.IsNull (ex.InnerException.InnerException, "#D9");
775 f = (Field) Deserialize (typeof (Field),
776 string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
777 "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag2='Garbage' />",
778 XmlSchemaNamespace, XmlSchemaInstanceNamespace));
780 } catch (InvalidOperationException ex) {
781 // There was an error generating the XML document
782 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");
783 Assert.IsNotNull (ex.Message, "#E3");
784 Assert.IsNotNull (ex.InnerException, "#E4");
786 // 'Garbage' is not a valid value for MonoTests.System.Xml.TestClasses.FlagEnum
787 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#E5");
788 Assert.IsNotNull (ex.InnerException.Message, "#E6");
789 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'Garbage'") != -1, "#E7");
790 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#E8");
791 Assert.IsNull (ex.InnerException.InnerException, "#E9");
795 f = (Field) Deserialize (typeof (Field),
796 string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
797 "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag2='{2}' />",
798 XmlSchemaNamespace, XmlSchemaInstanceNamespace, ((int) FlagEnum.e2).ToString (CultureInfo.InvariantCulture)));
800 } catch (InvalidOperationException ex) {
801 // There was an error generating the XML document
802 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");
803 Assert.IsNotNull (ex.Message, "#F3");
804 Assert.IsNotNull (ex.InnerException, "#F4");
806 // '2' is not a valid value for MonoTests.System.Xml.TestClasses.FlagEnum
807 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#F5");
808 Assert.IsNotNull (ex.InnerException.Message, "#F6");
809 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'2'") != -1, "#F7");
810 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#F8");
811 Assert.IsNull (ex.InnerException.InnerException, "#F9");
816 [Category ("NotDotNet")] // MS.NET does not allow SoapAttribute backed by enum ??
817 public void TestDeserialize_Field_Encoded ()
819 Field_Encoded f = null;
821 f = (Field_Encoded) DeserializeEncoded (typeof (Field_Encoded),
822 string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
823 "<q1:field xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' flag1='' flag2='' flag4='' modifiers='PuBlIc' modifiers2='PuBlIc' modifiers4='PuBlIc' xmlns:q1='{2}' />",
824 XmlSchemaNamespace, XmlSchemaInstanceNamespace, ANamespace));
825 Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags1, "#A1");
826 Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags2, "#A2");
827 Assert.AreEqual (FlagEnum_Encoded.e1 | FlagEnum_Encoded.e2, f.Flags3, "#A3");
828 Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags4, "#A4");
829 Assert.AreEqual (MapModifiers.Public, f.Modifiers, "#A5");
830 Assert.AreEqual (MapModifiers.Public, f.Modifiers2, "#A6");
831 Assert.AreEqual (MapModifiers.Public, f.Modifiers3, "#A7");
832 Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#A8");
833 Assert.AreEqual (MapModifiers.Public, f.Modifiers5, "#A9");
834 Assert.IsNull (f.Names, "#A10");
835 Assert.IsNull (f.Street, "#A11");
837 f = (Field_Encoded) DeserializeEncoded (typeof (Field_Encoded),
838 string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
839 "<q1:field xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' flag3='two' flag4='' modifiers='Protected' modifiers2='PuBlIc' xmlns:q1='{2}' />",
840 XmlSchemaNamespace, XmlSchemaInstanceNamespace, ANamespace));
841 Assert.AreEqual (FlagEnum_Encoded.e1, f.Flags1, "#B1");
842 Assert.AreEqual (FlagEnum_Encoded.e1, f.Flags2, "#B2");
843 Assert.AreEqual (FlagEnum_Encoded.e2, f.Flags3, "#B3");
844 Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags4, "#B4");
845 Assert.AreEqual (MapModifiers.Protected, f.Modifiers, "#B5");
846 Assert.AreEqual (MapModifiers.Public, f.Modifiers2, "#B6");
847 Assert.AreEqual (MapModifiers.Public, f.Modifiers3, "#B7");
848 Assert.AreEqual (MapModifiers.Protected, f.Modifiers4, "#B8");
849 Assert.AreEqual (MapModifiers.Public, f.Modifiers5, "#B9");
850 Assert.IsNull (f.Names, "#B10");
851 Assert.IsNull (f.Street, "#B11");
853 f = (Field_Encoded) DeserializeEncoded (typeof (Field_Encoded),
854 string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
855 "<q1:field xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' flag1='two' flag2='two' flag4='' modifiers='PuBlIc' modifiers2='Protected' modifiers3='Protected' modifiers4='PuBlIc' modifiers5='Protected' xmlns:q1='{2}' />",
856 XmlSchemaNamespace, XmlSchemaInstanceNamespace, ANamespace));
857 Assert.AreEqual (FlagEnum_Encoded.e2, f.Flags1, "#C1");
858 Assert.AreEqual (FlagEnum_Encoded.e2, f.Flags2, "#C2");
859 Assert.AreEqual (FlagEnum_Encoded.e1 | FlagEnum_Encoded.e2, f.Flags3, "#C3");
860 Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags4, "#C4");
861 Assert.AreEqual (MapModifiers.Public, f.Modifiers, "#C5");
862 Assert.AreEqual (MapModifiers.Protected, f.Modifiers2, "#C6");
863 Assert.AreEqual (MapModifiers.Protected, f.Modifiers3, "#C7");
864 Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#C8");
865 Assert.AreEqual (MapModifiers.Protected, f.Modifiers5, "#C9");
866 Assert.IsNull (f.Names, "#C10");
867 Assert.IsNull (f.Street, "#C11");
870 f = (Field_Encoded) DeserializeEncoded (typeof (Field_Encoded),
871 string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
872 "<q1:field xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' flag2='444' flag3='555' flag4='' modifiers='666' modifiers2='777' modifiers4='888' modifiers5='999' xmlns:q1='{2}' />",
873 XmlSchemaNamespace, XmlSchemaInstanceNamespace, ANamespace));
875 } catch (InvalidOperationException ex) {
876 // There was an error generating the XML document
877 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
878 Assert.IsNotNull (ex.Message, "#D3");
879 Assert.IsNotNull (ex.InnerException, "#D4");
881 // '444' is not a valid value for MonoTests.System.Xml.TestClasses.FlagEnum_Encoded
882 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D5");
883 Assert.IsNotNull (ex.InnerException.Message, "#D6");
884 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'444'") != -1, "#D7");
885 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum_Encoded).FullName) != -1, "#D8");
886 Assert.IsNull (ex.InnerException.InnerException, "#D9");
891 public void TestDeserialize_FlagEnum ()
895 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum />");
896 Assert.AreEqual (0, (int) e, "#A1");
898 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>one</FlagEnum>");
899 Assert.AreEqual (FlagEnum.e1, e, "#A2");
901 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>one\u200atwo</FlagEnum>");
902 Assert.AreEqual (FlagEnum.e1 | FlagEnum.e2, e, "#A3");
904 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>one two four</FlagEnum>");
905 Assert.AreEqual (FlagEnum.e1 | FlagEnum.e2 | FlagEnum.e4, e, "#A4");
907 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum> two four </FlagEnum>");
908 Assert.AreEqual (FlagEnum.e2 | FlagEnum.e4, e, "#A5");
910 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>two four two</FlagEnum>");
911 Assert.AreEqual (FlagEnum.e2 | FlagEnum.e4, e, "#A6");
913 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>two four two\tone\u2002four\u200btwo one</FlagEnum>");
914 Assert.AreEqual (FlagEnum.e1 | FlagEnum.e2 | FlagEnum.e4, e, "#A7");
916 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum></FlagEnum>");
917 Assert.AreEqual (0, (int) e, "#A8");
919 e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum> </FlagEnum>");
920 Assert.AreEqual (0, (int) e, "#A9");
923 Deserialize (typeof (FlagEnum), "<FlagEnum>1</FlagEnum>");
925 } catch (InvalidOperationException ex) {
926 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
927 Assert.IsNotNull (ex.InnerException, "#B3");
928 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#B4");
929 Assert.IsNotNull (ex.InnerException.Message, "#B5");
930 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'1'") != -1, "#B6");
931 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#B7");
935 Deserialize (typeof (FlagEnum), "<FlagEnum>one,two</FlagEnum>");
937 } catch (InvalidOperationException ex) {
938 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
939 Assert.IsNotNull (ex.InnerException, "#C3");
940 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#C4");
941 Assert.IsNotNull (ex.InnerException.Message, "#C5");
942 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'one,two'") != -1, "#C6");
943 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#C7");
947 Deserialize (typeof (FlagEnum), "<FlagEnum>one something</FlagEnum>");
949 } catch (InvalidOperationException ex) {
950 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
951 Assert.IsNotNull (ex.InnerException, "#D3");
952 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D4");
953 Assert.IsNotNull (ex.InnerException.Message, "#D5");
954 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'something'") != -1, "#D6");
955 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#D7");
960 public void TestDeserialize_Group ()
962 string xml = string.Format (CultureInfo.InvariantCulture,
964 "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' xmlns:d2p1='http://www.cpandl.com' CreationDate='2002-05-02' d2p1:GroupName='.NET' GroupNumber='ZDI=' id='id1'>" +
965 "<PosInt xsi:type='xsd:nonNegativeInteger'>10000</PosInt>" +
966 "<Grouptype xsi:type='GroupType'>Small</Grouptype>" +
967 "<MyVehicle href='#id2' />" +
969 "<Car xmlns:d2p1='{1}' id='id2' d2p1:type='Car'>" +
970 "<licenseNumber xmlns:q1='{0}' d2p1:type='q1:string'>1234566</licenseNumber>" +
971 "<makeDate xmlns:q2='{0}' d2p1:type='q2:date'>0001-01-01</makeDate>" +
974 "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
976 XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
977 xtr.ReadStartElement ("Wrapper");
979 Group group = (Group) DeserializeEncoded (typeof (Group), xtr);
981 Assert.AreEqual (new DateTime (2002, 5, 2), group.Today, "#A1");
982 Assert.AreEqual (".NET", group.GroupName, "#A2");
983 Assert.AreEqual (new byte [] { 0x64, 0x32 }, group.GroupNumber, "#A3");
984 Assert.AreEqual (GroupType.A, group.Grouptype, "#A4");
985 Assert.AreEqual ("10000", group.PostitiveInt, "#A5");
986 Assert.IsFalse (group.IgnoreThis, "#A6");
987 Assert.IsNotNull (group.MyVehicle, "#A7");
988 Assert.AreEqual (typeof (Car), group.MyVehicle.GetType (), "#A8");
989 Assert.AreEqual ("1234566", group.MyVehicle.licenseNumber, "#A9");
990 Assert.AreEqual (new DateTime (1, 1, 1), group.MyVehicle.makeDate, "#A10");
991 Assert.IsNull (group.MyVehicle.weight, "#A11");
993 xml = string.Format (CultureInfo.InvariantCulture,
995 "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' CreationDate='2002-05-02' GroupNumber='ZDI=' id='id1'>" +
996 "<PosInt xsi:type='xsd:nonNegativeInteger'>10000</PosInt>" +
997 "<Grouptype xsi:type='GroupType'>Large</Grouptype>" +
998 "<MyVehicle href='#id2' />" +
1000 "<Car xmlns:d2p1='{1}' id='id2' d2p1:type='Car'>" +
1001 "<weight xmlns:q2='{0}' d2p1:type='q2:string'>450</weight>" +
1004 "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
1006 xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
1007 xtr.ReadStartElement ("Wrapper");
1009 group = (Group) DeserializeEncoded (typeof (Group), xtr);
1011 Assert.AreEqual (new DateTime (2002, 5, 2), group.Today, "#B1");
1012 Assert.IsNull (group.GroupName, "#B2");
1013 Assert.AreEqual (new byte [] { 0x64, 0x32 }, group.GroupNumber, "#B3");
1014 Assert.AreEqual (GroupType.B, group.Grouptype, "#B4");
1015 Assert.AreEqual ("10000", group.PostitiveInt, "#B5");
1016 Assert.IsFalse (group.IgnoreThis, "#B6");
1017 Assert.IsNotNull (group.MyVehicle, "#B7");
1018 Assert.AreEqual (typeof (Car), group.MyVehicle.GetType (), "#B8");
1019 Assert.IsNull (group.MyVehicle.licenseNumber, "#B9");
1020 Assert.AreEqual (DateTime.MinValue, group.MyVehicle.makeDate, "#B10");
1021 Assert.AreEqual ("450", group.MyVehicle.weight, "#B11");
1023 xml = string.Format (CultureInfo.InvariantCulture,
1025 "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' />" +
1027 "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
1029 xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
1030 xtr.ReadStartElement ("Wrapper");
1032 group = (Group) DeserializeEncoded (typeof (Group), xtr);
1034 Assert.AreEqual (DateTime.MinValue, group.Today, "#C1");
1035 Assert.IsNull (group.GroupName, "#C2");
1036 Assert.AreEqual (null, group.GroupNumber, "#C3");
1037 Assert.AreEqual (GroupType.A, group.Grouptype, "#C4");
1038 Assert.IsNull (group.PostitiveInt, "#C5");
1039 Assert.IsFalse (group.IgnoreThis, "#C6");
1040 Assert.IsNull (group.MyVehicle, "#C7");
1042 xml = string.Format (CultureInfo.InvariantCulture,
1044 "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1'>" +
1045 "<Grouptype xsi:type='GroupType'>666</Grouptype>" +
1048 "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
1050 xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
1051 xtr.ReadStartElement ("Wrapper");
1054 group = (Group) DeserializeEncoded (typeof (Group), xtr);
1055 Assert.Fail ("#D1");
1056 } catch (InvalidOperationException ex) {
1057 // There is an error in XML document (1, 174)
1058 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
1059 Assert.IsNotNull (ex.Message, "#D3");
1060 Assert.IsNotNull (ex.InnerException, "#D4");
1062 // '666' is not a valid value for GroupType
1063 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D5");
1064 Assert.IsNotNull (ex.InnerException.Message, "#D6");
1065 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'666'") != -1, "#D7");
1066 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (GroupType).Name) != -1, "#D8");
1067 Assert.IsNull (ex.InnerException.InnerException, "#D9");
1070 xml = string.Format (CultureInfo.InvariantCulture,
1072 "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1'>" +
1073 "<Grouptype xsi:type='GroupType'>Garbage</Grouptype>" +
1076 "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
1078 xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
1079 xtr.ReadStartElement ("Wrapper");
1082 group = (Group) DeserializeEncoded (typeof (Group), xtr);
1083 Assert.Fail ("#E1");
1084 } catch (InvalidOperationException ex) {
1085 // There is an error in XML document (1, 178)
1086 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");
1087 Assert.IsNotNull (ex.Message, "#E3");
1088 Assert.IsNotNull (ex.InnerException, "#E4");
1090 // 'Garbage' is not a valid value for GroupType
1091 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#E5");
1092 Assert.IsNotNull (ex.InnerException.Message, "#E6");
1093 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'Garbage'") != -1, "#E7");
1094 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (GroupType).Name) != -1, "#E8");
1095 Assert.IsNull (ex.InnerException.InnerException, "#E9");
1098 xml = string.Format (CultureInfo.InvariantCulture,
1100 "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1'>" +
1101 "<Grouptype xsi:type='GroupType'>{2}</Grouptype>" +
1104 "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance",
1105 ((int) GroupType.B).ToString (CultureInfo.InvariantCulture));
1107 xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
1108 xtr.ReadStartElement ("Wrapper");
1111 group = (Group) DeserializeEncoded (typeof (Group), xtr);
1112 Assert.Fail ("#F1");
1113 } catch (InvalidOperationException ex) {
1114 // There is an error in XML document (1, 172)
1115 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");
1116 Assert.IsNotNull (ex.Message, "#F3");
1117 Assert.IsNotNull (ex.InnerException, "#F4");
1119 // '1' is not a valid value for GroupType
1120 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#F5");
1121 Assert.IsNotNull (ex.InnerException.Message, "#F6");
1122 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'1'") != -1, "#F7");
1123 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (GroupType).Name) != -1, "#F8");
1124 Assert.IsNull (ex.InnerException.InnerException, "#F9");
1129 public void TestDeserialize_ZeroFlagEnum ()
1133 e = (ZeroFlagEnum) Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum />");
1134 Assert.AreEqual (ZeroFlagEnum.e0, e, "#A1");
1135 e = (ZeroFlagEnum) Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum></ZeroFlagEnum>");
1136 Assert.AreEqual (ZeroFlagEnum.e0, e, "#A2");
1139 Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum>four</ZeroFlagEnum>");
1140 Assert.Fail ("#B1");
1141 } catch (InvalidOperationException ex) {
1142 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
1143 Assert.IsNotNull (ex.InnerException, "#B3");
1144 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#B4");
1145 Assert.IsNotNull (ex.InnerException.Message, "#B5");
1146 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'four'") != -1, "#B6");
1147 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (ZeroFlagEnum).FullName) != -1, "#B7");
1151 Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum> o<n>e four </ZeroFlagEnum>");
1152 Assert.Fail ("#C1");
1153 } catch (InvalidOperationException ex) {
1154 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
1155 Assert.IsNotNull (ex.InnerException, "#C3");
1156 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#C4");
1157 Assert.IsNotNull (ex.InnerException.Message, "#C5");
1158 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'four'") != -1, "#C6");
1159 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (ZeroFlagEnum).FullName) != -1, "#C7");
1163 Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum>four o<n>e</ZeroFlagEnum>");
1164 Assert.Fail ("#D1");
1165 } catch (InvalidOperationException ex) {
1166 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
1167 Assert.IsNotNull (ex.InnerException, "#D3");
1168 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D4");
1169 Assert.IsNotNull (ex.InnerException.Message, "#D5");
1170 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'four'") != -1, "#D6");
1171 Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (ZeroFlagEnum).FullName) != -1, "#D7");
1176 public void TestDeserialize_PrimitiveTypesContainer ()
1178 Deserialize (typeof (PrimitiveTypesContainer), string.Format (CultureInfo.InvariantCulture,
1179 "<?xml version='1.0' encoding='utf-16'?>" +
1180 "<PrimitiveTypesContainer xmlns:xsd='{0}' xmlns:xsi='{1}' xmlns='{2}'>" +
1181 "<Number xsi:type='xsd:int'>2004</Number>" +
1182 "<Name xsi:type='xsd:string'>some name</Name>" +
1183 "<Index xsi:type='xsd:unsignedByte'>56</Index>" +
1184 "<Password xsi:type='xsd:base64Binary'>8w8=</Password>" +
1185 "<PathSeparatorCharacter xmlns:q1='{3}' xsi:type='q1:char'>47</PathSeparatorCharacter>" +
1186 "</PrimitiveTypesContainer>", XmlSchemaNamespace,
1187 XmlSchemaInstanceNamespace, ANamespace, WsdlTypesNamespace));
1188 Assert.AreEqual (typeof (PrimitiveTypesContainer), result.GetType (), "#A1");
1190 PrimitiveTypesContainer deserialized = (PrimitiveTypesContainer) result;
1191 Assert.AreEqual (2004, deserialized.Number, "#A2");
1192 Assert.AreEqual ("some name", deserialized.Name, "#A3");
1193 Assert.AreEqual ((byte) 56, deserialized.Index, "#A4");
1194 Assert.AreEqual (new byte[] { 243, 15 }, deserialized.Password, "#A5");
1195 Assert.AreEqual ('/', deserialized.PathSeparatorCharacter, "#A6");
1197 DeserializeEncoded (typeof (PrimitiveTypesContainer), string.Format (CultureInfo.InvariantCulture,
1198 "<?xml version='1.0' encoding='utf-16'?>" +
1199 "<q1:PrimitiveTypesContainer xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' xmlns:q1='{2}'>" +
1200 "<Number xsi:type='xsd:int'>2004</Number>" +
1201 "<Name xsi:type='xsd:string'>some name</Name>" +
1202 "<Index xsi:type='xsd:unsignedByte'>56</Index>" +
1203 "<Password xsi:type='xsd:base64Binary'>8w8=</Password>" +
1204 "<PathSeparatorCharacter xmlns:q1='{3}' xsi:type='q1:char'>47</PathSeparatorCharacter>" +
1205 "</q1:PrimitiveTypesContainer>", XmlSchemaNamespace,
1206 XmlSchemaInstanceNamespace, AnotherNamespace, WsdlTypesNamespace));
1207 Assert.AreEqual (typeof (PrimitiveTypesContainer), result.GetType (), "#B1");
1209 deserialized = (PrimitiveTypesContainer) result;
1210 Assert.AreEqual (2004, deserialized.Number, "#B2");
1211 Assert.AreEqual ("some name", deserialized.Name, "#B3");
1212 Assert.AreEqual ((byte) 56, deserialized.Index, "#B4");
1213 Assert.AreEqual (new byte[] { 243, 15 }, deserialized.Password, "#B5");
1214 Assert.AreEqual ('/', deserialized.PathSeparatorCharacter, "#B6");