diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
index 11bd3d4e7d..67a029a19d 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
@@ -49,6 +49,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeInitializePackagesCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeInitializePackagesCmdlet.cs
index 248df45ee3..e2e33cb3ca 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeInitializePackagesCmdlet.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeInitializePackagesCmdlet.cs
@@ -42,19 +42,7 @@ namespace ICSharpCode.PackageManagement.Cmdlets
void UpdateWorkingDirectory()
{
- string directory = GetWorkingDirectory();
- UpdateWorkingDirectory(directory);
- }
-
- string GetWorkingDirectory()
- {
- var workingDirectory = new PowerShellWorkingDirectory(projectService);
- return workingDirectory.GetWorkingDirectory();
- }
-
- void UpdateWorkingDirectory(string directory)
- {
- string command = String.Format("Set-Location '{0}'", directory);
+ string command = "Invoke-UpdateWorkingDirectory";
InvokeScript(command);
}
@@ -63,7 +51,7 @@ namespace ICSharpCode.PackageManagement.Cmdlets
IPackageInitializationScripts scripts = GetPackageInitializationScripts();
if (scripts.Any()) {
scripts.Run();
- }
+ }
}
IPackageInitializationScripts GetPackageInitializationScripts()
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeUpdateWorkingDirectoryCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeUpdateWorkingDirectoryCmdlet.cs
new file mode 100644
index 0000000000..2d0f2f09f5
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeUpdateWorkingDirectoryCmdlet.cs
@@ -0,0 +1,55 @@
+// 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.Management.Automation;
+using ICSharpCode.PackageManagement.Scripting;
+
+namespace ICSharpCode.PackageManagement.Cmdlets
+{
+ [Cmdlet(VerbsLifecycle.Invoke, "UpdateWorkingDirectory", DefaultParameterSetName = ParameterAttribute.AllParameterSets)]
+ public class InvokeUpdateWorkingDirectoryCmdlet : PackageManagementCmdlet
+ {
+ IPackageManagementProjectService projectService;
+
+ public InvokeUpdateWorkingDirectoryCmdlet()
+ : this(
+ PackageManagementServices.ProjectService,
+ PackageManagementServices.ConsoleHost,
+ null)
+ {
+ }
+
+ public InvokeUpdateWorkingDirectoryCmdlet(
+ IPackageManagementProjectService projectService,
+ IPackageManagementConsoleHost consoleHost,
+ ICmdletTerminatingError terminatingError)
+ : base(consoleHost, terminatingError)
+ {
+ this.projectService = projectService;
+ }
+
+ protected override void ProcessRecord()
+ {
+ UpdateWorkingDirectory();
+ }
+
+ void UpdateWorkingDirectory()
+ {
+ string directory = GetWorkingDirectory();
+ UpdateWorkingDirectory(directory);
+ }
+
+ string GetWorkingDirectory()
+ {
+ var workingDirectory = new PowerShellWorkingDirectory(projectService);
+ return workingDirectory.GetWorkingDirectory();
+ }
+
+ void UpdateWorkingDirectory(string directory)
+ {
+ string command = String.Format("Set-Location '{0}'", directory);
+ InvokeScript(command);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableInvokeUpdateWorkingDirectoryCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableInvokeUpdateWorkingDirectoryCmdlet.cs
new file mode 100644
index 0000000000..05e066b289
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableInvokeUpdateWorkingDirectoryCmdlet.cs
@@ -0,0 +1,54 @@
+// 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.Cmdlets;
+using ICSharpCode.PackageManagement.Design;
+using ICSharpCode.SharpDevelop.Project;
+using PackageManagement.Tests.Helpers;
+
+namespace PackageManagement.Cmdlets.Tests.Helpers
+{
+ public class TestableInvokeUpdateWorkingDirectoryCmdlet : InvokeUpdateWorkingDirectoryCmdlet
+ {
+ public FakeCmdletTerminatingError FakeCmdletTerminatingError;
+ public FakePackageManagementConsoleHost FakePackageManagementConsoleHost;
+ public FakePackageManagementProjectService FakeProjectService;
+ public Solution Solution;
+
+ public TestableInvokeUpdateWorkingDirectoryCmdlet()
+ : this(
+ new FakePackageManagementProjectService(),
+ new FakePackageManagementConsoleHost(),
+ new FakeCmdletTerminatingError())
+ {
+ }
+
+ public TestableInvokeUpdateWorkingDirectoryCmdlet(
+ FakePackageManagementProjectService projectService,
+ FakePackageManagementConsoleHost consoleHost,
+ FakeCmdletTerminatingError cmdletTerminatingError)
+ : base(projectService, consoleHost, cmdletTerminatingError)
+ {
+ this.FakeProjectService = projectService;
+ this.FakePackageManagementConsoleHost = consoleHost;
+ this.FakeCmdletTerminatingError = cmdletTerminatingError;
+
+ Solution = new Solution();
+ Solution.FileName = @"d:\projects\MyProject\MyProject.sln";
+ projectService.OpenSolution = Solution;
+ }
+
+ public void CallProcessRecord()
+ {
+ base.ProcessRecord();
+ }
+
+ public string ScriptPassedToInvokeScript;
+
+ public override void InvokeScript(string script)
+ {
+ ScriptPassedToInvokeScript = script;
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj
index 94f7b7c740..caa4c79a62 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj
@@ -50,6 +50,7 @@
+
@@ -59,6 +60,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeInitializePackagesCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeInitializePackagesCmdletTests.cs
index 44c6e9ad38..9ba71e2f86 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeInitializePackagesCmdletTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeInitializePackagesCmdletTests.cs
@@ -91,16 +91,15 @@ namespace PackageManagement.Cmdlets.Tests
}
[Test]
- public void ProcessRecord_SolutionHasPackageInitializationScripts_PowerShellWorkingDirectoryIsSetToSolutionDirectory()
+ public void ProcessRecord_SolutionHasPackageInitializationScripts_PowerShellWorkingDirectoryIsUpdated()
{
CreateCmdlet();
- SolutionHasPackageInitializationScripts();
- fakeProjectService.OpenSolution.FileName = @"d:\projects\MySolution\MySolution.sln";
+ fakeProjectService.OpenSolution = null;
RunCmdlet();
string commandExecuted = cmdlet.ScriptPassedToInvokeScript;
- string expectedCommandExecuted = @"Set-Location 'd:\projects\MySolution'";
+ string expectedCommandExecuted = @"Invoke-UpdateWorkingDirectory";
Assert.AreEqual(expectedCommandExecuted, commandExecuted);
}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeUpdateWorkingDirectoryCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeUpdateWorkingDirectoryCmdletTests.cs
new file mode 100644
index 0000000000..1c438411ec
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeUpdateWorkingDirectoryCmdletTests.cs
@@ -0,0 +1,58 @@
+// 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.Design;
+using NUnit.Framework;
+using PackageManagement.Cmdlets.Tests.Helpers;
+
+namespace PackageManagement.Cmdlets.Tests
+{
+ [TestFixture]
+ public class InvokeUpdateWorkingDirectoryCmdletTests
+ {
+ TestableInvokeUpdateWorkingDirectoryCmdlet cmdlet;
+ FakeCmdletTerminatingError fakeTerminatingError;
+ FakePackageManagementProjectService fakeProjectService;
+
+ void CreateCmdlet()
+ {
+ cmdlet = new TestableInvokeUpdateWorkingDirectoryCmdlet();
+ fakeProjectService = cmdlet.FakeProjectService;
+ fakeTerminatingError = cmdlet.FakeCmdletTerminatingError;
+ }
+
+ void RunCmdlet()
+ {
+ cmdlet.CallProcessRecord();
+ }
+
+ [Test]
+ public void ProcessRecord_SolutionIsOpen_PowerShellWorkingDirectoryIsSetToSolutionDirectory()
+ {
+ CreateCmdlet();
+ fakeProjectService.OpenSolution.FileName = @"d:\projects\MySolution\MySolution.sln";
+ RunCmdlet();
+
+ string commandExecuted = cmdlet.ScriptPassedToInvokeScript;
+
+ string expectedCommandExecuted = @"Set-Location 'd:\projects\MySolution'";
+
+ Assert.AreEqual(expectedCommandExecuted, commandExecuted);
+ }
+
+ [Test]
+ public void ProcessRecord_SolutionIsNotOpen_PowerShellWorkingDirectoryIsSetUserProfileFolder()
+ {
+ CreateCmdlet();
+ fakeProjectService.OpenSolution = null;
+ RunCmdlet();
+
+ string commandExecuted = cmdlet.ScriptPassedToInvokeScript;
+
+ string expectedCommandExecuted = @"Set-Location '$env:USERPROFILE'";
+
+ Assert.AreEqual(expectedCommandExecuted, commandExecuted);
+ }
+ }
+}