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