DeserializeTests.cs 53 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217
  1. //
  2. // System.Xml.DeserializationTests
  3. //
  4. // Author:
  5. // Atsushi Enomoto <[email protected]>
  6. //
  7. // (C) 2003 Atsushi Enomoto
  8. //
  9. //
  10. using System;
  11. using System.Globalization;
  12. using System.IO;
  13. using System.Xml;
  14. using System.Xml.Serialization;
  15. using NUnit.Framework;
  16. using MonoTests.System.Xml.TestClasses;
  17. namespace MonoTests.System.XmlSerialization
  18. {
  19. public class Sample
  20. {
  21. public string Text;
  22. public string [] ArrayText;
  23. }
  24. [TestFixture]
  25. public class DeserializationTests
  26. {
  27. const string XmlSchemaNamespace = "http://www.w3.org/2001/XMLSchema";
  28. const string XmlSchemaInstanceNamespace = "http://www.w3.org/2001/XMLSchema-instance";
  29. const string SoapEncodingNamespace = "http://schemas.xmlsoap.org/soap/encoding/";
  30. const string WsdlTypesNamespace = "http://microsoft.com/wsdl/types/";
  31. const string ANamespace = "some:urn";
  32. const string AnotherNamespace = "another:urn";
  33. object result;
  34. private object Deserialize (Type t, string xml)
  35. {
  36. StringReader sr = new StringReader (xml);
  37. XmlReader xr = new XmlTextReader (sr);
  38. return Deserialize (t, xr);
  39. }
  40. private object Deserialize (Type t, string xml, string defaultNamespace)
  41. {
  42. StringReader sr = new StringReader (xml);
  43. XmlReader xr = new XmlTextReader (sr);
  44. return Deserialize (t, xr, defaultNamespace);
  45. }
  46. private object Deserialize (Type t, string xml, XmlAttributeOverrides ao)
  47. {
  48. StringReader sr = new StringReader (xml);
  49. XmlReader xr = new XmlTextReader (sr);
  50. return Deserialize (t, xr, ao);
  51. }
  52. private object DeserializeEncoded (Type t, string xml)
  53. {
  54. StringReader sr = new StringReader (xml);
  55. XmlReader xr = new XmlTextReader (sr);
  56. return DeserializeEncoded (t, xr);
  57. }
  58. private object Deserialize (Type t, XmlReader xr)
  59. {
  60. XmlSerializer ser = new XmlSerializer (t);
  61. result = ser.Deserialize (xr);
  62. return result;
  63. }
  64. private object Deserialize (Type t, XmlReader xr, string defaultNamespace)
  65. {
  66. XmlSerializer ser = new XmlSerializer (t, defaultNamespace);
  67. result = ser.Deserialize (xr);
  68. return result;
  69. }
  70. private object Deserialize (Type t, XmlReader xr, XmlAttributeOverrides ao)
  71. {
  72. XmlSerializer ser = new XmlSerializer (t, ao);
  73. result = ser.Deserialize (xr);
  74. return result;
  75. }
  76. private object DeserializeEncoded (Type t, XmlReader xr)
  77. {
  78. SoapReflectionImporter im = new SoapReflectionImporter ();
  79. XmlTypeMapping tm = im.ImportTypeMapping (t);
  80. XmlSerializer ser = new XmlSerializer (tm);
  81. result = ser.Deserialize (xr);
  82. return result;
  83. }
  84. [Test]
  85. public void SimpleDeserialize ()
  86. {
  87. Deserialize (typeof (Sample), "<Sample><Text>Test.</Text></Sample>");
  88. Assert.AreEqual (typeof (Sample), result.GetType ());
  89. Sample sample = result as Sample;
  90. Assert.AreEqual ("Test.", sample.Text);
  91. }
  92. [Test]
  93. public void DeserializeInt ()
  94. {
  95. Deserialize (typeof (int), "<int>10</int>");
  96. Assert.AreEqual (typeof (int), result.GetType ());
  97. Assert.AreEqual (10, result);
  98. }
  99. [Test]
  100. public void DeserializeSimpleArray ()
  101. {
  102. Deserialize (typeof (Sample), "<Sample><ArrayText><string>Test1</string><string>Test2</string></ArrayText></Sample>");
  103. Assert.AreEqual (typeof (Sample), result.GetType ());
  104. Sample sample = result as Sample;
  105. Assert.AreEqual ("Test1", sample.ArrayText[0]);
  106. Assert.AreEqual ("Test2", sample.ArrayText[1]);
  107. }
  108. [Test]
  109. public void DeserializeEmptyEnum ()
  110. {
  111. Field f = Deserialize (typeof (Field), "<field modifiers=\"\" />") as Field;
  112. Assert.AreEqual (MapModifiers.Public, f.Modifiers);
  113. }
  114. [Test]
  115. public void DeserializePrivateCollection ()
  116. {
  117. MemoryStream ms = new MemoryStream ();
  118. Container c = new Container();
  119. c.Items.Add(1);
  120. XmlSerializer serializer = new XmlSerializer(typeof(Container));
  121. serializer.Serialize(ms, c);
  122. ms.Position = 0;
  123. c = (Container) serializer.Deserialize (ms);
  124. Assert.AreEqual (1, c.Items[0]);
  125. }
  126. [Test]
  127. [Category("NotDotNet")]
  128. [ExpectedException (typeof (InvalidOperationException))]
  129. public void DeserializeEmptyPrivateCollection ()
  130. {
  131. MemoryStream ms = new MemoryStream ();
  132. Container2 c = new Container2(true);
  133. c.Items.Add(1);
  134. XmlSerializer serializer = new XmlSerializer(typeof(Container2));
  135. serializer.Serialize(ms, c);
  136. ms.Position = 0;
  137. c = (Container2) serializer.Deserialize (ms);
  138. }
  139. [Test]
  140. [Category("NotDotNet")]
  141. public void DeserializeArrayReferences ()
  142. {
  143. string s = "<Sample xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">";
  144. s += "<ArrayText xmlns:n3=\"http://schemas.xmlsoap.org/soap/encoding/\" xsi:type=\"n3:Array\" n3:arrayType=\"xsd:string[2]\">";
  145. s += "<item href=\"#id-606830706\"></item>";
  146. s += "<item xsi:type=\"xsd:string\">Hola</item>";
  147. s += "</ArrayText>";
  148. s += "<string id=\"id-606830706\" xsi:type=\"xsd:string\">Adeu</string>";
  149. s += "</Sample>";
  150. DeserializeEncoded (typeof(Sample), s);
  151. }
  152. [Test]
  153. public void TestDeserializeXmlNodeArray ()
  154. {
  155. object ob = Deserialize (typeof(object), "<anyType at=\"1\"><elem1/><elem2/></anyType>");
  156. Assert.IsTrue (ob is XmlNode[], "Is node array");
  157. XmlNode[] nods = (XmlNode[]) ob;
  158. Assert.AreEqual (3, nods.Length, "lengh");
  159. Assert.IsTrue (nods[0] is XmlAttribute, "#1");
  160. Assert.AreEqual ("at", ((XmlAttribute) nods[0]).LocalName, "#2");
  161. Assert.AreEqual ("1", ((XmlAttribute) nods[0]).Value, "#3");
  162. Assert.IsTrue (nods[1] is XmlElement, "#4");
  163. Assert.AreEqual ("elem1", ((XmlElement) nods[1]).LocalName, "#5");
  164. Assert.IsTrue (nods[2] is XmlElement, "#6");
  165. Assert.AreEqual ("elem2", ((XmlElement) nods[2]).LocalName, "#7");
  166. }
  167. [Test]
  168. public void TestDeserializeXmlElement ()
  169. {
  170. object ob = Deserialize (typeof(XmlElement), "<elem/>");
  171. Assert.IsTrue (ob is XmlElement, "#1");
  172. Assert.AreEqual ("elem", ((XmlElement) ob).LocalName, "#2");
  173. }
  174. [Test]
  175. public void TestDeserializeXmlCDataSection ()
  176. {
  177. 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>");
  178. Assert.IsNotNull (c.cdata, "#1");
  179. Assert.AreEqual ("data section contents", c.cdata.Value, "#2");
  180. }
  181. [Test]
  182. public void TestDeserializeXmlNode ()
  183. {
  184. 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>");
  185. Assert.IsTrue (c.node is XmlText, "#1");
  186. Assert.AreEqual ("text", c.node.Value, "#2");
  187. }
  188. [Test]
  189. public void TestDeserializeChoices ()
  190. {
  191. Choices ch = (Choices) Deserialize (typeof(Choices), "<Choices><ChoiceZero>choice text</ChoiceZero></Choices>");
  192. Assert.AreEqual ("choice text", ch.MyChoice, "#A1");
  193. Assert.AreEqual (ItemChoiceType.ChoiceZero, ch.ItemType, "#A2");
  194. ch = (Choices) Deserialize (typeof(Choices), "<Choices><ChoiceOne>choice text</ChoiceOne></Choices>");
  195. Assert.AreEqual ("choice text", ch.MyChoice, "#B1");
  196. Assert.AreEqual (ItemChoiceType.StrangeOne, ch.ItemType, "#B2");
  197. ch = (Choices) Deserialize (typeof(Choices), "<Choices><ChoiceTwo>choice text</ChoiceTwo></Choices>");
  198. Assert.AreEqual ("choice text", ch.MyChoice, "#C1");
  199. Assert.AreEqual (ItemChoiceType.ChoiceTwo, ch.ItemType, "#C2");
  200. }
  201. [Test]
  202. public void TestDeserializeNamesWithSpaces ()
  203. {
  204. 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>");
  205. Assert.AreEqual (4, ts.elem, "#1");
  206. Assert.AreEqual (5, ts.attr, "#2");
  207. }
  208. [Test]
  209. public void TestDeserializeDefaults ()
  210. {
  211. ListDefaults d2 = (ListDefaults) Deserialize (typeof(ListDefaults), "<root/>");
  212. Assert.IsNotNull (d2.list2, "#A1");
  213. Assert.IsNull (d2.list3, "#A2");
  214. Assert.IsNull (d2.list4, "#A3");
  215. Assert.IsNotNull (d2.list5, "#A4");
  216. Assert.IsNotNull (d2.ed, "#A5");
  217. Assert.IsNotNull (d2.str, "#A6");
  218. d2 = (ListDefaults) Deserialize (typeof(ListDefaults), "<root></root>");
  219. Assert.IsNotNull (d2.list2, "#B1");
  220. Assert.IsNull (d2.list3, "#B2");
  221. Assert.IsNull (d2.list4, "#B3");
  222. Assert.IsNotNull (d2.list5, "#B4");
  223. Assert.IsNotNull (d2.ed, "#B5");
  224. Assert.IsNotNull (d2.str, "#B6");
  225. }
  226. [Test]
  227. public void TestDeserializeChoiceArray ()
  228. {
  229. 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>");
  230. Assert.IsNotNull (v.Items, "#1");
  231. Assert.IsNotNull (v.ItemsElementName, "#2");
  232. Assert.AreEqual (2, v.Items.Length, "#3");
  233. Assert.AreEqual (2, v.ItemsElementName.Length, "#4");
  234. Assert.AreEqual (1, v.Items[0], "#5");
  235. Assert.AreEqual (2, v.Items[1], "#6");
  236. Assert.AreEqual (ItemsChoiceType.In, v.ItemsElementName[0], "#7");
  237. Assert.AreEqual (ItemsChoiceType.Es, v.ItemsElementName[1], "#8");
  238. }
  239. [Test]
  240. public void TestDeserializeCollection ()
  241. {
  242. string s0 = "";
  243. s0+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  244. s0+=" <Entity Name='node1'/>";
  245. s0+=" <Entity Name='node2'/>";
  246. s0+=" </ArrayOfEntity>";
  247. EntityCollection col = (EntityCollection) Deserialize (typeof(EntityCollection), s0);
  248. Assert.IsNotNull (col, "#1");
  249. Assert.AreEqual (2, col.Count, "#2");
  250. Assert.IsNull (col[0].Parent, "#3");
  251. Assert.IsNull (col[1].Parent, "#4");
  252. }
  253. [Test]
  254. public void TestDeserializeEmptyCollection ()
  255. {
  256. string s1 = "";
  257. s1+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  258. EntityCollection col = (EntityCollection) Deserialize (typeof(EntityCollection), s1);
  259. Assert.IsNotNull (col, "#A1");
  260. Assert.AreEqual (0, col.Count, "#A2");
  261. string s1_1 = "";
  262. s1_1+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  263. s1_1+=" </ArrayOfEntity>";
  264. col = (EntityCollection) Deserialize (typeof(EntityCollection), s1_1);
  265. Assert.IsNotNull (col, "#B1");
  266. Assert.AreEqual (0, col.Count, "#B2");
  267. }
  268. [Test]
  269. public void TestDeserializeNilCollectionIsNotNull ()
  270. {
  271. string s2 = "";
  272. s2+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true'/>";
  273. EntityCollection col = (EntityCollection) Deserialize (typeof(EntityCollection), s2);
  274. Assert.IsNotNull (col, "#1");
  275. Assert.AreEqual (0, col.Count, "#2");
  276. }
  277. [Test]
  278. public void TestDeserializeObjectCollections ()
  279. {
  280. string s3 = "";
  281. s3+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  282. s3+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  283. s3+=" <Entity Name='node1'/>";
  284. s3+=" <Entity Name='node2'/>";
  285. s3+=" </Collection1>";
  286. s3+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  287. s3+=" <Entity Name='node1'/>";
  288. s3+=" <Entity Name='node2'/>";
  289. s3+=" </Collection2>";
  290. s3+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  291. s3+=" <Entity Name='node1'/>";
  292. s3+=" <Entity Name='node2'/>";
  293. s3+=" </Collection3>";
  294. s3+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  295. s3+=" <Entity Name='node1'/>";
  296. s3+=" <Entity Name='node2'/>";
  297. s3+=" </Collection4>";
  298. s3+="</Container>";
  299. EntityContainer cont = (EntityContainer) Deserialize (typeof(EntityContainer), s3);
  300. Assert.IsNotNull (cont, "#A1");
  301. Assert.IsNotNull (cont.Collection1, "#B1");
  302. Assert.AreEqual (2, cont.Collection1.Count, "#B2");
  303. Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
  304. Assert.AreEqual ("assigned", cont.Collection1[0].Parent, "#B4");
  305. Assert.AreEqual ("assigned", cont.Collection1[1].Parent, "#B5");
  306. Assert.IsNotNull (cont.Collection2, "#C1");
  307. Assert.AreEqual (2, cont.Collection2.Count, "#C2");
  308. Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
  309. Assert.AreEqual ("assigned", cont.Collection2[0].Parent, "#C4");
  310. Assert.AreEqual ("assigned", cont.Collection2[1].Parent, "#C5");
  311. Assert.IsNotNull (cont.Collection3, "#D1");
  312. Assert.AreEqual (2, cont.Collection3.Count, "#D2");
  313. Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
  314. Assert.AreEqual ("root", cont.Collection3[0].Parent, "#D4");
  315. Assert.AreEqual ("root", cont.Collection3[1].Parent, "#D5");
  316. Assert.IsNotNull (cont.Collection4, "#E1");
  317. Assert.AreEqual (2, cont.Collection4.Count, "#E2");
  318. Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
  319. Assert.AreEqual ("root", cont.Collection4[0].Parent, "#E4");
  320. Assert.AreEqual ("root", cont.Collection4[1].Parent, "#E5");
  321. }
  322. [Test]
  323. public void TestDeserializeEmptyObjectCollections ()
  324. {
  325. string s4 = "";
  326. s4+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  327. s4+="</Container>";
  328. EntityContainer cont = (EntityContainer) Deserialize (typeof(EntityContainer), s4);
  329. Assert.IsNotNull (cont, "#A1");
  330. Assert.IsNotNull (cont.Collection1, "#B1");
  331. Assert.AreEqual (0, cont.Collection1.Count, "#B2");
  332. Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
  333. Assert.IsNotNull (cont.Collection2, "#C1");
  334. Assert.AreEqual (0, cont.Collection2.Count, "#C2");
  335. Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
  336. Assert.IsNotNull (cont.Collection3, "#D1");
  337. Assert.AreEqual (0, cont.Collection3.Count, "#D2");
  338. Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
  339. Assert.IsNotNull (cont.Collection4, "#E1");
  340. Assert.AreEqual (0, cont.Collection4.Count, "#E2");
  341. Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
  342. }
  343. [Test]
  344. public void TestDeserializeObjectNilCollectionsAreNotNull ()
  345. {
  346. string s5 = "";
  347. s5+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  348. s5+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  349. s5+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  350. s5+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  351. s5+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  352. s5+="</Container>";
  353. EntityContainer cont = (EntityContainer) Deserialize (typeof(EntityContainer), s5);
  354. Assert.IsNotNull (cont, "#A1");
  355. Assert.IsNotNull (cont.Collection1, "#B1");
  356. Assert.AreEqual (0, cont.Collection1.Count, "#B2");
  357. Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
  358. Assert.IsNotNull (cont.Collection2, "#C1");
  359. Assert.AreEqual (0, cont.Collection2.Count, "#C2");
  360. Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
  361. Assert.IsNotNull (cont.Collection3, "#D1");
  362. Assert.AreEqual (0, cont.Collection3.Count, "#D2");
  363. Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
  364. Assert.IsNotNull (cont.Collection4, "#E1");
  365. Assert.AreEqual (0, cont.Collection4.Count, "#E2");
  366. Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
  367. }
  368. [Test]
  369. public void TestDeserializeObjectEmptyCollections ()
  370. {
  371. string s6 = "";
  372. s6+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  373. s6+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  374. s6+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  375. s6+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  376. s6+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  377. s6+="</Container>";
  378. EntityContainer cont = (EntityContainer) Deserialize (typeof(EntityContainer), s6);
  379. Assert.IsNotNull (cont, "#A1");
  380. Assert.IsNotNull (cont.Collection1, "#B1");
  381. Assert.AreEqual (0, cont.Collection1.Count, "#B2");
  382. Assert.AreEqual ("assigned", cont.Collection1.Container, "#B3");
  383. Assert.IsNotNull (cont.Collection2, "#C1");
  384. Assert.AreEqual (0, cont.Collection2.Count, "#C2");
  385. Assert.AreEqual ("assigned", cont.Collection2.Container, "#C3");
  386. Assert.IsNotNull (cont.Collection3, "#D1");
  387. Assert.AreEqual (0, cont.Collection3.Count, "#D2");
  388. Assert.AreEqual ("root", cont.Collection3.Container, "#D3");
  389. Assert.IsNotNull (cont.Collection4, "#E1");
  390. Assert.AreEqual (0, cont.Collection4.Count, "#E2");
  391. Assert.AreEqual ("root", cont.Collection4.Container, "#E3");
  392. }
  393. [Test]
  394. public void TestDeserializeObjectEmptyArrays ()
  395. {
  396. string s6 = "";
  397. s6+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  398. s6+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  399. s6+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  400. s6+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  401. s6+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  402. s6+="</Container>";
  403. ArrayEntityContainer cont = (ArrayEntityContainer) Deserialize (typeof(ArrayEntityContainer), s6);
  404. Assert.IsNotNull (cont, "#A1");
  405. Assert.IsNotNull (cont.Collection1, "#B1");
  406. Assert.AreEqual (0, cont.Collection1.Length, "#B2");
  407. Assert.IsNotNull (cont.Collection2, "#C1");
  408. Assert.AreEqual (0, cont.Collection2.Length, "#C2");
  409. Assert.IsNotNull (cont.Collection3, "#D1");
  410. Assert.AreEqual (0, cont.Collection3.Length, "#D2");
  411. Assert.IsNotNull (cont.Collection4, "#E1");
  412. Assert.AreEqual (0, cont.Collection4.Length, "#E2");
  413. }
  414. [Test]
  415. public void TestDeserializeEmptyObjectArrays ()
  416. {
  417. string s4 = "";
  418. s4+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  419. s4+="</Container>";
  420. ArrayEntityContainer cont = (ArrayEntityContainer) Deserialize (typeof(ArrayEntityContainer), s4);
  421. Assert.IsNotNull (cont, "#A1");
  422. Assert.IsNull (cont.Collection1, "#B1");
  423. Assert.IsNull (cont.Collection2, "#B2");
  424. Assert.IsNotNull (cont.Collection3, "#C1");
  425. Assert.AreEqual (0, cont.Collection3.Length, "#C2");
  426. Assert.IsNotNull (cont.Collection4, "#D1");
  427. Assert.AreEqual (0, cont.Collection4.Length, "#D2");
  428. }
  429. [Test]
  430. public void TestDeserializeObjectNilArrays ()
  431. {
  432. string s5 = "";
  433. s5+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  434. s5+=" <Collection1 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  435. s5+=" <Collection2 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  436. s5+=" <Collection3 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  437. s5+=" <Collection4 xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true' />";
  438. s5+="</Container>";
  439. ArrayEntityContainer cont = (ArrayEntityContainer) Deserialize (typeof(ArrayEntityContainer), s5);
  440. Assert.IsNotNull (cont, "#A1");
  441. Assert.IsNull (cont.Collection1, "#B1");
  442. Assert.IsNull (cont.Collection2, "#B2");
  443. Assert.IsNull (cont.Collection3, "#B3");
  444. Assert.IsNotNull (cont.Collection4, "#C1");
  445. Assert.AreEqual (0, cont.Collection4.Length, "#C2");
  446. }
  447. [Test]
  448. public void TestDeserializeEmptyArray ()
  449. {
  450. string s1 = "";
  451. s1+="<ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' />";
  452. Entity[] col = (Entity[]) Deserialize (typeof(Entity[]), s1);
  453. Assert.IsNotNull (col, "#A1");
  454. Assert.AreEqual (0, col.Length, "#A2");
  455. string s1_1 = "";
  456. s1_1+=" <ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  457. s1_1+=" </ArrayOfEntity>";
  458. col = (Entity[]) Deserialize (typeof(Entity[]), s1_1);
  459. Assert.IsNotNull (col, "#B1");
  460. Assert.AreEqual (0, col.Length, "#B2");
  461. }
  462. [Test]
  463. public void TestDeserializeNilArray ()
  464. {
  465. string s2 = "";
  466. s2 += "<ArrayOfEntity xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:nil='true'/>";
  467. Entity[] col = (Entity[]) Deserialize (typeof(Entity[]), s2);
  468. Assert.IsNull (col, "#1");
  469. }
  470. [Test]
  471. public void TestDeserializeObjectWithReadonlyCollection ()
  472. {
  473. string s3 = "";
  474. s3+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  475. s3+=" <Collection1>";
  476. s3+=" <Entity Name='node1'/>";
  477. s3+=" <Entity Name='node2'/>";
  478. s3+=" </Collection1>";
  479. s3+="</Container>";
  480. ObjectWithReadonlyCollection cont = (ObjectWithReadonlyCollection) Deserialize (typeof(ObjectWithReadonlyCollection), s3);
  481. Assert.IsNotNull (cont, "#1");
  482. Assert.IsNotNull (cont.Collection1, "#2");
  483. Assert.AreEqual (2, cont.Collection1.Count, "#3");
  484. Assert.AreEqual ("root", cont.Collection1.Container, "#4");
  485. Assert.AreEqual ("root", cont.Collection1[0].Parent, "#5");
  486. Assert.AreEqual ("root", cont.Collection1[1].Parent, "#6");
  487. }
  488. [Test]
  489. [ExpectedException (typeof(InvalidOperationException))]
  490. public void TestDeserializeObjectWithReadonlyNulCollection ()
  491. {
  492. string s3 = "";
  493. s3+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  494. s3+=" <Collection1>";
  495. s3+=" <Entity Name='node1'/>";
  496. s3+=" <Entity Name='node2'/>";
  497. s3+=" </Collection1>";
  498. s3+="</Container>";
  499. Deserialize (typeof(ObjectWithReadonlyNulCollection), s3);
  500. }
  501. [Test]
  502. public void TestDeserializeObjectWithReadonlyArray ()
  503. {
  504. string s3 = "";
  505. s3+="<Container xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
  506. s3+=" <Collection1>";
  507. s3+=" <Entity Name='node1'/>";
  508. s3+=" <Entity Name='node2'/>";
  509. s3+=" </Collection1>";
  510. s3+="</Container>";
  511. ObjectWithReadonlyArray cont = (ObjectWithReadonlyArray) Deserialize (typeof(ObjectWithReadonlyArray), s3);
  512. Assert.IsNotNull (cont, "#1");
  513. Assert.IsNotNull (cont.Collection1, "#2");
  514. Assert.AreEqual (0, cont.Collection1.Length, "#3");
  515. }
  516. [Test]
  517. public void TestDeserialize_EnumDefaultValue ()
  518. {
  519. EnumDefaultValue e;
  520. e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue />");
  521. Assert.AreEqual (0, (int) e, "#1");
  522. e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue> e3</EnumDefaultValue>");
  523. Assert.AreEqual (EnumDefaultValue.e3, e, "#2");
  524. e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue>e1 e2</EnumDefaultValue>");
  525. Assert.AreEqual (EnumDefaultValue.e3, e, "#3");
  526. e = (EnumDefaultValue) Deserialize (typeof (EnumDefaultValue), "<EnumDefaultValue> e1 e2 </EnumDefaultValue>");
  527. Assert.AreEqual (EnumDefaultValue.e1 | EnumDefaultValue.e2, e, "#4");
  528. }
  529. [Test]
  530. public void TestDeserialize_EnumDefaultValueNF ()
  531. {
  532. EnumDefaultValueNF e;
  533. e = (EnumDefaultValueNF) Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF>e3</EnumDefaultValueNF>");
  534. Assert.AreEqual (EnumDefaultValueNF.e3, e, "#A1");
  535. try {
  536. Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF />");
  537. Assert.Fail ("#B1");
  538. } catch (InvalidOperationException ex) {
  539. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
  540. Assert.IsNotNull (ex.InnerException, "#B3");
  541. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#B4");
  542. Assert.IsNotNull (ex.InnerException.Message, "#B5");
  543. Assert.IsTrue (ex.InnerException.Message.IndexOf ("''") != -1, "#B6");
  544. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#B7");
  545. }
  546. try {
  547. Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF>e1 e3</EnumDefaultValueNF>");
  548. Assert.Fail ("#C1");
  549. } catch (InvalidOperationException ex) {
  550. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
  551. Assert.IsNotNull (ex.InnerException, "#C3");
  552. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#C4");
  553. Assert.IsNotNull (ex.InnerException.Message, "#C5");
  554. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'e1 e3'") != -1, "#C6");
  555. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#C7");
  556. }
  557. try {
  558. Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF> e3</EnumDefaultValueNF>");
  559. Assert.Fail ("#D1");
  560. } catch (InvalidOperationException ex) {
  561. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  562. Assert.IsNotNull (ex.InnerException, "#D3");
  563. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D4");
  564. Assert.IsNotNull (ex.InnerException.Message, "#D5");
  565. Assert.IsTrue (ex.InnerException.Message.IndexOf ("' e3'") != -1, "#D6");
  566. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#D7");
  567. }
  568. try {
  569. Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF> </EnumDefaultValueNF>");
  570. Assert.Fail ("#E1");
  571. } catch (InvalidOperationException ex) {
  572. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");
  573. Assert.IsNotNull (ex.InnerException, "#E3");
  574. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#E4");
  575. Assert.IsNotNull (ex.InnerException.Message, "#E5");
  576. Assert.IsTrue (ex.InnerException.Message.IndexOf ("' '") != -1, "#E6");
  577. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#E7");
  578. }
  579. try {
  580. Deserialize (typeof (EnumDefaultValueNF), "<EnumDefaultValueNF>1</EnumDefaultValueNF>");
  581. Assert.Fail ("#F1");
  582. } catch (InvalidOperationException ex) {
  583. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");
  584. Assert.IsNotNull (ex.InnerException, "#F3");
  585. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#F4");
  586. Assert.IsNotNull (ex.InnerException.Message, "#F5");
  587. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'1'") != -1, "#F6");
  588. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).Name) != -1, "#F7");
  589. }
  590. }
  591. [Test]
  592. [Category ("NotWorking")] // DefaultValue should not be used when deserializing
  593. public void TestDeserialize_Field ()
  594. {
  595. Field f = null;
  596. f = (Field) Deserialize (typeof (Field),
  597. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  598. "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag1='' flag2='' flag4='' modifiers='public' modifiers2='public' modifiers4='public' />",
  599. XmlSchemaNamespace, XmlSchemaInstanceNamespace));
  600. Assert.AreEqual ((FlagEnum) 0, f.Flags1, "#A1");
  601. Assert.AreEqual ((FlagEnum) 0, f.Flags2, "#A2");
  602. Assert.AreEqual ((FlagEnum) 0, f.Flags3, "#A3");
  603. Assert.AreEqual ((FlagEnum) 0, f.Flags4, "#A4");
  604. Assert.AreEqual (MapModifiers.Public, f.Modifiers, "#A5");
  605. Assert.AreEqual (MapModifiers.Public, f.Modifiers2, "#A6");
  606. Assert.AreEqual (MapModifiers.Public, f.Modifiers3, "#A7");
  607. Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#A8");
  608. Assert.AreEqual (MapModifiers.Public, f.Modifiers5, "#A9");
  609. Assert.IsNull (f.Names, "#A10");
  610. Assert.IsNull (f.Street, "#A11");
  611. f = (Field) Deserialize (typeof (Field),
  612. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  613. "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag3='two' flag4='' modifiers='protected' modifiers2='public' />",
  614. XmlSchemaNamespace, XmlSchemaInstanceNamespace));
  615. Assert.AreEqual ((FlagEnum) 0, f.Flags1, "#B1");
  616. Assert.AreEqual ((FlagEnum) 0, f.Flags2, "#B2");
  617. Assert.AreEqual (FlagEnum.e2, f.Flags3, "#B3");
  618. Assert.AreEqual ((FlagEnum) 0, f.Flags4, "#B4");
  619. Assert.AreEqual (MapModifiers.Protected, f.Modifiers, "#B5");
  620. Assert.AreEqual (MapModifiers.Public, f.Modifiers2, "#B6");
  621. Assert.AreEqual (MapModifiers.Public, f.Modifiers3, "#B7");
  622. Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#B8");
  623. Assert.AreEqual (MapModifiers.Public, f.Modifiers5, "#B9");
  624. Assert.IsNull (f.Names, "#B10");
  625. Assert.IsNull (f.Street, "#B11");
  626. f = (Field) Deserialize (typeof (Field),
  627. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  628. "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag1='two' flag2='two' flag4='' modifiers='public' modifiers2='protected' modifiers3='protected' modifiers4='public' modifiers5='protected' />",
  629. XmlSchemaNamespace, XmlSchemaInstanceNamespace));
  630. Assert.AreEqual (FlagEnum.e2, f.Flags1, "#C1");
  631. Assert.AreEqual (FlagEnum.e2, f.Flags2, "#C2");
  632. Assert.AreEqual ((FlagEnum) 0, f.Flags3, "#C3");
  633. Assert.AreEqual ((FlagEnum) 0, f.Flags4, "#C4");
  634. Assert.AreEqual (MapModifiers.Public, f.Modifiers, "#C5");
  635. Assert.AreEqual (MapModifiers.Protected, f.Modifiers2, "#C6");
  636. Assert.AreEqual (MapModifiers.Protected, f.Modifiers3, "#C7");
  637. Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#C8");
  638. Assert.AreEqual (MapModifiers.Protected, f.Modifiers5, "#C9");
  639. Assert.IsNull (f.Names, "#C10");
  640. Assert.IsNull (f.Street, "#C11");
  641. try {
  642. f = (Field) Deserialize (typeof (Field),
  643. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  644. "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag2='444' />",
  645. XmlSchemaNamespace, XmlSchemaInstanceNamespace));
  646. Assert.Fail ("#D1");
  647. } catch (InvalidOperationException ex) {
  648. // There was an error generating the XML document
  649. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  650. Assert.IsNotNull (ex.Message, "#D3");
  651. Assert.IsNotNull (ex.InnerException, "#D4");
  652. // '444' is not a valid value for MonoTests.System.Xml.TestClasses.FlagEnum
  653. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D5");
  654. Assert.IsNotNull (ex.InnerException.Message, "#D6");
  655. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'444'") != -1, "#D7");
  656. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#D8");
  657. Assert.IsNull (ex.InnerException.InnerException, "#D9");
  658. }
  659. try {
  660. f = (Field) Deserialize (typeof (Field),
  661. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  662. "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag2='Garbage' />",
  663. XmlSchemaNamespace, XmlSchemaInstanceNamespace));
  664. Assert.Fail ("#E1");
  665. } catch (InvalidOperationException ex) {
  666. // There was an error generating the XML document
  667. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");
  668. Assert.IsNotNull (ex.Message, "#E3");
  669. Assert.IsNotNull (ex.InnerException, "#E4");
  670. // 'Garbage' is not a valid value for MonoTests.System.Xml.TestClasses.FlagEnum
  671. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#E5");
  672. Assert.IsNotNull (ex.InnerException.Message, "#E6");
  673. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'Garbage'") != -1, "#E7");
  674. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#E8");
  675. Assert.IsNull (ex.InnerException.InnerException, "#E9");
  676. }
  677. try {
  678. f = (Field) Deserialize (typeof (Field),
  679. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  680. "<field xmlns:xsd='{0}' xmlns:xsi='{1}' flag2='{2}' />",
  681. XmlSchemaNamespace, XmlSchemaInstanceNamespace, ((int) FlagEnum.e2).ToString (CultureInfo.InvariantCulture)));
  682. Assert.Fail ("#F1");
  683. } catch (InvalidOperationException ex) {
  684. // There was an error generating the XML document
  685. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");
  686. Assert.IsNotNull (ex.Message, "#F3");
  687. Assert.IsNotNull (ex.InnerException, "#F4");
  688. // '2' is not a valid value for MonoTests.System.Xml.TestClasses.FlagEnum
  689. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#F5");
  690. Assert.IsNotNull (ex.InnerException.Message, "#F6");
  691. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'2'") != -1, "#F7");
  692. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#F8");
  693. Assert.IsNull (ex.InnerException.InnerException, "#F9");
  694. }
  695. }
  696. [Test]
  697. [Category ("NotDotNet")] // MS.NET does not allow SoapAttribute backed by enum ??
  698. public void TestDeserialize_Field_Encoded ()
  699. {
  700. Field_Encoded f = null;
  701. f = (Field_Encoded) DeserializeEncoded (typeof (Field_Encoded),
  702. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  703. "<q1:field xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' flag1='' flag2='' flag4='' modifiers='PuBlIc' modifiers2='PuBlIc' modifiers4='PuBlIc' xmlns:q1='{2}' />",
  704. XmlSchemaNamespace, XmlSchemaInstanceNamespace, ANamespace));
  705. Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags1, "#A1");
  706. Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags2, "#A2");
  707. Assert.AreEqual (FlagEnum_Encoded.e1 | FlagEnum_Encoded.e2, f.Flags3, "#A3");
  708. Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags4, "#A4");
  709. Assert.AreEqual (MapModifiers.Public, f.Modifiers, "#A5");
  710. Assert.AreEqual (MapModifiers.Public, f.Modifiers2, "#A6");
  711. Assert.AreEqual (MapModifiers.Public, f.Modifiers3, "#A7");
  712. Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#A8");
  713. Assert.AreEqual (MapModifiers.Public, f.Modifiers5, "#A9");
  714. Assert.IsNull (f.Names, "#A10");
  715. Assert.IsNull (f.Street, "#A11");
  716. f = (Field_Encoded) DeserializeEncoded (typeof (Field_Encoded),
  717. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  718. "<q1:field xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' flag3='two' flag4='' modifiers='Protected' modifiers2='PuBlIc' xmlns:q1='{2}' />",
  719. XmlSchemaNamespace, XmlSchemaInstanceNamespace, ANamespace));
  720. Assert.AreEqual (FlagEnum_Encoded.e1, f.Flags1, "#B1");
  721. Assert.AreEqual (FlagEnum_Encoded.e1, f.Flags2, "#B2");
  722. Assert.AreEqual (FlagEnum_Encoded.e2, f.Flags3, "#B3");
  723. Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags4, "#B4");
  724. Assert.AreEqual (MapModifiers.Protected, f.Modifiers, "#B5");
  725. Assert.AreEqual (MapModifiers.Public, f.Modifiers2, "#B6");
  726. Assert.AreEqual (MapModifiers.Public, f.Modifiers3, "#B7");
  727. Assert.AreEqual (MapModifiers.Protected, f.Modifiers4, "#B8");
  728. Assert.AreEqual (MapModifiers.Public, f.Modifiers5, "#B9");
  729. Assert.IsNull (f.Names, "#B10");
  730. Assert.IsNull (f.Street, "#B11");
  731. f = (Field_Encoded) DeserializeEncoded (typeof (Field_Encoded),
  732. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  733. "<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}' />",
  734. XmlSchemaNamespace, XmlSchemaInstanceNamespace, ANamespace));
  735. Assert.AreEqual (FlagEnum_Encoded.e2, f.Flags1, "#C1");
  736. Assert.AreEqual (FlagEnum_Encoded.e2, f.Flags2, "#C2");
  737. Assert.AreEqual (FlagEnum_Encoded.e1 | FlagEnum_Encoded.e2, f.Flags3, "#C3");
  738. Assert.AreEqual ((FlagEnum_Encoded) 0, f.Flags4, "#C4");
  739. Assert.AreEqual (MapModifiers.Public, f.Modifiers, "#C5");
  740. Assert.AreEqual (MapModifiers.Protected, f.Modifiers2, "#C6");
  741. Assert.AreEqual (MapModifiers.Protected, f.Modifiers3, "#C7");
  742. Assert.AreEqual (MapModifiers.Public, f.Modifiers4, "#C8");
  743. Assert.AreEqual (MapModifiers.Protected, f.Modifiers5, "#C9");
  744. Assert.IsNull (f.Names, "#C10");
  745. Assert.IsNull (f.Street, "#C11");
  746. try {
  747. f = (Field_Encoded) DeserializeEncoded (typeof (Field_Encoded),
  748. string.Format (CultureInfo.InvariantCulture, "<?xml version='1.0' encoding='utf-16'?>" +
  749. "<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}' />",
  750. XmlSchemaNamespace, XmlSchemaInstanceNamespace, ANamespace));
  751. Assert.Fail ("#D1");
  752. } catch (InvalidOperationException ex) {
  753. // There was an error generating the XML document
  754. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  755. Assert.IsNotNull (ex.Message, "#D3");
  756. Assert.IsNotNull (ex.InnerException, "#D4");
  757. // '444' is not a valid value for MonoTests.System.Xml.TestClasses.FlagEnum_Encoded
  758. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D5");
  759. Assert.IsNotNull (ex.InnerException.Message, "#D6");
  760. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'444'") != -1, "#D7");
  761. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum_Encoded).FullName) != -1, "#D8");
  762. Assert.IsNull (ex.InnerException.InnerException, "#D9");
  763. }
  764. }
  765. [Test]
  766. public void TestDeserialize_FlagEnum ()
  767. {
  768. FlagEnum e;
  769. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum />");
  770. Assert.AreEqual (0, (int) e, "#A1");
  771. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>one</FlagEnum>");
  772. Assert.AreEqual (FlagEnum.e1, e, "#A2");
  773. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>one\u200atwo</FlagEnum>");
  774. Assert.AreEqual (FlagEnum.e1 | FlagEnum.e2, e, "#A3");
  775. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>one two four</FlagEnum>");
  776. Assert.AreEqual (FlagEnum.e1 | FlagEnum.e2 | FlagEnum.e4, e, "#A4");
  777. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum> two four </FlagEnum>");
  778. Assert.AreEqual (FlagEnum.e2 | FlagEnum.e4, e, "#A5");
  779. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>two four two</FlagEnum>");
  780. Assert.AreEqual (FlagEnum.e2 | FlagEnum.e4, e, "#A6");
  781. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum>two four two\tone\u2002four\u200btwo one</FlagEnum>");
  782. Assert.AreEqual (FlagEnum.e1 | FlagEnum.e2 | FlagEnum.e4, e, "#A7");
  783. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum></FlagEnum>");
  784. Assert.AreEqual (0, (int) e, "#A8");
  785. e = (FlagEnum) Deserialize (typeof (FlagEnum), "<FlagEnum> </FlagEnum>");
  786. Assert.AreEqual (0, (int) e, "#A9");
  787. try {
  788. Deserialize (typeof (FlagEnum), "<FlagEnum>1</FlagEnum>");
  789. Assert.Fail ("#B1");
  790. } catch (InvalidOperationException ex) {
  791. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
  792. Assert.IsNotNull (ex.InnerException, "#B3");
  793. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#B4");
  794. Assert.IsNotNull (ex.InnerException.Message, "#B5");
  795. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'1'") != -1, "#B6");
  796. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#B7");
  797. }
  798. try {
  799. Deserialize (typeof (FlagEnum), "<FlagEnum>one,two</FlagEnum>");
  800. Assert.Fail ("#C1");
  801. } catch (InvalidOperationException ex) {
  802. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
  803. Assert.IsNotNull (ex.InnerException, "#C3");
  804. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#C4");
  805. Assert.IsNotNull (ex.InnerException.Message, "#C5");
  806. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'one,two'") != -1, "#C6");
  807. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#C7");
  808. }
  809. try {
  810. Deserialize (typeof (FlagEnum), "<FlagEnum>one something</FlagEnum>");
  811. Assert.Fail ("#D1");
  812. } catch (InvalidOperationException ex) {
  813. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  814. Assert.IsNotNull (ex.InnerException, "#D3");
  815. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D4");
  816. Assert.IsNotNull (ex.InnerException.Message, "#D5");
  817. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'something'") != -1, "#D6");
  818. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (FlagEnum).FullName) != -1, "#D7");
  819. }
  820. }
  821. [Test]
  822. public void TestDeserialize_Group ()
  823. {
  824. string xml = string.Format (CultureInfo.InvariantCulture,
  825. "<Wrapper>" +
  826. "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' xmlns:d2p1='http://www.cpandl.com' CreationDate='2002-05-02' d2p1:GroupName='.NET' GroupNumber='ZDI=' id='id1'>" +
  827. "<PosInt xsi:type='xsd:nonNegativeInteger'>10000</PosInt>" +
  828. "<Grouptype xsi:type='GroupType'>Small</Grouptype>" +
  829. "<MyVehicle href='#id2' />" +
  830. "</Group>" +
  831. "<Car xmlns:d2p1='{1}' id='id2' d2p1:type='Car'>" +
  832. "<licenseNumber xmlns:q1='{0}' d2p1:type='q1:string'>1234566</licenseNumber>" +
  833. "<makeDate xmlns:q2='{0}' d2p1:type='q2:date'>0001-01-01</makeDate>" +
  834. "</Car>" +
  835. "</Wrapper>",
  836. "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
  837. XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  838. xtr.ReadStartElement ("Wrapper");
  839. Group group = (Group) DeserializeEncoded (typeof (Group), xtr);
  840. Assert.AreEqual (new DateTime (2002, 5, 2), group.Today, "#A1");
  841. Assert.AreEqual (".NET", group.GroupName, "#A2");
  842. Assert.AreEqual (new byte [] { 0x64, 0x32 }, group.GroupNumber, "#A3");
  843. Assert.AreEqual (GroupType.A, group.Grouptype, "#A4");
  844. Assert.AreEqual ("10000", group.PostitiveInt, "#A5");
  845. Assert.IsFalse (group.IgnoreThis, "#A6");
  846. Assert.IsNotNull (group.MyVehicle, "#A7");
  847. Assert.AreEqual (typeof (Car), group.MyVehicle.GetType (), "#A8");
  848. Assert.AreEqual ("1234566", group.MyVehicle.licenseNumber, "#A9");
  849. Assert.AreEqual (new DateTime (1, 1, 1), group.MyVehicle.makeDate, "#A10");
  850. Assert.IsNull (group.MyVehicle.weight, "#A11");
  851. xml = string.Format (CultureInfo.InvariantCulture,
  852. "<Wrapper>" +
  853. "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' CreationDate='2002-05-02' GroupNumber='ZDI=' id='id1'>" +
  854. "<PosInt xsi:type='xsd:nonNegativeInteger'>10000</PosInt>" +
  855. "<Grouptype xsi:type='GroupType'>Large</Grouptype>" +
  856. "<MyVehicle href='#id2' />" +
  857. "</Group>" +
  858. "<Car xmlns:d2p1='{1}' id='id2' d2p1:type='Car'>" +
  859. "<weight xmlns:q2='{0}' d2p1:type='q2:string'>450</weight>" +
  860. "</Car>" +
  861. "</Wrapper>",
  862. "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
  863. xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  864. xtr.ReadStartElement ("Wrapper");
  865. group = (Group) DeserializeEncoded (typeof (Group), xtr);
  866. Assert.AreEqual (new DateTime (2002, 5, 2), group.Today, "#B1");
  867. Assert.IsNull (group.GroupName, "#B2");
  868. Assert.AreEqual (new byte [] { 0x64, 0x32 }, group.GroupNumber, "#B3");
  869. Assert.AreEqual (GroupType.B, group.Grouptype, "#B4");
  870. Assert.AreEqual ("10000", group.PostitiveInt, "#B5");
  871. Assert.IsFalse (group.IgnoreThis, "#B6");
  872. Assert.IsNotNull (group.MyVehicle, "#B7");
  873. Assert.AreEqual (typeof (Car), group.MyVehicle.GetType (), "#B8");
  874. Assert.IsNull (group.MyVehicle.licenseNumber, "#B9");
  875. Assert.AreEqual (DateTime.MinValue, group.MyVehicle.makeDate, "#B10");
  876. Assert.AreEqual ("450", group.MyVehicle.weight, "#B11");
  877. xml = string.Format (CultureInfo.InvariantCulture,
  878. "<Wrapper>" +
  879. "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' />" +
  880. "</Wrapper>",
  881. "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
  882. xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  883. xtr.ReadStartElement ("Wrapper");
  884. group = (Group) DeserializeEncoded (typeof (Group), xtr);
  885. Assert.AreEqual (DateTime.MinValue, group.Today, "#C1");
  886. Assert.IsNull (group.GroupName, "#C2");
  887. Assert.AreEqual (null, group.GroupNumber, "#C3");
  888. Assert.AreEqual (GroupType.A, group.Grouptype, "#C4");
  889. Assert.IsNull (group.PostitiveInt, "#C5");
  890. Assert.IsFalse (group.IgnoreThis, "#C6");
  891. Assert.IsNull (group.MyVehicle, "#C7");
  892. xml = string.Format (CultureInfo.InvariantCulture,
  893. "<Wrapper>" +
  894. "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1'>" +
  895. "<Grouptype xsi:type='GroupType'>666</Grouptype>" +
  896. "</Group>" +
  897. "</Wrapper>",
  898. "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
  899. xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  900. xtr.ReadStartElement ("Wrapper");
  901. try {
  902. group = (Group) DeserializeEncoded (typeof (Group), xtr);
  903. Assert.Fail ("#D1");
  904. } catch (InvalidOperationException ex) {
  905. // There is an error in XML document (1, 174)
  906. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  907. Assert.IsNotNull (ex.Message, "#D3");
  908. Assert.IsNotNull (ex.InnerException, "#D4");
  909. // '666' is not a valid value for GroupType
  910. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D5");
  911. Assert.IsNotNull (ex.InnerException.Message, "#D6");
  912. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'666'") != -1, "#D7");
  913. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (GroupType).Name) != -1, "#D8");
  914. Assert.IsNull (ex.InnerException.InnerException, "#D9");
  915. }
  916. xml = string.Format (CultureInfo.InvariantCulture,
  917. "<Wrapper>" +
  918. "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1'>" +
  919. "<Grouptype xsi:type='GroupType'>Garbage</Grouptype>" +
  920. "</Group>" +
  921. "</Wrapper>",
  922. "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance");
  923. xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  924. xtr.ReadStartElement ("Wrapper");
  925. try {
  926. group = (Group) DeserializeEncoded (typeof (Group), xtr);
  927. Assert.Fail ("#E1");
  928. } catch (InvalidOperationException ex) {
  929. // There is an error in XML document (1, 178)
  930. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");
  931. Assert.IsNotNull (ex.Message, "#E3");
  932. Assert.IsNotNull (ex.InnerException, "#E4");
  933. // 'Garbage' is not a valid value for GroupType
  934. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#E5");
  935. Assert.IsNotNull (ex.InnerException.Message, "#E6");
  936. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'Garbage'") != -1, "#E7");
  937. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (GroupType).Name) != -1, "#E8");
  938. Assert.IsNull (ex.InnerException.InnerException, "#E9");
  939. }
  940. xml = string.Format (CultureInfo.InvariantCulture,
  941. "<Wrapper>" +
  942. "<Group xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1'>" +
  943. "<Grouptype xsi:type='GroupType'>{2}</Grouptype>" +
  944. "</Group>" +
  945. "</Wrapper>",
  946. "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/2001/XMLSchema-instance",
  947. ((int) GroupType.B).ToString (CultureInfo.InvariantCulture));
  948. xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
  949. xtr.ReadStartElement ("Wrapper");
  950. try {
  951. group = (Group) DeserializeEncoded (typeof (Group), xtr);
  952. Assert.Fail ("#F1");
  953. } catch (InvalidOperationException ex) {
  954. // There is an error in XML document (1, 172)
  955. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#F2");
  956. Assert.IsNotNull (ex.Message, "#F3");
  957. Assert.IsNotNull (ex.InnerException, "#F4");
  958. // '1' is not a valid value for GroupType
  959. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#F5");
  960. Assert.IsNotNull (ex.InnerException.Message, "#F6");
  961. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'1'") != -1, "#F7");
  962. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (GroupType).Name) != -1, "#F8");
  963. Assert.IsNull (ex.InnerException.InnerException, "#F9");
  964. }
  965. }
  966. [Test]
  967. public void TestDeserialize_ZeroFlagEnum ()
  968. {
  969. ZeroFlagEnum e;
  970. e = (ZeroFlagEnum) Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum />");
  971. Assert.AreEqual (ZeroFlagEnum.e0, e, "#A1");
  972. e = (ZeroFlagEnum) Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum></ZeroFlagEnum>");
  973. Assert.AreEqual (ZeroFlagEnum.e0, e, "#A2");
  974. try {
  975. Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum>four</ZeroFlagEnum>");
  976. Assert.Fail ("#B1");
  977. } catch (InvalidOperationException ex) {
  978. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
  979. Assert.IsNotNull (ex.InnerException, "#B3");
  980. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#B4");
  981. Assert.IsNotNull (ex.InnerException.Message, "#B5");
  982. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'four'") != -1, "#B6");
  983. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (ZeroFlagEnum).FullName) != -1, "#B7");
  984. }
  985. try {
  986. Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum> o&lt;n&gt;e four </ZeroFlagEnum>");
  987. Assert.Fail ("#C1");
  988. } catch (InvalidOperationException ex) {
  989. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
  990. Assert.IsNotNull (ex.InnerException, "#C3");
  991. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#C4");
  992. Assert.IsNotNull (ex.InnerException.Message, "#C5");
  993. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'four'") != -1, "#C6");
  994. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (ZeroFlagEnum).FullName) != -1, "#C7");
  995. }
  996. try {
  997. Deserialize (typeof (ZeroFlagEnum), "<ZeroFlagEnum>four o&lt;n&gt;e</ZeroFlagEnum>");
  998. Assert.Fail ("#D1");
  999. } catch (InvalidOperationException ex) {
  1000. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
  1001. Assert.IsNotNull (ex.InnerException, "#D3");
  1002. Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D4");
  1003. Assert.IsNotNull (ex.InnerException.Message, "#D5");
  1004. Assert.IsTrue (ex.InnerException.Message.IndexOf ("'four'") != -1, "#D6");
  1005. Assert.IsTrue (ex.InnerException.Message.IndexOf (typeof (ZeroFlagEnum).FullName) != -1, "#D7");
  1006. }
  1007. }
  1008. [Test]
  1009. public void TestDeserialize_PrimitiveTypesContainer ()
  1010. {
  1011. Deserialize (typeof (PrimitiveTypesContainer), string.Format (CultureInfo.InvariantCulture,
  1012. "<?xml version='1.0' encoding='utf-16'?>" +
  1013. "<PrimitiveTypesContainer xmlns:xsd='{0}' xmlns:xsi='{1}' xmlns='{2}'>" +
  1014. "<Number xsi:type='xsd:int'>2004</Number>" +
  1015. "<Name xsi:type='xsd:string'>some name</Name>" +
  1016. "<Index xsi:type='xsd:unsignedByte'>56</Index>" +
  1017. "<Password xsi:type='xsd:base64Binary'>8w8=</Password>" +
  1018. "<PathSeparatorCharacter xmlns:q1='{3}' xsi:type='q1:char'>47</PathSeparatorCharacter>" +
  1019. "</PrimitiveTypesContainer>", XmlSchemaNamespace,
  1020. XmlSchemaInstanceNamespace, ANamespace, WsdlTypesNamespace));
  1021. Assert.AreEqual (typeof (PrimitiveTypesContainer), result.GetType (), "#A1");
  1022. PrimitiveTypesContainer deserialized = (PrimitiveTypesContainer) result;
  1023. Assert.AreEqual (2004, deserialized.Number, "#A2");
  1024. Assert.AreEqual ("some name", deserialized.Name, "#A3");
  1025. Assert.AreEqual ((byte) 56, deserialized.Index, "#A4");
  1026. Assert.AreEqual (new byte[] { 243, 15 }, deserialized.Password, "#A5");
  1027. Assert.AreEqual ('/', deserialized.PathSeparatorCharacter, "#A6");
  1028. DeserializeEncoded (typeof (PrimitiveTypesContainer), string.Format (CultureInfo.InvariantCulture,
  1029. "<?xml version='1.0' encoding='utf-16'?>" +
  1030. "<q1:PrimitiveTypesContainer xmlns:xsd='{0}' xmlns:xsi='{1}' id='id1' xmlns:q1='{2}'>" +
  1031. "<Number xsi:type='xsd:int'>2004</Number>" +
  1032. "<Name xsi:type='xsd:string'>some name</Name>" +
  1033. "<Index xsi:type='xsd:unsignedByte'>56</Index>" +
  1034. "<Password xsi:type='xsd:base64Binary'>8w8=</Password>" +
  1035. "<PathSeparatorCharacter xmlns:q1='{3}' xsi:type='q1:char'>47</PathSeparatorCharacter>" +
  1036. "</q1:PrimitiveTypesContainer>", XmlSchemaNamespace,
  1037. XmlSchemaInstanceNamespace, AnotherNamespace, WsdlTypesNamespace));
  1038. Assert.AreEqual (typeof (PrimitiveTypesContainer), result.GetType (), "#B1");
  1039. deserialized = (PrimitiveTypesContainer) result;
  1040. Assert.AreEqual (2004, deserialized.Number, "#B2");
  1041. Assert.AreEqual ("some name", deserialized.Name, "#B3");
  1042. Assert.AreEqual ((byte) 56, deserialized.Index, "#B4");
  1043. Assert.AreEqual (new byte[] { 243, 15 }, deserialized.Password, "#B5");
  1044. Assert.AreEqual ('/', deserialized.PathSeparatorCharacter, "#B6");
  1045. }
  1046. }
  1047. }