Browse Source

Generate app.config with service reference information.

pull/6/merge
Matt Ward 14 years ago
parent
commit
6373be8ba0
  1. 3
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IProjectWithServiceReferences.cs
  2. 37
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
  3. 23
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs
  4. 4
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGeneratorOptions.cs
  5. 4
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/SvcUtilCommandLine.cs
  6. 89
      src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
  7. 60
      src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs

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

@ -16,5 +16,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -16,5 +16,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
void AddServiceReferenceMapFile(ServiceReferenceMapFileName fileName);
void Save();
void AddAssemblyReference(string referenceName);
bool HasAppConfigFile();
string GetAppConfigFileName();
void AddAppConfigFile();
}
}

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

@ -119,5 +119,42 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -119,5 +119,42 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
return String.Equals(a, b, StringComparison.OrdinalIgnoreCase);
}
public bool HasAppConfigFile()
{
return GetAppConfigFile() != null;
}
ProjectItem GetAppConfigFile()
{
return project.Items.SingleOrDefault(item => IsAppConfigFile(item));
}
bool IsAppConfigFile(ProjectItem item)
{
string fileNameWithoutPath = Path.GetFileName(item.FileName);
return String.Equals(fileNameWithoutPath, "app.config", StringComparison.OrdinalIgnoreCase);
}
public string GetAppConfigFileName()
{
ProjectItem item = GetAppConfigFile();
if (item != null) {
return item.FileName;
}
return GetDefaultAppConfigFileName();
}
public void AddAppConfigFile()
{
var item = new FileProjectItem(project, ItemType.None);
item.FileName = GetDefaultAppConfigFileName();
AddProjectItemToProject(item);
}
string GetDefaultAppConfigFileName()
{
return Path.Combine(project.Directory, "app.config");
}
}
}

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

@ -50,20 +50,37 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -50,20 +50,37 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
}
void GenerateServiceReferenceProxy()
{
ServiceReferenceFileName referenceFileName = GenerateProxyFile();
ServiceReferenceMapFileName mapFileName = CreateServiceReferenceMapFile();
project.AddServiceReferenceProxyFile(referenceFileName);
project.AddServiceReferenceMapFile(mapFileName);
if (!project.HasAppConfigFile()) {
project.AddAppConfigFile();
}
}
ServiceReferenceFileName GenerateProxyFile()
{
ServiceReferenceFileName referenceFileName = project.GetServiceReferenceFileName(fileGenerator.Options.Namespace);
CreateFolderForFileIfFolderMissing(referenceFileName.Path);
Options.OutputFileName = referenceFileName.Path;
Options.AppConfigFileName = project.GetAppConfigFileName();
Options.NoAppConfig = false;
Options.MergeAppConfig = project.HasAppConfigFile();
Options.MapProjectLanguage(project.Language);
fileGenerator.GenerateProxyFile();
return referenceFileName;
}
ServiceReferenceMapFileName CreateServiceReferenceMapFile()
{
ServiceReferenceMapFileName mapFileName = project.GetServiceReferenceMapFileName(fileGenerator.Options.Namespace);
var mapFile = new ServiceReferenceMapFile(mapFileName);
fileGenerator.GenerateServiceReferenceMapFile(mapFile);
project.AddServiceReferenceProxyFile(referenceFileName);
project.AddServiceReferenceMapFile(mapFileName);
return mapFileName;
}
void CreateFolderForFileIfFolderMissing(string fileName)

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

