You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
426 lines
13 KiB
426 lines
13 KiB
// 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.CodeDom.Compiler; |
|
using System.Collections.Generic; |
|
using System.IO; |
|
using System.Linq; |
|
using ICSharpCode.Core; |
|
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference; |
|
using ICSharpCode.SharpDevelop.Project; |
|
using ICSharpCode.SharpDevelop.Tests.WebReferences; |
|
using Microsoft.CSharp; |
|
using NUnit.Framework; |
|
using Rhino.Mocks; |
|
|
|
namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences |
|
{ |
|
[TestFixture] |
|
public class ProjectWithServiceReferencesTests : SDTestFixtureBase |
|
{ |
|
IProject fakeProject; |
|
ProjectWithServiceReferences project; |
|
List<ProjectItem> projectItemsAddedToProject; |
|
MSBuildBasedProject msbuildProject; |
|
|
|
void CreateProject() |
|
{ |
|
projectItemsAddedToProject = new List<ProjectItem>(); |
|
fakeProject = MockRepository.GenerateStub<IProject>(); |
|
project = new ProjectWithServiceReferences(fakeProject); |
|
} |
|
|
|
void CreateProjectWithMSBuildProject() |
|
{ |
|
msbuildProject = WebReferenceTestHelper.CreateTestProject("C#"); |
|
project = new ProjectWithServiceReferences(msbuildProject); |
|
} |
|
|
|
void CreateProjectWithVisualBasicMSBuildProject() |
|
{ |
|
msbuildProject = WebReferenceTestHelper.CreateTestProject("VBNet"); |
|
project = new ProjectWithServiceReferences(msbuildProject); |
|
} |
|
|
|
void SetProjectDirectory(string directory) |
|
{ |
|
fakeProject.Stub(p => p.Directory).Return(directory); |
|
} |
|
|
|
ProjectItem GetFirstServiceReferenceFileInMSBuildProject(ServiceReferenceFileName fileName) |
|
{ |
|
return msbuildProject.Items.SingleOrDefault(item => item.FileName == fileName.Path); |
|
} |
|
|
|
ServiceReferencesProjectItem GetFirstWCFMetadataItemInMSBuildProject() |
|
{ |
|
return msbuildProject.GetItemsOfType(ItemType.ServiceReferences).SingleOrDefault() as ServiceReferencesProjectItem; |
|
} |
|
|
|
int GetHowManyWCFMetadataItemsInMSBuildProject() |
|
{ |
|
return msbuildProject.GetItemsOfType(ItemType.ServiceReferences).Count(); |
|
} |
|
|
|
ProjectItem GetFileProjectItemInMSBuildProject(string fileName) |
|
{ |
|
return msbuildProject.Items.SingleOrDefault(item => item.FileName == fileName); |
|
} |
|
|
|
ServiceReferenceProjectItem GetFirstWCFMetadataStorageItemInMSBuildProject() |
|
{ |
|
return msbuildProject.GetItemsOfType(ItemType.ServiceReference).SingleOrDefault() as ServiceReferenceProjectItem; |
|
} |
|
|
|
FileProjectItem GetFileFromMSBuildProject(string fileName) |
|
{ |
|
return msbuildProject.Items.Single(item => item.FileName == fileName) as FileProjectItem; |
|
} |
|
|
|
ReferenceProjectItem GetReferenceFromMSBuildProject(string name) |
|
{ |
|
return msbuildProject |
|
.GetItemsOfType(ItemType.Reference) |
|
.SingleOrDefault(item => item.Include == name) as ReferenceProjectItem; |
|
} |
|
|
|
void AddAssemblyReferenceToMSBuildProject(string name) |
|
{ |
|
var item = new ReferenceProjectItem(msbuildProject, name); |
|
ProjectService.AddProjectItem(msbuildProject, item); |
|
} |
|
|
|
void AddFileToMSBuildProject(string include) |
|
{ |
|
var fileItem = new FileProjectItem(msbuildProject, ItemType.None, include); |
|
ProjectService.AddProjectItem(msbuildProject, fileItem); |
|
} |
|
|
|
ReferenceProjectItem AddGacReferenceToProject(string name) |
|
{ |
|
var referenceItem = new ReferenceProjectItem(msbuildProject, name); |
|
ProjectService.AddProjectItem(msbuildProject, referenceItem); |
|
return referenceItem; |
|
} |
|
|
|
int CountAssemblyReferencesInMSBuildProject() |
|
{ |
|
return msbuildProject.GetItemsOfType(ItemType.Reference).Count(); |
|
} |
|
|
|
[Test] |
|
public void ServiceReferencesFolder_ProjectHasNoServiceReferences_ReturnsServiceReferencesFolderAsProjectSubFolder() |
|
{ |
|
CreateProject(); |
|
SetProjectDirectory(@"d:\projects\MyProject"); |
|
|
|
string folder = project.ServiceReferencesFolder; |
|
string expectedFolder = @"d:\projects\MyProject\Service References"; |
|
|
|
Assert.AreEqual(expectedFolder, folder); |
|
} |
|
|
|
[Test] |
|
public void GetServiceReferenceProxyFileName_ProjectHasNoServiceReferences_ReturnsFileNameInServiceReferencesFolderWithSubFolderNamedAfterServiceReference() |
|
{ |
|
CreateProject(); |
|
SetProjectDirectory(@"d:\projects\MyProject"); |
|
|
|
ServiceReferenceFileName fileName = project.GetServiceReferenceFileName("Service1"); |
|
string expectedFileName = @"d:\projects\MyProject\Service References\Service1\Reference.cs"; |
|
|
|
Assert.AreEqual(expectedFileName, fileName.Path); |
|
} |
|
|
|
[Test] |
|
public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_ProxyFileAddedToProjectAsFileToCompile() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
|
|
var proxyFileName = new ServiceReferenceFileName() { |
|
ServiceReferencesFolder = @"d:\projects\MyProject\Service References", |
|
ServiceName = "Service1" |
|
}; |
|
project.AddServiceReferenceProxyFile(proxyFileName); |
|
|
|
ProjectItem item = GetFirstServiceReferenceFileInMSBuildProject(proxyFileName); |
|
|
|
string dependentUpon = item.GetMetadata("DependentUpon"); |
|
|
|
Assert.AreEqual(ItemType.Compile, item.ItemType); |
|
Assert.AreEqual("Reference.svcmap", dependentUpon); |
|
} |
|
|
|
[Test] |
|
public void Save_SaveProjectChanges_UnderlyingProjectIsSaved() |
|
{ |
|
CreateProject(); |
|
|
|
project.Save(); |
|
|
|
fakeProject.AssertWasCalled(p => p.Save()); |
|
} |
|
|
|
[Test] |
|
public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_WCFMetadataItemAddedToProjectForServiceReferencesFolder() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
|
|
var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" }; |
|
project.AddServiceReferenceProxyFile(proxyFileName); |
|
|
|
ServiceReferencesProjectItem item = GetFirstWCFMetadataItemInMSBuildProject(); |
|
|
|
Assert.AreEqual("Service References", item.Include); |
|
} |
|
|
|
[Test] |
|
public void AddServiceReferenceProxyFile_ProjectHasServiceReferences_WCFMetadataItemNotAddedToProjectForServiceReferencesRootFolder() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" }; |
|
project.AddServiceReferenceProxyFile(proxyFileName); |
|
proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service2" }; |
|
|
|
project.AddServiceReferenceProxyFile(proxyFileName); |
|
|
|
int count = GetHowManyWCFMetadataItemsInMSBuildProject(); |
|
|
|
Assert.AreEqual(1, count); |
|
} |
|
|
|
[Test] |
|
public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_WCFMetadataStorageItemAddedToProjectForServiceReferencesFolder() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
|
|
var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" }; |
|
project.AddServiceReferenceProxyFile(proxyFileName); |
|
|
|
ProjectItem item = GetFirstWCFMetadataStorageItemInMSBuildProject(); |
|
|
|
Assert.AreEqual(@"Service References\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); |
|
} |
|
|
|
[Test] |
|
public void AddAssemblyReference_SystemServiceModelAddedToProjectWithoutReference_AssemblyReferenceAdded() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
|
|
project.AddAssemblyReference("System.ServiceModel"); |
|
|
|
ReferenceProjectItem item = GetReferenceFromMSBuildProject("System.ServiceModel"); |
|
|
|
Assert.IsNotNull(item); |
|
} |
|
|
|
[Test] |
|
public void AddAssemblyReference_SystemServiceModelAddedToProjectThatHasSystemServiceModelReference_AssemblyReferenceIsNotAdded() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
AddAssemblyReferenceToMSBuildProject("System.ServiceModel"); |
|
|
|
project.AddAssemblyReference("System.ServiceModel"); |
|
|
|
int count = CountAssemblyReferencesInMSBuildProject(); |
|
|
|
Assert.AreEqual(1, count); |
|
} |
|
|
|
[Test] |
|
public void AddAssemblyReference_SystemServiceModelAddedToProjectThatHasOneReferenceToSystemXml_ProjectHasTwoReferences() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
AddAssemblyReferenceToMSBuildProject("System.Xml"); |
|
|
|
project.AddAssemblyReference("System.ServiceModel"); |
|
|
|
int count = CountAssemblyReferencesInMSBuildProject(); |
|
|
|
Assert.AreEqual(2, count); |
|
} |
|
|
|
[Test] |
|
public void AddAssemblyReference_SystemServiceModelAddedToProjectThatHasSystemServiceModelReferenceInDifferentCase_AssemblyReferenceIsNotAdded() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
AddAssemblyReferenceToMSBuildProject("system.serviceModel"); |
|
|
|
project.AddAssemblyReference("System.ServiceModel"); |
|
|
|
int count = CountAssemblyReferencesInMSBuildProject(); |
|
|
|
Assert.AreEqual(1, count); |
|
} |
|
|
|
[Test] |
|
public void AddAssemblyReference_SystemServiceModelAddedToProjectThatHasSystemServiceModelReferenceUsingFullAssemblyName_AssemblyReferenceIsNotAdded() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
AddAssemblyReferenceToMSBuildProject("System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); |
|
|
|
project.AddAssemblyReference("System.ServiceModel"); |
|
|
|
int count = CountAssemblyReferencesInMSBuildProject(); |
|
|
|
Assert.AreEqual(1, count); |
|
} |
|
|
|
[Test] |
|
public void Language_CSharpProject_CSharpLanguageReturned() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
|
|
Assert.AreEqual("C#", project.Language); |
|
} |
|
|
|
[Test] |
|
public void Language_VisualBasicProject_VisualBasicLanguageReturned() |
|
{ |
|
CreateProjectWithVisualBasicMSBuildProject(); |
|
|
|
Assert.AreEqual("VBNet", project.Language); |
|
} |
|
|
|
[Test] |
|
public void RootNamespace_MSBuildProjectHasRootNamespace_RootNamespaceReturned() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
msbuildProject.RootNamespace = "Test"; |
|
|
|
Assert.AreEqual("Test", project.RootNamespace); |
|
} |
|
|
|
[Test] |
|
public void RootNamespace_MSBuildProjectHasNullRootNamespace_EmptyStringReturned() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
msbuildProject.Name = null; |
|
|
|
Assert.AreEqual(String.Empty, project.RootNamespace); |
|
} |
|
|
|
[Test] |
|
public void AddAppConfigFile_ProjectHasNoAppConfig_ProjectItemAddedToProjectForAppConfig() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
msbuildProject.FileName = FileName.Create(@"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 = FileName.Create(@"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 = FileName.Create(@"d:\projects\MyProject\myproject.csproj"); |
|
AddFileToMSBuildProject(@"SubFolder\app.config"); |
|
string fileName = project.GetAppConfigFileName(); |
|
|
|
Assert.AreEqual(@"d:\projects\MyProject\SubFolder\app.config", fileName); |
|
} |
|
|
|
[Test] |
|
public void GetReferences_ProjectHasGacReference_ReturnsGacReference() |
|
{ |
|
CreateProjectWithMSBuildProject(); |
|
ReferenceProjectItem refItem = AddGacReferenceToProject("System.Xml"); |
|
IEnumerable<ReferenceProjectItem> references = project.GetReferences(); |
|
|
|
var expectedReferences = new ReferenceProjectItem[] { |
|
refItem |
|
}; |
|
CollectionAssert.AreEqual(expectedReferences, references); |
|
} |
|
} |
|
}
|
|
|