Browse Source

Move code to determine service reference folder into separate ServiceReferenceFileName class.

pull/22/merge
Matt Ward 14 years ago
parent
commit
8a968a390e
  1. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  2. 4
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IProjectWithServiceReferences.cs
  3. 16
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
  4. 52
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileName.cs
  5. 6
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs
  6. 1
      src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj
  7. 17
      src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
  8. 42
      src/Main/Base/Test/ServiceReferences/ServiceReferenceFileNameTests.cs
  9. 33
      src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs

1
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -277,6 +277,7 @@ @@ -277,6 +277,7 @@
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ProjectWithServiceReferences.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceCodeDomBuilder.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceCodeDomProvider.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceFileName.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceFileSystem.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceProxyGenerator.cs" />

4
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IProjectWithServiceReferences.cs

@ -10,8 +10,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -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();
}
}

16
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs

@ -42,22 +42,22 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -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 @@ -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);
}

52
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceFileName.cs

@ -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; }
}
}
}

6
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs

@ -47,10 +47,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -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);

1
src/Main/Base/Test/ICSharpCode.SharpDevelop.Tests.csproj

@ -99,6 +99,7 @@ @@ -99,6 +99,7 @@
<Compile Include="ServiceReferences\ItemTypeTests.cs" />
<Compile Include="ServiceReferences\MSBuildBasedProjectTests.cs" />
<Compile Include="ServiceReferences\ProjectWithServiceReferencesTests.cs" />
<Compile Include="ServiceReferences\ServiceReferenceFileNameTests.cs" />
<Compile Include="ServiceReferences\ServiceReferenceGeneratorTests.cs" />
<Compile Include="ServiceReferences\ServiceReferenceNodeTests.cs" />
<Compile Include="ServiceReferences\ServiceReferenceProxyGeneratorTests.cs" />

17
src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs

@ -46,9 +46,9 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -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 @@ -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 @@ -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 @@ -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 @@ -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();

42
src/Main/Base/Test/ServiceReferences/ServiceReferenceFileNameTests.cs

@ -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);
}
}
}

33
src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs

@ -29,20 +29,38 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -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 @@ -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 @@ -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 @@ -79,6 +96,8 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void AddServiceReference_GeneratesServiceReference_ProjectIsSaved()
{
CreateGenerator();
AddProxyFileNameForServiceName("MyServiceRef");
generator.Namespace = "MyServiceRef";
generator.AddServiceReference(metadata);

Loading…
Cancel
Save