diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index f396359c63..6650a684b4 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -95,7 +95,9 @@ + + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Constants.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Constants.cs new file mode 100644 index 0000000000..1245b8114b --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Constants.cs @@ -0,0 +1,13 @@ +// 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; + +namespace ICSharpCode.PackageManagement.EnvDTE +{ + public static class Constants + { + public static readonly string VsProjectItemKindPhysicalFile = "{6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C}"; + public static readonly string VsProjectItemKindPhysicalFolder = "{6BB5F8EF-4483-11D3-8BCF-00C04F8EC28C}"; + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DTE.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DTE.cs index 8ca47f63f8..fa7dcbfe96 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DTE.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DTE.cs @@ -36,7 +36,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE public Solution Solution { get { if (IsSolutionOpen) { - return new Solution(projectService.OpenSolution); + return new Solution(projectService); } return null; } @@ -55,23 +55,16 @@ namespace ICSharpCode.PackageManagement.EnvDTE } public object ActiveSolutionProjects { - get { return GetProjectsInSolution().ToArray(); } - } - - IEnumerable GetProjectsInSolution() - { - foreach (SD.MSBuildBasedProject msbuildProject in GetOpenMSBuildProjects()) { - yield return new Project(msbuildProject); + get { + if (IsSolutionOpen) { + return Solution.Projects.ToArray(); + } + return new Project[0]; } } - IEnumerable GetOpenMSBuildProjects() - { - return projectService.GetOpenProjects(); - } - public SourceControl SourceControl { - get { throw new NotImplementedException(); } + get { return null; } } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItem.cs index c5c7ecabd3..10e9d1ed20 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/DirectoryProjectItem.cs @@ -44,6 +44,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE return true; } return false; - } + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs index 3d32cd6564..b674ff08de 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs @@ -49,10 +49,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE Properties = new Properties(propertyFactory); } - public virtual string Kind { - get { throw new NotImplementedException(); } - } - public virtual string Name { get { return MSBuildProject.Name; } } @@ -88,8 +84,16 @@ namespace ICSharpCode.PackageManagement.EnvDTE string GetProjectType() { - var projectType = new ProjectType(this); - return projectType.Type; + return new ProjectType(this).Type; + } + + public virtual string Kind { + get { return GetProjectKind(); } + } + + string GetProjectKind() + { + return new ProjectKind(this).Kind; } internal MSBuildBasedProject MSBuildProject { get; private set; } @@ -174,5 +178,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE public virtual ConfigurationManager ConfigurationManager { get { throw new NotImplementedException(); } } + + internal virtual string GetLowercaseFileExtension() + { + return Path.GetExtension(FileName).ToLowerInvariant(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs index 03f769d5d1..4d98e47961 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs @@ -24,6 +24,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE this.ContainingProject = project; this.ProjectItems = new DirectoryProjectItems(this); CreateProperties(); + Kind = Constants.VsProjectItemKindPhysicalFile; } public ProjectItem() @@ -40,12 +41,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE get { return Path.GetFileName(projectItem.Include); } } - public virtual string Kind { - get { throw new NotImplementedException(); } - } + public virtual string Kind { get; set; } public Project SubProject { - get { throw new NotImplementedException(); } + get { return null; } } public virtual Properties Properties { get; private set; } @@ -105,5 +104,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE { return new ProjectItemRelationship(this, msbuildProjectItem); } + + /// + /// TODO: delete project item from project + /// + public void Delete() + { + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItems.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItems.cs index 3dbe7aa215..28f882f46a 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItems.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItems.cs @@ -95,7 +95,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE } public virtual int Count { - get { throw new NotImplementedException(); } + get { return new ProjectItemsInsideProject(project).Count; } } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemsInsideProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemsInsideProject.cs index b336b424e8..70f1bcc735 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemsInsideProject.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItemsInsideProject.cs @@ -28,6 +28,10 @@ namespace ICSharpCode.PackageManagement.EnvDTE return projectItems.GetEnumerator(); } + internal virtual int Count { + get { return GetProjectItems().Count(); } + } + IEnumerable GetProjectItems() { foreach (SD.ProjectItem item in project.MSBuildProject.Items) { @@ -124,7 +128,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE { var directoryItem = new FileProjectItem(project.MSBuildProject, ItemType.Folder); directoryItem.Include = directoryName; - return new ProjectItem(project, directoryItem); + return new ProjectItem(project, directoryItem) { Kind = Constants.VsProjectItemKindPhysicalFolder }; } string GetFirstSubDirectoryName(string include) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs new file mode 100644 index 0000000000..29e860a2e7 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs @@ -0,0 +1,29 @@ +// 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 SD = ICSharpCode.SharpDevelop.Project; + +namespace ICSharpCode.PackageManagement.EnvDTE +{ + public class ProjectKind + { + public ProjectKind(Project project) + { + this.Kind = GetProjectKind(project); + } + + string GetProjectKind(Project project) + { + string type = new ProjectType(project).Type; + if (type == ProjectType.CSharp) { + return SD.ProjectTypeGuids.CSharp; + } else if (type == ProjectType.VBNet) { + return SD.ProjectTypeGuids.VBNet; + } + return String.Empty; + } + + public string Kind { get; private set; } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs index 3d444882be..9615f1a8f2 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs @@ -2,34 +2,28 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; -using System.IO; namespace ICSharpCode.PackageManagement.EnvDTE { public class ProjectType { - Project project; + public static readonly string VBNet = "VB.NET"; + public static readonly string CSharp = "C#"; public ProjectType(Project project) { - this.project = project; - Type = String.Empty; - GetProjectType(); + this.Type = GetProjectType(project); } - void GetProjectType() + string GetProjectType(Project project) { - string extension = GetProjectFileExtension(); + string extension = project.GetLowercaseFileExtension(); if (extension == ".csproj") { - Type = "C#"; + return CSharp; } else if (extension == ".vbproj") { - Type = "VB.NET"; + return VBNet; } - } - - string GetProjectFileExtension() - { - return Path.GetExtension(project.FileName).ToLowerInvariant(); + return String.Empty; } public string Type { get; private set; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Projects.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Projects.cs index 4a0878bb06..cd533e8255 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Projects.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Projects.cs @@ -4,23 +4,39 @@ using System; using System.Collections; using System.Collections.Generic; +using SD = ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.PackageManagement.EnvDTE { public class Projects : MarshalByRefObject, IEnumerable { - public Projects() + IPackageManagementProjectService projectService; + + public Projects(IPackageManagementProjectService projectService) { + this.projectService = projectService; } public IEnumerator GetEnumerator() { - throw new NotImplementedException(); + return GetProjectsInSolution().GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } + + IEnumerable GetProjectsInSolution() + { + foreach (SD.MSBuildBasedProject msbuildProject in GetOpenMSBuildProjects()) { + yield return new Project(msbuildProject); + } + } + + IEnumerable GetOpenMSBuildProjects() + { + return projectService.GetOpenProjects(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs index 9e6e5e7857..99da56c5da 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Solution.cs @@ -8,11 +8,14 @@ namespace ICSharpCode.PackageManagement.EnvDTE { public class Solution : MarshalByRefObject { + IPackageManagementProjectService projectService; SD.Solution solution; - public Solution(SD.Solution solution) + public Solution(IPackageManagementProjectService projectService) { - this.solution = solution; + this.projectService = projectService; + this.solution = projectService.OpenSolution; + this.Projects = new Projects(projectService); } public string FullName { @@ -24,11 +27,9 @@ namespace ICSharpCode.PackageManagement.EnvDTE } public bool IsOpen { - get { throw new NotImplementedException(); } + get { return projectService.OpenSolution == solution; } } - public Projects Projects { - get { throw new NotImplementedException(); } - } + public Projects Projects { get; private set; } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/Package.cs b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/Package.cs index dd03f895df..05215141ba 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/Package.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/Package.cs @@ -2,6 +2,7 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using ICSharpCode.PackageManagement.EnvDTE; using Microsoft.VisualStudio.ExtensionManager; namespace Microsoft.VisualStudio.Shell @@ -10,11 +11,15 @@ namespace Microsoft.VisualStudio.Shell { public static object GetGlobalService(Type serviceType) { - //typeof(DTE) //typeof(IVsSolution) //typeof(SComponentModel) --> not used - console initializer. //typeof(SVsExtensionManager) - return new SVsExtensionManager(); + if (serviceType == typeof(DTE)) { + return new DTE(); + } else if (serviceType == typeof(SVsExtensionManager)) { + return new SVsExtensionManager(); + } + return null; } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index 28f50d35b8..3bb3f3a5dc 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -69,6 +69,7 @@ Properties\GlobalAssemblyInfo.cs + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs index 49a5a4de3a..9638d86a16 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemTests.cs @@ -33,8 +33,8 @@ namespace PackageManagement.Tests.EnvDTE CreateProjectItems(); msbuildProject.AddFile(@"src\program.cs"); - var directoryItem = projectItems.Item("src"); - var directoryProjectItems = directoryItem.ProjectItems; + ProjectItem directoryItem = projectItems.Item("src"); + ProjectItems directoryProjectItems = directoryItem.ProjectItems; string[] expectedFiles = new string[] { "program.cs" @@ -49,8 +49,8 @@ namespace PackageManagement.Tests.EnvDTE CreateProjectItems(); msbuildProject.AddDirectory(@"src\test"); - var directoryItem = projectItems.Item("src"); - var directoryProjectItems = directoryItem.ProjectItems; + ProjectItem directoryItem = projectItems.Item("src"); + ProjectItems directoryProjectItems = directoryItem.ProjectItems; var items = directoryProjectItems as IEnumerable; string[] expectedItems = new string[] { @@ -67,8 +67,8 @@ namespace PackageManagement.Tests.EnvDTE msbuildProject.AddFile(@"src\test.cs"); msbuildProject.AddFile("program.cs"); - var directoryItem = projectItems.Item("src"); - var directoryProjectItems = directoryItem.ProjectItems; + ProjectItem directoryItem = projectItems.Item("src"); + ProjectItems directoryProjectItems = directoryItem.ProjectItems; var items = directoryProjectItems as IEnumerable; string[] expectedItems = new string[] { @@ -84,9 +84,9 @@ namespace PackageManagement.Tests.EnvDTE CreateProjectItems(); msbuildProject.AddFile(@"src\test\test.cs"); - var directoryItem = projectItems.Item("src"); - var testDirectoryItem = directoryItem.ProjectItems.Item("test"); - var testDirectoryProjectItems = testDirectoryItem.ProjectItems; + ProjectItem directoryItem = projectItems.Item("src"); + ProjectItem testDirectoryItem = directoryItem.ProjectItems.Item("test"); + ProjectItems testDirectoryProjectItems = testDirectoryItem.ProjectItems; var items = testDirectoryProjectItems as IEnumerable; string[] expectedItems = new string[] { @@ -95,5 +95,32 @@ namespace PackageManagement.Tests.EnvDTE ProjectItemCollectionAssert.AreEqual(expectedItems, items); } + + [Test] + public void Kind_ProjectDirectory_ReturnsGuidForDirectory() + { + CreateProjectItems(); + msbuildProject.AddFile(@"src\program.cs"); + + ProjectItem directoryItem = projectItems.Item("src"); + + string kind = directoryItem.Kind; + + Assert.AreEqual(Constants.VsProjectItemKindPhysicalFolder, kind); + } + + [Test] + public void Kind_ProjectFile_ReturnsGuidForFile() + { + CreateProjectItems(); + msbuildProject.AddFile(@"src\program.cs"); + + ProjectItem directoryItem = projectItems.Item("src"); + ProjectItem fileItem = directoryItem.ProjectItems.Item("program.cs"); + + string kind = fileItem.Kind; + + Assert.AreEqual(Constants.VsProjectItemKindPhysicalFile, kind); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs index 836b5f46ff..23cc83dc26 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs @@ -320,5 +320,16 @@ namespace PackageManagement.Tests.EnvDTE bool contains = ex.Message.Contains("'test.cs'"); Assert.IsTrue(contains); } + + [Test] + public void Count_ProjectHasOneFile_ReturnsOne() + { + CreateProjectItems(); + msbuildProject.AddFile(@"Test.cs"); + + int count = projectItems.Count; + + Assert.AreEqual(1, count); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs index d7d7c69233..2141a08845 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs @@ -88,5 +88,49 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual("VB.NET", projectType); } + + [Test] + public void Type_ProjectHasUnknownProjectExtension_ReturnsEmptyString() + { + CreateProject(); + msbuildProject.FileName = @"c:\projects\myproject\test.unknown"; + + string projectType = project.Type; + + Assert.AreEqual(String.Empty, projectType); + } + + [Test] + public void Kind_ProjectIsCSharpProject_ReturnsCSharpProjectTypeGuid() + { + CreateProject(); + msbuildProject.FileName = @"d:\projects\myproject\test.csproj"; + + string kind = project.Kind; + + Assert.AreEqual(ProjectTypeGuids.CSharp, kind); + } + + [Test] + public void Kind_ProjectIsVBNetProject_ReturnsCSharpProjectTypeGuid() + { + CreateProject(); + msbuildProject.FileName = @"d:\projects\myproject\test.vbproj"; + + string kind = project.Kind; + + Assert.AreEqual(ProjectTypeGuids.VBNet, kind); + } + + [Test] + public void Kind_ProjectHasUnknownFileExtension_ReturnsEmptyString() + { + CreateProject(); + msbuildProject.FileName = @"d:\projects\myproject\test.unknown"; + + string kind = project.Kind; + + Assert.AreEqual(String.Empty, kind); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionTests.cs new file mode 100644 index 0000000000..fc6c2138d3 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/SolutionTests.cs @@ -0,0 +1,105 @@ +// 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.Linq; +using ICSharpCode.PackageManagement.Design; +using ICSharpCode.PackageManagement.EnvDTE; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; +using SD = ICSharpCode.SharpDevelop.Project; + +namespace PackageManagement.Tests.EnvDTE +{ + [TestFixture] + public class SolutionTests + { + Solution solution; + FakePackageManagementProjectService fakeProjectService; + SD.Solution sharpDevelopSolution; + + void CreateSolution() + { + fakeProjectService = new FakePackageManagementProjectService(); + sharpDevelopSolution = CreateSharpDevelopSolution(); + fakeProjectService.OpenSolution = sharpDevelopSolution; + solution = new Solution(fakeProjectService); + } + + SD.Solution CreateSharpDevelopSolution() + { + return new SD.Solution(new SD.MockProjectChangeWatcher()); + } + + SD.Solution OpenDifferentSolution() + { + SD.Solution solution = CreateSharpDevelopSolution(); + fakeProjectService.OpenSolution = solution; + return solution; + } + + void NoOpenSolution() + { + fakeProjectService.OpenSolution = null; + } + + void AddProjectToSolution(string projectName) + { + TestableProject project = ProjectHelper.CreateTestProject(projectName); + fakeProjectService.AddFakeProject(project); + } + + [Test] + public void IsOpen_NoOpenSolution_ReturnsFalse() + { + CreateSolution(); + NoOpenSolution(); + + bool open = solution.IsOpen; + + Assert.IsFalse(open); + } + + [Test] + public void IsOpen_SolutionOpenInSharpDevelop_ReturnsTrue() + { + CreateSolution(); + + bool open = solution.IsOpen; + + Assert.IsTrue(open); + } + + [Test] + public void IsOpen_DifferentSolutionOpenInSharpDevelop_ReturnsFalse() + { + CreateSolution(); + OpenDifferentSolution(); + + bool open = solution.IsOpen; + + Assert.IsFalse(open); + } + + [Test] + public void Projects_SolutionHasNoProjects_NoProjectsInCollection() + { + CreateSolution(); + + int count = solution.Projects.ToList().Count; + + Assert.AreEqual(0, count); + } + + [Test] + public void Projects_SolutionHasOnProject_OneProjectInCollection() + { + CreateSolution(); + AddProjectToSolution("MyProject"); + + Project project = solution.Projects.First(); + + Assert.AreEqual("MyProject", project.Name); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/PackageTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/PackageTests.cs index 3cadc87c3b..eb6ff4bbb2 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/PackageTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/PackageTests.cs @@ -2,6 +2,7 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using ICSharpCode.PackageManagement.EnvDTE; using Microsoft.VisualStudio.ExtensionManager; using Microsoft.VisualStudio.Shell; using NUnit.Framework; @@ -18,5 +19,21 @@ namespace PackageManagement.Tests.VisualStudio Assert.IsInstanceOf(typeof(SVsExtensionManager), extensionManager); } + + [Test] + public void GetGlobalService_GetDTE_ReturnsDTE() + { + object dte = Package.GetGlobalService(typeof(DTE)) as DTE; + + Assert.IsInstanceOf(typeof(DTE), dte); + } + + [Test] + public void GetGlobalService_UnknownType_ReturnsNull() + { + object instance = Package.GetGlobalService(typeof(PackageTests)); + + Assert.IsNull(instance); + } } }