// // ServiceDescriptionReflectorTest.cs // // Author: // Gert Driesen // Atsushi Enomoto // // Copyright (C) 2007 Gert Driesen // Copyright (C) 2006 Novell, Inc. // #if !MOBILE using NUnit.Framework; using System; using System.Globalization; using System.IO; using System.Web.Services; using System.Web.Services.Description; using System.Web.Services.Protocols; using System.Xml.Schema; using System.Xml.Serialization; namespace MonoTests.System.Web.Services.Description { [TestFixture] public class ServiceDescriptionReflectorTest { [Test] public void ReflectNullableInt () { ServiceDescriptionReflector r = new ServiceDescriptionReflector (); r.Reflect (typeof (NullableContainer), null); ServiceDescription sd = r.ServiceDescriptions [0]; XmlSchema xs = sd.Types.Schemas [0]; XmlSchemaElement el = null; foreach (XmlSchemaElement e in xs.Items) { if (e.Name != "GetNullResponse") continue; el = e; break; } XmlSchemaComplexType ct = el.SchemaType as XmlSchemaComplexType; XmlSchemaSequence s = ct.Particle as XmlSchemaSequence; XmlSchemaElement e2 = s.Items [0] as XmlSchemaElement; Assert.IsTrue (e2.IsNillable); } [Test] [Category ("NotWorking")] public void IncludeTest () { ServiceDescriptionReflector reflector = new ServiceDescriptionReflector (); reflector.Reflect (typeof (IncludeTestServices), "http://localhost/IncludeTestServices.asmx"); Assert.AreEqual (0, reflector.Schemas.Count, "#1"); Assert.AreEqual (1, reflector.ServiceDescriptions.Count, "#2"); ServiceDescription sd = reflector.ServiceDescriptions[0]; Assert.IsNull (sd.Name, "#3"); Assert.AreEqual (1, sd.Types.Schemas.Count, "#4"); StringWriter sw = new StringWriter (); sd.Write (sw); Assert.AreEqual (string.Format(CultureInfo.InvariantCulture, "{0}" + "{0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + #if ONLY_1_1 " {0}" + #endif " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + " {0}" + "", Environment.NewLine), sw.ToString (), "#5"); } [Test] [Category ("NotWorking")] public void ReflectTypeNonDefaultBinding () { // bug #78953 ServiceDescriptionReflector r = new ServiceDescriptionReflector (); r.Reflect (typeof (EdaInterface), "urn:foo"); //foreach (ServiceDescription sss in r.ServiceDescriptions) sss.Write (Console.Out); // It should create two wsdls, one for www.DefaultNamespace.org and // another for urn:localBinding:local . Assert.AreEqual (2, r.ServiceDescriptions.Count, "#1"); Assert.IsNotNull (r.ServiceDescriptions ["www.DefaultNamespace.org"], "#1-1"); ServiceDescription sd = r.ServiceDescriptions ["urn:localBinding:local"]; Assert.IsNotNull (sd, "#1-2"); // Soap and Soap12 Assert.AreEqual (2, sd.Bindings.Count, "#2-2.0"); Binding b = sd.Bindings [0]; Assert.AreEqual ("Local", b.Name, "#3"); } [Test] public void Bug79087 () { ServiceDescriptionReflector r = new ServiceDescriptionReflector (); r.Reflect (typeof (Bug79807Service), "urn:foo"); StringWriter sw = new StringWriter (); r.ServiceDescriptions [0].Write (sw); ServiceDescription.Read (new StringReader (sw.ToString ())); } [Test] public void EmptyAction () { ServiceDescriptionReflector r = new ServiceDescriptionReflector (); r.Reflect (typeof (EmptyActionService), "urn:foo"); Binding b = r.ServiceDescriptions [0].Bindings ["EmptyActionServiceSoap"]; OperationBinding o = b.Operations [0]; SoapOperationBinding sob = o.Extensions [0] as SoapOperationBinding; Assert.AreEqual (String.Empty, sob.SoapAction); } [Test] public void Bug332150 () { ServiceDescriptionReflector r = new ServiceDescriptionReflector (); r.Reflect (typeof (Bug332150Service), "urn:foo"); StringWriter sw = new StringWriter (); r.ServiceDescriptions [0].Write (sw); ServiceDescription.Read (new StringReader (sw.ToString ())); } [Test] public void Bug345448 () { ServiceDescriptionReflector r = new ServiceDescriptionReflector (); r.Reflect (typeof (Bug345448Service), "urn:foo"); ServiceDescription sd = r.ServiceDescriptions [0]; Assert.AreEqual("Bug345448ServiceSoap", sd.Bindings [0].Name, "sd #1"); Assert.AreEqual("Bug345448ServiceSoap12", sd.Bindings [1].Name, "sd #2"); } [Test] public void Bug345449 () { ServiceDescriptionReflector r = new ServiceDescriptionReflector (); r.Reflect (typeof (Bug345448Service), "urn:foo"); ServiceDescription sd = r.ServiceDescriptions [0]; Assert.AreEqual("Bug345448ServiceSoap", sd.Services [0].Ports [0].Name, "sd #3"); Assert.AreEqual("Bug345448ServiceSoap12", sd.Services [0].Ports [1].Name, "sd #4"); } [Test] public void Bug360241 () { // Make sure the map for service client is properly created new Bug360241SoapHttpClientProtocol (); } public class IncludeTestServices : WebService { [WebMethod ()] [return: XmlElement ("MyTime", DataType = "time")] public DateTime EchoString ([XmlElement (DataType = "string")] string strval) { return DateTime.Now; } [WebMethod ()] [XmlInclude (typeof (Car))] public Vehicle Vehicle (string licenseNumber) { if (licenseNumber == "0") { Vehicle v = new Car (); v.licenseNumber = licenseNumber; return v; } else { return null; } } } [XmlRoot ("NewVehicle")] public abstract class Vehicle { public string licenseNumber; public DateTime make; public TimeSpan age; } public class Car : Vehicle { } public class NullableContainer { [WebMethod (Description="Test nullables")] public int? GetNull () { return null; } } // bug #78953 [WebServiceAttribute (Namespace = "www.DefaultNamespace.org")] [WebServiceBindingAttribute (Name = "Local", Namespace = "urn:localBinding:local")] public class EdaInterface : WebService { [WebMethod] public void Test () { } [WebMethod] public void Test2 () { } [WebMethod] [SoapDocumentMethodAttribute ("urn:localBinding:local:LocalBindingMethod", RequestNamespace = "urn:localBinding:local", Binding = "Local", Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Bare)] public void BindingMethod () { } } // bug #79807 public class Bug79807Item { public string stringOne; public string stringTwo; } public class Bug79807AnotherItem { public string stringOne; public string stringTwo; } [WebService] [SoapRpcService] public class Bug79807Service : WebService { [WebMethod] public Bug79807Item [] Method1 (int count) { Bug79807Item [] arr = new Bug79807Item [count]; for (int i = 0;i < count;i++) { arr [i].stringOne = "one"; arr [i].stringTwo = "two"; } return arr; } [WebMethod] public Bug79807AnotherItem [] Method2 (int count) { Bug79807AnotherItem [] arr = new Bug79807AnotherItem [count]; for (int i = 0;i < count;i++) { arr [i].stringOne = "one"; arr [i].stringTwo = "two"; } return arr; } } [WebService (Namespace = "http://tempuri.org/")] public class EmptyActionService : WebService { [WebMethod] [SoapDocumentMethod ("")] public string HelloWorld () { return "Hello World"; } } [WebService (Namespace = "http://tempuri.org/")] [WebServiceBinding (ConformsTo = WsiProfiles.BasicProfile1_1)] public abstract class Bug332150SecureWebService : WebService { public Bug332150SecureWebService () { } [WebMethod] public bool Login (string userName, string password) { return true; } } [WebService (Namespace = "http://tempuri.org/")] [WebServiceBinding (ConformsTo = WsiProfiles.BasicProfile1_1)] public class Bug332150Service : Bug332150SecureWebService { public Bug332150Service () { } [WebMethod] public string HelloWorld () { return "Hello World"; } } [WebService (Namespace = "http://tempuri.org/")] [WebServiceBindingAttribute (Name = "AnotherBinding", Namespace = "http://tempuri.org/")] public class Bug345448Service : WebService { [WebMethod] //[SoapDocumentMethodAttribute (Binding="AnotherBinding")] public string HelloWorld () { return "Hello World"; } } [WebServiceBindingAttribute (Name = "AnotherBinding", Namespace = "http://tempuri.org/")] public class Bug360241SoapHttpClientProtocol : SoapHttpClientProtocol { } } } #endif