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 @@
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ProjectWithServiceReferences.cs" /> <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\ServiceReferenceCodeDomBuilder.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceCodeDomProvider.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\ServiceReferenceFileSystem.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceGenerator.cs" /> <Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceProxyGenerator.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
string ServiceReferencesFolder { get; } string ServiceReferencesFolder { get; }
ICodeDomProvider CodeDomProvider { get; } ICodeDomProvider CodeDomProvider { get; }
string GetServiceReferenceFileName(string serviceReferenceName); ServiceReferenceFileName GetServiceReferenceFileName(string serviceReferenceName);
void AddServiceReferenceProxyFile(string fileName); void AddServiceReferenceProxyFile(ServiceReferenceFileName fileName);
void Save(); 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
public ICodeDomProvider CodeDomProvider { get; private set; } 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); AddServiceReferenceFileToProject(fileName);
AddServiceReferencesItemToProject(); AddServiceReferencesItemToProject();
AddServiceReferenceItemToProject(fileName); AddServiceReferenceItemToProject(fileName);
} }
void AddServiceReferenceFileToProject(string fileName) void AddServiceReferenceFileToProject(ServiceReferenceFileName fileName)
{ {
var projectItem = new FileProjectItem(project, ItemType.Compile); var projectItem = new FileProjectItem(project, ItemType.Compile);
projectItem.FileName = fileName; projectItem.FileName = fileName.Path;
AddProjectItemToProject(projectItem); AddProjectItemToProject(projectItem);
} }
@ -73,12 +73,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
AddProjectItemToProject(projectItem); AddProjectItemToProject(projectItem);
} }
void AddServiceReferenceItemToProject(string fileName) void AddServiceReferenceItemToProject(ServiceReferenceFileName fileName)
{ {
var projectItem = new ServiceReferenceProjectItem(project); var projectItem = new ServiceReferenceProjectItem(project);
string directory = Path.GetDirectoryName(fileName); projectItem.Include = fileName.ServiceName;
string serviceName = Path.GetFileName(directory);
projectItem.Include = serviceName;
AddProjectItemToProject(projectItem); AddProjectItemToProject(projectItem);
} }

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

