DeserializeTests.cs 80 KB

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