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);
+ }
+ }
+}