6
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) void GenerateServiceReferenceProxy(MetadataSet metadata)
{ {
string fileName = project.GetServiceReferenceFileName(Namespace); ServiceReferenceFileName fileName = project.GetServiceReferenceFileName(Namespace);
CreateFolderForFileIfFolderMissing(fileName); CreateFolderForFileIfFolderMissing(fileName.Path);
proxyGenerator.GenerateProxy(metadata, fileName); proxyGenerator.GenerateProxy(metadata, fileName.Path);
project.AddServiceReferenceProxyFile(fileName); project.AddServiceReferenceProxyFile(fileName);

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

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

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

@ -46,9 +46,9 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
fakeProject.Stub(p => p.LanguageProperties).Return(languageProperties); 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() ServiceReferencesProjectItem GetFirstWCFMetadataItemInMSBuildProject()
@ -91,10 +91,10 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
CreateProject(); CreateProject();
SetProjectDirectory(@"d:\projects\MyProject"); SetProjectDirectory(@"d:\projects\MyProject");
string fileName = project.GetServiceReferenceFileName("Service1"); ServiceReferenceFileName fileName = project.GetServiceReferenceFileName("Service1");
string expectedFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs"; string expectedFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs";
Assert.AreEqual(expectedFileName, fileName); Assert.AreEqual(expectedFileName, fileName.Path);
} }
[Test] [Test]
@ -102,7 +102,10 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{ {
CreateProjectWithMSBuildProject(); 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); project.AddServiceReferenceProxyFile(proxyFileName);
ProjectItem item = GetFirstServiceReferenceFileInMSBuildProject(proxyFileName); ProjectItem item = GetFirstServiceReferenceFileInMSBuildProject(proxyFileName);
@ -125,7 +128,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{ {
CreateProjectWithMSBuildProject(); CreateProjectWithMSBuildProject();
string proxyFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs"; var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" };
project.AddServiceReferenceProxyFile(proxyFileName); project.AddServiceReferenceProxyFile(proxyFileName);
ServiceReferencesProjectItem item = GetFirstWCFMetadataItemInMSBuildProject(); ServiceReferencesProjectItem item = GetFirstWCFMetadataItemInMSBuildProject();
@ -138,7 +141,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
{ {
CreateProjectWithMSBuildProject(); CreateProjectWithMSBuildProject();
string proxyFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs"; var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" };
project.AddServiceReferenceProxyFile(proxyFileName); project.AddServiceReferenceProxyFile(proxyFileName);
ProjectItem item = GetFirstWCFMetadataStorageItemInMSBuildProject(); ProjectItem item = GetFirstWCFMetadataStorageItemInMSBuildProject();

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

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

@ -29,20 +29,38 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
generator = new ServiceReferenceGenerator(fakeProject, fakeProxyGenerator, fakeFileSystem); 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); 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] [Test]
public void AddServiceReference_GeneratesServiceReference_MetadataPassedToProxyGenerator() public void AddServiceReference_GeneratesServiceReference_MetadataPassedToProxyGenerator()
{ {
CreateGenerator(); CreateGenerator();
string expectedProxyFileName = @"d:\projects\MyProject\Service References\MyServiceRef\Reference.cs"; ServiceReferenceFileName proxyFileName =
SetServiceReferenceFileName("MyServiceRef", expectedProxyFileName); AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
generator.Namespace = "MyServiceRef"; generator.Namespace = "MyServiceRef";
generator.AddServiceReference(metadata); generator.AddServiceReference(metadata);
string expectedProxyFileName = @"d:\projects\MyProject\Service References\MyServiceRef\Reference.cs";
fakeProxyGenerator.AssertWasCalled(p => p.GenerateProxy(metadata, expectedProxyFileName)); fakeProxyGenerator.AssertWasCalled(p => p.GenerateProxy(metadata, expectedProxyFileName));
} }
@ -51,8 +69,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void AddServiceReference_ServiceReferenceDoesNotExist_ServiceReferenceFolderCreated() public void AddServiceReference_ServiceReferenceDoesNotExist_ServiceReferenceFolderCreated()
{ {
CreateGenerator(); CreateGenerator();
string proxyFileName = @"d:\projects\MyProject\Service References\MyService1\Reference.cs"; AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyService1");
SetServiceReferenceFileName("MyService1", proxyFileName);
generator.Namespace = "MyService1"; generator.Namespace = "MyService1";
generator.AddServiceReference(metadata); generator.AddServiceReference(metadata);
@ -66,8 +83,8 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void AddServiceReference_GeneratesServiceReference_ServiceReferenceProxyFileAddedToProject() public void AddServiceReference_GeneratesServiceReference_ServiceReferenceProxyFileAddedToProject()
{ {
CreateGenerator(); CreateGenerator();
string expectedProxyFileName = @"d:\projects\MyProject\Service References\MyServiceRef\Reference.cs"; ServiceReferenceFileName expectedProxyFileName =
SetServiceReferenceFileName("MyServiceRef", expectedProxyFileName); AddProxyFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
generator.Namespace = "MyServiceRef"; generator.Namespace = "MyServiceRef";
generator.AddServiceReference(metadata); generator.AddServiceReference(metadata);
@ -79,6 +96,8 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void AddServiceReference_GeneratesServiceReference_ProjectIsSaved() public void AddServiceReference_GeneratesServiceReference_ProjectIsSaved()
{ {
CreateGenerator(); CreateGenerator();
AddProxyFileNameForServiceName("MyServiceRef");
generator.Namespace = "MyServiceRef";
generator.AddServiceReference(metadata); generator.AddServiceReference(metadata);

Loading…
Cancel
Save