From 8db1129b777b6c0180578357faa11be0f521c202 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Thu, 14 Jun 2012 21:17:20 +0100 Subject: [PATCH] Implement VS Reference.SourceProject. --- .../Project/Src/EnvDTE/Reference.cs | 10 +++++ .../Test/Src/EnvDTE/ReferenceTests.cs | 40 ++++++++++++++++++- .../Test/Src/Helpers/TestableProject.cs | 7 ++++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Reference.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Reference.cs index a59959cd8e..1008fc6655 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Reference.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Reference.cs @@ -26,5 +26,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE project.RemoveReference(referenceProjectItem); project.Save(); } + + public Project SourceProject { + get { + var projectReference = referenceProjectItem as ProjectReferenceProjectItem; + if (projectReference != null) { + return new Project(projectReference.ReferencedProject as MSBuildBasedProject); + } + return null; + } + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ReferenceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ReferenceTests.cs index fb42a788b6..f9adcd6fe2 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ReferenceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ReferenceTests.cs @@ -4,6 +4,7 @@ using System; using ICSharpCode.PackageManagement.Design; using ICSharpCode.PackageManagement.EnvDTE; +using ICSharpCode.SharpDevelop.Project; using NUnit.Framework; using PackageManagement.Tests.Helpers; @@ -21,11 +22,27 @@ namespace PackageManagement.Tests.EnvDTE { project = new TestableDTEProject(); msbuildProject = project.TestableProject; - var referenceProjectItem = msbuildProject.AddReference(name); + ReferenceProjectItem referenceProjectItem = msbuildProject.AddReference(name); fakeProjectService = project.FakeProjectService; + CreateReference(project, referenceProjectItem); + } + + void CreateReference(Project project, ReferenceProjectItem referenceProjectItem) + { reference = new Reference(project, referenceProjectItem); } + TestableProject CreateProjectReference() + { + project = new TestableDTEProject(); + msbuildProject = project.TestableProject; + TestableProject referencedProject = ProjectHelper.CreateTestProject(); + ProjectReferenceProjectItem referenceProjectItem = msbuildProject.AddProjectReference(referencedProject); + fakeProjectService = project.FakeProjectService; + CreateReference(project, referenceProjectItem); + return referencedProject; + } + [Test] public void Name_ReferenceNameIsSystemXml_ReturnsSystemXml() { @@ -58,5 +75,26 @@ namespace PackageManagement.Tests.EnvDTE Assert.IsTrue(saved); } + + [Test] + public void SourceProject_SystemXmlReference_ReturnsNull() + { + CreateReference("System.Xml"); + + Project project = reference.SourceProject; + + Assert.IsNull(project); + } + + [Test] + public void SourceProject_ReferenceIsProjectReference_ReturnsReferencedProject() + { + TestableProject referencedProject = CreateProjectReference(); + referencedProject.FileName = @"d:\projects\referencedproject.csproj"; + + Project project = reference.SourceProject; + + Assert.AreEqual(@"d:\projects\referencedproject.csproj", project.FileName); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs index 9134ce04da..a515b2719c 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs @@ -49,6 +49,13 @@ namespace PackageManagement.Tests.Helpers return referenceProjectItem; } + public ProjectReferenceProjectItem AddProjectReference(IProject referencedProject) + { + var referenceProjectItem = new ProjectReferenceProjectItem(this, referencedProject); + ProjectService.AddProjectItem(this, referenceProjectItem); + return referenceProjectItem; + } + public FileProjectItem AddFile(string include) { var fileProjectItem = new FileProjectItem(this, ItemType.Compile, include);