diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index 94ef77584b..7b02d6607b 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -277,6 +277,7 @@ + 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 4b3831a6a5..4f80de835e 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 @@ -10,8 +10,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference string ServiceReferencesFolder { get; } ICodeDomProvider CodeDomProvider { get; } - string GetServiceReferenceFileName(string serviceReferenceName); - void AddServiceReferenceProxyFile(string fileName); + ServiceReferenceFileName GetServiceReferenceFileName(string serviceReferenceName); + void AddServiceReferenceProxyFile(ServiceReferenceFileName fileName); void Save(); } } 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 837cb31016..88e89cf6d7 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 @@ -42,22 +42,22 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference public ICodeDomProvider CodeDomProvider { get; private set; } - public string GetServiceReferenceFileName(string serviceReferenceName) + public ServiceReferenceFileName GetServiceReferenceFileName(string serviceReferenceName) { - return Path.Combine(ServiceReferencesFolder, serviceReferenceName, "Reference.cs"); + return new ServiceReferenceFileName(ServiceReferencesFolder, serviceReferenceName); } - public void AddServiceReferenceProxyFile(string fileName) + public void AddServiceReferenceProxyFile(ServiceReferenceFileName fileName) { AddServiceReferenceFileToProject(fileName); AddServiceReferencesItemToProject(); AddServiceReferenceItemToProject(fileName); } - void AddServiceReferenceFileToProject(string fileName) + void AddServiceReferenceFileToProject(ServiceReferenceFileName fileName) { var projectItem = new FileProjectItem(project, ItemType.Compile); - projectItem.FileName = fileName; + projectItem.FileName = fileName.Path; AddProjectItemToProject(projectItem); } @@ -73,12 +73,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference AddProjectItemToProject(projectItem); } - void AddServiceReferenceItemToProject(string fileName) + void AddServiceReferenceItemToProject(ServiceReferenceFileName fileName) { var projectItem = new ServiceReferenceProjectItem(project); - string directory = Path.GetDirectoryName(fileName); - string serviceName = Path.GetFileName(directory); - projectItem.Include = serviceName; + projectItem.Include = fileName.ServiceName; AddProjectItemToProject(projectItem); } diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileName.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileName.cs new file mode 100644 index 0000000000..fa55834bfa --- /dev/null +++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileName.cs @@ -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; } + } + } +} 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 0f0fb6aac8..9a134285cf 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 @@ -47,10 +47,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference void GenerateServiceReferenceProxy(MetadataSet metadata) { - string fileName = project.GetServiceReferenceFileName(Namespace); - CreateFolderForFileIfFolderMissing(fileName); + ServiceReferenceFileName fileName = project.GetServiceReferenceFileName(Namespace); + CreateFolderForFileIfFolderMissing(fileName.Path); - proxyGenerator.GenerateProxy(metadata, fileName); + proxyGenerator.GenerateProxy(metadata, fileName.Path); project.AddServiceReferenceProxyFile(fileName); diff --git a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj index 1f7bb1f89d..6ff0ebca7b 100644 --- a/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj +++ b/src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj @@ -99,6 +99,7 @@ + diff --git a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs index 7545affb6f..20a11fbd81 100644 --- a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs +++ b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs @@ -46,9 +46,9 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences fakeProject.Stub(p => p.LanguageProperties).Return(languageProperties); } - ProjectItem GetFirstServiceReferenceFileInMSBuildProject(string fileName) + ProjectItem GetFirstServiceReferenceFileInMSBuildProject(ServiceReferenceFileName fileName) { - return msbuildProject.Items.SingleOrDefault(item => item.FileName == fileName); + return msbuildProject.Items.SingleOrDefault(item => item.FileName == fileName.Path); } ServiceReferencesProjectItem GetFirstWCFMetadataItemInMSBuildProject() @@ -91,10 +91,10 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences CreateProject(); SetProjectDirectory(@"d:\projects\MyProject"); - string fileName = project.GetServiceReferenceFileName("Service1"); + ServiceReferenceFileName fileName = project.GetServiceReferenceFileName("Service1"); string expectedFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs"; - Assert.AreEqual(expectedFileName, fileName); + Assert.AreEqual(expectedFileName, fileName.Path); } [Test] @@ -102,7 +102,10 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences { CreateProjectWithMSBuildProject(); - string proxyFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs"; + var proxyFileName = new ServiceReferenceFileName() { + ServiceReferencesFolder = @"d:\projects\MyProject\Service References", + ServiceName = "Service1" + }; project.AddServiceReferenceProxyFile(proxyFileName); ProjectItem item = GetFirstServiceReferenceFileInMSBuildProject(proxyFileName); @@ -125,7 +128,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences { CreateProjectWithMSBuildProject(); - string proxyFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs"; + var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" }; project.AddServiceReferenceProxyFile(proxyFileName); ServiceReferencesProjectItem item = GetFirstWCFMetadataItemInMSBuildProject(); @@ -138,7 +141,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences { CreateProjectWithMSBuildProject(); - string proxyFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs"; + var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" }; project.AddServiceReferenceProxyFile(proxyFileName); ProjectItem item = GetFirstWCFMetadataStorageItemInMSBuildProject(); diff --git a/src/Main/Base/Test/ServiceReferences/ServiceReferenceFileNameTests.cs b/src/Main/Base/Test/ServiceReferences/ServiceReferenceFileNameTests.cs new file mode 100644 index 0000000000..693fd6479b --- /dev/null +++ b/src/Main/Base/Test/ServiceReferences/ServiceReferenceFileNameTests.cs @@ -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); + } + } +} diff --git a/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs b/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs index b4b44cc173..a6e34da6cc 100644 --- a/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs +++ b/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs @@ -29,20 +29,38 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences generator = new ServiceReferenceGenerator(fakeProject, fakeProxyGenerator, fakeFileSystem); } - void SetServiceReferenceFileName(string serviceReferenceName, string fileName) + 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; + } + [Test] public void AddServiceReference_GeneratesServiceReference_MetadataPassedToProxyGenerator() { CreateGenerator(); - string expectedProxyFileName = @"d:\projects\MyProject\Service References\MyServiceRef\Reference.cs"; - SetServiceReferenceFileName("MyServiceRef", expectedProxyFileName); + ServiceReferenceFileName proxyFileName = + AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef"); generator.Namespace = "MyServiceRef"; generator.AddServiceReference(metadata); + string expectedProxyFileName = @"d:\projects\MyProject\Service References\MyServiceRef\Reference.cs"; fakeProxyGenerator.AssertWasCalled(p => p.GenerateProxy(metadata, expectedProxyFileName)); } @@ -51,8 +69,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences public void AddServiceReference_ServiceReferenceDoesNotExist_ServiceReferenceFolderCreated() { CreateGenerator(); - string proxyFileName = @"d:\projects\MyProject\Service References\MyService1\Reference.cs"; - SetServiceReferenceFileName("MyService1", proxyFileName); + AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyService1"); generator.Namespace = "MyService1"; generator.AddServiceReference(metadata); @@ -66,8 +83,8 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences public void AddServiceReference_GeneratesServiceReference_ServiceReferenceProxyFileAddedToProject() { CreateGenerator(); - string expectedProxyFileName = @"d:\projects\MyProject\Service References\MyServiceRef\Reference.cs"; - SetServiceReferenceFileName("MyServiceRef", expectedProxyFileName); + ServiceReferenceFileName expectedProxyFileName = + AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef"); generator.Namespace = "MyServiceRef"; generator.AddServiceReference(metadata); @@ -79,6 +96,8 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences public void AddServiceReference_GeneratesServiceReference_ProjectIsSaved() { CreateGenerator(); + AddProxyFileNameForServiceName("MyServiceRef"); + generator.Namespace = "MyServiceRef"; generator.AddServiceReference(metadata);