diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/OpenMSBuildProjects.cs b/src/AddIns/Misc/PackageManagement/Project/Src/OpenMSBuildProjects.cs index f915ac2806..da5c2640de 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/OpenMSBuildProjects.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/OpenMSBuildProjects.cs @@ -19,16 +19,22 @@ namespace ICSharpCode.PackageManagement public MSBuildBasedProject FindProject(string name) { foreach (IProject project in projectService.GetOpenProjects()) { - if (IsProjectNameMatch(project.Name, name)) { + if (IsProjectNameMatch(project, name)) { return project as MSBuildBasedProject; } } return null; } - bool IsProjectNameMatch(string a, string b) + bool IsProjectNameMatch(IProject project, string name) { - return String.Equals(a, b, StringComparison.InvariantCultureIgnoreCase); + return IsMatchIgnoringCase(project.Name, name) || + (project.FileName == name); + } + + bool IsMatchIgnoringCase(string a, string b) + { + return String.Equals(a, b, StringComparison.OrdinalIgnoreCase); } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index 170ee5c39b..bab537b0e3 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -188,6 +188,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/OpenMSBuildProjectsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/OpenMSBuildProjectsTests.cs new file mode 100644 index 0000000000..4fbeb2e95c --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/OpenMSBuildProjectsTests.cs @@ -0,0 +1,67 @@ +// 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.Collections.Generic; +using ICSharpCode.PackageManagement; +using ICSharpCode.SharpDevelop.Project; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; +using Rhino.Mocks; + +namespace PackageManagement.Tests +{ + [TestFixture] + public class OpenMSBuildProjectsTests + { + OpenMSBuildProjects projects; + IPackageManagementProjectService fakeProjectService; + List openProjects; + + void CreateOpenMSBuildProjects() + { + fakeProjectService = MockRepository.GenerateStub(); + openProjects = new List(); + fakeProjectService.Stub(service => service.GetOpenProjects()).Return(openProjects); + + projects = new OpenMSBuildProjects(fakeProjectService); + } + + TestableProject AddProjectWithShortName(string projectName) + { + TestableProject project = ProjectHelper.CreateTestProject(projectName); + openProjects.Add(project); + return project; + } + + TestableProject AddProjectWithFileName(string fileName) + { + TestableProject project = AddProjectWithShortName("Test"); + project.FileName = fileName; + return project; + } + + [Test] + public void FindProject_ProjectShortNameUsedAndProjectIsOpen_ReturnsProject() + { + CreateOpenMSBuildProjects(); + MSBuildBasedProject expectedProject = AddProjectWithShortName("MyProject"); + + MSBuildBasedProject project = projects.FindProject("MyProject"); + + Assert.AreEqual(expectedProject, project); + } + + [Test] + public void FindProject_ProjectFileNameUsedAndProjectIsOpen_ReturnsProject() + { + CreateOpenMSBuildProjects(); + string fileName = @"d:\projects\MyProject\MyProject.csproj"; + MSBuildBasedProject expectedProject = AddProjectWithFileName(fileName); + + MSBuildBasedProject project = projects.FindProject(fileName); + + Assert.AreEqual(expectedProject, project); + } + } +}