XmlSerializationReaderTests.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. //
  2. // MonoTests.System.Xml.Serialization.XmlSerializationReaderTests
  3. //
  4. // Author:
  5. // Gert Driesen ([email protected])
  6. // Atsushi Enomoto ([email protected])
  7. //
  8. // (C) 2006 Gert Driesen
  9. // Copyright (C) 2007 Novell, Inc.
  10. //
  11. using System;
  12. using System.Collections;
  13. using System.IO;
  14. using System.Xml.Serialization;
  15. using NUnit.Framework;
  16. using MonoTests.System.Xml.TestClasses;
  17. namespace MonoTests.System.XmlSerialization
  18. {
  19. [TestFixture]
  20. public class XmlSerializationReaderTests : XmlSerializarionReaderTester
  21. {
  22. [Test]
  23. public void TestToEnum ()
  24. {
  25. Hashtable values = new Hashtable ();
  26. values.Add ("One", 1L);
  27. values.Add ("Two", 2L);
  28. values.Add ("Four", 4L);
  29. Assert.AreEqual (1, ToEnum ("One", values, "Some.Type.Name"), "#A1");
  30. Assert.AreEqual (2, ToEnum (" Two ", values, "Some.Type.Name"), "#A2");
  31. Assert.AreEqual (4, ToEnum ("Four", values, "Some.Type.Name"), "#A3");
  32. Assert.AreEqual (5, ToEnum ("One Four", values, "Some.Type.Name"), "#A4");
  33. Assert.AreEqual (7, ToEnum ("One Two Four", values, "Some.Type.Name"), "#A5");
  34. Assert.AreEqual (0, ToEnum ("", values, "Some.Type.Name"), "#A6");
  35. Assert.AreEqual (0, ToEnum (" ", values, "Some.Type.Name"), "#A7");
  36. Assert.AreEqual (2, ToEnum ("Two Two", values, "Some.Type.Name"), "#A8");
  37. values.Add ("", 24L);
  38. Assert.AreEqual (24, ToEnum ("", values, "Some.Type.Name"), "#B1");
  39. Assert.AreEqual (24, ToEnum (" ", values, "Some.Type.Name"), "#B2");
  40. }
  41. [Test]
  42. public void TestToEnum_InvalidValue ()
  43. {
  44. try {
  45. ToEnum ("SomeValue", new Hashtable (), "Some.Type.Name");
  46. Assert.Fail ("#A1");
  47. } catch (InvalidOperationException ex) {
  48. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
  49. Assert.IsNotNull (ex.Message, "#A3");
  50. Assert.IsTrue (ex.Message.IndexOf ("'SomeValue'") != -1, "#A4");
  51. Assert.IsTrue (ex.Message.IndexOf ("Some.Type.Name") != -1, "#A5");
  52. Assert.IsNull (ex.InnerException, "#A6");
  53. }
  54. Hashtable values = new Hashtable ();
  55. values.Add ("One", 1L);
  56. values.Add ("Two", 2L);
  57. values.Add ("Four", 4L);
  58. try {
  59. ToEnum ("one", values, "Some.Type.Name");
  60. Assert.Fail ("#B1");
  61. } catch (InvalidOperationException ex) {
  62. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
  63. Assert.IsNotNull (ex.Message, "#B3");
  64. Assert.IsTrue (ex.Message.IndexOf ("'one'") != -1, "#B4");
  65. Assert.IsTrue (ex.Message.IndexOf ("Some.Type.Name") != -1, "#B5");
  66. Assert.IsNull (ex.InnerException, "#B6");
  67. }
  68. values.Clear ();
  69. values.Add ("One", FlagEnum.e1);
  70. try {
  71. ToEnum ("One", values, "Some.Type.Name");
  72. Assert.Fail ("#C1");
  73. } catch (InvalidCastException) {
  74. }
  75. values.Clear ();
  76. values.Add ("One", 1);
  77. try {
  78. ToEnum ("One", values, "Some.Type.Name");
  79. Assert.Fail ("#D1");
  80. } catch (InvalidCastException) {
  81. }
  82. values.Clear ();
  83. values.Add ("One", null);
  84. try {
  85. ToEnum ("One", values, "Some.Type.Name");
  86. Assert.Fail ("#E1");
  87. } catch (InvalidOperationException ex) {
  88. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");
  89. Assert.IsNotNull (ex.Message, "#E3");
  90. Assert.IsTrue (ex.Message.IndexOf ("'One'") != -1, "#E4");
  91. Assert.IsTrue (ex.Message.IndexOf ("Some.Type.Name") != -1, "#E5");
  92. Assert.IsNull (ex.InnerException, "#E6");
  93. }
  94. }
  95. [Test]
  96. [ExpectedException (typeof (NullReferenceException))]
  97. public void TestToEnum_Null_Value ()
  98. {
  99. ToEnum ((string) null, new Hashtable (), "DoesNotMatter");
  100. }
  101. [Test]
  102. [ExpectedException (typeof (NullReferenceException))]
  103. public void TestToEnum_Null_Values ()
  104. {
  105. ToEnum ("", (Hashtable) null, "DoesNotMatter");
  106. }
  107. [Test]
  108. public void HandleOutAttributeParameters ()
  109. {
  110. XmlReflectionMember m = new XmlReflectionMember ();
  111. m.MemberName = "hooray";
  112. m.MemberType = typeof (string);
  113. m.XmlAttributes = new XmlAttributes ();
  114. m.XmlAttributes.XmlAttribute = new XmlAttributeAttribute ();
  115. XmlReflectionImporter imp = new XmlReflectionImporter ();
  116. XmlMembersMapping map = imp.ImportMembersMapping (
  117. "elem", "urn:x", new XmlReflectionMember [] {m}, true);
  118. XmlSerializer ser = XmlSerializer.FromMappings (
  119. new XmlMapping [] {map}) [0];
  120. string xml = "<elem xmlns='urn:x' hooray='doh' />";
  121. object [] arr = ser.Deserialize (new StringReader (xml))
  122. as object [];
  123. Assert.IsNotNull (arr, "#1");
  124. Assert.AreEqual (1, arr.Length, "#2");
  125. Assert.AreEqual ("doh", arr [0], "#3");
  126. xml = "<elem xmlns='urn:x' hooray='doh'></elem>";
  127. arr = ser.Deserialize (new StringReader (xml)) as object [];
  128. Assert.IsNotNull (arr, "#4");
  129. Assert.AreEqual (1, arr.Length, "#5");
  130. Assert.AreEqual ("doh", arr [0], "#6");
  131. }
  132. [Test]
  133. public void ExplicitlyOrderedMembers1 ()
  134. {
  135. var xs = new XmlSerializer (typeof (ExplicitlyOrderedMembersType1));
  136. var result = (ExplicitlyOrderedMembersType1) xs.Deserialize(new StringReader (@"
  137. <root>
  138. <child>Hello</child>
  139. <child>World</child>
  140. <child0>test</child0>
  141. </root>"));
  142. Assert.AreEqual ("Hello", result.Child1, "#1");
  143. Assert.AreEqual ("World", result.Child2, "#2");
  144. Assert.AreEqual ("test", result.Child0, "#3");
  145. }
  146. [Test]
  147. [ExpectedException (typeof (InvalidOperationException))]
  148. public void ExplicitlyOrderedMembers2 ()
  149. {
  150. new XmlSerializer (typeof (ExplicitlyOrderedMembersType2));
  151. }
  152. [Test]
  153. public void ExplicitlyOrderedMembers3 ()
  154. {
  155. var xs = new XmlSerializer (typeof (ExplicitlyOrderedMembersType3));
  156. var result = (ExplicitlyOrderedMembersType3) xs.Deserialize(new StringReader (@"
  157. <root>
  158. <child>Hello</child>
  159. <child>World</child>
  160. <child0>test</child0>
  161. </root>"));
  162. Assert.AreEqual ("Hello", result.Child1, "#1");
  163. Assert.AreEqual ("World", result.Child2, "#2");
  164. Assert.IsNull (result.Child0, "#3"); // not "test"
  165. }
  166. [Test]
  167. public void ExplicitlyOrderedMembers4 ()
  168. {
  169. var xs = new XmlSerializer (typeof (ExplicitlyOrderedMembersType4));
  170. //Would result in an Inconsistent XML sequence error , see Bug 707434
  171. var result = (ExplicitlyOrderedMembersType4) xs.Deserialize(new StringReader (@"
  172. <root>
  173. <child>Hello</child>
  174. <child>World</child>
  175. <child0>test</child0>
  176. </root>"));
  177. Assert.AreEqual ("Hello", result.Child1, "#1");
  178. Assert.AreEqual ("World", result.Child2, "#2");
  179. Assert.IsNull (result.Child0, "#3"); // not "test"
  180. }
  181. }
  182. public class XmlSerializarionReaderTester : XmlSerializationReader
  183. {
  184. // appease the compiler
  185. protected override void InitCallbacks ()
  186. {
  187. }
  188. protected override void InitIDs ()
  189. {
  190. }
  191. }
  192. }