2 // MonoTests.System.Xml.Serialization.XmlSerializationReaderTests
5 // Gert Driesen (drieseng@users.sourceforge.net)
6 // Atsushi Enomoto (atsushi@ximian.com)
8 // (C) 2006 Gert Driesen
9 // Copyright (C) 2007 Novell, Inc.
13 using System
.Collections
;
15 using System
.Xml
.Serialization
;
17 using NUnit
.Framework
;
19 using MonoTests
.System
.Xml
.TestClasses
;
21 namespace MonoTests
.System
.XmlSerialization
24 public class XmlSerializationReaderTests
: XmlSerializarionReaderTester
27 public void TestToEnum ()
29 Hashtable values
= new Hashtable ();
30 values
.Add ("One", 1L);
31 values
.Add ("Two", 2L);
32 values
.Add ("Four", 4L);
34 Assert
.AreEqual (1, ToEnum ("One", values
, "Some.Type.Name"), "#A1");
35 Assert
.AreEqual (2, ToEnum (" Two ", values
, "Some.Type.Name"), "#A2");
36 Assert
.AreEqual (4, ToEnum ("Four", values
, "Some.Type.Name"), "#A3");
37 Assert
.AreEqual (5, ToEnum ("One Four", values
, "Some.Type.Name"), "#A4");
38 Assert
.AreEqual (7, ToEnum ("One Two Four", values
, "Some.Type.Name"), "#A5");
39 Assert
.AreEqual (0, ToEnum ("", values
, "Some.Type.Name"), "#A6");
40 Assert
.AreEqual (0, ToEnum (" ", values
, "Some.Type.Name"), "#A7");
41 Assert
.AreEqual (2, ToEnum ("Two Two", values
, "Some.Type.Name"), "#A8");
44 Assert
.AreEqual (24, ToEnum ("", values
, "Some.Type.Name"), "#B1");
45 Assert
.AreEqual (24, ToEnum (" ", values
, "Some.Type.Name"), "#B2");
49 public void TestToEnum_InvalidValue ()
52 ToEnum ("SomeValue", new Hashtable (), "Some.Type.Name");
54 } catch (InvalidOperationException ex
) {
55 Assert
.AreEqual (typeof (InvalidOperationException
), ex
.GetType (), "#A2");
56 Assert
.IsNotNull (ex
.Message
, "#A3");
57 Assert
.IsTrue (ex
.Message
.IndexOf ("'SomeValue'") != -1, "#A4");
58 Assert
.IsTrue (ex
.Message
.IndexOf ("Some.Type.Name") != -1, "#A5");
59 Assert
.IsNull (ex
.InnerException
, "#A6");
62 Hashtable values
= new Hashtable ();
63 values
.Add ("One", 1L);
64 values
.Add ("Two", 2L);
65 values
.Add ("Four", 4L);
68 ToEnum ("one", values
, "Some.Type.Name");
70 } catch (InvalidOperationException ex
) {
71 Assert
.AreEqual (typeof (InvalidOperationException
), ex
.GetType (), "#B2");
72 Assert
.IsNotNull (ex
.Message
, "#B3");
73 Assert
.IsTrue (ex
.Message
.IndexOf ("'one'") != -1, "#B4");
74 Assert
.IsTrue (ex
.Message
.IndexOf ("Some.Type.Name") != -1, "#B5");
75 Assert
.IsNull (ex
.InnerException
, "#B6");
79 values
.Add ("One", FlagEnum
.e1
);
82 ToEnum ("One", values
, "Some.Type.Name");
84 } catch (InvalidCastException
) {
88 values
.Add ("One", 1);
91 ToEnum ("One", values
, "Some.Type.Name");
93 } catch (InvalidCastException
) {
97 values
.Add ("One", null);
100 ToEnum ("One", values
, "Some.Type.Name");
102 } catch (InvalidOperationException ex
) {
103 Assert
.AreEqual (typeof (InvalidOperationException
), ex
.GetType (), "#E2");
104 Assert
.IsNotNull (ex
.Message
, "#E3");
105 Assert
.IsTrue (ex
.Message
.IndexOf ("'One'") != -1, "#E4");
106 Assert
.IsTrue (ex
.Message
.IndexOf ("Some.Type.Name") != -1, "#E5");
107 Assert
.IsNull (ex
.InnerException
, "#E6");
112 [ExpectedException (typeof (NullReferenceException
))]
113 public void TestToEnum_Null_Value ()
115 ToEnum ((string) null, new Hashtable (), "DoesNotMatter");
119 [ExpectedException (typeof (NullReferenceException
))]
120 public void TestToEnum_Null_Values ()
122 ToEnum ("", (Hashtable
) null, "DoesNotMatter");
126 public void HandleOutAttributeParameters ()
128 XmlReflectionMember m
= new XmlReflectionMember ();
129 m
.MemberName
= "hooray";
130 m
.MemberType
= typeof (string);
131 m
.XmlAttributes
= new XmlAttributes ();
132 m
.XmlAttributes
.XmlAttribute
= new XmlAttributeAttribute ();
133 XmlReflectionImporter imp
= new XmlReflectionImporter ();
134 XmlMembersMapping map
= imp
.ImportMembersMapping (
135 "elem", "urn:x", new XmlReflectionMember
[] {m}
, true);
136 XmlSerializer ser
= XmlSerializer
.FromMappings (
137 new XmlMapping
[] {map}
) [0];
138 string xml
= "<elem xmlns='urn:x' hooray='doh' />";
139 object [] arr
= ser
.Deserialize (new StringReader (xml
))
141 Assert
.IsNotNull (arr
, "#1");
142 Assert
.AreEqual (1, arr
.Length
, "#2");
143 Assert
.AreEqual ("doh", arr
[0], "#3");
145 xml
= "<elem xmlns='urn:x' hooray='doh'></elem>";
146 arr
= ser
.Deserialize (new StringReader (xml
)) as object [];
147 Assert
.IsNotNull (arr
, "#4");
148 Assert
.AreEqual (1, arr
.Length
, "#5");
149 Assert
.AreEqual ("doh", arr
[0], "#6");
153 public void ExplicitlyOrderedMembers1 ()
155 var xs
= new XmlSerializer (typeof (ExplicitlyOrderedMembersType1
));
156 var result
= (ExplicitlyOrderedMembersType1
) xs
.Deserialize(new StringReader (@"
160 <child0>test</child0>
162 Assert
.AreEqual ("Hello", result
.Child1
, "#1");
163 Assert
.AreEqual ("World", result
.Child2
, "#2");
164 Assert
.AreEqual ("test", result
.Child0
, "#3");
168 [ExpectedException (typeof (InvalidOperationException
))]
169 public void ExplicitlyOrderedMembers2 ()
171 new XmlSerializer (typeof (ExplicitlyOrderedMembersType2
));
175 public void ExplicitlyOrderedMembers3 ()
177 var xs
= new XmlSerializer (typeof (ExplicitlyOrderedMembersType3
));
178 var result
= (ExplicitlyOrderedMembersType3
) xs
.Deserialize(new StringReader (@"
182 <child0>test</child0>
184 Assert
.AreEqual ("Hello", result
.Child1
, "#1");
185 Assert
.AreEqual ("World", result
.Child2
, "#2");
186 Assert
.IsNull (result
.Child0
, "#3"); // not "test"
190 public void ExplicitlyOrderedMembers4 ()
192 var xs
= new XmlSerializer (typeof (ExplicitlyOrderedMembersType4
));
193 //Would result in an Inconsistent XML sequence error , see Bug 707434
194 var result
= (ExplicitlyOrderedMembersType4
) xs
.Deserialize(new StringReader (@"
198 <child0>test</child0>
200 Assert
.AreEqual ("Hello", result
.Child1
, "#1");
201 Assert
.AreEqual ("World", result
.Child2
, "#2");
202 Assert
.IsNull (result
.Child0
, "#3"); // not "test"
206 public class XmlSerializarionReaderTester
: XmlSerializationReader
208 // appease the compiler
209 protected override void InitCallbacks ()
213 protected override void InitIDs ()