diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index beaee2d803..84d9cce2b8 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -197,6 +197,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs index 705c91b400..a24b66015d 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs @@ -26,8 +26,7 @@ namespace ICSharpCode.PackageManagement solution = new PackageManagementSolution(registeredPackageRepositories, packageManagementEvents); consoleHost = new PackageManagementConsoleHost(solution, registeredPackageRepositories); projectBrowserRefresher = new ProjectBrowserRefresher(projectService, packageManagementEvents); - packageInitializationScriptsRunner = - new PackageInitializationScriptsRunnerForOpenedSolution(projectService, consoleHost); + packageInitializationScriptsRunner = new PackageInitializationScriptsRunnerForOpenedSolution(projectService); } public static PackageManagementOptions Options { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs index d7dc1e93e6..d69481ed97 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs @@ -16,7 +16,7 @@ namespace ICSharpCode.PackageManagement.Scripting PackageSource ActivePackageSource { get; set; } IScriptingConsole ScriptingConsole { get; set; } IPackageManagementSolution Solution { get; } - IPowerShellHost PowerShellHost { get; } + bool IsRunning { get; } void Clear(); void WritePrompt(); diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsConsole.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsConsole.cs new file mode 100644 index 0000000000..f546abde0d --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsConsole.cs @@ -0,0 +1,39 @@ +// 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.SharpDevelop; +using ICSharpCode.SharpDevelop.Gui; + +namespace ICSharpCode.PackageManagement.Scripting +{ + public class PackageInitializationScriptsConsole + { + IPackageManagementConsoleHost consoleHost; + + public PackageInitializationScriptsConsole( + IPackageManagementConsoleHost consoleHost) + { + this.consoleHost = consoleHost; + } + + public void ExecuteCommand(string command) + { + CreateConsolePadIfConsoleHostNotRunning(); + consoleHost.ScriptingConsole.SendLine(command); + } + + void CreateConsolePadIfConsoleHostNotRunning() + { + if (!consoleHost.IsRunning) { + CreateConsolePad(); + } + } + + protected virtual void CreateConsolePad() + { + PadDescriptor pad = WorkbenchSingleton.Workbench.GetPad(typeof(PackageManagementConsolePad)); + PackageManagementConsolePad consolePad = pad.PadContent.Control as PackageManagementConsolePad; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolution.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolution.cs index b86485d19d..274172b424 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolution.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolution.cs @@ -9,22 +9,24 @@ namespace ICSharpCode.PackageManagement.Scripting public class PackageInitializationScriptsRunnerForOpenedSolution { IPackageInitializationScriptsFactory scriptsFactory; - IPackageManagementConsoleHost consoleHost; + PackageInitializationScriptsConsole scriptsConsole; public PackageInitializationScriptsRunnerForOpenedSolution( - IPackageManagementProjectService projectService, - IPackageManagementConsoleHost consoleHost) - : this(projectService, consoleHost, new PackageInitializationScriptsFactory()) + IPackageManagementProjectService projectService) + : this( + projectService, + new PackageInitializationScriptsConsole(PackageManagementServices.ConsoleHost), + new PackageInitializationScriptsFactory()) { } public PackageInitializationScriptsRunnerForOpenedSolution( IPackageManagementProjectService projectService, - IPackageManagementConsoleHost consoleHost, + PackageInitializationScriptsConsole scriptsConsole, IPackageInitializationScriptsFactory scriptsFactory) { projectService.SolutionLoaded += SolutionLoaded; - this.consoleHost = consoleHost; + this.scriptsConsole = scriptsConsole; this.scriptsFactory = scriptsFactory; } @@ -49,7 +51,7 @@ namespace ICSharpCode.PackageManagement.Scripting void RunInitializePackagesCmdlet() { string command = "Invoke-InitializePackages"; - consoleHost.ScriptingConsole.SendLine(command); + scriptsConsole.ExecuteCommand(command); } IPackageInitializationScripts CreatePackageInitializationScripts(Solution solution) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs index 96b8d2fb6f..898a181c99 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs @@ -45,6 +45,7 @@ namespace ICSharpCode.PackageManagement.Scripting { } + public bool IsRunning { get; private set; } public IProject DefaultProject { get; set; } public PackageSource ActivePackageSource { @@ -55,10 +56,6 @@ namespace ICSharpCode.PackageManagement.Scripting public IScriptingConsole ScriptingConsole { get; set; } public IPackageManagementSolution Solution { get; private set; } - public IPowerShellHost PowerShellHost { - get { return powerShellHost; } - } - public void Dispose() { if (ScriptingConsole != null) { @@ -85,6 +82,7 @@ namespace ICSharpCode.PackageManagement.Scripting { thread = CreateThread(RunSynchronous); thread.Start(); + IsRunning = true; } protected virtual IThread CreateThread(ThreadStart threadStart) diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index 3afedbc469..febc8f97ab 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -98,6 +98,7 @@ + @@ -175,6 +176,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs index 05a986152e..b4e35e1e20 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs @@ -95,10 +95,6 @@ namespace PackageManagement.Tests.Helpers return PackageSourceToReturnFromGetActivePackageSource; } - public FakePowerShellHost FakePowerShellHost = new FakePowerShellHost(); - - public IPowerShellHost PowerShellHost { - get { return FakePowerShellHost; } - } + public bool IsRunning { get; set; } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageInitializationScriptsConsole.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageInitializationScriptsConsole.cs new file mode 100644 index 0000000000..3471136e46 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageInitializationScriptsConsole.cs @@ -0,0 +1,35 @@ +// 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 ICSharpCode.Scripting.Tests.Utils; + +namespace PackageManagement.Tests.Helpers +{ + public class TestablePackageInitializationScriptsConsole : PackageInitializationScriptsConsole + { + public FakePackageManagementConsoleHost FakeConsoleHost; + public FakeScriptingConsole FakeScriptingConsole; + + public TestablePackageInitializationScriptsConsole() + : this(new FakePackageManagementConsoleHost()) + { + } + + public TestablePackageInitializationScriptsConsole(FakePackageManagementConsoleHost consoleHost) + : base(consoleHost) + { + FakeConsoleHost = consoleHost; + FakeScriptingConsole = new FakeScriptingConsole(); + FakeConsoleHost.ScriptingConsole = FakeScriptingConsole; + } + + public bool IsCreateConsolePadCalled; + + protected override void CreateConsolePad() + { + IsCreateConsolePadCalled = true; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsConsoleTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsConsoleTests.cs new file mode 100644 index 0000000000..c495eefc11 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsConsoleTests.cs @@ -0,0 +1,62 @@ +// 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 ICSharpCode.Scripting.Tests.Utils; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; + +namespace PackageManagement.Tests.Scripting +{ + [TestFixture] + public class PackageInitializationScriptsConsoleTests + { + TestablePackageInitializationScriptsConsole console; + FakePackageManagementConsoleHost fakeConsoleHost; + FakeScriptingConsole fakeScriptingConsole; + + void CreateConsole() + { + console = new TestablePackageInitializationScriptsConsole(); + fakeConsoleHost = console.FakeConsoleHost; + fakeScriptingConsole = console.FakeScriptingConsole; + } + + [Test] + public void ExecuteCommand_ConsoleHostAlreadyRunning_CommandSentToScriptingConsole() + { + CreateConsole(); + fakeConsoleHost.IsRunning = true; + console.ExecuteCommand("Test"); + + string command = fakeScriptingConsole.TextPassedToSendLine; + + Assert.AreEqual("Test", command); + } + + [Test] + public void ExecuteCommand_ConsoleHostAlreadyRunning_ConsolePadIsNotCreated() + { + CreateConsole(); + fakeConsoleHost.IsRunning = true; + console.ExecuteCommand("Test"); + + bool created = console.IsCreateConsolePadCalled; + + Assert.IsFalse(created); + } + + [Test] + public void ExecuteCommand_ConsoleHostNotRunning_ConsolePadIsCreated() + { + CreateConsole(); + fakeConsoleHost.IsRunning = false; + console.ExecuteCommand("Test"); + + bool created = console.IsCreateConsolePadCalled; + + Assert.IsTrue(created); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolutionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolutionTests.cs index 0c9648bc73..ef40eeb225 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolutionTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolutionTests.cs @@ -19,15 +19,16 @@ namespace PackageManagement.Tests.Scripting PackageInitializationScriptsRunnerForOpenedSolution runner; FakePackageManagementConsoleHost fakeConsoleHost; FakeScriptingConsole fakeScriptingConsole; + TestablePackageInitializationScriptsConsole scriptsConsole; void CreateRunner() { fakeProjectService = new FakePackageManagementProjectService(); - fakeConsoleHost = new FakePackageManagementConsoleHost(); - fakeScriptingConsole = new FakeScriptingConsole(); - fakeConsoleHost.ScriptingConsole = fakeScriptingConsole; + scriptsConsole = new TestablePackageInitializationScriptsConsole(); + fakeConsoleHost = scriptsConsole.FakeConsoleHost; + fakeScriptingConsole = scriptsConsole.FakeScriptingConsole; fakeScriptsFactory = new FakePackageInitializationScriptsFactory(); - runner = new PackageInitializationScriptsRunnerForOpenedSolution(fakeProjectService, fakeConsoleHost, fakeScriptsFactory); + runner = new PackageInitializationScriptsRunnerForOpenedSolution(fakeProjectService, scriptsConsole, fakeScriptsFactory); } Solution OpenSolution() diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs index b118cd7985..7ae130a5fc 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs @@ -450,5 +450,24 @@ namespace PackageManagement.Tests.Scripting CollectionAssert.AreEqual(expectedTextPassedToWrite, actualTextPassedToWrite); } + + [Test] + public void IsRunning_BeforeRunCalled_ReturnsFalse() + { + CreateHost(); + bool running = host.IsRunning; + + Assert.IsFalse(running); + } + + [Test] + public void IsRunning_AfterRunCalled_ReturnsFalse() + { + CreateHost(); + RunHost(); + bool running = host.IsRunning; + + Assert.IsTrue(running); + } } }