From 8ab1b6f9612f2adf215e2a4d5c818dc0351d4564 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Mon, 16 May 2011 20:51:17 +0100 Subject: [PATCH] Update PowerShell working directory to the userprofile directory on opening the Package Management console. --- .../Src/InvokeUpdateWorkingDirectoryCmdlet.cs | 2 +- ...InvokeUpdateWorkingDirectoryCmdletTests.cs | 2 +- .../Scripting/PackageManagementConsoleHost.cs | 23 +++++++++------ .../Scripting/PowerShellWorkingDirectory.cs | 7 ++++- .../PackageManagementConsoleHostTests.cs | 28 +++++++++++++++++++ .../PowerShellWorkingDirectoryTests.cs | 2 +- 6 files changed, 52 insertions(+), 12 deletions(-) diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeUpdateWorkingDirectoryCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeUpdateWorkingDirectoryCmdlet.cs index 2d0f2f09f5..cb9bf9ee40 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeUpdateWorkingDirectoryCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeUpdateWorkingDirectoryCmdlet.cs @@ -48,7 +48,7 @@ namespace ICSharpCode.PackageManagement.Cmdlets void UpdateWorkingDirectory(string directory) { - string command = String.Format("Set-Location '{0}'", directory); + string command = String.Format("Set-Location {0}", directory); InvokeScript(command); } } diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeUpdateWorkingDirectoryCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeUpdateWorkingDirectoryCmdletTests.cs index 1c438411ec..a24dab541c 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeUpdateWorkingDirectoryCmdletTests.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeUpdateWorkingDirectoryCmdletTests.cs @@ -50,7 +50,7 @@ namespace PackageManagement.Cmdlets.Tests string commandExecuted = cmdlet.ScriptPassedToInvokeScript; - string expectedCommandExecuted = @"Set-Location '$env:USERPROFILE'"; + string expectedCommandExecuted = @"Set-Location $env:USERPROFILE"; Assert.AreEqual(expectedCommandExecuted, commandExecuted); } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs index a9b52de56e..a6a90abd30 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs @@ -106,6 +106,7 @@ namespace ICSharpCode.PackageManagement.Scripting powerShellHost.SetRemoteSignedExecutionPolicy(); UpdateFormatting(); RedefineClearHostFunction(); + UpdateWorkingDirectory(); } void CreatePowerShellHost() @@ -132,14 +133,6 @@ namespace ICSharpCode.PackageManagement.Scripting powerShellHost.ExecuteCommand(command); } - void InitializePackageScriptsForOpenSolution() - { - if (Solution.IsOpen) { - string command = "Invoke-InitializePackages"; - powerShellHost.ExecuteCommand(command); - } - } - void WriteInfoBeforeFirstPrompt() { WriteNuGetVersionInfo(); @@ -153,6 +146,20 @@ namespace ICSharpCode.PackageManagement.Scripting WriteLine(versionInfo); } + void UpdateWorkingDirectory() + { + string command = "Invoke-UpdateWorkingDirectory"; + powerShellHost.ExecuteCommand(command); + } + + void InitializePackageScriptsForOpenSolution() + { + if (Solution.IsOpen) { + string command = "Invoke-InitializePackages"; + powerShellHost.ExecuteCommand(command); + } + } + void WriteLine(string message) { ScriptingConsole.WriteLine(message, ScriptingStyle.Out); diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellWorkingDirectory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellWorkingDirectory.cs index b505fb931b..24a3135c43 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellWorkingDirectory.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellWorkingDirectory.cs @@ -19,9 +19,14 @@ namespace ICSharpCode.PackageManagement.Scripting { Solution solution = projectService.OpenSolution; if (solution != null) { - return solution.Directory; + return QuotedDirectory(solution.Directory); } return "$env:USERPROFILE"; } + + string QuotedDirectory(string directory) + { + return String.Format("'{0}'", directory); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs index b79f31a514..e1b5a08c9d 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleHostTests.cs @@ -497,5 +497,33 @@ namespace PackageManagement.Tests.Scripting Assert.IsFalse(executed); } + + [Test] + public void Run_SolutionIsNotOpenWhenConsoleRun_PowerShellWorkingDirectoryIsUpdated() + { + CreateHost(); + fakeSolution.IsOpen = false; + RunHost(); + + string command = "Invoke-UpdateWorkingDirectory"; + + bool executed = powerShellHost.AllCommandsPassedToExecuteCommand.Contains(command); + + Assert.IsTrue(executed); + } + + [Test] + public void Run_SolutionIsOpenWhenConsoleRun_PowerShellWorkingDirectoryIsUpdated() + { + CreateHost(); + fakeSolution.IsOpen = true; + RunHost(); + + string command = "Invoke-UpdateWorkingDirectory"; + + bool executed = powerShellHost.AllCommandsPassedToExecuteCommand.Contains(command); + + Assert.IsTrue(executed); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PowerShellWorkingDirectoryTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PowerShellWorkingDirectoryTests.cs index b4d66035b9..1e1d8eea47 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PowerShellWorkingDirectoryTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PowerShellWorkingDirectoryTests.cs @@ -44,7 +44,7 @@ namespace PackageManagement.Tests.Scripting string directory = workingDirectory.GetWorkingDirectory(); - string expectedDirectory = @"d:\projects\MyProject"; + string expectedDirectory = @"'d:\projects\MyProject'"; Assert.AreEqual(expectedDirectory, directory); }