diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
index 93dc3283f2..23af870ce1 100644
--- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
+++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
@@ -204,6 +204,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ClearPackageManagementConsoleHostCommand.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ClearPackageManagementConsoleHostCommand.cs
new file mode 100644
index 0000000000..ed12214077
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/ClearPackageManagementConsoleHostCommand.cs
@@ -0,0 +1,22 @@
+// 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.Scripting
+{
+ public class ClearPackageManagementConsoleHostCommand
+ {
+ IPackageManagementConsoleHost consoleHost;
+
+ public ClearPackageManagementConsoleHostCommand(IPackageManagementConsoleHost consoleHost)
+ {
+ this.consoleHost = consoleHost;
+ }
+
+ public void ClearHost()
+ {
+ consoleHost.Clear();
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs
index e255084474..2c09afe828 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageManagementConsoleHost.cs
@@ -18,6 +18,7 @@ namespace ICSharpCode.PackageManagement.Scripting
IPackageManagementSolution Solution { get; }
void Clear();
+ void WritePrompt();
void Run();
IPackageManagementProject GetProject(string packageSource, string projectName);
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPowerShellHostFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPowerShellHostFactory.cs
index 678886df8b..1101ca6d76 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPowerShellHostFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPowerShellHostFactory.cs
@@ -8,6 +8,8 @@ namespace ICSharpCode.PackageManagement.Scripting
{
public interface IPowerShellHostFactory
{
- IPowerShellHost CreatePowerShellHost(IScriptingConsole scriptingConsole);
+ IPowerShellHost CreatePowerShellHost(
+ IPackageManagementConsoleHost consoleHost,
+ object privateData);
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs
index 3d6585d09a..1bda81b421 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs
@@ -70,7 +70,11 @@ namespace ICSharpCode.PackageManagement.Scripting
public void Clear()
{
ScriptingConsole.Clear();
- WritePrompt();
+ }
+
+ public void WritePrompt()
+ {
+ ScriptingConsole.Write(prompt, ScriptingStyle.Prompt);
}
public void Run()
@@ -98,17 +102,13 @@ namespace ICSharpCode.PackageManagement.Scripting
AddModulesToImport();
powerShellHost.SetRemoteSignedExecutionPolicy();
UpdateFormatting();
- }
-
- void UpdateFormatting()
- {
- IEnumerable fileNames = addinPath.GetPowerShellFormattingFileNames();
- powerShellHost.UpdateFormatting(fileNames);
+ RedefineClearHostFunction();
}
void CreatePowerShellHost()
{
- powerShellHost = powerShellHostFactory.CreatePowerShellHost(ScriptingConsole);
+ var clearConsoleHostCommand = new ClearPackageManagementConsoleHostCommand(this);
+ powerShellHost = powerShellHostFactory.CreatePowerShellHost(this, clearConsoleHostCommand);
}
void AddModulesToImport()
@@ -117,6 +117,18 @@ namespace ICSharpCode.PackageManagement.Scripting
powerShellHost.ModulesToImport.Add(module);
}
+ void UpdateFormatting()
+ {
+ IEnumerable fileNames = addinPath.GetPowerShellFormattingFileNames();
+ powerShellHost.UpdateFormatting(fileNames);
+ }
+
+ void RedefineClearHostFunction()
+ {
+ string command = "function Clear-Host { $host.PrivateData.ClearHost() }";
+ powerShellHost.ExecuteCommand(command);
+ }
+
void WriteInfoBeforeFirstPrompt()
{
WriteNuGetVersionInfo();
@@ -151,11 +163,6 @@ namespace ICSharpCode.PackageManagement.Scripting
return "Type 'get-help NuGet' for more information.";
}
- void WritePrompt()
- {
- ScriptingConsole.Write(prompt, ScriptingStyle.Prompt);
- }
-
void ProcessUserCommands()
{
while (true) {
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleViewModel.cs
index d7ff5a6e91..39a9f7b62f 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleViewModel.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleViewModel.cs
@@ -76,6 +76,7 @@ namespace ICSharpCode.PackageManagement.Scripting
public void ClearConsole()
{
consoleHost.Clear();
+ consoleHost.WritePrompt();
}
void UpdatePackageSourceViewModels()
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellHost.cs
index fd33c9f94d..cb2ba192b3 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellHost.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellHost.cs
@@ -17,18 +17,26 @@ namespace ICSharpCode.PackageManagement.Scripting
{
public class PowerShellHost : PSHost, IPowerShellHost
{
- IScriptingConsole scriptingConsole;
+ IPackageManagementConsoleHost consoleHost;
CultureInfo currentUICulture = Thread.CurrentThread.CurrentUICulture;
CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
Guid instanceId = Guid.NewGuid();
Runspace runspace;
PowerShellHostUserInterface userInterface;
List modulesToImport = new List();
+ PSObject privateData;
- public PowerShellHost(IScriptingConsole scriptingConsole)
+ public PowerShellHost(
+ IPackageManagementConsoleHost consoleHost,
+ object privateData)
{
- this.scriptingConsole = scriptingConsole;
- userInterface = new PowerShellHostUserInterface(scriptingConsole);
+ this.consoleHost = consoleHost;
+ this.privateData = new PSObject(privateData);
+ userInterface = new PowerShellHostUserInterface(consoleHost.ScriptingConsole);
+ }
+
+ public override PSObject PrivateData {
+ get { return privateData; }
}
public IList ModulesToImport {
@@ -57,7 +65,7 @@ namespace ICSharpCode.PackageManagement.Scripting
pipeline.Invoke();
} catch (Exception ex) {
- scriptingConsole.WriteLine(ex.Message, ScriptingStyle.Error);
+ consoleHost.ScriptingConsole.WriteLine(ex.Message, ScriptingStyle.Error);
}
}
@@ -155,7 +163,7 @@ namespace ICSharpCode.PackageManagement.Scripting
pipeline.Invoke(input);
} catch (Exception ex) {
- scriptingConsole.WriteLine(ex.Message, ScriptingStyle.Error);
+ consoleHost.ScriptingConsole.WriteLine(ex.Message, ScriptingStyle.Error);
}
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellHostFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellHostFactory.cs
index 77bfe4a77b..d1f7520e56 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellHostFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellHostFactory.cs
@@ -8,9 +8,11 @@ namespace ICSharpCode.PackageManagement.Scripting
{
public class PowerShellHostFactory : IPowerShellHostFactory
{
- public IPowerShellHost CreatePowerShellHost(IScriptingConsole scriptingConsole)
+ public IPowerShellHost CreatePowerShellHost(
+ IPackageManagementConsoleHost consoleHost,
+ object privateData)
{
- return new PowerShellHost(scriptingConsole);
+ return new PowerShellHost(consoleHost, privateData);
}
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
index 738154da32..0b888ff823 100644
--- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
+++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
@@ -175,6 +175,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs
index 74608a691b..8b9906065a 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs
@@ -27,6 +27,7 @@ namespace PackageManagement.Tests.Helpers
public bool IsDisposeCalled;
public bool IsClearCalled;
+ public bool IsWritePromptCalled;
public bool IsRunCalled;
public void Dispose()
@@ -39,6 +40,11 @@ namespace PackageManagement.Tests.Helpers
IsClearCalled = true;
}
+ public void WritePrompt()
+ {
+ IsWritePromptCalled = true;
+ }
+
public void Run()
{
IsRunCalled = true;
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePowerShellHostFactory.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePowerShellHostFactory.cs
index 93465b9f3e..96fe51e897 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePowerShellHostFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePowerShellHostFactory.cs
@@ -9,12 +9,16 @@ namespace PackageManagement.Tests.Helpers
{
public class FakePowerShellHostFactory : IPowerShellHostFactory
{
- public IScriptingConsole ScriptingConsolePassedToCreatePowerShellHost;
+ public IPackageManagementConsoleHost ConsoleHostPassedToCreatePowerShellHost;
+ public object PrivateDataPassedToCreatePowerShellHost;
public FakePowerShellHost FakePowerShellHost = new FakePowerShellHost();
- public IPowerShellHost CreatePowerShellHost(IScriptingConsole scriptingConsole)
+ public IPowerShellHost CreatePowerShellHost(
+ IPackageManagementConsoleHost consoleHost,
+ object privateData)
{
- ScriptingConsolePassedToCreatePowerShellHost = scriptingConsole;
+ ConsoleHostPassedToCreatePowerShellHost = consoleHost;
+ PrivateDataPassedToCreatePowerShellHost = privateData;
return FakePowerShellHost;
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/ClearPackageManagementConsoleHostCommandTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/ClearPackageManagementConsoleHostCommandTests.cs
new file mode 100644
index 0000000000..51ac35ead0
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/ClearPackageManagementConsoleHostCommandTests.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 ClearPackageManagementConsoleHostCommandTests
+ {
+ ClearPackageManagementConsoleHostCommand command;
+ FakePackageManagementConsoleHost fakeConsoleHost;
+
+ void CreateCommand()
+ {
+ fakeConsoleHost = new FakePackageManagementConsoleHost();
+ command = new ClearPackageManagementConsoleHostCommand(fakeConsoleHost);
+ }
+
+ [Test]
+ public void ClearHost_MethodCalled_ClearsConsoleHost()
+ {
+ CreateCommand();
+ command.ClearHost();
+
+ bool called = fakeConsoleHost.IsClearCalled;
+ Assert.IsTrue(called);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs
index 5e5fd2d827..b118cd7985 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs
@@ -92,10 +92,21 @@ namespace PackageManagement.Tests.Scripting
CreateHost();
RunHost();
- var actualConsole = host.FakePowerShellHostFactory.ScriptingConsolePassedToCreatePowerShellHost;
- var expectedConsole = scriptingConsole;
+ var actualHost = host.FakePowerShellHostFactory.ConsoleHostPassedToCreatePowerShellHost;
+ var expectedHost = host;
- Assert.AreSame(expectedConsole, actualConsole);
+ Assert.AreSame(expectedHost, actualHost);
+ }
+
+ [Test]
+ public void Run_ConsoleExitsOnFirstRead_PrivateDataIsSetToClearConsoleHostCommandObject()
+ {
+ CreateHost();
+ RunHost();
+
+ var privateDataObject = host.FakePowerShellHostFactory.PrivateDataPassedToCreatePowerShellHost;
+
+ Assert.IsInstanceOf(typeof(ClearPackageManagementConsoleHostCommand), privateDataObject);
}
[Test]
@@ -107,6 +118,20 @@ namespace PackageManagement.Tests.Scripting
Assert.IsTrue(powerShellHost.IsSetRemoteSignedExecutionPolicyCalled);
}
+ [Test]
+ public void Run_ConsoleExitsOnFirstRead_ClearHostFunctionIsRedefined()
+ {
+ CreateHost();
+ RunHost();
+
+ string expectedExecutedScript =
+ "function Clear-Host { $host.PrivateData.ClearHost() }";
+
+ bool executed = powerShellHost.AllCommandsPassedToExecuteCommand.Contains(expectedExecutedScript);
+
+ Assert.IsTrue(executed);
+ }
+
[Test]
public void Run_ConsoleExitsOnFirstRead_PromptTextWrittenToConsole()
{
@@ -151,17 +176,22 @@ namespace PackageManagement.Tests.Scripting
}
[Test]
- public void Run_ConsoleExitsOnFirstRead_NoCommandsPassedToPowerShellHost()
+ public void Run_TwoCommandsEnteredByUser_FirstCommandExecuted()
{
CreateHost();
- powerShellHost.CommandPassedToExecuteCommand = "test";
+ var commands = new string[] { "one", "two" };
+ scriptingConsole.AllTextToReturnFromReadLine.AddRange(commands);
+
+ host.ScriptingConsole = scriptingConsole;
RunHost();
- Assert.AreEqual("test", powerShellHost.CommandPassedToExecuteCommand);
+ bool executed = powerShellHost.AllCommandsPassedToExecuteCommand.Contains("one");
+
+ Assert.IsTrue(executed);
}
[Test]
- public void Run_TwoCommandsEnteredByUser_BothCommandsExecuted()
+ public void Run_TwoCommandsEnteredByUser_SecondCommandExecuted()
{
CreateHost();
var commands = new string[] { "one", "two" };
@@ -170,7 +200,9 @@ namespace PackageManagement.Tests.Scripting
host.ScriptingConsole = scriptingConsole;
RunHost();
- Assert.AreEqual(commands, powerShellHost.AllCommandsPassedToExecuteCommand);
+ bool executed = powerShellHost.AllCommandsPassedToExecuteCommand.Contains("two");
+
+ Assert.IsTrue(executed);
}
[Test]
@@ -407,10 +439,11 @@ namespace PackageManagement.Tests.Scripting
}
[Test]
- public void Clear_ConsoleWindowHasOutputText_PromptWritten()
+ public void WritePrompt_ConsoleWindowHasOutputText_PromptWritten()
{
CreateHost();
host.Clear();
+ host.WritePrompt();
var expectedTextPassedToWrite = new String[] { "PM> "};
var actualTextPassedToWrite = scriptingConsole.AllTextPassedToWrite;
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleViewModelTests.cs
index ae810f4dd5..67a77e5b4d 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleViewModelTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleViewModelTests.cs
@@ -476,6 +476,15 @@ namespace PackageManagement.Tests.Scripting
Assert.IsTrue(consoleHost.IsClearCalled);
}
+ [Test]
+ public void ClearConsole_CommandExecuted_WritesPrompt()
+ {
+ CreateViewModel();
+ viewModel.ClearConsole();
+
+ Assert.IsTrue(consoleHost.IsWritePromptCalled);
+ }
+
[Test]
public void Constructor_NewViewModelCreated_ConsoleSetOnConsoleHost()
{