New test.
[mono.git] / mcs / class / System.XML / Test / System.Xml.Serialization / XmlSerializationReaderTests.cs
1 //
2 // MonoTests.System.Xml.Serialization.XmlSerializationReaderTests       
3 //
4 // Author:
5 //      Gert Driesen (drieseng@users.sourceforge.net)
6 //
7 //  (C) 2006 Novell
8 // 
9
10 using System;
11 using System.Collections;
12 using System.Xml.Serialization;
13
14 using NUnit.Framework;
15
16 using MonoTests.System.Xml.TestClasses;
17
18 namespace MonoTests.System.XmlSerialization
19 {
20         [TestFixture]
21         public class XmlSerializationReaderTests : XmlSerializarionReaderTester
22         {
23                 [Test]
24                 public void TestToEnum ()
25                 {
26                         Hashtable values = new Hashtable ();
27                         values.Add ("One", 1L);
28                         values.Add ("Two", 2L);
29                         values.Add ("Four", 4L);
30
31                         Assert.AreEqual (1, ToEnum ("One", values, "Some.Type.Name"), "#A1");
32                         Assert.AreEqual (2, ToEnum (" Two ", values, "Some.Type.Name"), "#A2");
33                         Assert.AreEqual (4, ToEnum ("Four", values, "Some.Type.Name"), "#A3");
34                         Assert.AreEqual (5, ToEnum ("One Four", values, "Some.Type.Name"), "#A4");
35                         Assert.AreEqual (7, ToEnum ("One Two Four", values, "Some.Type.Name"), "#A5");
36                         Assert.AreEqual (0, ToEnum ("", values, "Some.Type.Name"), "#A6");
37                         Assert.AreEqual (0, ToEnum ("     ", values, "Some.Type.Name"), "#A7");
38                         Assert.AreEqual (2, ToEnum ("Two Two", values, "Some.Type.Name"), "#A8");
39
40                         values.Add ("", 24L);
41                         Assert.AreEqual (24, ToEnum ("", values, "Some.Type.Name"), "#B1");
42                         Assert.AreEqual (24, ToEnum ("  ", values, "Some.Type.Name"), "#B2");
43                 }
44
45                 [Test]
46                 public void TestToEnum_InvalidValue ()
47                 {
48                         try {
49                                 ToEnum ("SomeValue", new Hashtable (), "Some.Type.Name");
50                                 Assert.Fail ("#A1");
51                         } catch (InvalidOperationException ex) {
52                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
53                                 Assert.IsNotNull (ex.Message, "#A3");
54                                 Assert.IsTrue (ex.Message.IndexOf ("'SomeValue'") != -1, "#A4");
55                                 Assert.IsTrue (ex.Message.IndexOf ("Some.Type.Name") != -1, "#A5");
56                                 Assert.IsNull (ex.InnerException, "#A6");
57                         }
58
59                         Hashtable values = new Hashtable ();
60                         values.Add ("One", 1L);
61                         values.Add ("Two", 2L);
62                         values.Add ("Four", 4L);
63
64                         try {
65                                 ToEnum ("one", values, "Some.Type.Name");
66                                 Assert.Fail ("#B1");
67                         } catch (InvalidOperationException ex) {
68                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
69                                 Assert.IsNotNull (ex.Message, "#B3");
70                                 Assert.IsTrue (ex.Message.IndexOf ("'one'") != -1, "#B4");
71                                 Assert.IsTrue (ex.Message.IndexOf ("Some.Type.Name") != -1, "#B5");
72                                 Assert.IsNull (ex.InnerException, "#B6");
73                         }
74
75                         values.Clear ();
76                         values.Add ("One", FlagEnum.e1);
77
78                         try {
79                                 ToEnum ("One", values, "Some.Type.Name");
80                                 Assert.Fail ("#C1");
81                         } catch (InvalidCastException ex) {
82                         }
83
84                         values.Clear ();
85                         values.Add ("One", 1);
86
87                         try {
88                                 ToEnum ("One", values, "Some.Type.Name");
89                                 Assert.Fail ("#D1");
90                         } catch (InvalidCastException ex) {
91                         }
92
93                         values.Clear ();
94                         values.Add ("One", null);
95
96                         try {
97                                 ToEnum ("One", values, "Some.Type.Name");
98                                 Assert.Fail ("#E1");
99                         } catch (InvalidOperationException ex) {
100                                 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#E2");
101                                 Assert.IsNotNull (ex.Message, "#E3");
102                                 Assert.IsTrue (ex.Message.IndexOf ("'One'") != -1, "#E4");
103                                 Assert.IsTrue (ex.Message.IndexOf ("Some.Type.Name") != -1, "#E5");
104                                 Assert.IsNull (ex.InnerException, "#E6");
105                         }
106                 }
107
108                 [Test]
109                 [ExpectedException (typeof (NullReferenceException))]
110                 public void TestToEnum_Null_Value ()
111                 {
112                         ToEnum ((string) null, new Hashtable (), "DoesNotMatter");
113                 }
114
115                 [Test]
116                 [ExpectedException (typeof (NullReferenceException))]
117                 public void TestToEnum_Null_Values ()
118                 {
119                         ToEnum ("", (Hashtable) null, "DoesNotMatter");
120                 }
121         }
122
123         public class XmlSerializarionReaderTester : XmlSerializationReader
124         {
125                 // appease the compiler
126                 protected override void InitCallbacks ()
127                 {
128                 }
129
130                 protected override void InitIDs ()
131                 {
132                 }
133         }
134 }