49 changed files with 1736 additions and 279 deletions
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
// 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 class ClientOptions |
||||
{ |
||||
public ClientOptions() |
||||
{ |
||||
EnableDataBinding = true; |
||||
GenerateSerializableTypes = true; |
||||
Serializer = "Auto"; |
||||
UseSerializerForFaults = true; |
||||
ReferenceAllAssemblies = true; |
||||
} |
||||
|
||||
public bool GenerateAsynchronousMethods { get; set; } |
||||
public bool EnableDataBinding { get; set; } |
||||
public bool ImportXmlTypes { get; set; } |
||||
public bool GenerateInternalTypes { get; set; } |
||||
public bool GenerateMessageContracts { get; set; } |
||||
public bool GenerateSerializableTypes { get; set; } |
||||
public string Serializer { get; set; } |
||||
public bool UseSerializerForFaults { get; set; } |
||||
public bool ReferenceAllAssemblies { get; set; } |
||||
} |
||||
} |
||||
@ -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,19 @@
@@ -0,0 +1,19 @@
|
||||
// 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; } |
||||
|
||||
ServiceReferenceFileName GetServiceReferenceFileName(string serviceReferenceName); |
||||
ServiceReferenceMapFileName GetServiceReferenceMapFileName(string serviceReferenceName); |
||||
void AddServiceReferenceProxyFile(ServiceReferenceFileName fileName); |
||||
void AddServiceReferenceMapFile(ServiceReferenceMapFileName 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,11 @@
@@ -0,0 +1,11 @@
|
||||
// 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 IServiceReferenceFileGenerator : IServiceReferenceProxyGenerator, IServiceReferenceMapGenerator |
||||
{ |
||||
} |
||||
} |
||||
@ -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 IServiceReferenceMapGenerator |
||||
{ |
||||
void GenerateServiceReferenceMapFile(ServiceReferenceMapFile mapFile); |
||||
} |
||||
} |
||||
@ -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 GenerateProxyFile(MetadataSet metadata, string proxyFileName); |
||||
} |
||||
} |
||||
@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
|
||||
// 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 class MetadataFile |
||||
{ |
||||
public MetadataFile() |
||||
{ |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
// 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.Xml.Serialization; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public class MetadataSource |
||||
{ |
||||
public MetadataSource() |
||||
{ |
||||
} |
||||
|
||||
public MetadataSource(string url) |
||||
{ |
||||
Address = url; |
||||
Protocol = "http"; |
||||
} |
||||
|
||||
[XmlAttribute] |
||||
public string Address { get; set; } |
||||
|
||||
[XmlAttribute] |
||||
public string Protocol { get; set; } |
||||
|
||||
[XmlAttribute] |
||||
public string SourceId { get; set; } |
||||
} |
||||
} |
||||
@ -0,0 +1,100 @@
@@ -0,0 +1,100 @@
|
||||
// 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 ServiceReferenceFileName GetServiceReferenceFileName(string serviceReferenceName) |
||||
{ |
||||
return new ServiceReferenceFileName(ServiceReferencesFolder, serviceReferenceName); |
||||
} |
||||
|
||||
public ServiceReferenceMapFileName GetServiceReferenceMapFileName(string serviceReferenceName) |
||||
{ |
||||
return new ServiceReferenceMapFileName(ServiceReferencesFolder, serviceReferenceName); |
||||
} |
||||
|
||||
public void AddServiceReferenceProxyFile(ServiceReferenceFileName fileName) |
||||
{ |
||||
AddServiceReferenceFileToProject(fileName); |
||||
AddServiceReferencesItemToProject(); |
||||
AddServiceReferenceItemToProject(fileName); |
||||
} |
||||
|
||||
void AddServiceReferenceFileToProject(ServiceReferenceFileName fileName) |
||||
{ |
||||
var projectItem = new FileProjectItem(project, ItemType.Compile); |
||||
projectItem.FileName = fileName.Path; |
||||
projectItem.DependentUpon = "Reference.svcmap"; |
||||
AddProjectItemToProject(projectItem); |
||||
} |
||||
|
||||
void AddProjectItemToProject(ProjectItem item) |
||||
{ |
||||
ProjectService.AddProjectItem(project, item); |
||||
} |
||||
|
||||
void AddServiceReferencesItemToProject() |
||||
{ |
||||
var projectItem = new ServiceReferencesProjectItem(project); |
||||
projectItem.Include = "Service References"; |
||||
AddProjectItemToProject(projectItem); |
||||
} |
||||
|
||||
void AddServiceReferenceItemToProject(ServiceReferenceFileName fileName) |
||||
{ |
||||
var projectItem = new ServiceReferenceProjectItem(project); |
||||
projectItem.Include = @"Service References\" + fileName.ServiceName; |
||||
AddProjectItemToProject(projectItem); |
||||
} |
||||
|
||||
public void Save() |
||||
{ |
||||
project.Save(); |
||||
} |
||||
|
||||
public void AddServiceReferenceMapFile(ServiceReferenceMapFileName fileName) |
||||
{ |
||||
var projectItem = new ServiceReferenceMapFileProjectItem(project, fileName.Path); |
||||
AddProjectItemToProject(projectItem); |
||||
} |
||||
} |
||||
} |
||||
@ -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,44 @@
@@ -0,0 +1,44 @@
|
||||
// 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 class ServiceReferenceFileGenerator : IServiceReferenceFileGenerator |
||||
{ |
||||
IServiceReferenceProxyGenerator proxyGenerator; |
||||
IServiceReferenceMapGenerator mapGenerator; |
||||
|
||||
public ServiceReferenceFileGenerator(ICodeDomProvider codeDomProvider) |
||||
: this( |
||||
new ServiceReferenceProxyGenerator(codeDomProvider), |
||||
new ServiceReferenceMapGenerator()) |
||||
{ |
||||
} |
||||
|
||||
public ServiceReferenceFileGenerator( |
||||
IServiceReferenceProxyGenerator proxyGenerator, |
||||
IServiceReferenceMapGenerator mapGenerator) |
||||
{ |
||||
this.proxyGenerator = proxyGenerator; |
||||
this.mapGenerator = mapGenerator; |
||||
} |
||||
|
||||
public string ServiceReferenceNamespace { |
||||
get { return proxyGenerator.ServiceReferenceNamespace; } |
||||
set { proxyGenerator.ServiceReferenceNamespace = value; } |
||||
} |
||||
|
||||
public void GenerateProxyFile(MetadataSet metadata, string proxyFileName) |
||||
{ |
||||
proxyGenerator.GenerateProxyFile(metadata, proxyFileName); |
||||
} |
||||
|
||||
public void GenerateServiceReferenceMapFile(ServiceReferenceMapFile mapFile) |
||||
{ |
||||
mapGenerator.GenerateServiceReferenceMapFile(mapFile); |
||||
} |
||||
} |
||||
} |
||||
@ -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 IO = System.IO; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public class ServiceReferenceFileName |
||||
{ |
||||
string serviceReferencesFolder; |
||||
string serviceName; |
||||
string path; |
||||
|
||||
public ServiceReferenceFileName() |
||||
: this(String.Empty, String.Empty) |
||||
{ |
||||
} |
||||
|
||||
public ServiceReferenceFileName( |
||||
string serviceReferencesFolder, |
||||
string serviceName) |
||||
{ |
||||
this.serviceReferencesFolder = serviceReferencesFolder; |
||||
this.serviceName = serviceName; |
||||
} |
||||
|
||||
public string Path { |
||||
get { |
||||
if (path == null) { |
||||
GetPath(); |
||||
} |
||||
return path; |
||||
} |
||||
} |
||||
|
||||
void GetPath() |
||||
{ |
||||
path = IO.Path.Combine(serviceReferencesFolder, serviceName, "Reference.cs"); |
||||
} |
||||
|
||||
public string ServiceName { |
||||
get { return serviceName; } |
||||
set { serviceName = value; } |
||||
} |
||||
|
||||
public string ServiceReferencesFolder { |
||||
get { return serviceReferencesFolder; } |
||||
set { serviceReferencesFolder = value; } |
||||
} |
||||
} |
||||
} |
||||
@ -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,71 @@
@@ -0,0 +1,71 @@
|
||||
// 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; |
||||
IServiceReferenceFileGenerator fileGenerator; |
||||
IFileSystem fileSystem; |
||||
|
||||
public ServiceReferenceGenerator(IProject project) |
||||
: this(new ProjectWithServiceReferences(project)) |
||||
{ |
||||
} |
||||
|
||||
public ServiceReferenceGenerator(IProjectWithServiceReferences project) |
||||
: this( |
||||
project, |
||||
new ServiceReferenceFileGenerator(project.CodeDomProvider), |
||||
new ServiceReferenceFileSystem()) |
||||
{ |
||||
} |
||||
|
||||
public ServiceReferenceGenerator( |
||||
IProjectWithServiceReferences project, |
||||
IServiceReferenceFileGenerator fileGenerator, |
||||
IFileSystem fileSystem) |
||||
{ |
||||
this.project = project; |
||||
this.fileGenerator = fileGenerator; |
||||
this.fileSystem = fileSystem; |
||||
} |
||||
|
||||
public string Namespace { get; set; } |
||||
|
||||
public void AddServiceReference(MetadataSet metadata) |
||||
{ |
||||
GenerateServiceReferenceProxy(metadata); |
||||
} |
||||
|
||||
void GenerateServiceReferenceProxy(MetadataSet metadata) |
||||
{ |
||||
ServiceReferenceFileName referenceFileName = project.GetServiceReferenceFileName(Namespace); |
||||
CreateFolderForFileIfFolderMissing(referenceFileName.Path); |
||||
|
||||
fileGenerator.GenerateProxyFile(metadata, referenceFileName.Path); |
||||
|
||||
ServiceReferenceMapFileName mapFileName = project.GetServiceReferenceMapFileName(Namespace); |
||||
var mapFile = new ServiceReferenceMapFile(mapFileName); |
||||
fileGenerator.GenerateServiceReferenceMapFile(mapFile); |
||||
|
||||
project.AddServiceReferenceProxyFile(referenceFileName); |
||||
project.AddServiceReferenceMapFile(mapFileName); |
||||
|
||||
project.Save(); |
||||
} |
||||
|
||||
void CreateFolderForFileIfFolderMissing(string fileName) |
||||
{ |
||||
string folder = Path.GetDirectoryName(fileName); |
||||
fileSystem.CreateDirectoryIfMissing(folder); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,71 @@
@@ -0,0 +1,71 @@
|
||||
// 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.Collections.Generic; |
||||
using System.Xml.Serialization; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
[XmlRoot(ElementName = "ReferenceGroup", Namespace = "urn:schemas-microsoft-com:xml-wcfservicemap")] |
||||
public class ServiceReferenceMapFile |
||||
{ |
||||
ClientOptions clientOptions = new ClientOptions(); |
||||
List<MetadataSource> metadataSources = new List<MetadataSource>(); |
||||
List<MetadataFile> metadata = new List<MetadataFile>(); |
||||
|
||||
public ServiceReferenceMapFile() |
||||
{ |
||||
ID = Guid.NewGuid().ToString(); |
||||
} |
||||
|
||||
public ServiceReferenceMapFile(ServiceReferenceMapFileName fileName) |
||||
: this() |
||||
{ |
||||
FileName = fileName.Path; |
||||
} |
||||
|
||||
public override bool Equals(object obj) |
||||
{ |
||||
var rhs = obj as ServiceReferenceMapFile; |
||||
return FileName == rhs.FileName; |
||||
} |
||||
|
||||
public override int GetHashCode() |
||||
{ |
||||
return base.GetHashCode(); |
||||
} |
||||
|
||||
public static ServiceReferenceMapFile CreateMapFileWithUrl(string url) |
||||
{ |
||||
var mapFile = new ServiceReferenceMapFile(); |
||||
mapFile.AddMetadataSourceForUrl(url); |
||||
return mapFile; |
||||
} |
||||
|
||||
public void AddMetadataSourceForUrl(string url) |
||||
{ |
||||
var metadataSource = new MetadataSource(url) { SourceId = "1" }; |
||||
metadataSources.Add(metadataSource); |
||||
} |
||||
|
||||
[XmlIgnoreAttribute] |
||||
public string FileName { get; set; } |
||||
|
||||
[XmlAttribute] |
||||
public string ID { get; set; } |
||||
|
||||
public ClientOptions ClientOptions { |
||||
get { return clientOptions; } |
||||
set { clientOptions = value; } |
||||
} |
||||
|
||||
public List<MetadataSource> MetadataSources { |
||||
get { return metadataSources; } |
||||
} |
||||
|
||||
public List<MetadataFile> Metadata { |
||||
get { return metadata; } |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
// 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 IO = System.IO; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public class ServiceReferenceMapFileName |
||||
{ |
||||
string path; |
||||
|
||||
public ServiceReferenceMapFileName(string serviceReferencesFolder, string serviceName) |
||||
{ |
||||
path = IO.Path.Combine(serviceReferencesFolder, serviceName, "Reference.svcmap"); |
||||
} |
||||
|
||||
public string Path { |
||||
get { return path; } |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
// 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 ICSharpCode.SharpDevelop.Project; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public class ServiceReferenceMapFileProjectItem : FileProjectItem |
||||
{ |
||||
public ServiceReferenceMapFileProjectItem( |
||||
IProject project, |
||||
string fileName) |
||||
: base(project, ItemType.None) |
||||
{ |
||||
this.FileName = fileName; |
||||
AddMetadata(); |
||||
} |
||||
|
||||
void AddMetadata() |
||||
{ |
||||
SetMetadata("LastGenOutput", "Reference.cs"); |
||||
SetMetadata("Generator", "WCF Proxy Generator"); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
|
||||
// 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.Xml.Serialization; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference |
||||
{ |
||||
public class ServiceReferenceMapGenerator : IServiceReferenceMapGenerator |
||||
{ |
||||
public void GenerateServiceReferenceMapFile(ServiceReferenceMapFile mapFile) |
||||
{ |
||||
var writer = new StreamWriter(mapFile.FileName); |
||||
GenerateServiceReferenceMapFile(writer, mapFile); |
||||
} |
||||
|
||||
public void GenerateServiceReferenceMapFile(TextWriter textWriter, ServiceReferenceMapFile mapFile) |
||||
{ |
||||
var serializer = new XmlSerializer(typeof(ServiceReferenceMapFile)); |
||||
serializer.Serialize(textWriter, mapFile); |
||||
} |
||||
} |
||||
} |
||||
@ -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 GenerateProxyFile(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,20 @@
@@ -0,0 +1,20 @@
|
||||
// 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.Project |
||||
{ |
||||
public class ServiceReferenceProjectItem : ProjectItem |
||||
{ |
||||
public ServiceReferenceProjectItem(IProject project) |
||||
: base(project, ItemType.ServiceReference) |
||||
{ |
||||
} |
||||
|
||||
internal ServiceReferenceProjectItem(IProject project, IProjectItemBackendStore buildItem) |
||||
: base(project, buildItem) |
||||
{ |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,192 @@
@@ -0,0 +1,192 @@
|
||||
// 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.IO; |
||||
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(ServiceReferenceFileName fileName) |
||||
{ |
||||
return msbuildProject.Items.SingleOrDefault(item => item.FileName == fileName.Path); |
||||
} |
||||
|
||||
ServiceReferencesProjectItem GetFirstWCFMetadataItemInMSBuildProject() |
||||
{ |
||||
return msbuildProject.GetItemsOfType(ItemType.ServiceReferences).SingleOrDefault() as ServiceReferencesProjectItem; |
||||
} |
||||
|
||||
ServiceReferenceProjectItem GetFirstWCFMetadataStorageItemInMSBuildProject() |
||||
{ |
||||
return msbuildProject.GetItemsOfType(ItemType.ServiceReference).SingleOrDefault() as ServiceReferenceProjectItem; |
||||
} |
||||
|
||||
FileProjectItem GetFileFromMSBuildProject(string fileName) |
||||
{ |
||||
return msbuildProject.Items.Single(item => item.FileName == fileName) as FileProjectItem; |
||||
} |
||||
|
||||
[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"); |
||||
|
||||
ServiceReferenceFileName fileName = project.GetServiceReferenceFileName("Service1"); |
||||
string expectedFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs"; |
||||
|
||||
Assert.AreEqual(expectedFileName, fileName.Path); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_ProxyFileAddedToProjectAsFileToCompile() |
||||
{ |
||||
CreateProjectWithMSBuildProject(); |
||||
|
||||
var proxyFileName = new ServiceReferenceFileName() { |
||||
ServiceReferencesFolder = @"d:\projects\MyProject\Service References", |
||||
ServiceName = "Service1" |
||||
}; |
||||
project.AddServiceReferenceProxyFile(proxyFileName); |
||||
|
||||
ProjectItem item = GetFirstServiceReferenceFileInMSBuildProject(proxyFileName); |
||||
|
||||
string dependentUpon = item.GetMetadata("DependentUpon"); |
||||
|
||||
Assert.AreEqual(ItemType.Compile, item.ItemType); |
||||
Assert.AreEqual("Reference.svcmap", dependentUpon); |
||||
} |
||||
|
||||
[Test] |
||||
public void Save_SaveProjectChanges_UnderlyingProjectIsSaved() |
||||
{ |
||||
CreateProject(); |
||||
|
||||
project.Save(); |
||||
|
||||
fakeProject.AssertWasCalled(p => p.Save()); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_WCFMetadataItemAddedToProjectForServiceReferencesFolder() |
||||
{ |
||||
CreateProjectWithMSBuildProject(); |
||||
|
||||
var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" }; |
||||
project.AddServiceReferenceProxyFile(proxyFileName); |
||||
|
||||
ServiceReferencesProjectItem item = GetFirstWCFMetadataItemInMSBuildProject(); |
||||
|
||||
Assert.AreEqual("Service References", item.Include); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_WCFMetadataStorageItemAddedToProjectForServiceReferencesFolder() |
||||
{ |
||||
CreateProjectWithMSBuildProject(); |
||||
|
||||
var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" }; |
||||
project.AddServiceReferenceProxyFile(proxyFileName); |
||||
|
||||
ProjectItem item = GetFirstWCFMetadataStorageItemInMSBuildProject(); |
||||
|
||||
Assert.AreEqual(@"Service References\Service1", item.Include); |
||||
} |
||||
|
||||
[Test] |
||||
public void GetServiceReferenceMapFileName_ProjectHasNoServiceReferences_ReturnsMapFileNameInServiceReferencesFolderWithSubFolderNamedAfterServiceReference() |
||||
{ |
||||
CreateProject(); |
||||
SetProjectDirectory(@"d:\projects\MyProject"); |
||||
|
||||
ServiceReferenceMapFileName fileName = project.GetServiceReferenceMapFileName("Service1"); |
||||
string expectedFileName = @"d:\projects\MyProject\Service References\Service1\Reference.svcmap"; |
||||
|
||||
Assert.AreEqual(expectedFileName, fileName.Path); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReferenceMapFile_ProjectHasNoServiceReferences_ServiceReferenceMapAddedToProject() |
||||
{ |
||||
CreateProjectWithMSBuildProject(); |
||||
|
||||
var mapFileName = new ServiceReferenceMapFileName(@"d:\projects\MyProject\Service References", "Service1"); |
||||
project.AddServiceReferenceMapFile(mapFileName); |
||||
|
||||
string fileName = @"d:\projects\MyProject\Service References\Service1\Reference.svcmap"; |
||||
FileProjectItem item = GetFileFromMSBuildProject(fileName); |
||||
|
||||
string lastGenOutput = item.GetMetadata("LastGenOutput"); |
||||
string generator = item.GetMetadata("Generator"); |
||||
|
||||
Assert.AreEqual(ItemType.None, item.ItemType); |
||||
Assert.AreEqual("Reference.cs", lastGenOutput); |
||||
Assert.AreEqual("WCF Proxy Generator", generator); |
||||
} |
||||
} |
||||
} |
||||
@ -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 ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference; |
||||
using NUnit.Framework; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences |
||||
{ |
||||
[TestFixture] |
||||
public class ServiceReferenceFileNameTests |
||||
{ |
||||
ServiceReferenceFileName fileName; |
||||
|
||||
void CreateServiceReferenceFileName(string serviceReferencesFolder, string serviceName) |
||||
{ |
||||
fileName = new ServiceReferenceFileName(serviceReferencesFolder, serviceName); |
||||
} |
||||
|
||||
[Test] |
||||
public void Path_NewInstanceCreated_ReturnsFullPathToFile() |
||||
{ |
||||
CreateServiceReferenceFileName(@"d:\projects\MyProject\Service References", "MyService"); |
||||
|
||||
string path = fileName.Path; |
||||
|
||||
string expectedPath = @"d:\projects\MyProject\Service References\MyService\Reference.cs"; |
||||
|
||||
Assert.AreEqual(expectedPath, path); |
||||
} |
||||
|
||||
[Test] |
||||
public void ServiceName_NewInstanceCreated_ReturnsFullPathToFile() |
||||
{ |
||||
CreateServiceReferenceFileName(@"d:\projects\MyProject\Service References", "MyService"); |
||||
|
||||
string serviceName = fileName.ServiceName; |
||||
|
||||
Assert.AreEqual("MyService", serviceName); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,163 @@
@@ -0,0 +1,163 @@
|
||||
// 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; |
||||
IServiceReferenceMapGenerator fakeReferenceMapGenerator; |
||||
ServiceReferenceGenerator generator; |
||||
ServiceReferenceFileGenerator fileGenerator; |
||||
IFileSystem fakeFileSystem; |
||||
MetadataSet metadata; |
||||
|
||||
void CreateGenerator() |
||||
{ |
||||
metadata = new MetadataSet(); |
||||
|
||||
fakeProject = MockRepository.GenerateStub<IProjectWithServiceReferences>(); |
||||
fakeProxyGenerator = MockRepository.GenerateStub<IServiceReferenceProxyGenerator>(); |
||||
fakeReferenceMapGenerator = MockRepository.GenerateStub<IServiceReferenceMapGenerator>(); |
||||
fileGenerator = new ServiceReferenceFileGenerator(fakeProxyGenerator, fakeReferenceMapGenerator); |
||||
fakeFileSystem = MockRepository.GenerateStub<IFileSystem>(); |
||||
|
||||
generator = new ServiceReferenceGenerator(fakeProject, fileGenerator, fakeFileSystem); |
||||
} |
||||
|
||||
void SetServiceReferenceFileName(string serviceReferenceName, ServiceReferenceFileName fileName) |
||||
{ |
||||
fakeProject.Stub(p => p.GetServiceReferenceFileName(serviceReferenceName)).Return(fileName); |
||||
} |
||||
|
||||
ServiceReferenceFileName CreateProxyFileName(string serviceReferencesFolder, string serviceName) |
||||
{ |
||||
return new ServiceReferenceFileName(serviceReferencesFolder, serviceName); |
||||
} |
||||
|
||||
ServiceReferenceFileName AddProxyFileNameForServiceName(string serviceName) |
||||
{ |
||||
return AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", serviceName); |
||||
} |
||||
|
||||
ServiceReferenceFileName AddProxyFileNameForServiceName(string serviceReferencesFolder, string serviceName) |
||||
{ |
||||
ServiceReferenceFileName proxyFileName = CreateProxyFileName(serviceReferencesFolder, serviceName); |
||||
SetServiceReferenceFileName(serviceName, proxyFileName); |
||||
return proxyFileName; |
||||
} |
||||
|
||||
ServiceReferenceMapFileName AddMapFileNameForServiceName(string serviceName) |
||||
{ |
||||
return AddMapFileNameForServiceName(@"d:\projects\MyProject\Service References", serviceName); |
||||
} |
||||
|
||||
ServiceReferenceMapFileName AddMapFileNameForServiceName(string serviceReferencesFolder, string serviceName) |
||||
{ |
||||
var fileName = new ServiceReferenceMapFileName(serviceReferencesFolder, serviceName); |
||||
SetServiceReferenceMapFileName(serviceName, fileName); |
||||
return fileName; |
||||
} |
||||
|
||||
void SetServiceReferenceMapFileName(string serviceName, ServiceReferenceMapFileName fileName) |
||||
{ |
||||
fakeProject.Stub(p => p.GetServiceReferenceMapFileName(serviceName)).Return(fileName); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReference_GeneratesServiceReference_MetadataPassedToProxyGenerator() |
||||
{ |
||||
CreateGenerator(); |
||||
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef"); |
||||
AddMapFileNameForServiceName("MyServiceRef"); |
||||
generator.Namespace = "MyServiceRef"; |
||||
|
||||
generator.AddServiceReference(metadata); |
||||
string expectedProxyFileName = @"d:\projects\MyProject\Service References\MyServiceRef\Reference.cs"; |
||||
|
||||
fakeProxyGenerator.AssertWasCalled(p => p.GenerateProxyFile(metadata, expectedProxyFileName)); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReference_ServiceReferenceDoesNotExist_ServiceReferenceFolderCreated() |
||||
{ |
||||
CreateGenerator(); |
||||
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyService1"); |
||||
AddMapFileNameForServiceName("MyService1"); |
||||
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(); |
||||
ServiceReferenceFileName expectedProxyFileName = |
||||
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef"); |
||||
AddMapFileNameForServiceName("MyServiceRef"); |
||||
generator.Namespace = "MyServiceRef"; |
||||
|
||||
generator.AddServiceReference(metadata); |
||||
|
||||
fakeProject.AssertWasCalled(p => p.AddServiceReferenceProxyFile(expectedProxyFileName)); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReference_GeneratesServiceReference_ProjectIsSaved() |
||||
{ |
||||
CreateGenerator(); |
||||
AddProxyFileNameForServiceName("MyServiceRef"); |
||||
AddMapFileNameForServiceName("MyServiceRef"); |
||||
generator.Namespace = "MyServiceRef"; |
||||
|
||||
generator.AddServiceReference(metadata); |
||||
|
||||
fakeProject.AssertWasCalled(p => p.Save()); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReference_GeneratesServiceReference_ReferenceServiceMapFileIsCreated() |
||||
{ |
||||
CreateGenerator(); |
||||
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef"); |
||||
AddMapFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef"); |
||||
generator.Namespace = "MyServiceRef"; |
||||
|
||||
generator.AddServiceReference(metadata); |
||||
|
||||
var expectedMapFile = new ServiceReferenceMapFile() { |
||||
FileName = @"d:\projects\MyProject\Service References\MyServiceRef\Reference.svcmap" |
||||
}; |
||||
|
||||
fakeReferenceMapGenerator.AssertWasCalled(gen => gen.GenerateServiceReferenceMapFile(expectedMapFile)); |
||||
} |
||||
|
||||
[Test] |
||||
public void AddServiceReference_GeneratesServiceReference_ReferenceServiceMapFileIsAddedToProject() |
||||
{ |
||||
CreateGenerator(); |
||||
AddProxyFileNameForServiceName("MyServiceRef"); |
||||
ServiceReferenceMapFileName expectedMapFileName = |
||||
AddMapFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef"); |
||||
generator.Namespace = "MyServiceRef"; |
||||
|
||||
generator.AddServiceReference(metadata); |
||||
|
||||
fakeProject.AssertWasCalled(p => p.AddServiceReferenceMapFile(expectedMapFileName)); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,69 @@
@@ -0,0 +1,69 @@
|
||||
// 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.Text; |
||||
|
||||
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference; |
||||
using NUnit.Framework; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences |
||||
{ |
||||
[TestFixture] |
||||
public class ServiceReferenceMapFileGeneratorTests |
||||
{ |
||||
ServiceReferenceMapGenerator generator; |
||||
|
||||
void CreateFileGenerator() |
||||
{ |
||||
generator = new ServiceReferenceMapGenerator(); |
||||
} |
||||
|
||||
string GenerateMapFile(ServiceReferenceMapFile mapFile) |
||||
{ |
||||
var output = new StringBuilder(); |
||||
var writer = new StringWriter(output); |
||||
|
||||
generator.GenerateServiceReferenceMapFile(writer, mapFile); |
||||
|
||||
return output.ToString(); |
||||
} |
||||
|
||||
ServiceReferenceMapFile CreateServiceReferenceMapFileWithUrl(string url) |
||||
{ |
||||
return ServiceReferenceMapFile.CreateMapFileWithUrl(url); |
||||
} |
||||
|
||||
[Test] |
||||
public void GenerateServiceReferenceMapFile_MapFileWrittenToStringWriter_SerialisesReferenceGroup() |
||||
{ |
||||
CreateFileGenerator(); |
||||
ServiceReferenceMapFile mapFile = CreateServiceReferenceMapFileWithUrl("http://localhost/MyService1.svc"); |
||||
mapFile.ID = "a606bbd6-26e5-4025-a25e-b8c262422f2a"; |
||||
string output = GenerateMapFile(mapFile); |
||||
|
||||
string expectedOutput = |
||||
@"<?xml version=""1.0"" encoding=""utf-16""?>
|
||||
<ReferenceGroup xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" ID=""a606bbd6-26e5-4025-a25e-b8c262422f2a"" xmlns=""urn:schemas-microsoft-com:xml-wcfservicemap"">
|
||||
<ClientOptions> |
||||
<GenerateAsynchronousMethods>false</GenerateAsynchronousMethods> |
||||
<EnableDataBinding>true</EnableDataBinding> |
||||
<ImportXmlTypes>false</ImportXmlTypes> |
||||
<GenerateInternalTypes>false</GenerateInternalTypes> |
||||
<GenerateMessageContracts>false</GenerateMessageContracts> |
||||
<GenerateSerializableTypes>true</GenerateSerializableTypes> |
||||
<Serializer>Auto</Serializer> |
||||
<UseSerializerForFaults>true</UseSerializerForFaults> |
||||
<ReferenceAllAssemblies>true</ReferenceAllAssemblies> |
||||
</ClientOptions> |
||||
<MetadataSources> |
||||
<MetadataSource Address=""http://localhost/MyService1.svc"" Protocol=""http"" SourceId=""1"" />
|
||||
</MetadataSources> |
||||
<Metadata /> |
||||
</ReferenceGroup>";
|
||||
|
||||
Assert.AreEqual(expectedOutput, output); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,57 @@
@@ -0,0 +1,57 @@
|
||||
// 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 ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference; |
||||
using NUnit.Framework; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences |
||||
{ |
||||
[TestFixture] |
||||
public class ServiceReferenceMapFileTests |
||||
{ |
||||
ServiceReferenceMapFile lhs; |
||||
ServiceReferenceMapFile rhs; |
||||
|
||||
void CreateMapFilesToCompare() |
||||
{ |
||||
lhs = new ServiceReferenceMapFile(); |
||||
rhs = new ServiceReferenceMapFile(); |
||||
} |
||||
|
||||
void AssertFilesAreEqual() |
||||
{ |
||||
bool result = AreFilesEqual(); |
||||
Assert.IsTrue(result); |
||||
} |
||||
|
||||
bool AreFilesEqual() |
||||
{ |
||||
return lhs.Equals(rhs); |
||||
} |
||||
|
||||
void AssertFilesAreNotEqual() |
||||
{ |
||||
bool result = AreFilesEqual(); |
||||
Assert.IsFalse(result); |
||||
} |
||||
|
||||
[Test] |
||||
public void Equals_FilesAreSame_ReturnsTrue() |
||||
{ |
||||
CreateMapFilesToCompare(); |
||||
|
||||
AssertFilesAreEqual(); |
||||
} |
||||
|
||||
[Test] |
||||
public void Equals_FilesHaveDifferentFileNames_ReturnsFalse() |
||||
{ |
||||
CreateMapFilesToCompare(); |
||||
lhs.FileName = "a"; |
||||
rhs.FileName = "b"; |
||||
|
||||
AssertFilesAreNotEqual(); |
||||
} |
||||
} |
||||
} |
||||
@ -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 GenerateProxyFile_ProxyToBeGeneratedForMetadata_CodeGeneratedFromCodeDomForProxyFileInProjectSubFolder() |
||||
{ |
||||
CreateProxyGenerator(); |
||||
CodeCompileUnit compileUnit = CreateCompileUnitToReturnFromCodeDomBuilder(metadata); |
||||
proxyGenerator.ServiceReferenceNamespace = "Test"; |
||||
string expectedProxyFileName = @"d:\projects\MyProject\Service References\Test\Service1\Reference.cs"; |
||||
|
||||
proxyGenerator.GenerateProxyFile(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