DeserializeTests.cs 73 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491
  1. //
  2. // System.Xml.DeserializationTests
  3. //
  4. // Author:
  5. // Atsushi Enomoto <[email protected]>
  6. // Hagit Yidov <[email protected]>
  7. //
  8. // (C) 2003 Atsushi Enomoto
  9. // (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
  10. //
  11. //
  12. using System;
  13. using System.Globalization;
  14. using System.IO;
  15. using System.Xml;
  16. using System.Xml.Serialization;
  17. using NUnit.Framework;
  18. using MonoTests.System.Xml.TestClasses;
  19. namespace MonoTests.System.XmlSerialization
  20. {
  21. public class Sample
  22. {
  23. public string Text;
  24. public string[] ArrayText;
  25. }
  26. [TestFixture]
  27. public class DeserializationTests
  28. {
  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";
  35. object result;
  36. private object Deserialize (Type t, string xml)
  37. {
  38. StringReader sr = new StringReader (xml);
  39. XmlReader xr = new XmlTextReader (sr);
  40. return Deserialize (t, xr);
  41. }
  42. private object Deserialize (Type t, string xml, string defaultNamespace)
  43. {
  44. StringReader sr = new StringReader (xml);
  45. XmlReader xr = new XmlTextReader (sr);
  46. return Deserialize (t, xr, defaultNamespace);
  47. }
  48. private object Deserialize (Type t, string xml, XmlAttributeOverrides ao)
  49. {
  50. StringReader sr = new StringReader (xml);
  51. XmlReader xr = new XmlTextReader (sr);
  52. return Deserialize (t, xr, ao);
  53. }
  54. private object DeserializeEncoded (Type t, string xml)
  55. {
  56. StringReader sr = new StringReader (xml);
  57. XmlReader xr = new XmlTextReader (sr);
  58. return DeserializeEncoded (t, xr);
  59. }
  60. private object Deserialize (Type t, XmlReader xr)
  61. {
  62. XmlSerializer ser = new XmlSerializer (t);
  63. result = ser.Deserialize (xr);
  64. return result;
  65. }
  66. private object Deserialize (Type t, XmlReader xr, string defaultNamespace)
  67. {
  68. XmlSerializer ser = new XmlSerializer (t, defaultNamespace);
  69. result = ser.Deserialize (xr);
  70. return result;
  71. }
  72. private object Deserialize (Type t, XmlReader xr, XmlAttributeOverrides ao)
  73. {
  74. XmlSerializer ser = new XmlSerializer (t, ao);
  75. result = ser.Deserialize (xr);
  76. return result;
  77. }
  78. private object DeserializeEncoded (Type t, XmlReader xr)
  79. {
  80. SoapReflectionImporter im = new SoapReflectionImporter ();
  81. XmlTypeMapping tm = im.ImportTypeMapping (t);
  82. XmlSerializer ser = new XmlSerializer (tm);
  83. result = ser.Deserialize (xr);
  84. return result;
  85. }
  86. [Test]
  87. public void SimpleDeserialize ()
  88. {
  89. Deserialize (typeof (Sample), "<Sample><Text>Test.</Text></Sample>");
  90. Assert.AreEqual (typeof (Sample), result.GetType ());
  91. Sample sample = result as Sample;
  92. Assert.AreEqual ("Test.", sample.Text);
  93. }
  94. [Test]
  95. public void DeserializeInt ()
  96. {
  97. Deserialize (typeof (int), "<int>10</int>");
  98. Assert.AreEqual (typeof (int), result.GetType ());
  99. Assert.AreEqual (10, result);
  100. }
  101. [Test]
  102. public void DeserializeSimpleArray ()
  103. {
  104. Deserialize (typeof (Sample), "<Sample><ArrayText><string>Test1</string><string>Test2</string></ArrayText></Sample>");
  105. Assert.AreEqual (typeof (Sample), result.GetType ());
  106. Sample sample = result as Sample;
  107. Assert.AreEqual ("Test1", sample.ArrayText[0]);
  108. Assert.AreEqual ("Test2", sample.ArrayText[1]);
  109. }
  110. [Test]
  111. public void DeserializeEmptyEnum ()
  112. {
  113. Field f = Deserialize (typeof (Field), "<field modifiers=\"\" />") as Field;
  114. Assert.AreEqual (MapModifiers.Public, f.Modifiers);
  115. }
  116. [Test]
  117. public void DeserializePrivateCollection ()
  118. {
  119. MemoryStream ms = new MemoryStream ();
  120. Container c = new Container ();
  121. c.Items.Add (1);
  122. XmlSerializer serializer = new XmlSerializer (typeof (Container));
  123. serializer.Serialize (ms, c);
  124. ms.Position = 0;
  125. c = (Container) serializer.Deserialize (ms);
  126. Assert.AreEqual (1, c.Items[0]);
  127. }
  128. [Test]
  129. [Category ("NotDotNet")]
  130. [ExpectedException (typeof (InvalidOperationException))]
  131. public void DeserializeEmptyPrivateCollection ()
  132. {
  133. MemoryStream ms = new MemoryStream ();
  134. Container2 c = new Container2 (true);
  135. c.Items.Add (1);
  136. XmlSerializer serializer = new XmlSerializer (typeof (Container2));
  137. serializer.Serialize (ms, c);
  138. ms.Position = 0;
  139. c = (Container2) serializer.Deserialize (ms);
  140. }
  141. [Test]
  142. [Category ("NotDotNet")]
  143. public void DeserializeArrayReferences ()
  144. {
  145. string s = "<Sample xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">";
  146. s += "<ArrayText xmlns:n3=\"http://schemas.xmlsoap.org/soap/encoding/\" xsi:type=\"n3:Array\" n3:arrayType=\"xsd:string[2]\">";
  147. s += "<item href=\"#id-606830706\"></item>";
  148. s += "<item xsi:type=\"xsd:string\">Hola</item>";
  149. s += "</ArrayText>";
  150. s += "<string id=\"id-606830706\" xsi:type=\"xsd:string\">Adeu</string>";
  151. s += "</Sample>";
  152. DeserializeEncoded (typeof (Sample), s);
  153. }
  154. [Test]
  155. public void TestDeserializeXmlNodeArray ()
  156. {
  157. object ob = Deserialize (typeof (object), "<anyType at=\"1\"><elem1/><elem2/></anyType>");
  158. Assert.IsTrue (ob is XmlNode[], "Is node array");
  159. XmlNode[] nods = (XmlNode[]) ob;
  160. Assert.AreEqual (3, nods.Length, "lengh");
  161. Assert.IsTrue (nods[0] is XmlAttribute, "#1");
  162. Assert.AreEqual ("at", ((XmlAttribute) nods[0]).LocalName, "#2");
  163. Assert.AreEqual ("1", ((XmlAttribute) nods[0]).Value, "#3");
  164. Assert.IsTrue (nods[1] is XmlElement, "#4");
  165. Assert.AreEqual ("elem1", ((XmlElement) nods[1]).LocalName, "#5");
  166. Assert.IsTrue (nods[2] is XmlElement, "#6");
  167. Assert.AreEqual ("elem2", ((XmlElement) nods[2]).LocalName, "#7");
  168. }
  169. [Test]
  170. public void TestDeserializeXmlElement ()
  171. {
  172. object ob = Deserialize (typeof (XmlElement), "<elem/>");
  173. Assert.IsTrue (ob is XmlElement, "#1");
  174. Assert.AreEqual ("elem", ((XmlElement) ob).LocalName, "#2");
  175. }
  176. [Test]
  177. public void TestDeserializeXmlCDataSection ()
  178. {
  179. 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>");
  180. Assert.IsNotNull (c.cdata, "#1");
  181. Assert.AreEqual ("data section contents", c.cdata.Value, "#2");
  182. }
  183. [Test]
  184. public void TestDeserializeXmlNode ()
  185. {
  186. 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>");
  187. Assert.IsTrue (c.node is XmlText, "#1");
  188. Assert.AreEqual ("text", c.node.Value, "#2");
  189. }
  190. [Test]
  191. public void TestDeserializeChoices ()
  192. {
  193. Choices ch = (Choices) Deserialize (typeof (Choices), "<Choices><ChoiceZero>choice text</ChoiceZero></Choices>");
  194. Assert.AreEqual ("choice text", ch.MyChoice, "#A1");
  195. Assert.AreEqual (ItemChoiceType.ChoiceZero, ch.ItemType, "#A2");
  196. ch = (Choices) Deserialize (typeof (Choices), "<Choices><ChoiceOne>choice text</ChoiceOne></Choices>");
  197. Assert.AreEqual ("choice text", ch.MyChoice, "#B1");
  198. Assert.AreEqual (ItemChoiceType.StrangeOne, ch.ItemType, "#B2");
  199. ch = (Choices) Deserialize (typeof (Choices), "<Choices><ChoiceTwo>choice text</ChoiceTwo></Choices>");
  200. Assert.AreEqual ("choice text", ch.MyChoice, "#C1");
  201. Assert.AreEqual (ItemChoiceType.ChoiceTwo, ch.ItemType, "#C2");
  202. }
  203. [Test]
  204. public void TestDeserializeNamesWithSpaces ()
  205. {
  206. 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>");
  207. Assert.AreEqual (4, ts.elem, "#1");
  208. Assert.AreEqual (5, ts.attr, "#2");
  209. }
  210. [Test]
  211. public void TestDeserializeDefaults ()
  212. {
  213. ListDefaults d2 = (ListDefaults) Deserialize (typeof (ListDefaults), "<root/>");
  214. Assert.IsNotNull (d2.list2, "#A1");
  215. Assert.IsNull (d2.list3, "#A2");
  216. Assert.IsNull (d2.list4, "#A3");
  217. Assert.IsNotNull (d2.list5, "#A4");
  218. Assert.IsNotNull (d2.ed, "#A5");
  219. Assert.IsNotNull (d2.str, "#A6");
  220. d2 = (ListDefaults) Deserialize (typeof (ListDefaults), "<root></root>");
  221. Assert.IsNotNull (d2.list2, "#B1");
  222. Assert.IsNull (d2.list3, "#B2");
  223. Assert.IsNull (d2.list4, "#B3");
  224. Assert.IsNotNull (d2.list5, "#B4");
  225. Assert.IsNotNull (d2.ed, "#B5");
  226. Assert.IsNotNull (d2.str, "#B6");
  227. }
  228. [Test]
  229. public void TestDeserializeChoiceArray ()
  230. {
  231. 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>");
  232. Assert.IsNotNull (v.Items, "#1");
  233. Assert.IsNotNull (v.ItemsElementName, "#2");
  234. Assert.AreEqual (2, v.Items.Length, "#3");
  235. Assert.AreEqual (2, v.ItemsElementName.Length, "#4");
  236. Assert.AreEqual (1, v.Items[0], "#5");
  237. Assert.AreEqual (2, v.Items[1], "#6");
  238. Assert.AreEqual (ItemsChoiceType.In, v.ItemsElementName[0], "#7");
  239. Assert.AreEqual (ItemsChoiceType.Es, v.ItemsElementName[1], "#8");
  240. }
  241. #region GenericsDeseralizationTests
  242. #if NET_2_0
  243. [Test]
  244. [Category ("NotWorking")]
  245. public void TestDeserializeGenSimpleClassString ()
  246. {
  247. Deserialize (typeof (GenSimpleClass<string>), "<GenSimpleClassOfString xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />");
  248. Assert.AreEqual (typeof (GenSimpleClass<string>), result.GetType ());
  249. Deserialize (typeof (GenSimpleClass<string>), "<GenSimpleClassOfString xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><something>hello</something></GenSimpleClassOfString>");
  250. GenSimpleClass<string> simple = result as GenSimpleClass<string>;
  251. Assert.AreEqual ("hello", simple.something);
  252. }
  253. [Test]
  254. [Category ("NotWorking")]
  255. public void TestDeserializeGenSimpleClassBool ()
  256. {
  257. Deserialize (typeof (GenSimpleClass<bool>), "<GenSimpleClassOfBoolean xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><something>false</something></GenSimpleClassOfBoolean>");
  258. Assert.AreEqual (typeof (GenSimpleClass<bool>), result.GetType ());
  259. Deserialize (typeof (GenSimpleClass<bool>), "<GenSimpleClassOfBoolean xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><something>true</something></GenSimpleClassOfBoolean>");
  260. GenSimpleClass<bool> simple = result as GenSimpleClass<bool>;
  261. Assert.AreEqual (true, simple.something);
  262. }
  263. [Test]
  264. [Category ("NotWorking")]
  265. public void TestDeserializeGenSimpleStructInt ()
  266. {
  267. Deserialize (typeof (GenSimpleStruct<int>), "<GenSimpleStructOfInt32 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><something>0</something></GenSimpleStructOfInt32>");
  268. Assert.AreEqual (typeof (GenSimpleStruct<int>), result.GetType ());
  269. Deserialize (typeof (GenSimpleStruct<int>), "<GenSimpleStructOfInt32 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><something>123</something></GenSimpleStructOfInt32>");
  270. GenSimpleStruct<int> simple = new GenSimpleStruct<int> (0);
  271. if (result != null)
  272. simple = (GenSimpleStruct<int>) result;
  273. Assert.AreEqual (123, simple.something);
  274. }
  275. [Test]
  276. [Category ("NotWorking")]
  277. public void TestDeserializeGenListClassString ()
  278. {
  279. Deserialize (typeof (GenListClass<string>), "<GenListClassOfString xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><somelist></somelist></GenListClassOfString>");
  280. Assert.AreEqual (typeof (GenListClass<string>), result.GetType ());
  281. Deserialize (typeof (GenListClass<string>), "<GenListClassOfString xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><somelist><string>Value1</string><string>Value2</string></somelist></GenListClassOfString>");
  282. GenListClass<string> genlist = result as GenListClass<string>;
  283. Assert.AreEqual ("Value1", genlist.somelist[0]);
  284. Assert.AreEqual ("Value2", genlist.somelist[1]);
  285. }
  286. [Test]
  287. [Category ("NotWorking")]
  288. public void TestDeserializeGenListClassFloat ()
  289. {
  290. Deserialize (typeof (GenListClass<float>), "<GenListClassOfSingle xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><somelist></somelist></GenListClassOfSingle>");
  291. Assert.AreEqual (typeof (GenListClass<float>), result.GetType ());
  292. Deserialize (typeof (GenListClass<float>), "<GenListClassOfSingle xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><somelist><float>1</float><float>2.2</float></somelist></GenListClassOfSingle>");
  293. GenListClass<float> genlist = result as GenListClass<float>;
  294. Assert.AreEqual (1, genlist.somelist[0]);
  295. Assert.AreEqual (2.2F, genlist.somelist[1]);
  296. }
  297. [Test]
  298. [Category ("NotWorking")]
  299. public void TestDeserializeGenListClassList ()
  300. {
  301. Deserialize (typeof (GenListClass<GenListClass<int>>), "<GenListClassOfGenListClassOfInt32 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><somelist></somelist></GenListClassOfGenListClassOfInt32>");
  302. Assert.AreEqual (typeof (GenListClass<GenListClass<int>>), result.GetType ());
  303. Deserialize (typeof (GenListClass<GenListClass<int>>), "<GenListClassOfGenListClassOfInt32 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><somelist><GenListClassOfInt32><somelist><int>1</int><int>2</int></somelist></GenListClassOfInt32><GenListClassOfInt32><somelist><int>10</int><int>20</int></somelist></GenListClassOfInt32></somelist></GenListClassOfGenListClassOfInt32>");
  304. GenListClass<GenListClass<int>> genlist = result as GenListClass<GenListClass<int>>;
  305. Assert.AreEqual (1, genlist.somelist[0].somelist[0]);
  306. Assert.AreEqual (2, genlist.somelist[0].somelist[1]);
  307. Assert.AreEqual (10, genlist.somelist[1].somelist[0]);
  308. Assert.AreEqual (20, genlist.somelist[1].somelist[1]);
  309. }
  310. [Test]
  311. [Category ("NotWorking")]
  312. public void TestDeserializeGenListClassArray ()
  313. {
  314. Deserialize (typeof (GenListClass<GenArrayClass<char>>), "<GenListClassOfGenArrayClassOfChar xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><somelist></somelist></GenListClassOfGenArrayClassOfChar>");
  315. Assert.AreEqual (typeof (GenListClass<GenArrayClass<char>>), result.GetType ());
  316. Deserialize (typeof (GenListClass<GenArrayClass<char>>), "<GenListClassOfGenArrayClassOfChar xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><somelist><GenArrayClassOfChar><arr><char>97</char><char>98</char><char>0</char></arr></GenArrayClassOfChar><GenArrayClassOfChar><arr><char>100</char><char>101</char><char>102</char></arr></GenArrayClassOfChar></somelist></GenListClassOfGenArrayClassOfChar>");
  317. GenListClass<GenArrayClass<char>> genlist = result as GenListClass<GenArrayClass<char>>;
  318. Assert.AreEqual ('a', genlist.somelist[0].arr[0]);
  319. Assert.AreEqual ('b', genlist.somelist[0].arr[1]);
  320. Assert.AreEqual ('d', genlist.somelist[1].arr[0]);
  321. Assert.AreEqual ('e', genlist.somelist[1].arr[1]);
  322. Assert.AreEqual ('f', genlist.somelist[1].arr[2]);
  323. }
  324. [Test]
  325. [Category ("NotWorking")]
  326. public void TestDeserializeGenTwoClassCharDouble ()
  327. {
  328. Deserialize (typeof (GenTwoClass<char, double>), "<GenTwoClassOfCharDouble xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><something1>0</something1><something2>0</something2></GenTwoClassOfCharDouble>");
  329. Assert.AreEqual (typeof (GenTwoClass<char, double>), result.GetType ());
  330. Deserialize (typeof (GenTwoClass<char, double>), "<GenTwoClassOfCharDouble xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><something1>97</something1><something2>2.2</something2></GenTwoClassOfCharDouble>");
  331. GenTwoClass<char, double> gentwo = result as GenTwoClass<char, double>;
  332. Assert.AreEqual ('a', gentwo.something1);
  333. Assert.AreEqual (2.2, gentwo.something2);
  334. }
  335. [Test]
  336. [Category ("NotWorking")]
  337. public void TestDeserializeGenDerivedClassDecimalShort ()
  338. {
  339. Deserialize (typeof (GenDerivedClass<decimal, short>), "<GenDerivedClassOfDecimalInt16 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><something2>0</something2><another1>0</another1><another2>0</another2></GenDerivedClassOfDecimalInt16>");
  340. Assert.AreEqual (typeof (GenDerivedClass<decimal, short>), result.GetType ());
  341. Deserialize (typeof (GenDerivedClass<decimal, short>), "<GenDerivedClassOfDecimalInt16 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><something1>Value1</something1><something2>1</something2><another1>1.1</another1><another2>-22</another2></GenDerivedClassOfDecimalInt16>");
  342. GenDerivedClass<decimal, short> derived = result as GenDerivedClass<decimal, short>;
  343. Assert.AreEqual ("Value1", derived.something1);
  344. Assert.AreEqual (1, derived.something2);
  345. Assert.AreEqual (1.1M, derived.another1);
  346. Assert.AreEqual (-22, derived.another2);
  347. }
  348. [Test]
  349. [Category ("NotWorking")]
  350. public void TestDeserializeGenDerivedSecondClassByteUlong ()
  351. {
  352. Deserialize (typeof (GenDerived2Class<byte, ulong>), "<GenDerived2ClassOfByteUInt64 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><something1>0</something1><something2>0</something2><another1>0</another1><another2>0</another2></GenDerived2ClassOfByteUInt64>");
  353. Assert.AreEqual (typeof (GenDerived2Class<byte, ulong>), result.GetType ());
  354. Deserialize (typeof (GenDerived2Class<byte, ulong>), "<GenDerived2ClassOfByteUInt64 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><something1>1</something1><something2>222</something2><another1>111</another1><another2>222222</another2></GenDerived2ClassOfByteUInt64>");
  355. GenDerived2Class<byte, ulong> derived2 = result as GenDerived2Class<byte, ulong>;
  356. Assert.AreEqual (1, derived2.something1);
  357. Assert.AreEqual (222, derived2.something2);
  358. Assert.AreEqual (111, derived2.another1);
  359. Assert.AreEqual (222222, derived2.another2);
  360. }
  361. [Test]
  362. [Category ("NotWorking")]
  363. public void TestDeserializeGenNestedClass ()
  364. {
  365. Deserialize (typeof (GenNestedClass<string, int>.InnerClass<bool>), "<InnerClassOfStringInt32Boolean xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><inner>0</inner><something>false</something></InnerClassOfStringInt32Boolean>");
  366. Assert.AreEqual (typeof (GenNestedClass<string, int>.InnerClass<bool>), result.GetType ());
  367. Deserialize (typeof (GenNestedClass<string, int>.InnerClass<bool>), "<InnerClassOfStringInt32Boolean xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><inner>5</inner><something>true</something></InnerClassOfStringInt32Boolean>");
  368. GenNestedClass<string, int>.InnerClass<bool> nested = result as GenNestedClass<string, int>.InnerClass<bool>;
  369. Assert.AreEqual (5, nested.inner);
  370. Assert.AreEqual (true, nested.something);
  371. }
  372. [Test]
  373. [Category ("NotWorking")]
  374. public void TestDeserializeGenListClassListNested ()
  375. {
  376. Deserialize (typeof (GenListClass<GenListClass<GenNestedClass<int, int>.InnerClass<string>>>),
  377. "<GenListClassOfGenListClassOfInnerClassOfInt32Int32String xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><somelist></somelist></GenListClassOfGenListClassOfInnerClassOfInt32Int32String>");
  378. Assert.AreEqual (typeof (GenListClass<GenListClass<GenNestedClass<int, int>.InnerClass<string>>>), result.GetType ());
  379. Deserialize (typeof (GenListClass<GenListClass<GenNestedClass<int, int>.InnerClass<string>>>),
  380. "<GenListClassOfGenListClassOfInnerClassOfInt32Int32String xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><somelist><GenListClassOfInnerClassOfInt32Int32String><somelist><InnerClassOfInt32Int32String><inner>1</inner><something>ONE</something></InnerClassOfInt32Int32String><InnerClassOfInt32Int32String><inner>2</inner><something>TWO</something></InnerClassOfInt32Int32String></somelist></GenListClassOfInnerClassOfInt32Int32String><GenListClassOfInnerClassOfInt32Int32String><somelist><InnerClassOfInt32Int32String><inner>30</inner><something>THIRTY</something></InnerClassOfInt32Int32String></somelist></GenListClassOfInnerClassOfInt32Int32String></somelist></GenListClassOfGenListClassOfInnerClassOfInt32Int32String>");
  381. GenListClass<GenListClass<GenNestedClass<int, int>.InnerClass<string>>> genlist =
  382. result as GenListClass<GenListClass<GenNestedClass<int, int>.InnerClass<string>>>;
  383. Assert.AreEqual (1, genlist.somelist[0].somelist[0].inner);
  384. Assert.AreEqual ("ONE", genlist.somelist[0].somelist[0].something);
  385. Assert.AreEqual (2, genlist.somelist[0].somelist[1].inner);
  386. Assert.AreEqual ("TWO", genlist.somelist[0].somelist[1].something);
  387. Assert.AreEqual (30, genlist.somelist[1].somelist[0].inner);
  388. Assert.AreEqual ("THIRTY", genlist.somelist[1].somelist[0].something);
  389. }
  390. public enum Myenum { one, two, three, four, five, six };
  391. [Test]
  392. [Category ("NotWorking")]
  393. public void TestDeserializeGenArrayClassEnum ()
  394. {
  395. Deserialize (typeof (GenArrayClass<Myenum>), "<GenArrayClassOfMyenum xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><arr><Myenum>one</Myenum><Myenum>one</Myenum><Myenum>one</Myenum></arr></GenArrayClassOfMyenum>");
  396. Assert.AreEqual (typeof (GenArrayClass<Myenum>), result.GetType ());
  397. Deserialize (typeof (GenArrayClass<Myenum>), "<GenArrayClassOfMyenum xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><arr><Myenum>one</Myenum><Myenum>three</Myenum><Myenum>five</Myenum></arr></GenArrayClassOfMyenum>");
  398. GenArrayClass<Myenum> genarr = result as GenArrayClass<Myenum>;
  399. Assert.AreEqual (Myenum.one, genarr.arr[0]);
  400. Assert.AreEqual (Myenum.three, genarr.arr[1]);
  401. Assert.AreEqual (Myenum.five, genarr.arr[2]);
  402. }
  403. [Test]
  404. [Category ("NotWorking")]
  405. public void TestDeserializeGenArrayClassStruct ()
  406. {
  407. Deserialize (typeof (GenArrayClass<GenSimpleStruct<uint>>), "<GenArrayClassOfGenSimpleStructOfUInt32 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><arr><GenSimpleStructOfUInt32>0</GenSimpleStructOfUInt32><GenSimpleStructOfUInt32>0</GenSimpleStructOfUInt32><GenSimpleStructOfUInt32>0</GenSimpleStructOfUInt32></arr></GenArrayClassOfGenSimpleStructOfUInt32>");
  408. Assert.AreEqual (typeof (GenArrayClass<GenSimpleStruct<uint>>), result.GetType ());
  409. Deserialize (typeof (GenArrayClass<GenSimpleStruct<uint>>), "<GenArrayClassOfGenSimpleStructOfUInt32 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><arr><GenSimpleStructOfUInt32><something>111</something></GenSimpleStructOfUInt32><GenSimpleStructOfUInt32><something>222</something></GenSimpleStructOfUInt32><GenSimpleStructOfUInt32><something>333</something></GenSimpleStructOfUInt32></arr></GenArrayClassOfGenSimpleStructOfUInt32>");
  410. GenArrayClass<GenSimpleStruct<uint>> genarr = result as GenArrayClass<GenSimpleStruct<uint>>;
  411. Assert.AreEqual (111, genarr.arr[0].something);
  412. Assert.AreEqual (222, genarr.arr[1].something);
  413. Assert.AreEqual (333, genarr.arr[2].something);
  414. }
  415. [Test]
  416. [Category ("NotWorking")]
  417. public void TestDeserializeGenArrayClassList ()
  418. {
  419. Deserialize (typeof (GenArrayClass<GenListClass<string>>), "<GenArrayClassOfGenListClassOfString xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><arr><GenListClassOfString>0</GenListClassOfString><GenListClassOfString>0</GenListClassOfString><GenListClassOfString>0</GenListClassOfString></arr></GenArrayClassOfGenListClassOfString>");
  420. Assert.AreEqual (typeof (GenArrayClass<GenListClass<string>>), result.GetType ());
  421. Deserialize (typeof (GenArrayClass<GenListClass<string>>), "<GenArrayClassOfGenListClassOfString xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><arr><GenListClassOfString><somelist><string>list1-val1</string><string>list1-val2</string></somelist></GenListClassOfString><GenListClassOfString><somelist><string>list2-val1</string><string>list2-val2</string><string>list2-val3</string><string>list2-val4</string></somelist></GenListClassOfString><GenListClassOfString><somelist><string>list3val</string></somelist></GenListClassOfString></arr></GenArrayClassOfGenListClassOfString>");
  422. GenArrayClass<GenListClass<string>> genarr = result as GenArrayClass<GenListClass<string>>;
  423. Assert.AreEqual ("list1-val1", genarr.arr[0].somelist[0]);
  424. Assert.AreEqual ("list1-val2", genarr.arr[0].somelist[1]);
  425. Assert.AreEqual ("list2-val1", genarr.arr[1].somelist[0]);
  426. Assert.AreEqual ("list2-val2", genarr.arr[1].somelist[1]);
  427. Assert.AreEqual ("list2-val3", genarr.arr[1].somelist[2]);
  428. Assert.AreEqual ("list2-val4", genarr.arr[1].somelist[3]);
  429. Assert.AreEqual ("list3val", genarr.arr[2].somelist[0]);
  430. // The code below checks for DotNet bug (see corresponding test in XmlSerializerTests).
  431. Deserialize (typeof (GenArrayClass<GenListClass<string>>), "<GenArrayClassOfGenListClassOfString xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><arr><GenListClassOfString><somelist><string>list1-val1</string><string>list1-val2</string><string>list3val</string></somelist></GenListClassOfString><GenListClassOfString><somelist><string>list2-val1</string><string>list2-val2</string><string>list2-val3</string><string>list2-val4</string></somelist></GenListClassOfString><GenListClassOfString><somelist></somelist></GenListClassOfString></arr></GenArrayClassOfGenListClassOfString>");
  432. GenArrayClass<GenListClass<string>> genarr2 = result as GenArrayClass<GenListClass<string>>;
  433. Assert.AreEqual ("list1-val1", genarr2.arr[0].somelist[0]);
  434. Assert.AreEqual ("list1-val2", genarr2.arr[0].somelist[1]);
  435. /**/
  436. Assert.AreEqual ("list3val", genarr2.arr[0].somelist[2]);
  437. Assert.AreEqual ("list2-val1", genarr2.arr[1].somelist[0]);
  438. Assert.AreEqual ("list2-val2", genarr2.arr[1].somelist[1]);
  439. Assert.AreEqual ("list2-val3", genarr2.arr[1].somelist[2]);
  440. Assert.AreEqual ("list2-val4", genarr2.arr[1].somelist[3]);
  441. //Assert.AreEqual ("list3val", genarr2.arr[2].somelist[0]);
  442. }
  443. [Test]
  444. [Category ("NotWorking")]
  445. public void TestDeserializeGenComplexStruct ()
  446. {
  447. Deserialize (typeof (GenComplexStruct<int, string>), "<GenComplexStructOfInt32String xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><something>0</something><simpleclass><something>0</something></simpleclass><simplestruct><something>0</something></simplestruct><listclass><somelist></somelist></listclass><arrayclass><arr><int>0</int><int>0</int><int>0</int></arr></arrayclass><twoclass><something1>0</something1></twoclass><derivedclass><something2>0</something2><another1>0</another1></derivedclass><derived2><something1>0</something1><another1>0</another1></derived2><nestedouter><outer>0</outer></nestedouter><nestedinner><something>0</something></nestedinner></GenComplexStructOfInt32String>");
  448. Assert.AreEqual (typeof (GenComplexStruct<int, string>), result.GetType ());
  449. Deserialize (typeof (GenComplexStruct<int, string>), "<GenComplexStructOfInt32String xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><something>123</something><simpleclass><something>456</something></simpleclass><simplestruct><something>789</something></simplestruct><listclass><somelist><int>100</int><int>200</int></somelist></listclass><arrayclass><arr><int>11</int><int>22</int><int>33</int></arr></arrayclass><twoclass><something1>10</something1><something2>Ten</something2></twoclass><derivedclass><something1>two</something1><something2>2</something2><another1>1</another1><another2>one</another2></derivedclass><derived2><something1>4</something1><something2>four</something2><another1>3</another1><another2>three</another2></derived2><nestedouter><outer>5</outer></nestedouter><nestedinner><inner>six</inner><something>6</something></nestedinner></GenComplexStructOfInt32String>");
  450. GenComplexStruct<int, string> complex = new GenComplexStruct<int, string> (0);
  451. if (result != null)
  452. complex = (GenComplexStruct<int, string>) result;
  453. Assert.AreEqual (123, complex.something);
  454. Assert.AreEqual (456, complex.simpleclass.something);
  455. Assert.AreEqual (789, complex.simplestruct.something);
  456. Assert.AreEqual (100, complex.listclass.somelist[0]);
  457. Assert.AreEqual (200, complex.listclass.somelist[1]);
  458. Assert.AreEqual (11, complex.arrayclass.arr[0]);
  459. Assert.AreEqual (22, complex.arrayclass.arr[1]);
  460. Assert.AreEqual (33, complex.arrayclass.arr[2]);
  461. Assert.AreEqual (10, complex.twoclass.something1);
  462. Assert.AreEqual ("Ten", complex.twoclass.something2);
  463. Assert.AreEqual (1, complex.derivedclass.another1);
  464. Assert.AreEqual ("one", complex.derivedclass.another2);
  465. Assert.AreEqual ("two", complex.derivedclass.something1);
  466. Assert.AreEqual (2, complex.derivedclass.something2);
  467. Assert.AreEqual (3, complex.derived2.another1);
  468. Assert.AreEqual ("three", complex.derived2.another2);
  469. Assert.AreEqual (4, complex.derived2.something1);
  470. Assert.AreEqual ("four", complex.derived2.something2);
  471. Assert.AreEqual (5, complex.nestedouter.outer);
  472. Assert.AreEqual ("six", complex.nestedinner.inner);
  473. Assert.AreEqual (6, complex.nestedinner.something);
  474. }
  475. #endif
  476. #endregion //GenericsDeseralizationTests
  477. [Test]
  478. public void TestDeserializeCollection ()
  479. {
  480. string s0 = "";
  481. s0 += " <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  482. s0 += " <Entity Name='node1'/>";
  483. s0 += " <Entity Name='node2'/>";
  484. s0 += " </ArrayOfEntity>";
  485. EntityCollection col = (EntityCollection) Deserialize (typeof (EntityCollection), s0);
  486. Assert.IsNotNull (col, "#1");
  487. Assert.AreEqual (2, col.Count, "#2");
  488. Assert.IsNull (col[0].Parent, "#3");
  489. Assert.IsNull (col[1].Parent, "#4");
  490. }
  491. [Test]
  492. public void TestDeserializeEmptyCollection ()
  493. {
  494. string s1 = "";
  495. s1 += " <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  496. EntityCollection col = (EntityCollection) Deserialize (typeof (EntityCollection), s1);
  497. Assert.IsNotNull (col, "#A1");
  498. Assert.AreEqual (0, col.Count, "#A2");
  499. string s1_1 = "";
  500. s1_1 += " <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  501. s1_1 += " </ArrayOfEntity>";
  502. col = (EntityCollection) Deserialize (typeof (EntityCollection), s1_1);
  503. Assert.IsNotNull (col, "#B1");
  504. Assert.AreEqual (0, col.Count, "#B2");
  505. }
  506. [Test]
  507. public void TestDeserializeNilCollectionIsNotNull ()
  508. {
  509. string s2 = "";
  510. s2 += " <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true'/>";
  511. EntityCollection col = (EntityCollection) Deserialize (typeof (EntityCollection), s2);
  512. Assert.IsNotNull (col, "#1");
  513. Assert.AreEqual (0, col.Count, "#2");
  514. }
  515. [Test]
  516. public void TestDeserializeObjectCollections ()
  517. {
  518. string s3 = "";
  519. s3 += "<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  520. s3 += " <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  521. s3 += " <Entity Name='node1'/>";
  522. s3 += " <Entity Name='node2'/>";
  523. s3 += " </Collection1>";
  524. s3 += " <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  525. s3 += " <Entity Name='node1'/>";
  526. s3 += " <Entity Name='node2'/>";
  527. s3 += " </Collection2>";
  528. s3 += " <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  529. s3 += " <Entity Name='node1'/>";
  530. s3 += " <Entity Name='node2'/>";
  531. s3 += " </Collection3>";
  532. s3 += " <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  533. s3 += " <Entity Name='node1'/>";
  534. s3 += " <Entity Name='node2'/>";
  535. s3 += " </Collection4>";
  536. s3 += "</Container>";
  537. EntityContainer cont = (EntityContainer) Deserialize (typeof (EntityContainer), s3);
  538. Assert.IsNotNull (cont, "#A1");
  539. Assert.IsNotNull (cont.Collection1, "#B1");
  540. Assert.AreEqual (2, cont.Collection1.Count, "#B2");
  541. Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
  542. Assert.AreEqual ("assigned", cont.Collection1[0].Parent, "#B4");
  543. Assert.AreEqual ("assigned", cont.Collection1[1].Parent, "#B5");
  544. Assert.IsNotNull (cont.Collection2, "#C1");
  545. Assert.AreEqual (2, cont.Collection2.Count, "#C2");
  546. Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
  547. Assert.AreEqual ("assigned", cont.Collection2[0].Parent, "#C4");
  548. Assert.AreEqual ("assigned", cont.Collection2[1].Parent, "#C5");
  549. Assert.IsNotNull (cont.Collection3, "#D1");
  550. Assert.AreEqual (2, cont.Collection3.Count, "#D2");
  551. Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
  552. Assert.AreEqual ("root", cont.Collection3[0].Parent, "#D4");
  553. Assert.AreEqual ("root", cont.Collection3[1].Parent, "#D5");
  554. Assert.IsNotNull (cont.Collection4, "#E1");
  555. Assert.AreEqual (2, cont.Collection4.Count, "#E2");
  556. Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
  557. Assert.AreEqual ("root", cont.Collection4[0].Parent, "#E4");
  558. Assert.AreEqual ("root", cont.Collection4[1].Parent, "#E5");
  559. }
  560. [Test]
  561. public void TestDeserializeEmptyObjectCollections ()
  562. {
  563. string s4 = "";
  564. s4 += "<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  565. s4 += "</Container>";
  566. EntityContainer cont = (EntityContainer) Deserialize (typeof (EntityContainer), s4);
  567. Assert.IsNotNull (cont, "#A1");
  568. Assert.IsNotNull (cont.Collection1, "#B1");
  569. Assert.AreEqual (0, cont.Collection1.Count, "#B2");
  570. Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
  571. Assert.IsNotNull (cont.Collection2, "#C1");
  572. Assert.AreEqual (0, cont.Collection2.Count, "#C2");
  573. Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
  574. Assert.IsNotNull (cont.Collection3, "#D1");
  575. Assert.AreEqual (0, cont.Collection3.Count, "#D2");
  576. Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
  577. Assert.IsNotNull (cont.Collection4, "#E1");
  578. Assert.AreEqual (0, cont.Collection4.Count, "#E2");
  579. Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
  580. }
  581. [Test]
  582. public void TestDeserializeObjectNilCollectionsAreNotNull ()
  583. {
  584. string s5 = "";
  585. s5 += "<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  586. s5 += " <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  587. s5 += " <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  588. s5 += " <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  589. s5 += " <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  590. s5 += "</Container>";
  591. EntityContainer cont = (EntityContainer) Deserialize (typeof (EntityContainer), s5);
  592. Assert.IsNotNull (cont, "#A1");
  593. Assert.IsNotNull (cont.Collection1, "#B1");
  594. Assert.AreEqual (0, cont.Collection1.Count, "#B2");
  595. Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
  596. Assert.IsNotNull (cont.Collection2, "#C1");
  597. Assert.AreEqual (0, cont.Collection2.Count, "#C2");
  598. Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
  599. Assert.IsNotNull (cont.Collection3, "#D1");
  600. Assert.AreEqual (0, cont.Collection3.Count, "#D2");
  601. Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
  602. Assert.IsNotNull (cont.Collection4, "#E1");
  603. Assert.AreEqual (0, cont.Collection4.Count, "#E2");
  604. Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
  605. }
  606. [Test]
  607. public void TestDeserializeObjectEmptyCollections ()
  608. {
  609. string s6 = "";
  610. s6 += "<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  611. s6 += " <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  612. s6 += " <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  613. s6 += " <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  614. s6 += " <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  615. s6 += "</Container>";
  616. EntityContainer cont = (EntityContainer) Deserialize (typeof (EntityContainer), s6);
  617. Assert.IsNotNull (cont, "#A1");
  618. Assert.IsNotNull (cont.Collection1, "#B1");
  619. Assert.AreEqual (0, cont.Collection1.Count, "#B2");
  620. Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
  621. Assert.IsNotNull (cont.Collection2, "#C1");
  622. Assert.AreEqual (0, cont.Collection2.Count, "#C2");
  623. Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
  624. Assert.IsNotNull (cont.Collection3, "#D1");
  625. Assert.AreEqual (0, cont.Collection3.Count, "#D2");
  626. Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
  627. Assert.IsNotNull (cont.Collection4, "#E1");
  628. Assert.AreEqual (0, cont.Collection4.Count, "#E2");
  629. Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
  630. }
  631. [Test]
  632. public void TestDeserializeObjectEmptyArrays ()
  633. {
  634. string s6 = "";
  635. s6 += "<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  636. s6 += " <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  637. s6 += " <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  638. s6 += " <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  639. s6 += " <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  640. s6 += "</Container>";
  641. ArrayEntityContainer cont = (ArrayEntityContainer) Deserialize (typeof (ArrayEntityContainer), s6);
  642. Assert.IsNotNull (cont, "#A1");
  643. Assert.IsNotNull (cont.Collection1, "#B1");
  644. Assert.AreEqual (0, cont.Collection1.Length, "#B2");
  645. Assert.IsNotNull (cont.Collection2, "#C1");
  646. Assert.AreEqual (0, cont.Collection2.Length, "#C2");
  647. Assert.IsNotNull (cont.Collection3, "#D1");
  648. Assert.AreEqual (0, cont.Collection3.Length, "#D2");
  649. Assert.IsNotNull (cont.Collection4, "#E1");
  650. Assert.AreEqual (0, cont.Collection4.Length, "#E2");
  651. }
  652. [Test]
  653. public void TestDeserializeEmptyObjectArrays ()
  654. {
  655. string s4 = "";
  656. s4 += "<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  657. s4 += "</Container>";
  658. ArrayEntityContainer cont = (ArrayEntityContainer) Deserialize (typeof (ArrayEntityContainer), s4);
  659. Assert.IsNotNull (cont, "#A1");
  660. Assert.IsNull (cont.Collection1, "#B1");
  661. Assert.IsNull (cont.Collection2, "#B2");
  662. Assert.IsNotNull (cont.Collection3, "#C1");
  663. Assert.AreEqual (0, cont.Collection3.Length, "#C2");
  664. Assert.IsNotNull (cont.Collection4, "#D1");
  665. Assert.AreEqual (0, cont.Collection4.Length, "#D2");
  666. }
  667. [Test]
  668. public void TestDeserializeObjectNilArrays ()
  669. {
  670. string s5 = "";
  671. s5 += "<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  672. s5 += " <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  673. s5 += " <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  674. s5 += " <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  675. s5 += " <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  676. s5 += "</Container>";
  677. ArrayEntityContainer cont = (ArrayEntityContainer) Deserialize (typeof (ArrayEntityContainer), s5);
  678. Assert.IsNotNull (cont, "#A1");
  679. Assert.IsNull (cont.Collection1, "#B1");
  680. Assert.IsNull (cont.Collection2, "#B2");
  681. Assert.IsNull (cont.Collection3, "#B3");
  682. Assert.IsNotNull (cont.Collection4, "#C1");
  683. Assert.AreEqual (0, cont.Collection4.Length, "#C2");
  684. }
  685. [Test]
  686. public void TestDeserializeEmptyArray ()
  687. {
  688. string s1 = "";
  689. s1 += "<ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  690. Entity[] col = (Entity[]) Deserialize (typeof (Entity[]), s1);
  691. Assert.IsNotNull (col, "#A1");
  692. Assert.AreEqual (0, col.Length, "#A2");
  693. string s1_1 = "";
  694. s1_1 += " <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  695. s1_1 += " </ArrayOfEntity>";
  696. col = (Entity[]) Deserialize (typeof (Entity[]), s1_1);
  697. Assert.IsNotNull (col, "#B1");
  698. Assert.AreEqual (0, col.Length, "#B2");
  699. }
  700. [Test]
  701. public void TestDeserializeNilArray ()
  702. {
  703. string s2 = "";
  704. s2 += "<ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true'/>";
  705. Entity[] col = (Entity[]) Deserialize (typeof (Entity[]), s2);
  706. Assert.IsNull (col, "#1");
  707. }
  708. [Test]
  709. public void TestDeserializeObjectWithReadonlyCollection ()
  710. {
  711. string s3 = "";
  712. s3 += "<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  713. s3 += " <Collection1>";
  714. s3 += " <Entity Name='node1'/>";
  715. s3 += " <Entity Name='node2'/>";
  716. s3 += " </Collection1>";
  717. s3 += "</Container>";
  718. ObjectWithReadonlyCollection cont = (ObjectWithReadonlyCollection) Deserialize (typeof (ObjectWithReadonlyCollection), s3);
  719. Assert.IsNotNull (cont, "#1");
  720. Assert.IsNotNull (cont.Collection1, "#2");
  721. Assert.AreEqual (2, cont.Collection1.Count, "#3");
  722. Assert.AreEqual ("root", cont.Collection1.Container, "#4");
  723. Assert.AreEqual ("root", cont.Collection1[0].Parent, "#5");
  724. Assert.AreEqual ("root", cont.Collection1[1].Parent, "#6");
  725. }
  726. [Test]
  727. [ExpectedException (typeof (InvalidOperationException))]
  728. public void TestDeserializeObjectWithReadonlyNulCollection ()
  729. {
  730. string s3 = "";
  731. s3 += "<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  732. s3 += " <Collection1>";
  733. s3 += " <Entity Name='node1'/>";
  734. s3 += " <Entity Name='node2'/>";
  735. s3 += " </Collection1>";
  736. s3 += "</Container>";
  737. Deserialize (typeof (ObjectWithReadonlyNulCollection), s3);
  738. }
  739. [Test]
  740. public void TestDeserializeObjectWithReadonlyArray ()
  741. {
  742. string s3 = "";
  743. s3 += "<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  744. s3 += " <Collection1>";
  745. s3 += " <Entity Name='node1'/>";
  746. s3 += " <Entity Name='node2'/>";
  747. s3 += " </Collection1>";
  748. s3 += "</Container>";
  749. ObjectWithReadonlyArray cont = (ObjectWithReadonlyArray) Deserialize (typeof (ObjectWithReadonlyArray), s3);
  750. Assert.IsNotNull (cont, "#1");
  751. Assert.IsNotNull (cont.Collection1, "#2");
  752. Assert.AreEqual (0, cont.Collection1.Length, "#3");
  753. }
  754. [Test]
  755. public void TestDeserialize_EnumDefaultValue ()
  756. {
  757. EnumDefaultValue e;
  758. e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue />");
  759. Assert.AreEqual (0, (int) e, "#1");
  760. e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue> e3</EnumDefaultValue>");
  761. Assert.AreEqual (EnumDefaultValue.e3, e, "#2");
  762. e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue>e1 e2</EnumDefaultValue>");
  763. Assert.AreEqual (EnumDefaultValue.e3, e, "#3");
  764. e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue> e1 e2 </EnumDefaultValue>");
  765. Assert.AreEqual (EnumDefaultValue.e1 | EnumDefaultValue.e2, e, "#4");
  766. }
  767. [Test]
  768. public void TestDeserialize_EnumDefaultValueNF ()
  769. {
  770. EnumDefaultValueNF e;
  771. e = (EnumDefaultValueNF) Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF>e3</EnumDefaultValueNF>");
  772. Assert.AreEqual (EnumDefaultValueNF.e3, e, "#A1");
  773. try {
  774. Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF />");
  775. Assert.Fail ("#B1");
  776. }
  777. catch (InvalidOperationException ex) {
  778. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
  779. Assert.IsNotNull (ex.InnerException, "#B3");
  780. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#B4");
  781. Assert.IsNotNull (ex.InnerException.Message, "#B5");
  782. Assert.IsTrue (ex.InnerException.Message.IndexOf ("''") != -1, "#B6");
  783. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#B7");
  784. }
  785. try {
  786. Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF>e1 e3</EnumDefaultValueNF>");
  787. Assert.Fail ("#C1");
  788. }
  789. catch (InvalidOperationException ex) {
  790. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
  791. Assert.IsNotNull (ex.InnerException, "#C3");
  792. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#C4");
  793. Assert.IsNotNull (ex.InnerException.Message, "#C5");
  794. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'e1 e3'") != -1, "#C6");
  795. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#C7");
  796. }
  797. try {
  798. Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF> e3</EnumDefaultValueNF>");
  799. Assert.Fail ("#D1");
  800. }
  801. catch (InvalidOperationException ex) {
  802. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  803. Assert.IsNotNull (ex.InnerException, "#D3");
  804. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D4");
  805. Assert.IsNotNull (ex.InnerException.Message, "#D5");
  806. Assert.IsTrue (ex.InnerException.Message.IndexOf ("' e3'") != -1, "#D6");
  807. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#D7");
  808. }
  809. try {
  810. Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF> </EnumDefaultValueNF>");
  811. Assert.Fail ("#E1");
  812. }
  813. catch (InvalidOperationException ex) {
  814. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");
  815. Assert.IsNotNull (ex.InnerException, "#E3");
  816. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#E4");
  817. Assert.IsNotNull (ex.InnerException.Message, "#E5");
  818. Assert.IsTrue (ex.InnerException.Message.IndexOf ("' '") != -1, "#E6");
  819. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#E7");
  820. }
  821. try {
  822. Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF>1</EnumDefaultValueNF>");
  823. Assert.Fail ("#F1");
  824. }
  825. catch (InvalidOperationException ex) {
  826. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");
  827. Assert.IsNotNull (ex.InnerException, "#F3");
  828. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#F4");
  829. Assert.IsNotNull (ex.InnerException.Message, "#F5");
  830. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'1'") != -1, "#F6");
  831. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#F7");
  832. }
  833. }
  834. [Test]
  835. [Category ("NotWorking")] // DefaultValue should not be used when deserializing
  836. public void TestDeserialize_Field ()
  837. {
  838. Field f = null;
  839. f = (Field) Deserialize (typeof (Field),
  840. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  841. "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag1='' flag2='' flag4='' modifiers='public' modifiers2='public' modifiers4='public' />",
  842. XmlSchemaNamespace, XmlSchemaInstanceNamespace));
  843. Assert.AreEqual ((FlagEnum) 0, f.Flags1, "#A1");
  844. Assert.AreEqual ((FlagEnum) 0, f.Flags2, "#A2");
  845. Assert.AreEqual ((FlagEnum) 0, f.Flags3, "#A3");
  846. Assert.AreEqual ((FlagEnum) 0, f.Flags4, "#A4");
  847. Assert.AreEqual (MapModifiers.Public, f.Modifiers, "#A5");
  848. Assert.AreEqual (MapModifiers.Public, f.Modifiers2, "#A6");
  849. Assert.AreEqual (MapModifiers.Public, f.Modifiers3, "#A7");
  850. Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#A8");
  851. Assert.AreEqual (MapModifiers.Public, f.Modifiers5, "#A9");
  852. Assert.IsNull (f.Names, "#A10");
  853. Assert.IsNull (f.Street, "#A11");
  854. f = (Field) Deserialize (typeof (Field),
  855. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  856. "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag3='two' flag4='' modifiers='protected' modifiers2='public' />",
  857. XmlSchemaNamespace, XmlSchemaInstanceNamespace));
  858. Assert.AreEqual ((FlagEnum) 0, f.Flags1, "#B1");
  859. Assert.AreEqual ((FlagEnum) 0, f.Flags2, "#B2");
  860. Assert.AreEqual (FlagEnum.e2, f.Flags3, "#B3");
  861. Assert.AreEqual ((FlagEnum) 0, f.Flags4, "#B4");
  862. Assert.AreEqual (MapModifiers.Protected, f.Modifiers, "#B5");
  863. Assert.AreEqual (MapModifiers.Public, f.Modifiers2, "#B6");
  864. Assert.AreEqual (MapModifiers.Public, f.Modifiers3, "#B7");
  865. Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#B8");
  866. Assert.AreEqual (MapModifiers.Public, f.Modifiers5, "#B9");
  867. Assert.IsNull (f.Names, "#B10");
  868. Assert.IsNull (f.Street, "#B11");
  869. f = (Field) Deserialize (typeof (Field),
  870. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  871. "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag1='two' flag2='two' flag4='' modifiers='public' modifiers2='protected' modifiers3='protected' modifiers4='public' modifiers5='protected' />",
  872. XmlSchemaNamespace, XmlSchemaInstanceNamespace));
  873. Assert.AreEqual (FlagEnum.e2, f.Flags1, "#C1");
  874. Assert.AreEqual (FlagEnum.e2, f.Flags2, "#C2");
  875. Assert.AreEqual ((FlagEnum) 0, f.Flags3, "#C3");
  876. Assert.AreEqual ((FlagEnum) 0, f.Flags4, "#C4");
  877. Assert.AreEqual (MapModifiers.Public, f.Modifiers, "#C5");
  878. Assert.AreEqual (MapModifiers.Protected, f.Modifiers2, "#C6");
  879. Assert.AreEqual (MapModifiers.Protected, f.Modifiers3, "#C7");
  880. Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#C8");
  881. Assert.AreEqual (MapModifiers.Protected, f.Modifiers5, "#C9");
  882. Assert.IsNull (f.Names, "#C10");
  883. Assert.IsNull (f.Street, "#C11");
  884. try {
  885. f = (Field) Deserialize (typeof (Field),
  886. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  887. "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag2='444' />",
  888. XmlSchemaNamespace, XmlSchemaInstanceNamespace));
  889. Assert.Fail ("#D1");
  890. }
  891. catch (InvalidOperationException ex) {
  892. // There was an error generating the XML document
  893. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  894. Assert.IsNotNull (ex.Message, "#D3");
  895. Assert.IsNotNull (ex.InnerException, "#D4");
  896. // '444' is not a valid value for MonoTests.System.Xml.TestClasses.FlagEnum
  897. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D5");
  898. Assert.IsNotNull (ex.InnerException.Message, "#D6");
  899. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'444'") != -1, "#D7");
  900. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#D8");
  901. Assert.IsNull (ex.InnerException.InnerException, "#D9");
  902. }
  903. try {
  904. f = (Field) Deserialize (typeof (Field),
  905. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  906. "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag2='Garbage' />",
  907. XmlSchemaNamespace, XmlSchemaInstanceNamespace));
  908. Assert.Fail ("#E1");
  909. }
  910. catch (InvalidOperationException ex) {
  911. // There was an error generating the XML document
  912. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");
  913. Assert.IsNotNull (ex.Message, "#E3");
  914. Assert.IsNotNull (ex.InnerException, "#E4");
  915. // 'Garbage' is not a valid value for MonoTests.System.Xml.TestClasses.FlagEnum
  916. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#E5");
  917. Assert.IsNotNull (ex.InnerException.Message, "#E6");
  918. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'Garbage'") != -1, "#E7");
  919. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#E8");
  920. Assert.IsNull (ex.InnerException.InnerException, "#E9");
  921. }
  922. try {
  923. f = (Field) Deserialize (typeof (Field),
  924. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  925. "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag2='{2}' />",
  926. XmlSchemaNamespace, XmlSchemaInstanceNamespace, ((int) FlagEnum.e2).ToString (CultureInfo.InvariantCulture)));
  927. Assert.Fail ("#F1");
  928. }
  929. catch (InvalidOperationException ex) {
  930. // There was an error generating the XML document
  931. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");
  932. Assert.IsNotNull (ex.Message, "#F3");
  933. Assert.IsNotNull (ex.InnerException, "#F4");
  934. // '2' is not a valid value for MonoTests.System.Xml.TestClasses.FlagEnum
  935. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#F5");
  936. Assert.IsNotNull (ex.InnerException.Message, "#F6");
  937. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'2'") != -1, "#F7");
  938. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#F8");
  939. Assert.IsNull (ex.InnerException.InnerException, "#F9");
  940. }
  941. }
  942. [Test]
  943. [Category ("NotDotNet")] // MS.NET does not allow SoapAttribute backed by enum ??
  944. public void TestDeserialize_Field_Encoded ()
  945. {
  946. Field_Encoded f = null;
  947. f = (Field_Encoded) DeserializeEncoded (typeof (Field_Encoded),
  948. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  949. "<q1:field xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' flag1='' flag2='' flag4='' modifiers='PuBlIc' modifiers2='PuBlIc' modifiers4='PuBlIc' xmlns:q1='{2}' />",
  950. XmlSchemaNamespace, XmlSchemaInstanceNamespace, ANamespace));
  951. Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags1, "#A1");
  952. Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags2, "#A2");
  953. Assert.AreEqual (FlagEnum_Encoded.e1 | FlagEnum_Encoded.e2, f.Flags3, "#A3");
  954. Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags4, "#A4");
  955. Assert.AreEqual (MapModifiers.Public, f.Modifiers, "#A5");
  956. Assert.AreEqual (MapModifiers.Public, f.Modifiers2, "#A6");
  957. Assert.AreEqual (MapModifiers.Public, f.Modifiers3, "#A7");
  958. Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#A8");
  959. Assert.AreEqual (MapModifiers.Public, f.Modifiers5, "#A9");
  960. Assert.IsNull (f.Names, "#A10");
  961. Assert.IsNull (f.Street, "#A11");
  962. f = (Field_Encoded) DeserializeEncoded (typeof (Field_Encoded),
  963. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  964. "<q1:field xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' flag3='two' flag4='' modifiers='Protected' modifiers2='PuBlIc' xmlns:q1='{2}' />",
  965. XmlSchemaNamespace, XmlSchemaInstanceNamespace, ANamespace));
  966. Assert.AreEqual (FlagEnum_Encoded.e1, f.Flags1, "#B1");
  967. Assert.AreEqual (FlagEnum_Encoded.e1, f.Flags2, "#B2");
  968. Assert.AreEqual (FlagEnum_Encoded.e2, f.Flags3, "#B3");
  969. Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags4, "#B4");
  970. Assert.AreEqual (MapModifiers.Protected, f.Modifiers, "#B5");
  971. Assert.AreEqual (MapModifiers.Public, f.Modifiers2, "#B6");
  972. Assert.AreEqual (MapModifiers.Public, f.Modifiers3, "#B7");
  973. Assert.AreEqual (MapModifiers.Protected, f.Modifiers4, "#B8");
  974. Assert.AreEqual (MapModifiers.Public, f.Modifiers5, "#B9");
  975. Assert.IsNull (f.Names, "#B10");
  976. Assert.IsNull (f.Street, "#B11");
  977. f = (Field_Encoded) DeserializeEncoded (typeof (Field_Encoded),
  978. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  979. "<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}' />",
  980. XmlSchemaNamespace, XmlSchemaInstanceNamespace, ANamespace));
  981. Assert.AreEqual (FlagEnum_Encoded.e2, f.Flags1, "#C1");
  982. Assert.AreEqual (FlagEnum_Encoded.e2, f.Flags2, "#C2");
  983. Assert.AreEqual (FlagEnum_Encoded.e1 | FlagEnum_Encoded.e2, f.Flags3, "#C3");
  984. Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags4, "#C4");
  985. Assert.AreEqual (MapModifiers.Public, f.Modifiers, "#C5");
  986. Assert.AreEqual (MapModifiers.Protected, f.Modifiers2, "#C6");
  987. Assert.AreEqual (MapModifiers.Protected, f.Modifiers3, "#C7");
  988. Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#C8");
  989. Assert.AreEqual (MapModifiers.Protected, f.Modifiers5, "#C9");
  990. Assert.IsNull (f.Names, "#C10");
  991. Assert.IsNull (f.Street, "#C11");
  992. try {
  993. f = (Field_Encoded) DeserializeEncoded (typeof (Field_Encoded),
  994. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  995. "<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}' />",
  996. XmlSchemaNamespace, XmlSchemaInstanceNamespace, ANamespace));
  997. Assert.Fail ("#D1");
  998. }
  999. catch (InvalidOperationException ex) {
  1000. // There was an error generating the XML document
  1001. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  1002. Assert.IsNotNull (ex.Message, "#D3");
  1003. Assert.IsNotNull (ex.InnerException, "#D4");
  1004. // '444' is not a valid value for MonoTests.System.Xml.TestClasses.FlagEnum_Encoded
  1005. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D5");
  1006. Assert.IsNotNull (ex.InnerException.Message, "#D6");
  1007. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'444'") != -1, "#D7");
  1008. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum_Encoded).FullName) != -1, "#D8");
  1009. Assert.IsNull (ex.InnerException.InnerException, "#D9");
  1010. }
  1011. }
  1012. [Test]
  1013. public void TestDeserialize_FlagEnum ()
  1014. {
  1015. FlagEnum e;
  1016. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum />");
  1017. Assert.AreEqual (0, (int) e, "#A1");
  1018. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>one</FlagEnum>");
  1019. Assert.AreEqual (FlagEnum.e1, e, "#A2");
  1020. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>one\u200atwo</FlagEnum>");
  1021. Assert.AreEqual (FlagEnum.e1 | FlagEnum.e2, e, "#A3");
  1022. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>one two four</FlagEnum>");
  1023. Assert.AreEqual (FlagEnum.e1 | FlagEnum.e2 | FlagEnum.e4, e, "#A4");
  1024. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum> two four </FlagEnum>");
  1025. Assert.AreEqual (FlagEnum.e2 | FlagEnum.e4, e, "#A5");
  1026. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>two four two</FlagEnum>");
  1027. Assert.AreEqual (FlagEnum.e2 | FlagEnum.e4, e, "#A6");
  1028. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>two four two\tone\u2002four\u200btwo one</FlagEnum>");
  1029. Assert.AreEqual (FlagEnum.e1 | FlagEnum.e2 | FlagEnum.e4, e, "#A7");
  1030. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum></FlagEnum>");
  1031. Assert.AreEqual (0, (int) e, "#A8");
  1032. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum> </FlagEnum>");
  1033. Assert.AreEqual (0, (int) e, "#A9");
  1034. try {
  1035. Deserialize (typeof (FlagEnum), "<FlagEnum>1</FlagEnum>");
  1036. Assert.Fail ("#B1");
  1037. }
  1038. catch (InvalidOperationException ex) {
  1039. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
  1040. Assert.IsNotNull (ex.InnerException, "#B3");
  1041. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#B4");
  1042. Assert.IsNotNull (ex.InnerException.Message, "#B5");
  1043. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'1'") != -1, "#B6");
  1044. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#B7");
  1045. }
  1046. try {
  1047. Deserialize (typeof (FlagEnum), "<FlagEnum>one,two</FlagEnum>");
  1048. Assert.Fail ("#C1");
  1049. }
  1050. catch (InvalidOperationException ex) {
  1051. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
  1052. Assert.IsNotNull (ex.InnerException, "#C3");
  1053. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#C4");
  1054. Assert.IsNotNull (ex.InnerException.Message, "#C5");
  1055. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'one,two'") != -1, "#C6");
  1056. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#C7");
  1057. }
  1058. try {
  1059. Deserialize (typeof (FlagEnum), "<FlagEnum>one something</FlagEnum>");
  1060. Assert.Fail ("#D1");
  1061. }
  1062. catch (InvalidOperationException ex) {
  1063. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  1064. Assert.IsNotNull (ex.InnerException, "#D3");
  1065. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D4");
  1066. Assert.IsNotNull (ex.InnerException.Message, "#D5");
  1067. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'something'") != -1, "#D6");
  1068. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#D7");
  1069. }
  1070. }
  1071. [Test]
  1072. public void TestDeserialize_Group ()
  1073. {
  1074. string xml = string.Format (CultureInfo.InvariantCulture,
  1075. "<Wrapper>" +
  1076. "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' xmlns:d2p1='http://www.cpandl.com' CreationDate='2002-05-02' d2p1:GroupName='.NET' GroupNumber='ZDI=' id='id1'>" +
  1077. "<PosInt xsi:type='xsd:nonNegativeInteger'>10000</PosInt>" +
  1078. "<Grouptype xsi:type='GroupType'>Small</Grouptype>" +
  1079. "<MyVehicle href='#id2' />" +
  1080. "</Group>" +
  1081. "<Car xmlns:d2p1='{1}' id='id2' d2p1:type='Car'>" +
  1082. "<licenseNumber xmlns:q1='{0}' d2p1:type='q1:string'>1234566</licenseNumber>" +
  1083. "<makeDate xmlns:q2='{0}' d2p1:type='q2:date'>0001-01-01</makeDate>" +
  1084. "</Car>" +
  1085. "</Wrapper>",
  1086. "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
  1087. XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  1088. xtr.ReadStartElement ("Wrapper");
  1089. Group group = (Group) DeserializeEncoded (typeof (Group), xtr);
  1090. Assert.AreEqual (new DateTime (2002, 5, 2), group.Today, "#A1");
  1091. Assert.AreEqual (".NET", group.GroupName, "#A2");
  1092. Assert.AreEqual (new byte[] { 0x64, 0x32 }, group.GroupNumber, "#A3");
  1093. Assert.AreEqual (GroupType.A, group.Grouptype, "#A4");
  1094. Assert.AreEqual ("10000", group.PostitiveInt, "#A5");
  1095. Assert.IsFalse (group.IgnoreThis, "#A6");
  1096. Assert.IsNotNull (group.MyVehicle, "#A7");
  1097. Assert.AreEqual (typeof (Car), group.MyVehicle.GetType (), "#A8");
  1098. Assert.AreEqual ("1234566", group.MyVehicle.licenseNumber, "#A9");
  1099. Assert.AreEqual (new DateTime (1, 1, 1), group.MyVehicle.makeDate, "#A10");
  1100. Assert.IsNull (group.MyVehicle.weight, "#A11");
  1101. xml = string.Format (CultureInfo.InvariantCulture,
  1102. "<Wrapper>" +
  1103. "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' CreationDate='2002-05-02' GroupNumber='ZDI=' id='id1'>" +
  1104. "<PosInt xsi:type='xsd:nonNegativeInteger'>10000</PosInt>" +
  1105. "<Grouptype xsi:type='GroupType'>Large</Grouptype>" +
  1106. "<MyVehicle href='#id2' />" +
  1107. "</Group>" +
  1108. "<Car xmlns:d2p1='{1}' id='id2' d2p1:type='Car'>" +
  1109. "<weight xmlns:q2='{0}' d2p1:type='q2:string'>450</weight>" +
  1110. "</Car>" +
  1111. "</Wrapper>",
  1112. "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
  1113. xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  1114. xtr.ReadStartElement ("Wrapper");
  1115. group = (Group) DeserializeEncoded (typeof (Group), xtr);
  1116. Assert.AreEqual (new DateTime (2002, 5, 2), group.Today, "#B1");
  1117. Assert.IsNull (group.GroupName, "#B2");
  1118. Assert.AreEqual (new byte[] { 0x64, 0x32 }, group.GroupNumber, "#B3");
  1119. Assert.AreEqual (GroupType.B, group.Grouptype, "#B4");
  1120. Assert.AreEqual ("10000", group.PostitiveInt, "#B5");
  1121. Assert.IsFalse (group.IgnoreThis, "#B6");
  1122. Assert.IsNotNull (group.MyVehicle, "#B7");
  1123. Assert.AreEqual (typeof (Car), group.MyVehicle.GetType (), "#B8");
  1124. Assert.IsNull (group.MyVehicle.licenseNumber, "#B9");
  1125. Assert.AreEqual (DateTime.MinValue, group.MyVehicle.makeDate, "#B10");
  1126. Assert.AreEqual ("450", group.MyVehicle.weight, "#B11");
  1127. xml = string.Format (CultureInfo.InvariantCulture,
  1128. "<Wrapper>" +
  1129. "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' />" +
  1130. "</Wrapper>",
  1131. "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
  1132. xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  1133. xtr.ReadStartElement ("Wrapper");
  1134. group = (Group) DeserializeEncoded (typeof (Group), xtr);
  1135. Assert.AreEqual (DateTime.MinValue, group.Today, "#C1");
  1136. Assert.IsNull (group.GroupName, "#C2");
  1137. Assert.AreEqual (null, group.GroupNumber, "#C3");
  1138. Assert.AreEqual (GroupType.A, group.Grouptype, "#C4");
  1139. Assert.IsNull (group.PostitiveInt, "#C5");
  1140. Assert.IsFalse (group.IgnoreThis, "#C6");
  1141. Assert.IsNull (group.MyVehicle, "#C7");
  1142. xml = string.Format (CultureInfo.InvariantCulture,
  1143. "<Wrapper>" +
  1144. "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1'>" +
  1145. "<Grouptype xsi:type='GroupType'>666</Grouptype>" +
  1146. "</Group>" +
  1147. "</Wrapper>",
  1148. "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
  1149. xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  1150. xtr.ReadStartElement ("Wrapper");
  1151. try {
  1152. group = (Group) DeserializeEncoded (typeof (Group), xtr);
  1153. Assert.Fail ("#D1");
  1154. }
  1155. catch (InvalidOperationException ex) {
  1156. // There is an error in XML document (1, 174)
  1157. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  1158. Assert.IsNotNull (ex.Message, "#D3");
  1159. Assert.IsNotNull (ex.InnerException, "#D4");
  1160. // '666' is not a valid value for GroupType
  1161. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D5");
  1162. Assert.IsNotNull (ex.InnerException.Message, "#D6");
  1163. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'666'") != -1, "#D7");
  1164. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (GroupType).Name) != -1, "#D8");
  1165. Assert.IsNull (ex.InnerException.InnerException, "#D9");
  1166. }
  1167. xml = string.Format (CultureInfo.InvariantCulture,
  1168. "<Wrapper>" +
  1169. "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1'>" +
  1170. "<Grouptype xsi:type='GroupType'>Garbage</Grouptype>" +
  1171. "</Group>" +
  1172. "</Wrapper>",
  1173. "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
  1174. xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  1175. xtr.ReadStartElement ("Wrapper");
  1176. try {
  1177. group = (Group) DeserializeEncoded (typeof (Group), xtr);
  1178. Assert.Fail ("#E1");
  1179. }
  1180. catch (InvalidOperationException ex) {
  1181. // There is an error in XML document (1, 178)
  1182. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");
  1183. Assert.IsNotNull (ex.Message, "#E3");
  1184. Assert.IsNotNull (ex.InnerException, "#E4");
  1185. // 'Garbage' is not a valid value for GroupType
  1186. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#E5");
  1187. Assert.IsNotNull (ex.InnerException.Message, "#E6");
  1188. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'Garbage'") != -1, "#E7");
  1189. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (GroupType).Name) != -1, "#E8");
  1190. Assert.IsNull (ex.InnerException.InnerException, "#E9");
  1191. }
  1192. xml = string.Format (CultureInfo.InvariantCulture,
  1193. "<Wrapper>" +
  1194. "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1'>" +
  1195. "<Grouptype xsi:type='GroupType'>{2}</Grouptype>" +
  1196. "</Group>" +
  1197. "</Wrapper>",
  1198. "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance",
  1199. ((int) GroupType.B).ToString (CultureInfo.InvariantCulture));
  1200. xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  1201. xtr.ReadStartElement ("Wrapper");
  1202. try {
  1203. group = (Group) DeserializeEncoded (typeof (Group), xtr);
  1204. Assert.Fail ("#F1");
  1205. }
  1206. catch (InvalidOperationException ex) {
  1207. // There is an error in XML document (1, 172)
  1208. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");
  1209. Assert.IsNotNull (ex.Message, "#F3");
  1210. Assert.IsNotNull (ex.InnerException, "#F4");
  1211. // '1' is not a valid value for GroupType
  1212. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#F5");
  1213. Assert.IsNotNull (ex.InnerException.Message, "#F6");
  1214. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'1'") != -1, "#F7");
  1215. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (GroupType).Name) != -1, "#F8");
  1216. Assert.IsNull (ex.InnerException.InnerException, "#F9");
  1217. }
  1218. }
  1219. [Test]
  1220. public void TestDeserialize_ZeroFlagEnum ()
  1221. {
  1222. ZeroFlagEnum e;
  1223. e = (ZeroFlagEnum) Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum />");
  1224. Assert.AreEqual (ZeroFlagEnum.e0, e, "#A1");
  1225. e = (ZeroFlagEnum) Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum></ZeroFlagEnum>");
  1226. Assert.AreEqual (ZeroFlagEnum.e0, e, "#A2");
  1227. try {
  1228. Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum>four</ZeroFlagEnum>");
  1229. Assert.Fail ("#B1");
  1230. }
  1231. catch (InvalidOperationException ex) {
  1232. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
  1233. Assert.IsNotNull (ex.InnerException, "#B3");
  1234. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#B4");
  1235. Assert.IsNotNull (ex.InnerException.Message, "#B5");
  1236. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'four'") != -1, "#B6");
  1237. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (ZeroFlagEnum).FullName) != -1, "#B7");
  1238. }
  1239. try {
  1240. Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum> o&lt;n&gt;e four </ZeroFlagEnum>");
  1241. Assert.Fail ("#C1");
  1242. }
  1243. catch (InvalidOperationException ex) {
  1244. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
  1245. Assert.IsNotNull (ex.InnerException, "#C3");
  1246. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#C4");
  1247. Assert.IsNotNull (ex.InnerException.Message, "#C5");
  1248. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'four'") != -1, "#C6");
  1249. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (ZeroFlagEnum).FullName) != -1, "#C7");
  1250. }
  1251. try {
  1252. Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum>four o&lt;n&gt;e</ZeroFlagEnum>");
  1253. Assert.Fail ("#D1");
  1254. }
  1255. catch (InvalidOperationException ex) {
  1256. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  1257. Assert.IsNotNull (ex.InnerException, "#D3");
  1258. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D4");
  1259. Assert.IsNotNull (ex.InnerException.Message, "#D5");
  1260. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'four'") != -1, "#D6");
  1261. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (ZeroFlagEnum).FullName) != -1, "#D7");
  1262. }
  1263. }
  1264. [Test]
  1265. public void TestDeserialize_PrimitiveTypesContainer ()
  1266. {
  1267. Deserialize (typeof (PrimitiveTypesContainer), string.Format (CultureInfo.InvariantCulture,
  1268. "<?xml version='1.0' encoding='utf-16'?>" +
  1269. "<PrimitiveTypesContainer xmlns:xsd='{0}' xmlns:xsi='{1}' xmlns='{2}'>" +
  1270. "<Number xsi:type='xsd:int'>2004</Number>" +
  1271. "<Name xsi:type='xsd:string'>some name</Name>" +
  1272. "<Index xsi:type='xsd:unsignedByte'>56</Index>" +
  1273. "<Password xsi:type='xsd:base64Binary'>8w8=</Password>" +
  1274. "<PathSeparatorCharacter xmlns:q1='{3}' xsi:type='q1:char'>47</PathSeparatorCharacter>" +
  1275. "</PrimitiveTypesContainer>", XmlSchemaNamespace,
  1276. XmlSchemaInstanceNamespace, ANamespace, WsdlTypesNamespace));
  1277. Assert.AreEqual (typeof (PrimitiveTypesContainer), result.GetType (), "#A1");
  1278. PrimitiveTypesContainer deserialized = (PrimitiveTypesContainer) result;
  1279. Assert.AreEqual (2004, deserialized.Number, "#A2");
  1280. Assert.AreEqual ("some name", deserialized.Name, "#A3");
  1281. Assert.AreEqual ((byte) 56, deserialized.Index, "#A4");
  1282. Assert.AreEqual (new byte[] { 243, 15 }, deserialized.Password, "#A5");
  1283. Assert.AreEqual ('/', deserialized.PathSeparatorCharacter, "#A6");
  1284. DeserializeEncoded (typeof (PrimitiveTypesContainer), string.Format (CultureInfo.InvariantCulture,
  1285. "<?xml version='1.0' encoding='utf-16'?>" +
  1286. "<q1:PrimitiveTypesContainer xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' xmlns:q1='{2}'>" +
  1287. "<Number xsi:type='xsd:int'>2004</Number>" +
  1288. "<Name xsi:type='xsd:string'>some name</Name>" +
  1289. "<Index xsi:type='xsd:unsignedByte'>56</Index>" +
  1290. "<Password xsi:type='xsd:base64Binary'>8w8=</Password>" +
  1291. "<PathSeparatorCharacter xmlns:q1='{3}' xsi:type='q1:char'>47</PathSeparatorCharacter>" +
  1292. "</q1:PrimitiveTypesContainer>", XmlSchemaNamespace,
  1293. XmlSchemaInstanceNamespace, AnotherNamespace, WsdlTypesNamespace));
  1294. Assert.AreEqual (typeof (PrimitiveTypesContainer), result.GetType (), "#B1");
  1295. deserialized = (PrimitiveTypesContainer) result;
  1296. Assert.AreEqual (2004, deserialized.Number, "#B2");
  1297. Assert.AreEqual ("some name", deserialized.Name, "#B3");
  1298. Assert.AreEqual ((byte) 56, deserialized.Index, "#B4");
  1299. Assert.AreEqual (new byte[] { 243, 15 }, deserialized.Password, "#B5");
  1300. Assert.AreEqual ('/', deserialized.PathSeparatorCharacter, "#B6");
  1301. }
  1302. }
  1303. }