e5cd25ff4f
Former-commit-id: 2a5b9df2014f72665850c7f885e7aed54704a53a
126 lines
3.5 KiB
C#
126 lines
3.5 KiB
C#
//
|
|
// 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
|