126 lines
3.5 KiB
C#
Raw Normal View History

//
// ServiceDescriptionImporterTest.cs
//
// Author:
// Atsushi Enomoto <atsushi@ximian.com>
//
// Copyright (C) 2007 Novell, Inc.
//
#if !MOBILE && !MONOMAC
using NUnit.Framework;
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Web.Services.Description;
namespace MonoTests.System.Web.Services.Description
{
[TestFixture]
public class ServiceDescriptionImporterTest
{
CodeNamespace GenerateCodeFromWsdl (ServiceDescription sd)
{
ServiceDescriptionImporter imp =
new ServiceDescriptionImporter ();
imp.AddServiceDescription (sd, null, null);
CodeNamespace cns = new CodeNamespace ();
imp.Import (cns, null);
return cns;
}
CodeTypeDeclaration FindTypeFrom (CodeNamespace cns, string name)
{
foreach (CodeTypeDeclaration td in cns.Types)
if (td.Name == name)
return td;
return null;
}
CodeTypeDeclaration FindMemberFrom (CodeNamespace cns, string name)
{
foreach (CodeTypeDeclaration td in cns.Types)
if (td.Name == name)
return td;
return null;
}
[Test]
public void Constructor ()
{
ServiceDescriptionImporter imp =
new ServiceDescriptionImporter ();
Assert.IsTrue (imp.CodeGenerator is CSharpCodeProvider);
}
[Test] // wtf? no ArgumentNullException?
public void SetNullCodeGenerator ()
{
ServiceDescriptionImporter imp =
new ServiceDescriptionImporter ();
imp.CodeGenerator = null;
}
[Test]
public void GenerateNullableTypes ()
{
CodeNamespace cns = GenerateCodeFromWsdl (
ServiceDescription.Read ("Test/System.Web.Services.Description/test2.wsdl"));
CodeTypeDeclaration td = FindTypeFrom (cns, "Service");
foreach (CodeTypeMember member in td.Members) {
CodeMemberMethod method = member as CodeMemberMethod;
if (method == null || method.Name != "Hola")
continue;
Assert.AreEqual ("System.Nullable`1", method.ReturnType.BaseType, "#1");
Assert.AreEqual (1, method.ReturnType.TypeArguments.Count, "#2");
Assert.AreEqual ("System.Int32", method.ReturnType.TypeArguments [0].BaseType, "#3");
return;
}
Assert.Fail ("The expected member didn't appear.");
}
[Test]
public void GenerateWebReferencesEmpty ()
{
// yuck - This causes NRE.
//ServiceDescriptionImporter.GenerateWebReferences (
// new WebReferenceCollection (), null, null, null);
ServiceDescriptionImporter.GenerateWebReferences (
new WebReferenceCollection (),
null,
new CodeCompileUnit (),
new WebReferenceOptions ());
}
[Test]
[Ignore ("This test requires HttpGet available by configuration.")]
public void ImportHttpOnlyWsdl ()
{
ServiceDescriptionImporter imp =
new ServiceDescriptionImporter ();
imp.AddServiceDescription (ServiceDescription.Read ("Test/System.Web.Services.Description/test3.wsdl"), null, null);
CodeNamespace cns = new CodeNamespace ();
CodeCompileUnit ccu = new CodeCompileUnit ();
ccu.Namespaces.Add (cns);
imp.Import (cns, ccu);
// FIXME: this test could require more precise result
bool verified = false;
Assert.AreEqual (1, ccu.Namespaces.Count, "#1");
Assert.AreEqual (1, ccu.Namespaces [0].Types.Count, "#2");
foreach (CodeTypeDeclaration cd in ccu.Namespaces [0].Types) {
Console.WriteLine ("***" + cd.Name);
if (cd.Name != "MyService")
continue;
Assert.AreEqual ("System.Web.Services.Protocols.HttpGetClientProtocol", cd.BaseTypes [0].BaseType);
verified = true;
}
Assert.IsTrue (verified, "verified");
}
}
}
#endif