diff --git a/src/AddIns/Misc/PackageManagement/PackageManagement.sln b/src/AddIns/Misc/PackageManagement/PackageManagement.sln index dad515b04d..c53601c29b 100644 --- a/src/AddIns/Misc/PackageManagement/PackageManagement.sln +++ b/src/AddIns/Misc/PackageManagement/PackageManagement.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -# SharpDevelop 4.3.0.8816-alpha +# SharpDevelop 4.3.0.8820-alpha Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement", "Project\PackageManagement.csproj", "{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement.Tests", "Test\PackageManagement.Tests.csproj", "{56E98A01-8398-4A08-9578-C7337711A52B}" diff --git a/src/AddIns/Misc/PackageManagement/PowerShell/Project/Src/IPowerShellHost.cs b/src/AddIns/Misc/PackageManagement/PowerShell/Project/Src/IPowerShellHost.cs index 875a5b0ff4..500415a2a8 100644 --- a/src/AddIns/Misc/PackageManagement/PowerShell/Project/Src/IPowerShellHost.cs +++ b/src/AddIns/Misc/PackageManagement/PowerShell/Project/Src/IPowerShellHost.cs @@ -14,5 +14,6 @@ namespace ICSharpCode.PackageManagement.Scripting void SetRemoteSignedExecutionPolicy(); void UpdateFormatting(IEnumerable formattingFiles); void ExecuteCommand(string command); + void SetDefaultRunspace(); } } diff --git a/src/AddIns/Misc/PackageManagement/PowerShell/Project/Src/PowerShellHost.cs b/src/AddIns/Misc/PackageManagement/PowerShell/Project/Src/PowerShellHost.cs index f064ecbf1a..6e61fa7b3d 100644 --- a/src/AddIns/Misc/PackageManagement/PowerShell/Project/Src/PowerShellHost.cs +++ b/src/AddIns/Misc/PackageManagement/PowerShell/Project/Src/PowerShellHost.cs @@ -174,5 +174,10 @@ namespace ICSharpCode.PackageManagement.Scripting scriptingConsole.WriteLine(ex.Message, ScriptingStyle.Error); } } + + public void SetDefaultRunspace() + { + Runspace.DefaultRunspace = runspace; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index c0e653b7cb..6cc064b6fc 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -37,6 +37,9 @@ + + ..\RequiredLibraries\NuGet.Console.Types.dll + ..\RequiredLibraries\NuGet.Core.dll @@ -319,6 +322,7 @@ RegisteredProjectTemplatePackageSourcesView.xaml Code + @@ -423,12 +427,15 @@ + + + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ConsoleInitializer.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ConsoleInitializer.cs new file mode 100644 index 0000000000..0965e846a8 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ConsoleInitializer.cs @@ -0,0 +1,24 @@ +// 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.Threading.Tasks; +using NuGetConsole; + +namespace ICSharpCode.PackageManagement.Scripting +{ + public class ConsoleInitializer : IConsoleInitializer + { + IPackageManagementConsoleHost consoleHost; + + public ConsoleInitializer(IPackageManagementConsoleHost consoleHost) + { + this.consoleHost = consoleHost; + } + + public Task Initialize() + { + return Task.Factory.StartNew(() => new Action(consoleHost.SetDefaultRunspace)); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs index bcff95c424..8a67d71534 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs @@ -24,6 +24,8 @@ namespace ICSharpCode.PackageManagement.Scripting void ShutdownConsole(); void ExecuteCommand(string command); + void SetDefaultRunspace(); + IPackageManagementProject GetProject(string packageSource, string projectName); IPackageManagementProject GetProject(IPackageRepository sourceRepository, string projectName); PackageSource GetActivePackageSource(string source); diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs index 80bf6bde47..790133c5e8 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs @@ -255,5 +255,10 @@ namespace ICSharpCode.PackageManagement.Scripting { return registeredRepositories.CreateRepository(packageSource); } + + public void SetDefaultRunspace() + { + powerShellHost.SetDefaultRunspace(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs index 5444614a35..0b7142231c 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellMissingConsoleHost.cs @@ -76,5 +76,9 @@ namespace ICSharpCode.PackageManagement.Scripting { return null; } + + public void SetDefaultRunspace() + { + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/ComponentModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/ComponentModel.cs new file mode 100644 index 0000000000..6163d9b12e --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/ComponentModel.cs @@ -0,0 +1,46 @@ +// 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.PackageManagement.Scripting; +using Microsoft.VisualStudio.ComponentModelHost; +using NuGetConsole; + +namespace ICSharpCode.PackageManagement.VisualStudio +{ + public class ComponentModel : SComponentModel, IComponentModel + { + IPackageManagementConsoleHost consoleHost; + + public ComponentModel(IPackageManagementConsoleHost consoleHost) + { + this.consoleHost = consoleHost; + } + + public ComponentModel() + { + } + + public T GetService() + where T : class + { + return GetService(typeof(T)) as T; + } + + object GetService(Type type) + { + if (type.FullName == typeof(IConsoleInitializer).FullName) { + return new ConsoleInitializer(GetConsoleHost()); + } + return null; + } + + protected virtual IPackageManagementConsoleHost GetConsoleHost() + { + if (consoleHost != null) { + return consoleHost; + } + return PackageManagementServices.ConsoleHost; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/IComponentModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/IComponentModel.cs new file mode 100644 index 0000000000..fbc8cc5684 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/IComponentModel.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 Microsoft.VisualStudio.ComponentModelHost +{ + public interface IComponentModel + { + T GetService() + where T : class; + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/Package.cs b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/Package.cs index 75ec928424..c82acfebfd 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/Package.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/Package.cs @@ -4,6 +4,7 @@ using System; using ICSharpCode.PackageManagement.EnvDTE; using ICSharpCode.PackageManagement.VisualStudio; +using Microsoft.VisualStudio.ComponentModelHost; using Microsoft.VisualStudio.ExtensionManager; using Microsoft.VisualStudio.Shell.Interop; @@ -13,13 +14,14 @@ namespace Microsoft.VisualStudio.Shell { public static object GetGlobalService(Type serviceType) { - //typeof(SComponentModel) --> not used - console initializer. if (serviceType == typeof(DTE)) { return new DTE(); } else if (serviceType == typeof(SVsExtensionManager)) { return new SVsExtensionManager(); } else if (serviceType == typeof(IVsSolution)) { return new VsSolution(); + } else if (serviceType == typeof(SComponentModel)) { + return new ComponentModel(); } return null; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/SComponentModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/SComponentModel.cs new file mode 100644 index 0000000000..49eb450eab --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/SComponentModel.cs @@ -0,0 +1,11 @@ +// 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 Microsoft.VisualStudio.ComponentModelHost +{ + public interface SComponentModel + { + } +} diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll new file mode 100644 index 0000000000..cf1f4f3b4b Binary files /dev/null and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll differ diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index 1ac538f032..7772e216c2 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -38,6 +38,9 @@ + + ..\RequiredLibraries\NuGet.Console.Types.dll + ..\RequiredLibraries\NuGet.Core.dll @@ -255,6 +258,7 @@ + @@ -300,6 +304,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs index 9be5607810..3db572c381 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs @@ -129,5 +129,12 @@ namespace PackageManagement.Tests.Helpers PackageSourcePassedToGetRepository = packageSource; return FakePackageRepository; } + + public bool IsSetDefaultRunspaceCalled; + + public void SetDefaultRunspace() + { + IsSetDefaultRunspaceCalled = true; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePowerShellHost.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePowerShellHost.cs index 3131a2d0dd..8bc783803d 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePowerShellHost.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePowerShellHost.cs @@ -64,5 +64,12 @@ namespace PackageManagement.Tests.Helpers { throw new NotImplementedException(); } + + public bool IsSetDefaultRunspaceCalled; + + public void SetDefaultRunspace() + { + IsSetDefaultRunspaceCalled = true; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/ConsoleInitializerTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/ConsoleInitializerTests.cs new file mode 100644 index 0000000000..d465a40412 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/ConsoleInitializerTests.cs @@ -0,0 +1,33 @@ +// 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.PackageManagement.Scripting; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; + +namespace PackageManagement.Tests.Scripting +{ + [TestFixture] + public class ConsoleInitializerTests + { + ConsoleInitializer initializer; + FakePackageManagementConsoleHost fakeConsoleHost; + + void CreateConsoleInitializer() + { + fakeConsoleHost = new FakePackageManagementConsoleHost(); + initializer = new ConsoleInitializer(fakeConsoleHost); + } + + [Test] + public void Initialize_RunInitializeTask_SetsDefaultRunspaceForConsoleHost() + { + CreateConsoleInitializer(); + + initializer.Initialize().Result(); + + Assert.IsTrue(fakeConsoleHost.IsSetDefaultRunspaceCalled); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs index 20d14baffc..84ab35a291 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs @@ -647,5 +647,16 @@ namespace PackageManagement.Tests.Scripting Assert.AreEqual(expectedPackageSource, packageSource); } + + [Test] + public void SetDefaultRunspace_AfterHostIsRun_SetsDefaultRunspaceOnPowershellHost() + { + CreateHost(); + RunHost(); + + host.SetDefaultRunspace(); + + Assert.IsTrue(powerShellHost.IsSetDefaultRunspaceCalled); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/ComponentModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/ComponentModelTests.cs new file mode 100644 index 0000000000..2e07a3ee08 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/ComponentModelTests.cs @@ -0,0 +1,34 @@ +// 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.PackageManagement.VisualStudio; +using NuGetConsole; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; + +namespace PackageManagement.Tests.VisualStudio +{ + [TestFixture] + public class ComponentModelTests + { + ComponentModel model; + FakePackageManagementConsoleHost fakeConsoleHost; + + void CreateComponentModel() + { + fakeConsoleHost = new FakePackageManagementConsoleHost(); + model = new ComponentModel(fakeConsoleHost); + } + + [Test] + public void GetService_GetIConsoleInitializer_ReturnsConsoleInitializer() + { + CreateComponentModel(); + + IConsoleInitializer initializer = model.GetService(); + + Assert.IsNotNull(initializer); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/PackageTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/PackageTests.cs index 4fbf9adcee..9456f17f82 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/PackageTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/PackageTests.cs @@ -2,10 +2,13 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using ICSharpCode.Core; using ICSharpCode.PackageManagement.EnvDTE; +using Microsoft.VisualStudio.ComponentModelHost; using Microsoft.VisualStudio.ExtensionManager; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; +using NuGetConsole; using NUnit.Framework; namespace PackageManagement.Tests.VisualStudio @@ -13,6 +16,14 @@ namespace PackageManagement.Tests.VisualStudio [TestFixture] public class PackageTests { + [TestFixtureSetUp] + public void InitFixture() + { + if (!PropertyService.Initialized) { + PropertyService.InitializeService(String.Empty, String.Empty, String.Empty); + } + } + [Test] public void GetGlobalService_GetExtensionManagerService_ReturnsExtensionManager() { @@ -44,5 +55,21 @@ namespace PackageManagement.Tests.VisualStudio Assert.IsInstanceOf(typeof(IVsSolution), solution); } + + [Test] + public void GetGlobalService_GetSComponentModel_ReturnsSComponentModel() + { + object model = Package.GetGlobalService(typeof(SComponentModel)) as SComponentModel; + + Assert.IsInstanceOf(typeof(SComponentModel), model); + } + + [Test] + public void GetGlobalService_GetSComponentModel_ReturnsIComponentModel() + { + object model = Package.GetGlobalService(typeof(SComponentModel)) as IComponentModel; + + Assert.IsInstanceOf(typeof(IComponentModel), model); + } } }