fix freeze
[mono.git] / mcs / class / corlib / Test / System.Runtime.Remoting / SoapServicesTest.cs
1 //
2 // MonoTests.System.Runtime.Remoting.SoapServicesTest.cs
3 //
4 // Author: Lluis Sanchez Gual (lluis@ximian.com)
5 //
6 // 2003 (C) Copyright, Novell, Inc.
7 //
8
9 using System;
10 using System.Reflection;
11 using System.Runtime.Remoting;
12 using System.Runtime.Remoting.Metadata;
13 using NUnit.Framework;
14
15 namespace MonoTests.System.Runtime.Remoting
16 {
17         [SoapTypeAttribute (XmlElementName="ename", XmlNamespace="ens", XmlTypeName="tname", XmlTypeNamespace="tns")]
18         public class SoapTest
19         {
20                 [SoapField(XmlElementName="atrib",XmlNamespace="ns1",UseAttribute=true)]
21                 public string atribut;
22
23                 [SoapField(XmlElementName="elem",XmlNamespace="ns1")]
24                 public int element;
25
26                 [SoapField(XmlElementName="elem2")]
27                 public int element2;
28
29                 [SoapMethod (SoapAction="myaction")]
30                 public void FesAlgo ()
31                 {
32                 }
33
34                 public void FesAlgoMes ()
35                 {
36                 }
37
38                 public void FesAlgoMesEspecial ()
39                 {
40                 }
41         }
42
43         public class SoapTest1
44         {
45         }
46
47         [SoapTypeAttribute (XmlElementName="ename", XmlTypeName="tname")]
48         public class SoapTest2
49         {
50         }
51
52         [SoapTypeAttribute (XmlNamespace="ens", XmlTypeNamespace="tns")]
53         public class SoapTest3
54         {
55         }
56
57         [TestFixture]
58         public class SoapServicesTest: Assertion
59         {
60                 public string ThisNamespace
61                 {
62                         get
63                         {
64                                 string tn = "http://schemas.microsoft.com/clr/nsassem/";
65                                 tn += GetType ().Namespace + "/" + GetType ().Assembly.GetName().Name;
66                                 return tn;
67                         }
68                 }
69
70                 public string GetClassNs (Type t)
71                 {
72                         string tn = "http://schemas.microsoft.com/clr/nsassem/";
73                         tn += t.FullName + "/" + t.Assembly.GetName().Name;
74                         return tn;
75                 }
76
77                 public string GetSimpleTypeName (Type t)
78                 {
79                         return t.FullName + ", " + t.Assembly.GetName().Name;
80                 }
81
82                 [Test]
83                 public void TestGetXmlType ()
84                 {
85                         bool res;
86                         string name, ns;
87
88                         // XmlType
89
90                         res = SoapServices.GetXmlElementForInteropType (typeof(SoapTest), out name, out ns);
91                         Assert ("E1",res);
92                         AssertEquals ("E2", "ename", name);
93                         AssertEquals ("E3", "ens", ns);
94
95                         res = SoapServices.GetXmlElementForInteropType (typeof(SoapTest1), out name, out ns);
96                         Assert ("E4",!res);
97
98                         res = SoapServices.GetXmlElementForInteropType (typeof(SoapTest2), out name, out ns);
99                         Assert ("E5",res);
100                         AssertEquals ("E6", "ename", name);
101                         AssertEquals ("E7", ThisNamespace, ns);
102
103                         res = SoapServices.GetXmlElementForInteropType (typeof(SoapTest3), out name, out ns);
104                         Assert ("E8",res);
105                         AssertEquals ("E9", "SoapTest3", name);
106                         AssertEquals ("E10", "ens", ns);
107
108                         // XmlElement
109
110                         res = SoapServices.GetXmlTypeForInteropType (typeof(SoapTest), out name, out ns);
111                         Assert ("T1",res);
112                         AssertEquals ("T2", "tname", name);
113                         AssertEquals ("T3", "tns", ns);
114
115                         res = SoapServices.GetXmlTypeForInteropType (typeof(SoapTest1), out name, out ns);
116                         Assert ("T4",!res);
117
118                         res = SoapServices.GetXmlTypeForInteropType (typeof(SoapTest2), out name, out ns);
119                         Assert ("T5",res);
120                         AssertEquals ("T6", "tname", name);
121                         AssertEquals ("T7", ThisNamespace, ns);
122
123                         res = SoapServices.GetXmlTypeForInteropType (typeof(SoapTest3), out name, out ns);
124                         Assert ("T8",res);
125                         AssertEquals ("T9", "SoapTest3", name);
126                         AssertEquals ("T10", "tns", ns);
127                 }
128
129                 [Test]
130                 public void TestGetInteropType ()
131                 {
132                         Type t;
133
134                         // Manual registration
135
136                         t = SoapServices.GetInteropTypeFromXmlElement ("aa","bb");
137                         AssertEquals ("M1", t, null);
138
139                         SoapServices.RegisterInteropXmlElement ("aa","bb",typeof(SoapTest));
140                         t = SoapServices.GetInteropTypeFromXmlElement ("aa","bb");
141                         AssertEquals ("M2", typeof (SoapTest), t);
142
143
144                         t = SoapServices.GetInteropTypeFromXmlType ("aa","bb");
145                         AssertEquals ("M3", null, t);
146
147                         SoapServices.RegisterInteropXmlType ("aa","bb",typeof(SoapTest));
148                         t = SoapServices.GetInteropTypeFromXmlType ("aa","bb");
149                         AssertEquals ("M4", typeof (SoapTest), t);
150
151                         // Preload type
152
153                         SoapServices.PreLoad (typeof(SoapTest2));
154
155                         t = SoapServices.GetInteropTypeFromXmlElement ("ename",ThisNamespace);
156                         AssertEquals ("T1", typeof (SoapTest2), t);
157
158                         t = SoapServices.GetInteropTypeFromXmlType ("tname",ThisNamespace);
159                         AssertEquals ("T2", typeof (SoapTest2), t);
160
161                         // Preload assembly
162
163                         SoapServices.PreLoad (typeof(SoapTest).Assembly);
164
165                         t = SoapServices.GetInteropTypeFromXmlElement ("SoapTest3","ens");
166                         AssertEquals ("A1", typeof (SoapTest3), t);
167
168                         t = SoapServices.GetInteropTypeFromXmlType ("SoapTest3","tns");
169                         AssertEquals ("A2", typeof (SoapTest3), t);
170                         
171                 }
172
173                 [Test]
174                 public void TestSoapFields ()
175                 {
176                         string name;
177                         Type t;
178
179                         SoapServices.GetInteropFieldTypeAndNameFromXmlAttribute (typeof(SoapTest), "atrib", "ns1", out t, out name);
180                         AssertEquals ("#1", "atribut", name);
181                         AssertEquals ("#2", typeof(string), t);
182
183                         SoapServices.GetInteropFieldTypeAndNameFromXmlElement (typeof(SoapTest), "elem", "ns1", out t, out name);
184                         AssertEquals ("#3", "element", name);
185                         AssertEquals ("#4", typeof(int), t);
186
187                         SoapServices.GetInteropFieldTypeAndNameFromXmlElement (typeof(SoapTest), "elem2", null, out t, out name);
188                         AssertEquals ("#5", "element2", name);
189                         AssertEquals ("#6", typeof(int), t);
190                 }
191
192                 [Test]
193                 [Category("NotWorking")]
194                 public void TestSoapActions ()
195                 {
196                         string act;
197                         MethodBase mb;
198
199                         mb = typeof(SoapTest).GetMethod ("FesAlgo");
200                         act = SoapServices.GetSoapActionFromMethodBase (mb);
201                         AssertEquals ("S1", "myaction", act);
202
203                         mb = typeof(SoapTest).GetMethod ("FesAlgoMes");
204                         SoapServices.RegisterSoapActionForMethodBase (mb, "anotheraction");
205                         act = SoapServices.GetSoapActionFromMethodBase (mb);
206                         AssertEquals ("S2", "anotheraction", act);
207
208                         mb = typeof(SoapTest).GetMethod ("FesAlgoMesEspecial");
209                         act = SoapServices.GetSoapActionFromMethodBase (mb);
210                         AssertEquals ("S3", GetClassNs (typeof(SoapTest))+ "#FesAlgoMesEspecial", act);
211
212                         string typeName, methodName;
213                         bool res;
214
215                         res = SoapServices.GetTypeAndMethodNameFromSoapAction ("myaction", out typeName, out methodName);
216                         Assert ("M1", res);
217                         AssertEquals ("M2", GetSimpleTypeName (typeof(SoapTest)), typeName);
218                         AssertEquals ("M3", "FesAlgo", methodName);
219
220                         res = SoapServices.GetTypeAndMethodNameFromSoapAction ("anotheraction", out typeName, out methodName);
221                         Assert ("M4", res);
222                         AssertEquals ("M5", GetSimpleTypeName (typeof(SoapTest)), typeName);
223                         AssertEquals ("M6", "FesAlgoMes", methodName);
224
225                         res = SoapServices.GetTypeAndMethodNameFromSoapAction (GetClassNs (typeof(SoapTest))+ "#FesAlgoMesEspecial", out typeName, out methodName);
226                         Assert ("M7", res);
227                         AssertEquals ("M8", GetSimpleTypeName (typeof(SoapTest)), typeName);
228                         AssertEquals ("M9", "FesAlgoMesEspecial", methodName);
229                 }
230         }
231 }