diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
index 7b02d6607b..8df38e7d67 100644
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
@@ -269,17 +269,27 @@
Code
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ClientOptions.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ClientOptions.cs
new file mode 100644
index 0000000000..dd51f825d8
--- /dev/null
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ClientOptions.cs
@@ -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; }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IProjectWithServiceReferences.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IProjectWithServiceReferences.cs
index 4f80de835e..58f0bbc739 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IProjectWithServiceReferences.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IProjectWithServiceReferences.cs
@@ -11,7 +11,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
ICodeDomProvider CodeDomProvider { get; }
ServiceReferenceFileName GetServiceReferenceFileName(string serviceReferenceName);
+ ServiceReferenceMapFileName GetServiceReferenceMapFileName(string serviceReferenceName);
void AddServiceReferenceProxyFile(ServiceReferenceFileName fileName);
+ void AddServiceReferenceMapFile(ServiceReferenceMapFileName fileName);
void Save();
}
}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceFileGenerator.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceFileGenerator.cs
new file mode 100644
index 0000000000..95f876fdbf
--- /dev/null
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceFileGenerator.cs
@@ -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
+ {
+ }
+}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceMapGenerator.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceMapGenerator.cs
new file mode 100644
index 0000000000..144b224674
--- /dev/null
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceMapGenerator.cs
@@ -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);
+ }
+}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceProxyGenerator.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceProxyGenerator.cs
index 9c3d2c31d0..9b117b442e 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceProxyGenerator.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceProxyGenerator.cs
@@ -10,6 +10,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
string ServiceReferenceNamespace { get; set; }
- void GenerateProxy(MetadataSet metadata, string proxyFileName);
+ void GenerateProxyFile(MetadataSet metadata, string proxyFileName);
}
}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/MetadataFile.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/MetadataFile.cs
new file mode 100644
index 0000000000..82205976d4
--- /dev/null
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/MetadataFile.cs
@@ -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()
+ {
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/MetadataSource.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/MetadataSource.cs
new file mode 100644
index 0000000000..918f8ec9c3
--- /dev/null
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/MetadataSource.cs
@@ -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; }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
index 88e89cf6d7..24519e9a72 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
@@ -47,6 +47,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
return new ServiceReferenceFileName(ServiceReferencesFolder, serviceReferenceName);
}
+ public ServiceReferenceMapFileName GetServiceReferenceMapFileName(string serviceReferenceName)
+ {
+ return new ServiceReferenceMapFileName(ServiceReferencesFolder, serviceReferenceName);
+ }
+
public void AddServiceReferenceProxyFile(ServiceReferenceFileName fileName)
{
AddServiceReferenceFileToProject(fileName);
@@ -58,6 +63,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
var projectItem = new FileProjectItem(project, ItemType.Compile);
projectItem.FileName = fileName.Path;
+ projectItem.DependentUpon = "Reference.svcmap";
AddProjectItemToProject(projectItem);
}
@@ -84,5 +90,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
project.Save();
}
+
+ public void AddServiceReferenceMapFile(ServiceReferenceMapFileName fileName)
+ {
+ var projectItem = new ServiceReferenceMapFileProjectItem(project, fileName.Path);
+ AddProjectItemToProject(projectItem);
+ }
}
}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileGenerator.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileGenerator.cs
new file mode 100644
index 0000000000..93654abfdf
--- /dev/null
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileGenerator.cs
@@ -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);
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs
index 9a134285cf..7180fd116c 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs
@@ -12,7 +12,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
public class ServiceReferenceGenerator
{
IProjectWithServiceReferences project;
- IServiceReferenceProxyGenerator proxyGenerator;
+ IServiceReferenceFileGenerator fileGenerator;
IFileSystem fileSystem;
public ServiceReferenceGenerator(IProject project)
@@ -23,18 +23,18 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
public ServiceReferenceGenerator(IProjectWithServiceReferences project)
: this(
project,
- new ServiceReferenceProxyGenerator(project.CodeDomProvider),
+ new ServiceReferenceFileGenerator(project.CodeDomProvider),
new ServiceReferenceFileSystem())
{
}
public ServiceReferenceGenerator(
IProjectWithServiceReferences project,
- IServiceReferenceProxyGenerator proxyGenerator,
+ IServiceReferenceFileGenerator fileGenerator,
IFileSystem fileSystem)
{
this.project = project;
- this.proxyGenerator = proxyGenerator;
+ this.fileGenerator = fileGenerator;
this.fileSystem = fileSystem;
}
@@ -47,12 +47,17 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
void GenerateServiceReferenceProxy(MetadataSet metadata)
{
- ServiceReferenceFileName fileName = project.GetServiceReferenceFileName(Namespace);
- CreateFolderForFileIfFolderMissing(fileName.Path);
+ ServiceReferenceFileName referenceFileName = project.GetServiceReferenceFileName(Namespace);
+ CreateFolderForFileIfFolderMissing(referenceFileName.Path);
- proxyGenerator.GenerateProxy(metadata, fileName.Path);
+ fileGenerator.GenerateProxyFile(metadata, referenceFileName.Path);
- project.AddServiceReferenceProxyFile(fileName);
+ ServiceReferenceMapFileName mapFileName = project.GetServiceReferenceMapFileName(Namespace);
+ var mapFile = new ServiceReferenceMapFile(mapFileName);
+ fileGenerator.GenerateServiceReferenceMapFile(mapFile);
+
+ project.AddServiceReferenceProxyFile(referenceFileName);
+ project.AddServiceReferenceMapFile(mapFileName);
project.Save();
}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFile.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFile.cs
new file mode 100644
index 0000000000..7877589728
--- /dev/null
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFile.cs
@@ -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 metadataSources = new List();
+ List metadata = new List();
+
+ 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 MetadataSources {
+ get { return metadataSources; }
+ }
+
+ public List Metadata {
+ get { return metadata; }
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFileName.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFileName.cs
new file mode 100644
index 0000000000..700fba010d
--- /dev/null
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFileName.cs
@@ -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; }
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFileProjectItem.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFileProjectItem.cs
new file mode 100644
index 0000000000..86e5458e6d
--- /dev/null
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapFileProjectItem.cs
@@ -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");
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapGenerator.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapGenerator.cs
new file mode 100644
index 0000000000..5be219b9ab
--- /dev/null
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceMapGenerator.cs
@@ -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);
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceProxyGenerator.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceProxyGenerator.cs
index 9b07bdf0bd..bc1e405b51 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceProxyGenerator.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceProxyGenerator.cs
@@ -28,7 +28,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
public string ServiceReferenceNamespace { get; set; }
- public void GenerateProxy(MetadataSet metadata, string proxyFileName)
+ public void GenerateProxyFile(MetadataSet metadata, string proxyFileName)
{
CodeCompileUnit compileUnit = codeDomBuilder.GenerateCompileUnit(metadata);
GenerateProxy(compileUnit, proxyFileName);
diff --git a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
index 6ff0ebca7b..c8b842d0eb 100644
--- a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
+++ b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
@@ -101,6 +101,8 @@
+
+
diff --git a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
index 20a11fbd81..c2f5aa721f 100644
--- a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
+++ b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
@@ -4,6 +4,7 @@
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;
@@ -61,6 +62,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
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()
{
@@ -110,7 +116,10 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
ProjectItem item = GetFirstServiceReferenceFileInMSBuildProject(proxyFileName);
+ string dependentUpon = item.GetMetadata("DependentUpon");
+
Assert.AreEqual(ItemType.Compile, item.ItemType);
+ Assert.AreEqual("Reference.svcmap", dependentUpon);
}
[Test]
@@ -148,5 +157,36 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
Assert.AreEqual("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);
+ }
}
}
diff --git a/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs b/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs
index a6e34da6cc..7b0fe50ab0 100644
--- a/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs
+++ b/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs
@@ -15,7 +15,9 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{
IProjectWithServiceReferences fakeProject;
IServiceReferenceProxyGenerator fakeProxyGenerator;
+ IServiceReferenceMapGenerator fakeReferenceMapGenerator;
ServiceReferenceGenerator generator;
+ ServiceReferenceFileGenerator fileGenerator;
IFileSystem fakeFileSystem;
MetadataSet metadata;
@@ -25,8 +27,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
fakeProject = MockRepository.GenerateStub();
fakeProxyGenerator = MockRepository.GenerateStub();
+ fakeReferenceMapGenerator = MockRepository.GenerateStub();
+ fileGenerator = new ServiceReferenceFileGenerator(fakeProxyGenerator, fakeReferenceMapGenerator);
fakeFileSystem = MockRepository.GenerateStub();
- generator = new ServiceReferenceGenerator(fakeProject, fakeProxyGenerator, fakeFileSystem);
+
+ generator = new ServiceReferenceGenerator(fakeProject, fileGenerator, fakeFileSystem);
}
void SetServiceReferenceFileName(string serviceReferenceName, ServiceReferenceFileName fileName)
@@ -51,18 +56,35 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
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();
- ServiceReferenceFileName proxyFileName =
- AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
+ 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.GenerateProxy(metadata, expectedProxyFileName));
+ fakeProxyGenerator.AssertWasCalled(p => p.GenerateProxyFile(metadata, expectedProxyFileName));
}
[Test]
@@ -70,6 +92,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{
CreateGenerator();
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyService1");
+ AddMapFileNameForServiceName("MyService1");
generator.Namespace = "MyService1";
generator.AddServiceReference(metadata);
@@ -85,6 +108,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateGenerator();
ServiceReferenceFileName expectedProxyFileName =
AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
+ AddMapFileNameForServiceName("MyServiceRef");
generator.Namespace = "MyServiceRef";
generator.AddServiceReference(metadata);
@@ -97,11 +121,43 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{
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));
+ }
}
}
diff --git a/src/Main/Base/Test/ServiceReferences/ServiceReferenceMapFileGeneratorTests.cs b/src/Main/Base/Test/ServiceReferences/ServiceReferenceMapFileGeneratorTests.cs
new file mode 100644
index 0000000000..89fed0bd40
--- /dev/null
+++ b/src/Main/Base/Test/ServiceReferences/ServiceReferenceMapFileGeneratorTests.cs
@@ -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 =
+@"
+
+
+ false
+ true
+ false
+ false
+ false
+ true
+ Auto
+ true
+ true
+
+
+
+
+
+";
+
+ Assert.AreEqual(expectedOutput, output);
+ }
+ }
+}
diff --git a/src/Main/Base/Test/ServiceReferences/ServiceReferenceMapFileTests.cs b/src/Main/Base/Test/ServiceReferences/ServiceReferenceMapFileTests.cs
new file mode 100644
index 0000000000..48b915f67a
--- /dev/null
+++ b/src/Main/Base/Test/ServiceReferences/ServiceReferenceMapFileTests.cs
@@ -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();
+ }
+ }
+}
diff --git a/src/Main/Base/Test/ServiceReferences/ServiceReferenceProxyGeneratorTests.cs b/src/Main/Base/Test/ServiceReferences/ServiceReferenceProxyGeneratorTests.cs
index de26d1ae1d..c44305f56e 100644
--- a/src/Main/Base/Test/ServiceReferences/ServiceReferenceProxyGeneratorTests.cs
+++ b/src/Main/Base/Test/ServiceReferences/ServiceReferenceProxyGeneratorTests.cs
@@ -37,14 +37,14 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
}
[Test]
- public void GenerateProxy_ProxyToBeGeneratedForMetadata_CodeGeneratedFromCodeDomForProxyFileInProjectSubFolder()
+ 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.GenerateProxy(metadata, expectedProxyFileName);
+ proxyGenerator.GenerateProxyFile(metadata, expectedProxyFileName);
fakeCodeDomProvider.AssertWasCalled(p => p.GenerateCodeFromCompileUnit(compileUnit, expectedProxyFileName));
}