Merge pull request #4169 from evincarofautumn/fix-xmm-scanning-mac-x86
[mono.git] / mcs / class / System.Web.Services / Test / System.Web.Services.Description / ServiceDescriptionImporterTest.cs
1 //
2 // ServiceDescriptionImporterTest.cs
3 //
4 // Author:
5 //      Atsushi Enomoto  <atsushi@ximian.com>
6 //
7 // Copyright (C) 2007 Novell, Inc.
8 //
9
10 #if !MOBILE && !MONOMAC
11
12 using NUnit.Framework;
13
14 using System;
15 using System.CodeDom;
16 using System.CodeDom.Compiler;
17 using Microsoft.CSharp;
18 using System.Web.Services.Description;
19
20 namespace MonoTests.System.Web.Services.Description
21 {
22         [TestFixture]
23         public class ServiceDescriptionImporterTest
24         {
25                 CodeNamespace GenerateCodeFromWsdl (ServiceDescription sd)
26                 {
27                         ServiceDescriptionImporter imp =
28                                 new ServiceDescriptionImporter ();
29                         imp.AddServiceDescription (sd, null, null);
30                         CodeNamespace cns = new CodeNamespace ();
31                         imp.Import (cns, null);
32                         return cns;
33                 }
34
35                 CodeTypeDeclaration FindTypeFrom (CodeNamespace cns, string name)
36                 {
37                         foreach (CodeTypeDeclaration td in cns.Types)
38                                 if (td.Name == name)
39                                         return td;
40                         return null;
41                 }
42
43                 CodeTypeDeclaration FindMemberFrom (CodeNamespace cns, string name)
44                 {
45                         foreach (CodeTypeDeclaration td in cns.Types)
46                                 if (td.Name == name)
47                                         return td;
48                         return null;
49                 }
50
51                 [Test]
52                 public void Constructor ()
53                 {
54                         ServiceDescriptionImporter imp =
55                                 new ServiceDescriptionImporter ();
56                         Assert.IsTrue (imp.CodeGenerator is CSharpCodeProvider);
57                 }
58
59                 [Test] // wtf? no ArgumentNullException?
60                 public void SetNullCodeGenerator ()
61                 {
62                         ServiceDescriptionImporter imp =
63                                 new ServiceDescriptionImporter ();
64                         imp.CodeGenerator = null;
65                 }
66
67                 [Test]
68                 public void GenerateNullableTypes ()
69                 {
70                         CodeNamespace cns = GenerateCodeFromWsdl (
71                                 ServiceDescription.Read ("Test/System.Web.Services.Description/test2.wsdl"));
72                         CodeTypeDeclaration td = FindTypeFrom (cns, "Service");
73                         foreach (CodeTypeMember member in td.Members) {
74                                 CodeMemberMethod method = member as CodeMemberMethod;
75                                 if (method == null || method.Name != "Hola")
76                                         continue;
77                                 Assert.AreEqual ("System.Nullable`1", method.ReturnType.BaseType, "#1");
78                                 Assert.AreEqual (1, method.ReturnType.TypeArguments.Count, "#2");
79                                 Assert.AreEqual ("System.Int32", method.ReturnType.TypeArguments [0].BaseType, "#3");
80                                 return;
81                         }
82                         Assert.Fail ("The expected member didn't appear.");
83                 }
84
85                 [Test]
86                 public void GenerateWebReferencesEmpty ()
87                 {
88                         // yuck - This causes NRE.
89                         //ServiceDescriptionImporter.GenerateWebReferences (
90                         //      new WebReferenceCollection (), null, null, null);
91                         ServiceDescriptionImporter.GenerateWebReferences (
92                                 new WebReferenceCollection (),
93                                 null,
94                                 new CodeCompileUnit (),
95                                 new WebReferenceOptions ());
96                 }
97
98                 [Test]
99                 [Ignore ("This test requires HttpGet available by configuration.")]
100                 public void ImportHttpOnlyWsdl ()
101                 {
102                         ServiceDescriptionImporter imp =
103                                 new ServiceDescriptionImporter ();
104                         imp.AddServiceDescription (ServiceDescription.Read ("Test/System.Web.Services.Description/test3.wsdl"), null, null);
105                         CodeNamespace cns = new CodeNamespace ();
106                         CodeCompileUnit ccu = new CodeCompileUnit ();
107                         ccu.Namespaces.Add (cns);
108                         imp.Import (cns, ccu);
109                         // FIXME: this test could require more precise result
110                         bool verified = false;
111                         Assert.AreEqual (1, ccu.Namespaces.Count, "#1");
112                         Assert.AreEqual (1, ccu.Namespaces [0].Types.Count, "#2");
113                         foreach (CodeTypeDeclaration cd in ccu.Namespaces [0].Types) {
114 Console.WriteLine ("***" + cd.Name);
115                                 if (cd.Name != "MyService")
116                                         continue;
117                                 Assert.AreEqual ("System.Web.Services.Protocols.HttpGetClientProtocol", cd.BaseTypes [0].BaseType);
118                                 verified = true;
119                         }
120                         Assert.IsTrue (verified, "verified");
121                 }
122         }
123 }
124
125 #endif