XmlSerializationReaderTests.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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 ex) {
  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 ex) {
  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. }
  133. public class XmlSerializarionReaderTester : XmlSerializationReader
  134. {
  135. // appease the compiler
  136. protected override void InitCallbacks ()
  137. {
  138. }
  139. protected override void InitIDs ()
  140. {
  141. }
  142. }
  143. }