@ -9,6 +9,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -9,6 +9,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public ServiceReferenceGeneratorOptions()
{
this.AppConfigFileName = String.Empty;
this.MergeAppConfig = false;
this.OutputFileName = String.Empty;
this.Namespace = String.Empty;
this.Language = "CS";
@ -19,7 +21,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -19,7 +21,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
public string OutputFileName { get; set; }
public string Url { get; set; }
public string Language { get; set; }
public string AppConfigFileName { get; set; }
public bool NoAppConfig { get; set; }
public bool MergeAppConfig { get; set; }
public void MapProjectLanguage(string language)
{

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

@ -20,10 +20,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -20,10 +20,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
void GenerateCommandLine(SvcUtilOptions options)
{
AppendIfTrue("/noconfig", options.NoAppConfig);
AppendIfNotEmpty("/out:", options.OutputFileName);
AppendIfNotEmpty("/namespace:", options.GetNamespaceMapping());
AppendIfNotEmpty("/language:", options.Language);
AppendIfTrue("/noConfig", options.NoAppConfig);
AppendIfTrue("/mergeConfig", options.MergeAppConfig);
AppendIfNotEmpty("/config:", options.AppConfigFileName);
AppendIfNotEmpty(options.Url);
this.Arguments = argumentBuilder.ToString();

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

@ -63,6 +63,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -63,6 +63,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
return msbuildProject.GetItemsOfType(ItemType.ServiceReferences).SingleOrDefault() as ServiceReferencesProjectItem;
}
ProjectItem GetFileProjectItemInMSBuildProject(string fileName)
{
return msbuildProject.Items.SingleOrDefault(item => item.FileName == fileName);
}
ServiceReferenceProjectItem GetFirstWCFMetadataStorageItemInMSBuildProject()
{
return msbuildProject.GetItemsOfType(ItemType.ServiceReference).SingleOrDefault() as ServiceReferenceProjectItem;
@ -86,6 +91,12 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -86,6 +91,12 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
ProjectService.AddProjectItem(msbuildProject, item);
}
void AddFileToMSBuildProject(string include)
{
var fileItem = new FileProjectItem(msbuildProject, ItemType.None, include);
ProjectService.AddProjectItem(msbuildProject, fileItem);
}
int CountAssemblyReferencesInMSBuildProject()
{
return msbuildProject.GetItemsOfType(ItemType.Reference).Count();
@ -280,5 +291,83 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -280,5 +291,83 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
Assert.AreEqual("VBNet", project.Language);
}
[Test]
public void AddAppConfigFile_ProjectHasNoAppConfig_ProjectItemAddedToProjectForAppConfig()
{
CreateProjectWithMSBuildProject();
msbuildProject.FileName = @"d:\projects\MyProject\myproject.csproj";
project.AddAppConfigFile();
ProjectItem item = GetFileFromMSBuildProject(@"d:\projects\MyProject\app.config");
Assert.IsNotNull(item);
Assert.AreEqual(ItemType.None, item.ItemType);
}
[Test]
public void HasAppConfigFile_ProjectHasNoAppConfig_ReturnsFalse()
{
CreateProjectWithMSBuildProject();
bool result = project.HasAppConfigFile();
Assert.IsFalse(result);
}
[Test]
public void HasAppConfigFile_ProjectHasAppConfig_ReturnsTrue()
{
CreateProjectWithMSBuildProject();
project.AddAppConfigFile();
bool result = project.HasAppConfigFile();
Assert.IsTrue(result);
}
[Test]
public void HasAppConfigFile_ProjectHasAppConfigInSubFolder_ReturnsTrue()
{
CreateProjectWithMSBuildProject();
AddFileToMSBuildProject(@"SubFolder\app.config");
bool result = project.HasAppConfigFile();
Assert.IsTrue(result);
}
[Test]
public void HasAppConfigFile_ProjectHasAppConfigInUpperCase_ReturnsTrue()
{
CreateProjectWithMSBuildProject();
AddFileToMSBuildProject(@"APP.CONFIG");
bool result = project.HasAppConfigFile();
Assert.IsTrue(result);
}
[Test]
public void GetAppConfigFileName_ProjectHasNoAppConfig_DefaultAppConfigFileNameReturned()
{
CreateProjectWithMSBuildProject();
msbuildProject.FileName = @"d:\projects\MyProject\myproject.csproj";
string fileName = project.GetAppConfigFileName();
Assert.AreEqual(@"d:\projects\MyProject\app.config", fileName);
}
[Test]
public void GetAppConfigFileName_ProjectHasAppConfigInSubFolder_AppConfigFileNameReturned()
{
CreateProjectWithMSBuildProject();
msbuildProject.FileName = @"d:\projects\MyProject\myproject.csproj";
AddFileToMSBuildProject(@"SubFolder\app.config");
string fileName = project.GetAppConfigFileName();
Assert.AreEqual(@"d:\projects\MyProject\SubFolder\app.config", fileName);
}
}
}

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

@ -90,6 +90,26 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -90,6 +90,26 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
fakeProject.Stub(p => p.Language).Return(language);
}
void SetProjectAppConfigFileName(string fileName)
{
fakeProject.Stub(p => p.GetAppConfigFileName()).Return(fileName);
}
void ProjectDoesNotHaveAppConfigFile()
{
ProjectHasAppConfigFile(false);
}
void ProjectHasAppConfigFile()
{
ProjectHasAppConfigFile(true);
}
void ProjectHasAppConfigFile(bool hasAppConfigFile)
{
fakeProject.Stub(p => p.HasAppConfigFile()).Return(hasAppConfigFile);
}
[Test]
public void AddServiceReference_GeneratesServiceReference_ProxyFileIsGenerated()
{
@ -260,5 +280,45 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -260,5 +280,45 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
Assert.AreEqual("VB", fakeProxyGenerator.Options.Language);
}
[Test]
public void AddServiceReference_ProjectHasNoAppConfig_AppConfigFileNamePassedToGeneratorButNoFileMergeRequested()
{
CreateGenerator();
AddProxyFileNameForServiceName("MyService");
AddMapFileNameForServiceName("MyService");
generator.Options.Namespace = "MyService";
UseVisualBasicProject();
string expectedAppConfigFileName = @"d:\projects\MyProject\app.config";
SetProjectAppConfigFileName(expectedAppConfigFileName);
ProjectDoesNotHaveAppConfigFile();
generator.AddServiceReference();
Assert.AreEqual(expectedAppConfigFileName, fakeProxyGenerator.Options.AppConfigFileName);
Assert.IsFalse(fakeProxyGenerator.Options.NoAppConfig);
Assert.IsFalse(fakeProxyGenerator.Options.MergeAppConfig);
fakeProject.AssertWasCalled(p => p.AddAppConfigFile());
}
[Test]
public void AddServiceReference_ProjectHasAppConfig_MergeAppConfigFileRequested()
{
CreateGenerator();
AddProxyFileNameForServiceName("MyService");
AddMapFileNameForServiceName("MyService");
generator.Options.Namespace = "MyService";
UseVisualBasicProject();
string expectedAppConfigFileName = @"d:\projects\MyProject\app.config";
SetProjectAppConfigFileName(expectedAppConfigFileName);
ProjectHasAppConfigFile();
generator.AddServiceReference();
Assert.AreEqual(expectedAppConfigFileName, fakeProxyGenerator.Options.AppConfigFileName);
Assert.IsFalse(fakeProxyGenerator.Options.NoAppConfig);
Assert.IsTrue(fakeProxyGenerator.Options.MergeAppConfig);
fakeProject.AssertWasNotCalled(p => p.AddAppConfigFile());
}
}
}

Loading…
Cancel
Save