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.
177 lines
5.4 KiB
177 lines
5.4 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 ICSharpCode.Core; |
|
using ICSharpCode.SharpDevelop; |
|
using ICSharpCode.SharpDevelop.Parser; |
|
using ICSharpCode.SharpDevelop.Project; |
|
using ICSharpCode.TextTemplating; |
|
using NUnit.Framework; |
|
using Rhino.Mocks; |
|
using TextTemplating.Tests.Helpers; |
|
|
|
namespace TextTemplating.Tests |
|
{ |
|
[TestFixture] |
|
public class TextTemplatingAssemblyPathResolverTests |
|
{ |
|
TextTemplatingAssemblyPathResolver resolver; |
|
IProject project; |
|
IGlobalAssemblyCacheService fakeGacService; |
|
FakeTextTemplatingPathResolver fakePathResolver; |
|
|
|
[SetUp] |
|
public void Init() |
|
{ |
|
SD.InitializeForUnitTests(); |
|
} |
|
|
|
[TearDown] |
|
public void TearDown() |
|
{ |
|
SD.TearDownForUnitTests(); |
|
} |
|
|
|
void CreateResolver() |
|
{ |
|
project = ProjectHelper.CreateProject(); |
|
fakeGacService = MockRepository.GenerateStub<IGlobalAssemblyCacheService>(); |
|
fakePathResolver = new FakeTextTemplatingPathResolver(); |
|
resolver = new TextTemplatingAssemblyPathResolver(project, fakeGacService, fakePathResolver); |
|
} |
|
|
|
ReferenceProjectItem AddReferenceToProject(string referenceName) |
|
{ |
|
ReferenceProjectItem projectItem = new ReferenceProjectItem(project, referenceName); |
|
ProjectService.AddProjectItem(project, projectItem); |
|
return projectItem; |
|
} |
|
|
|
void AddFileNameForGacReference(string fileName, string reference) |
|
{ |
|
DomAssemblyName assemblyName = AddMatchingAssemblyNameForGacReference(reference); |
|
fakeGacService |
|
.Stub(gac => gac.FindAssemblyInNetGac(assemblyName)) |
|
.Return(new FileName(fileName)); |
|
} |
|
|
|
DomAssemblyName AddMatchingAssemblyNameForGacReference(string reference) |
|
{ |
|
var assemblyName = new DomAssemblyName(reference); |
|
var assemblyNameToReturn = new DomAssemblyName("GacReference"); |
|
fakeGacService |
|
.Stub(gac => gac.FindBestMatchingAssemblyName(assemblyName)) |
|
.Return(assemblyNameToReturn); |
|
|
|
return assemblyNameToReturn; |
|
} |
|
|
|
[Test] |
|
public void ResolvePath_ProjectHasNoReferences_ReturnsAssemblyReferencePassedToMethod() |
|
{ |
|
CreateResolver(); |
|
string result = resolver.ResolvePath("Test"); |
|
|
|
Assert.AreEqual("Test", result); |
|
} |
|
|
|
[Test] |
|
public void ResolvePath_ProjectHasOneReferenceToTestAssemblyWithHintPathSet_ReturnsFullPathToTestAssembly() |
|
{ |
|
CreateResolver(); |
|
ReferenceProjectItem reference = AddReferenceToProject("test"); |
|
string expectedFileName = @"d:\projects\MyProject\lib\Test.dll"; |
|
reference.HintPath = expectedFileName; |
|
|
|
string result = resolver.ResolvePath("Test"); |
|
|
|
Assert.AreEqual(expectedFileName, result); |
|
} |
|
|
|
[Test] |
|
public void ResolvePath_AssemblyReferenceNameIsInDifferentCase_ReturnsFullPathToTestAssembly() |
|
{ |
|
CreateResolver(); |
|
ReferenceProjectItem reference = AddReferenceToProject("test"); |
|
string expectedFileName = @"d:\projects\MyProject\lib\Test.dll"; |
|
reference.HintPath = expectedFileName; |
|
|
|
string result = resolver.ResolvePath("TEST"); |
|
|
|
Assert.AreEqual(expectedFileName, result); |
|
} |
|
|
|
[Test] |
|
public void ResolvePath_ProjectHasOneReferenceToTestAssemblyWithFileNameSet_ReturnsFullPathToTestAssembly() |
|
{ |
|
CreateResolver(); |
|
ReferenceProjectItem reference = AddReferenceToProject("Test"); |
|
string expectedFileName = @"d:\projects\MyProject\lib\Test.dll"; |
|
reference.FileName = expectedFileName; |
|
|
|
string result = resolver.ResolvePath("Test"); |
|
|
|
Assert.AreEqual(expectedFileName, result); |
|
} |
|
|
|
[Test] |
|
public void ResolvePath_ProjectHasNoReferencesAndAssemblyReferenceInGac_ReturnsFullPathToAssemblyFoundFromAssemblyParserService() |
|
{ |
|
CreateResolver(); |
|
string expectedFileName = @"c:\Windows\System32\Gac\System.Data.dll"; |
|
AddFileNameForGacReference(expectedFileName, "System.Data"); |
|
|
|
string result = resolver.ResolvePath("System.Data"); |
|
|
|
Assert.AreEqual(expectedFileName, result); |
|
} |
|
|
|
[Test] |
|
public void ResolvePath_ProjectHasNoReferencesAndAssemblyReferenceNotFoundInGac_ReturnsAssemblyReferencePassedToMethod() |
|
{ |
|
CreateResolver(); |
|
|
|
string result = resolver.ResolvePath("System.Data"); |
|
|
|
Assert.AreEqual("System.Data", result); |
|
} |
|
|
|
[Test] |
|
public void ResolvePath_AssemblyReferenceHasTemplateVariable_ReturnsExpandedAssemblyReferenceFileName() |
|
{ |
|
CreateResolver(); |
|
string path = @"$(SolutionDir)lib\Test.dll"; |
|
string expectedPath = @"d:\projects\MyProject\lib\Test.dll"; |
|
fakePathResolver.AddPath(path, expectedPath); |
|
|
|
string resolvedPath = resolver.ResolvePath(path); |
|
|
|
Assert.AreEqual(expectedPath, resolvedPath); |
|
} |
|
|
|
[Test] |
|
public void ResolvePath_AssemblyReferenceHasTemplateVariable_AssemblyParserServiceIsNotUsed() |
|
{ |
|
CreateResolver(); |
|
string path = @"$(SolutionDir)lib\Test.dll"; |
|
string expectedPath = @"d:\projects\MyProject\lib\Test.dll"; |
|
fakePathResolver.AddPath(path, expectedPath); |
|
|
|
string result = resolver.ResolvePath(path); |
|
|
|
fakeGacService.AssertWasNotCalled(gac => gac.FindBestMatchingAssemblyName(Arg<DomAssemblyName>.Is.Anything)); |
|
} |
|
|
|
[Test] |
|
public void ResolvePath_AssemblyReferenceInGacButNoFileNameFound_ReturnsAssemblyReferenceNamePassedToResolvePath() |
|
{ |
|
CreateResolver(); |
|
AddMatchingAssemblyNameForGacReference("System.Data"); |
|
|
|
string result = resolver.ResolvePath("System.Data"); |
|
|
|
Assert.AreEqual("System.Data", result); |
|
} |
|
} |
|
}
|
|
|