20 changed files with 811 additions and 21 deletions
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.CodeDom; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public interface ICodeDomProvider |
||||
{ |
||||
string FileExtension { get; } |
||||
|
||||
void GenerateCodeFromCompileUnit(CodeCompileUnit compileUnit, string fileName); |
||||
} |
||||
} |
||||
@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public interface IFileSystem |
||||
{ |
||||
void CreateDirectoryIfMissing(string path); |
||||
} |
||||
} |
||||
@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public interface IProjectWithServiceReferences |
||||
{ |
||||
string ServiceReferencesFolder { get; } |
||||
ICodeDomProvider CodeDomProvider { get; } |
||||
|
||||
string GetServiceReferenceFileName(string serviceReferenceName); |
||||
void AddServiceReferenceProxyFile(string fileName); |
||||
void Save(); |
||||
} |
||||
} |
||||
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.CodeDom; |
||||
using System.ServiceModel.Description; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public interface IServiceReferenceCodeDomBuilder |
||||
{ |
||||
CodeCompileUnit GenerateCompileUnit(MetadataSet metadata); |
||||
|
||||
} |
||||
} |
||||
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.ServiceModel.Description; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public interface IServiceReferenceProxyGenerator |
||||
{ |
||||
string ServiceReferenceNamespace { get; set; } |
||||
|
||||
void GenerateProxy(MetadataSet metadata, string proxyFileName); |
||||
} |
||||
} |
||||
@ -0,0 +1,80 @@
@@ -0,0 +1,80 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.CodeDom.Compiler; |
||||
using System.IO; |
||||
using ICSharpCode.SharpDevelop.Project; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public class ProjectWithServiceReferences : IProjectWithServiceReferences |
||||
{ |
||||
IProject project; |
||||
string serviceReferencesFolder; |
||||
|
||||
public static readonly string DefaultServiceReferencesFolderName = "Service References"; |
||||
|
||||
public ProjectWithServiceReferences(IProject project) |
||||
: this(project, new ServiceReferenceCodeDomProvider(project)) |
||||
{ |
||||
} |
||||
|
||||
public ProjectWithServiceReferences(IProject project, ICodeDomProvider codeDomProvider) |
||||
{ |
||||
this.project = project; |
||||
this.CodeDomProvider = codeDomProvider; |
||||
} |
||||
|
||||
public string ServiceReferencesFolder { |
||||
get { |
||||
if (serviceReferencesFolder == null) { |
||||
GetServiceReferencesFolder(); |
||||
} |
||||
return serviceReferencesFolder; |
||||
} |
||||
} |
||||
|
||||
void GetServiceReferencesFolder() |
||||
{ |
||||
serviceReferencesFolder = Path.Combine(project.Directory, DefaultServiceReferencesFolderName); |
||||
} |
||||
|
||||
public ICodeDomProvider CodeDomProvider { get; private set; } |
||||
|
||||
public string GetServiceReferenceFileName(string serviceReferenceName) |
||||
{ |
||||
return Path.Combine(ServiceReferencesFolder, serviceReferenceName, "Reference.cs"); |
||||
} |
||||
|
||||
public void AddServiceReferenceProxyFile(string fileName) |
||||
{ |
||||
AddServiceReferenceFileToProject(fileName); |
||||
AddServiceReferencesItemToProject(); |
||||
} |
||||
|
||||
void AddServiceReferenceFileToProject(string fileName) |
||||
{ |
||||
var projectItem = new FileProjectItem(project, ItemType.Compile); |
||||
projectItem.FileName = fileName; |
||||
AddProjectItemToProject(projectItem); |
||||
} |
||||
|
||||
void AddProjectItemToProject(ProjectItem item) |
||||
{ |
||||
ProjectService.AddProjectItem(project, item); |
||||
} |
||||
|
||||
void AddServiceReferencesItemToProject() |
||||
{ |
||||
var projectItem = new ServiceReferencesProjectItem(project); |
||||
projectItem.Include = "Service References"; |
||||
AddProjectItemToProject(projectItem); |
||||
} |
||||
|
||||
public void Save() |
||||
{ |
||||
project.Save(); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.CodeDom; |
||||
using System.ServiceModel.Description; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public class ServiceReferenceCodeDomBuilder : IServiceReferenceCodeDomBuilder |
||||
{ |
||||
public CodeCompileUnit GenerateCompileUnit(MetadataSet metadata) |
||||
{ |
||||
var importer = new WsdlImporter(metadata); |
||||
var contractGenerator = new ServiceContractGenerator(); |
||||
contractGenerator.Options = ServiceContractGenerationOptions.ClientClass; |
||||
|
||||
foreach (ContractDescription contract in importer.ImportAllContracts()) { |
||||
contractGenerator.GenerateServiceContractType(contract); |
||||
} |
||||
|
||||
return contractGenerator.TargetCompileUnit; |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.CodeDom; |
||||
using System.CodeDom.Compiler; |
||||
using System.IO; |
||||
using ICSharpCode.SharpDevelop.Project; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public class ServiceReferenceCodeDomProvider : ICodeDomProvider |
||||
{ |
||||
IProject project; |
||||
CodeDomProvider codeDomProvider; |
||||
|
||||
public ServiceReferenceCodeDomProvider(IProject project) |
||||
{ |
||||
this.project = project; |
||||
} |
||||
|
||||
public string FileExtension { |
||||
get { return CodeDomProvider.FileExtension; } |
||||
} |
||||
|
||||
CodeDomProvider CodeDomProvider { |
||||
get { |
||||
if (codeDomProvider == null) { |
||||
codeDomProvider = project.LanguageProperties.CodeDomProvider; |
||||
} |
||||
return codeDomProvider; |
||||
} |
||||
} |
||||
|
||||
public void GenerateCodeFromCompileUnit(CodeCompileUnit compileUnit, string fileName) |
||||
{ |
||||
using (var writer = new StreamWriter(fileName)) { |
||||
CodeDomProvider.GenerateCodeFromCompileUnit(compileUnit, writer, null); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,18 @@
@@ -0,0 +1,18 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public class ServiceReferenceFileSystem : IFileSystem |
||||
{ |
||||
public void CreateDirectoryIfMissing(string path) |
||||
{ |
||||
if (!Directory.Exists(path)) { |
||||
Directory.CreateDirectory(path); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,66 @@
@@ -0,0 +1,66 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
using System.ServiceModel.Description; |
||||
|
||||
using ICSharpCode.SharpDevelop.Project; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public class ServiceReferenceGenerator |
||||
{ |
||||
IProjectWithServiceReferences project; |
||||
IServiceReferenceProxyGenerator proxyGenerator; |
||||
IFileSystem fileSystem; |
||||
|
||||
public ServiceReferenceGenerator(IProject project) |
||||
: this(new ProjectWithServiceReferences(project)) |
||||
{ |
||||
} |
||||
|
||||
public ServiceReferenceGenerator(IProjectWithServiceReferences project) |
||||
: this( |
||||
project, |
||||
new ServiceReferenceProxyGenerator(project.CodeDomProvider), |
||||
new ServiceReferenceFileSystem()) |
||||
{ |
||||
} |
||||
|
||||
public ServiceReferenceGenerator( |
||||
IProjectWithServiceReferences project, |
||||
IServiceReferenceProxyGenerator proxyGenerator, |
||||
IFileSystem fileSystem) |
||||
{ |
||||
this.project = project; |
||||
this.proxyGenerator = proxyGenerator; |
||||
this.fileSystem = fileSystem; |
||||
} |
||||
|
||||
public string Namespace { get; set; } |
||||
|
||||
public void AddServiceReference(MetadataSet metadata) |
||||
{ |
||||
GenerateServiceReferenceProxy(metadata); |
||||
} |
||||
|
||||
void GenerateServiceReferenceProxy(MetadataSet metadata) |
||||
{ |
||||
string fileName = project.GetServiceReferenceFileName(Namespace); |
||||
CreateFolderForFileIfFolderMissing(fileName); |
||||
|
||||
proxyGenerator.GenerateProxy(metadata, fileName); |
||||
|
||||
project.AddServiceReferenceProxyFile(fileName); |
||||
|
||||
project.Save(); |
||||
} |
||||
|
||||
void CreateFolderForFileIfFolderMissing(string fileName) |
||||
{ |
||||
string folder = Path.GetDirectoryName(fileName); |
||||
fileSystem.CreateDirectoryIfMissing(folder); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.CodeDom; |
||||
using System.IO; |
||||
using System.ServiceModel.Description; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public class ServiceReferenceProxyGenerator : IServiceReferenceProxyGenerator |
||||
{ |
||||
IServiceReferenceCodeDomBuilder codeDomBuilder; |
||||
ICodeDomProvider codeDomProvider; |
||||
|
||||
public ServiceReferenceProxyGenerator(ICodeDomProvider codeDomProvider) |
||||
: this(codeDomProvider, new ServiceReferenceCodeDomBuilder()) |
||||
{ |
||||
} |
||||
|
||||
public ServiceReferenceProxyGenerator( |
||||
ICodeDomProvider codeDomProvider, |
||||
IServiceReferenceCodeDomBuilder codeDomBuilder) |
||||
{ |
||||
this.codeDomProvider = codeDomProvider; |
||||
this.codeDomBuilder = codeDomBuilder; |
||||
} |
||||
|
||||
public string ServiceReferenceNamespace { get; set; } |
||||
|
||||
public void GenerateProxy(MetadataSet metadata, string proxyFileName) |
||||
{ |
||||
CodeCompileUnit compileUnit = codeDomBuilder.GenerateCompileUnit(metadata); |
||||
GenerateProxy(compileUnit, proxyFileName); |
||||
} |
||||
|
||||
void GenerateProxy(CodeCompileUnit compileUnit, string fileName) |
||||
{ |
||||
codeDomProvider.GenerateCodeFromCompileUnit(compileUnit, fileName); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,50 @@
@@ -0,0 +1,50 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.ServiceModel.Description; |
||||
using System.Xml.Schema; |
||||
|
||||
using WSDescription = System.Web.Services.Description; |
||||
using WSDiscovery = System.Web.Services.Discovery; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public class WebServiceMetadataSet : MetadataSet |
||||
{ |
||||
public static readonly string EmptyMetadataIdentifier = String.Empty; |
||||
|
||||
public WebServiceMetadataSet(WSDiscovery.DiscoveryClientProtocol discoveryClient) |
||||
{ |
||||
AddToMetadata(discoveryClient.Documents); |
||||
} |
||||
|
||||
void AddToMetadata(WSDiscovery.DiscoveryClientDocumentCollection documents) |
||||
{ |
||||
foreach (object document in documents.Values) { |
||||
AddToMetadataIfNotNull(document as WSDescription.ServiceDescription); |
||||
AddToMetadataIfNotNull(document as XmlSchema); |
||||
} |
||||
} |
||||
|
||||
void AddToMetadataIfNotNull(WSDescription.ServiceDescription serviceDescription) |
||||
{ |
||||
if (serviceDescription != null) { |
||||
AddMetadataSection(MetadataSection.ServiceDescriptionDialect, serviceDescription); |
||||
} |
||||
} |
||||
|
||||
void AddMetadataSection(string dialect, object metadata) |
||||
{ |
||||
var metadataSection = new MetadataSection(dialect, EmptyMetadataIdentifier, metadata); |
||||
MetadataSections.Add(metadataSection); |
||||
} |
||||
|
||||
void AddToMetadataIfNotNull(XmlSchema schema) |
||||
{ |
||||
if (schema != null) { |
||||
AddMetadataSection(MetadataSection.XmlSchemaDialect, schema); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,131 @@
@@ -0,0 +1,131 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.CodeDom.Compiler; |
||||
using System.Collections.Generic; |
||||
using System.Linq; |
||||
using ICSharpCode.SharpDevelop.Dom; |
||||
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference; |
||||
using ICSharpCode.SharpDevelop.Project; |
||||
using ICSharpCode.SharpDevelop.Tests.WebReferences; |
||||
using Microsoft.CSharp; |
||||
using NUnit.Framework; |
||||
using Rhino.Mocks; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences |
||||
{ |
||||
[TestFixture] |
||||
public class ProjectWithServiceReferencesTests |
||||
{ |
||||
IProject fakeProject; |
||||
ProjectWithServiceReferences project; |
||||
List<ProjectItem> projectItemsAddedToProject; |
||||
MSBuildBasedProject msbuildProject; |
||||
|
||||
void CreateProject() |
||||
{ |
||||
projectItemsAddedToProject = new List<ProjectItem>(); |
||||
fakeProject = MockRepository.GenerateStub<IProject>(); |
||||
project = new ProjectWithServiceReferences(fakeProject); |
||||
} |
||||
|
||||
void CreateProjectWithMSBuildProject() |
||||
{ |
||||
msbuildProject = WebReferenceTestHelper.CreateTestProject("C#"); |
||||
project = new ProjectWithServiceReferences(msbuildProject); |
||||
} |
||||
|
||||
void SetProjectDirectory(string directory) |
||||
{ |
||||
fakeProject.Stub(p => p.Directory).Return(directory); |
||||
} |
||||
|
||||
void SetProjectCodeDomProvider(LanguageProperties languageProperties) |
||||
{ |
||||
fakeProject.Stub(p => p.LanguageProperties).Return(languageProperties); |
||||
} |
||||
|
||||
ProjectItem GetFirstServiceReferenceFileInMSBuildProject(string fileName) |
||||
{ |
||||
return msbuildProject.Items.SingleOrDefault(item => item.FileName == fileName); |
||||
} |
||||
|
||||
ServiceReferencesProjectItem GetFirstWCFMetadataItemInMSBuildProject() |
||||
{ |
||||
return msbuildProject.GetItemsOfType(ItemType.ServiceReferences).SingleOrDefault() as ServiceReferencesProjectItem; |
||||
} |
||||
|
||||
[Test] |
||||
public void ServiceReferencesFolder_ProjectHasNoServiceReferences_ReturnsServiceReferencesFolderAsProjectSubFolder() |
||||
{ |
||||
CreateProject(); |
||||
SetProjectDirectory(@"d:\projects\MyProject"); |
||||
|
||||
string folder = project.ServiceReferencesFolder; |
||||
string expectedFolder = @"d:\projects\MyProject\Service References"; |
||||
|
||||
Assert.AreEqual(expectedFolder, folder); |
||||
} |
||||
|
||||
[Test] |
||||
public void CodeDomProvider_UnderlyingProjectUsesCSharpCodeDomProvider_ProjectUsesCSharpCodeDomProvider() |
||||
{ |
||||
CreateProject(); |
||||
SetProjectCodeDomProvider(LanguageProperties.CSharp); |
||||
|
||||
ICodeDomProvider codeDomProvider = project.CodeDomProvider; |
||||
string fileExtension = codeDomProvider.FileExtension; |
||||
|
||||
Assert.AreEqual("cs", fileExtension); |
||||
} |
||||
|
||||
[Test] |
||||
public void GetServiceReferenceProxyFileName_ProjectHasNoServiceReferences_ReturnsFileNameInServiceReferencesFolderWithSubFolderNamedAfterServiceReference() |
||||
{ |
||||
CreateProject(); |
||||
SetProjectDirectory(@"d:\projects\MyProject"); |
||||
|
||||
string fileName = project.GetServiceReferenceFileName("Service1"); |
||||
string expectedFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs"; |
||||
|
||||
Assert.AreEqual(expectedFileName, fileName); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_ProxyFileAddedToProjectAsFileToCompile() |
||||
{ |
||||
CreateProjectWithMSBuildProject(); |
||||
|
||||
string proxyFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs"; |
||||
project.AddServiceReferenceProxyFile(proxyFileName); |
||||
|
||||
ProjectItem item = GetFirstServiceReferenceFileInMSBuildProject(proxyFileName); |
||||
|
||||
Assert.AreEqual(ItemType.Compile, item.ItemType); |
||||
} |
||||
|
||||
[Test] |
||||
public void Save_SaveProjectChanges_UnderlyingProjectIsSaved() |
||||
{ |
||||
CreateProject(); |
||||
|
||||
project.Save(); |
||||
|
||||
fakeProject.AssertWasCalled(p => p.Save()); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_WCFMetadataItemAddedToProjectForServiceReferencesFolder() |
||||
{ |
||||
CreateProjectWithMSBuildProject(); |
||||
|
||||
string proxyFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs"; |
||||
project.AddServiceReferenceProxyFile(proxyFileName); |
||||
|
||||
ServiceReferencesProjectItem item = GetFirstWCFMetadataItemInMSBuildProject(); |
||||
|
||||
Assert.AreEqual("Service References", item.Include); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,88 @@
@@ -0,0 +1,88 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.ServiceModel.Description; |
||||
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference; |
||||
using ICSharpCode.SharpDevelop.Project; |
||||
using NUnit.Framework; |
||||
using Rhino.Mocks; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences |
||||
{ |
||||
[TestFixture] |
||||
public class ServiceReferenceGeneratorTests |
||||
{ |
||||
IProjectWithServiceReferences fakeProject; |
||||
IServiceReferenceProxyGenerator fakeProxyGenerator; |
||||
ServiceReferenceGenerator generator; |
||||
IFileSystem fakeFileSystem; |
||||
MetadataSet metadata; |
||||
|
||||
void CreateGenerator() |
||||
{ |
||||
metadata = new MetadataSet(); |
||||
|
||||
fakeProject = MockRepository.GenerateStub<IProjectWithServiceReferences>(); |
||||
fakeProxyGenerator = MockRepository.GenerateStub<IServiceReferenceProxyGenerator>(); |
||||
fakeFileSystem = MockRepository.GenerateStub<IFileSystem>(); |
||||
generator = new ServiceReferenceGenerator(fakeProject, fakeProxyGenerator, fakeFileSystem); |
||||
} |
||||
|
||||
void SetServiceReferenceFileName(string serviceReferenceName, string fileName) |
||||
{ |
||||
fakeProject.Stub(p => p.GetServiceReferenceFileName(serviceReferenceName)).Return(fileName); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReference_GeneratesServiceReference_MetadataPassedToProxyGenerator() |
||||
{ |
||||
CreateGenerator(); |
||||
string expectedProxyFileName = @"d:\projects\MyProject\Service References\MyServiceRef\Reference.cs"; |
||||
SetServiceReferenceFileName("MyServiceRef", expectedProxyFileName); |
||||
generator.Namespace = "MyServiceRef"; |
||||
|
||||
generator.AddServiceReference(metadata); |
||||
|
||||
fakeProxyGenerator.AssertWasCalled(p => p.GenerateProxy(metadata, expectedProxyFileName)); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReference_ServiceReferenceDoesNotExist_ServiceReferenceFolderCreated() |
||||
{ |
||||
CreateGenerator(); |
||||
string proxyFileName = @"d:\projects\MyProject\Service References\MyService1\Reference.cs"; |
||||
SetServiceReferenceFileName("MyService1", proxyFileName); |
||||
generator.Namespace = "MyService1"; |
||||
|
||||
generator.AddServiceReference(metadata); |
||||
|
||||
string expectedDirectory = @"d:\projects\MyProject\Service References\MyService1"; |
||||
|
||||
fakeFileSystem.AssertWasCalled(f => f.CreateDirectoryIfMissing(expectedDirectory)); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReference_GeneratesServiceReference_ServiceReferenceProxyFileAddedToProject() |
||||
{ |
||||
CreateGenerator(); |
||||
string expectedProxyFileName = @"d:\projects\MyProject\Service References\MyServiceRef\Reference.cs"; |
||||
SetServiceReferenceFileName("MyServiceRef", expectedProxyFileName); |
||||
generator.Namespace = "MyServiceRef"; |
||||
|
||||
generator.AddServiceReference(metadata); |
||||
|
||||
fakeProject.AssertWasCalled(p => p.AddServiceReferenceProxyFile(expectedProxyFileName)); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReference_GeneratesServiceReference_ProjectIsSaved() |
||||
{ |
||||
CreateGenerator(); |
||||
|
||||
generator.AddServiceReference(metadata); |
||||
|
||||
fakeProject.AssertWasCalled(p => p.Save()); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,52 @@
@@ -0,0 +1,52 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.CodeDom; |
||||
using System.ServiceModel.Description; |
||||
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference; |
||||
using NUnit.Framework; |
||||
using Rhino.Mocks; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences |
||||
{ |
||||
[TestFixture] |
||||
public class ServiceReferenceProxyGeneratorTests |
||||
{ |
||||
ServiceReferenceProxyGenerator proxyGenerator; |
||||
IProjectWithServiceReferences fakeProject; |
||||
IServiceReferenceCodeDomBuilder fakeCodeDomBuilder; |
||||
ICodeDomProvider fakeCodeDomProvider; |
||||
MetadataSet metadata; |
||||
|
||||
void CreateProxyGenerator() |
||||
{ |
||||
metadata = new MetadataSet(); |
||||
|
||||
fakeCodeDomBuilder = MockRepository.GenerateStub<IServiceReferenceCodeDomBuilder>(); |
||||
fakeProject = MockRepository.GenerateStub<IProjectWithServiceReferences>(); |
||||
fakeCodeDomProvider = MockRepository.GenerateStub<ICodeDomProvider>(); |
||||
proxyGenerator = new ServiceReferenceProxyGenerator(fakeCodeDomProvider, fakeCodeDomBuilder); |
||||
} |
||||
|
||||
CodeCompileUnit CreateCompileUnitToReturnFromCodeDomBuilder(MetadataSet metadata) |
||||
{ |
||||
var compileUnit = new CodeCompileUnit(); |
||||
fakeCodeDomBuilder.Stub(c => c.GenerateCompileUnit(metadata)).Return(compileUnit); |
||||
return compileUnit; |
||||
} |
||||
|
||||
[Test] |
||||
public void GenerateProxy_ProxyToBeGeneratedForMetadata_CodeGeneratedFromCodeDomForProxyFileInProjectSubFolder() |
||||
{ |
||||
CreateProxyGenerator(); |
||||
CodeCompileUnit compileUnit = CreateCompileUnitToReturnFromCodeDomBuilder(metadata); |
||||
proxyGenerator.ServiceReferenceNamespace = "Test"; |
||||
string expectedProxyFileName = @"d:\projects\MyProject\Service References\Test\Service1\Reference.cs"; |
||||
|
||||
proxyGenerator.GenerateProxy(metadata, expectedProxyFileName); |
||||
|
||||
fakeCodeDomProvider.AssertWasCalled(p => p.GenerateCodeFromCompileUnit(compileUnit, expectedProxyFileName)); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,97 @@
@@ -0,0 +1,97 @@
|
||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||
|
||||
using System; |
||||
using System.Linq; |
||||
using System.ServiceModel.Description; |
||||
using System.Web.Services.Discovery; |
||||
using System.Xml.Schema; |
||||
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference; |
||||
using NUnit.Framework; |
||||
using WSDescription = System.Web.Services.Description; |
||||
using WSDiscovery = System.Web.Services.Discovery; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences |
||||
{ |
||||
[TestFixture] |
||||
public class WebServiceMetadataSetTests |
||||
{ |
||||
DiscoveryClientProtocol discoveryProtocol; |
||||
WebServiceMetadataSet metadata; |
||||
|
||||
void CreateDiscoveryProtocol() |
||||
{ |
||||
discoveryProtocol = new DiscoveryClientProtocol(); |
||||
} |
||||
|
||||
WSDescription.ServiceDescription AddServiceDescriptionToDiscoveryProtocol() |
||||
{ |
||||
var serviceDescription = new WSDescription.ServiceDescription(); |
||||
discoveryProtocol.Documents.Add("http://ServiceDescription", serviceDescription); |
||||
return serviceDescription; |
||||
} |
||||
|
||||
void CreateMetadata() |
||||
{ |
||||
metadata = new WebServiceMetadataSet(discoveryProtocol); |
||||
} |
||||
|
||||
XmlSchema AddXmlSchemaToDiscoveryProtocol() |
||||
{ |
||||
var schema = new XmlSchema(); |
||||
discoveryProtocol.Documents.Add("http://XmlSchema", schema); |
||||
return schema; |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_DiscoveryProtocolHasOneServiceDescription_ServiceDescriptionAddedToMetadata() |
||||
{ |
||||
CreateDiscoveryProtocol(); |
||||
WSDescription.ServiceDescription serviceDescription = |
||||
AddServiceDescriptionToDiscoveryProtocol(); |
||||
CreateMetadata(); |
||||
|
||||
MetadataSection section = metadata.MetadataSections.First(); |
||||
|
||||
Assert.AreEqual(serviceDescription, section.Metadata); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_DiscoveryProtocolHasOneServiceDescription_ServiceDescriptionMetadataHasServiceDescriptionDialect() |
||||
{ |
||||
CreateDiscoveryProtocol(); |
||||
WSDescription.ServiceDescription serviceDescription = |
||||
AddServiceDescriptionToDiscoveryProtocol(); |
||||
CreateMetadata(); |
||||
|
||||
MetadataSection section = metadata.MetadataSections.First(); |
||||
|
||||
Assert.AreEqual(MetadataSection.ServiceDescriptionDialect, section.Dialect); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_DiscoveryProtocolHasOneXmlSchema_XmlSchemaAddedToMetadata() |
||||
{ |
||||
CreateDiscoveryProtocol(); |
||||
XmlSchema schema = AddXmlSchemaToDiscoveryProtocol(); |
||||
CreateMetadata(); |
||||
|
||||
MetadataSection section = metadata.MetadataSections.First(); |
||||
|
||||
Assert.AreEqual(schema, section.Metadata); |
||||
} |
||||
|
||||
[Test] |
||||
public void Constructor_DiscoveryProtocolHasOneXmlSchema_XmlSchemaAddedToMetadataHasXmlSchemaDialect() |
||||
{ |
||||
CreateDiscoveryProtocol(); |
||||
XmlSchema schema = AddXmlSchemaToDiscoveryProtocol(); |
||||
CreateMetadata(); |
||||
|
||||
MetadataSection section = metadata.MetadataSections.First(); |
||||
|
||||
Assert.AreEqual(MetadataSection.XmlSchemaDialect, section.Dialect); |
||||
} |
||||
|
||||
} |
||||
} |
||||
Loading…
Reference in new issue