#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
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.
 
 
 
 
 
 

196 lines
6.3 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.SharpDevelop;
using ICSharpCode.SharpDevelop.Internal.Templates;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.TextTemplating;
using NUnit.Framework;
using TextTemplating.Tests.Helpers;
namespace TextTemplating.Tests
{
[TestFixture]
public class TextTemplatingAssemblyPathResolverTests
{
TextTemplatingAssemblyPathResolver resolver;
IProject project;
FakeAssemblyParserService fakeAssemblyParserService;
FakeTextTemplatingPathResolver fakePathResolver;
[SetUp]
public void Init()
{
SD.InitializeForUnitTests();
MessageLoopHelper.InitializeForUnitTests();
}
[TearDown]
public void TearDown()
{
SD.TearDownForUnitTests();
}
void CreateResolver()
{
project = ProjectHelper.CreateProject();
fakeAssemblyParserService = new FakeAssemblyParserService();
fakePathResolver = new FakeTextTemplatingPathResolver();
resolver = new TextTemplatingAssemblyPathResolver(project, fakeAssemblyParserService, fakePathResolver);
}
ReferenceProjectItem AddReferenceToProject(string referenceName)
{
ReferenceProjectItem projectItem = new ReferenceProjectItem(project, referenceName);
ProjectService.AddProjectItem(project, projectItem);
return projectItem;
}
IProject GetProjectPassedToAssemblyParserService()
{
return ReferenceProjectItemPassedToGetReflectionProjectContentForReference.Project;
}
ReferenceProjectItem ReferenceProjectItemPassedToGetReflectionProjectContentForReference {
get { return fakeAssemblyParserService.ItemPassedToGetReflectionProjectContentForReference; }
}
ItemType GetReferenceItemTypePassedToAssemblyParserService()
{
return ReferenceProjectItemPassedToGetReflectionProjectContentForReference.ItemType;
}
[Test]
public void ResolvePath_ProjectHasNoReferences_ReturnsAssemblyReferencePassedToMethod()
{
CreateResolver();
fakeAssemblyParserService.FakeReflectionProjectContent = null;
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]
[Ignore("TODO GAC assembly resolving")]
public void ResolvePath_ProjectHasNoReferencesAndAssemblyReferenceInGac_ReturnsFullPathToAssemblyFoundFromAssemblyParserService()
{
CreateResolver();
string expectedFileName = @"c:\Windows\System32\Gac\System.Data.dll";
fakeAssemblyParserService.FakeReflectionProjectContent.AssemblyLocation = expectedFileName;
string result = resolver.ResolvePath("System.Data");
Assert.AreEqual(expectedFileName, result);
}
[Test]
[Ignore("TODO GAC assembly resolving")]
public void ResolvePath_ProjectHasNoReferencesAndAssemblyReferenceInGac_ReferenceItemPassedToAssemblyParserServiceUsesProject()
{
CreateResolver();
string result = resolver.ResolvePath("System.Data");
IProject expectedProject = GetProjectPassedToAssemblyParserService();
Assert.AreEqual(project, expectedProject);
}
[Test]
[Ignore("TODO GAC assembly resolving")]
public void ResolvePath_ProjectHasNoReferencesAndAssemblyReferenceInGac_ReferenceItemPassedToAssemblyParserServiceIsReference()
{
CreateResolver();
string result = resolver.ResolvePath("System.Data");
ItemType type = GetReferenceItemTypePassedToAssemblyParserService();
Assert.AreEqual(ItemType.Reference, type);
}
[Test]
[Ignore("TODO GAC assembly resolving")]
public void ResolvePath_ProjectHasNoReferencesAndAssemblyReferenceInGac_ReferenceItemIncludePassedToAssemblyParserServiceIsAssemblyNameToResolvePath()
{
CreateResolver();
string result = resolver.ResolvePath("System.Data");
string referenceInclude = ReferenceProjectItemPassedToGetReflectionProjectContentForReference.Include;
Assert.AreEqual("System.Data", referenceInclude);
}
[Test]
public void ResolvePath_ProjectHasNoReferencesAndAssemblyReferenceNotFoundInGac_ReturnsAssemblyReferencePassedToMethod()
{
CreateResolver();
fakeAssemblyParserService.FakeReflectionProjectContent = null;
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);
Assert.IsFalse(fakeAssemblyParserService.IsGetReflectionProjectContentForReferenceCalled);
}
}
}