Browse Source

Add Invoke-InitializePackages cmdlet to run package init.ps1 PowerShell scripts.

pull/15/head
Matt Ward 15 years ago
parent
commit
fe39e572dc
  1. 1
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
  2. 56
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeInitializePackagesCmdlet.cs
  3. 51
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableInvokeInitializePackagesCmdlet.cs
  4. 2
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj
  5. 93
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeInitializePackagesCmdletTests.cs
  6. 3
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs
  7. 1
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScripts.cs
  8. 4
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScriptsFactory.cs
  9. 8
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsFactory.cs
  10. 23
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolution.cs
  11. 7
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolution.cs
  12. 6
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolutionFactory.cs
  13. 6
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs
  14. 21
      src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolutionTests.cs

1
src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj

@ -48,6 +48,7 @@ @@ -48,6 +48,7 @@
<Compile Include="Src\GetProjectCmdlet.cs" />
<Compile Include="Src\ICmdletTerminatingError.cs" />
<Compile Include="Src\InstallPackageCmdlet.cs" />
<Compile Include="Src\InvokeInitializePackagesCmdlet.cs" />
<Compile Include="Src\ITerminatingCmdlet.cs" />
<Compile Include="Src\OpenProjects.cs" />
<Compile Include="Src\PackageManagementCmdlet.cs" />

56
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeInitializePackagesCmdlet.cs

@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
// 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;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement.Cmdlets
{
[Cmdlet(VerbsLifecycle.Invoke, "InitializePackages", DefaultParameterSetName = ParameterAttribute.AllParameterSets)]
public class InvokeInitializePackagesCmdlet : PackageManagementCmdlet
{
IPackageManagementProjectService projectService;
IPackageInitializationScriptsFactory scriptsFactory;
public InvokeInitializePackagesCmdlet()
: this(
PackageManagementServices.ProjectService,
new PackageInitializationScriptsFactory(PackageManagementServices.ConsoleHost),
PackageManagementServices.ConsoleHost,
null)
{
}
public InvokeInitializePackagesCmdlet(
IPackageManagementProjectService projectService,
IPackageInitializationScriptsFactory scriptsFactory,
IPackageManagementConsoleHost consoleHost,
ICmdletTerminatingError terminatingError)
: base(consoleHost, terminatingError)
{
this.projectService = projectService;
this.scriptsFactory = scriptsFactory;
}
protected override void ProcessRecord()
{
RunPackageInitializationScripts();
}
void RunPackageInitializationScripts()
{
IPackageInitializationScripts scripts = GetPackageInitializationScripts();
if (scripts.Any()) {
scripts.Run();
}
}
IPackageInitializationScripts GetPackageInitializationScripts()
{
Solution solution = projectService.OpenSolution;
return scriptsFactory.CreatePackageInitializationScripts(solution, this);
}
}
}

51
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableInvokeInitializePackagesCmdlet.cs

@ -0,0 +1,51 @@ @@ -0,0 +1,51 @@
// 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 TestableInvokeInitializePackagesCmdlet : InvokeInitializePackagesCmdlet
{
public FakeCmdletTerminatingError FakeCmdletTerminatingError;
public FakePackageManagementConsoleHost FakePackageManagementConsoleHost;
public FakePackageManagementProjectService FakeProjectService;
public FakePackageInitializationScriptsFactory FakeScriptsFactory;
public Solution Solution;
public TestableInvokeInitializePackagesCmdlet()
: this(
new FakePackageManagementProjectService(),
new FakePackageInitializationScriptsFactory(),
new FakePackageManagementConsoleHost(),
new FakeCmdletTerminatingError())
{
}
public TestableInvokeInitializePackagesCmdlet(
FakePackageManagementProjectService projectService,
FakePackageInitializationScriptsFactory scriptsFactory,
FakePackageManagementConsoleHost consoleHost,
FakeCmdletTerminatingError cmdletTerminatingError)
: base(projectService, scriptsFactory, consoleHost, cmdletTerminatingError)
{
this.FakeProjectService = projectService;
this.FakeScriptsFactory = scriptsFactory;
this.FakePackageManagementConsoleHost = consoleHost;
this.FakeCmdletTerminatingError = cmdletTerminatingError;
Solution = new Solution();
Solution.FileName = @"d:\projects\MyProject\MyProject.sln";
projectService.OpenSolution = Solution;
}
public void CallProcessRecord()
{
base.ProcessRecord();
}
}
}

2
src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj

@ -49,12 +49,14 @@ @@ -49,12 +49,14 @@
<Compile Include="Helpers\TestableGetPackageCmdlet.cs" />
<Compile Include="Helpers\TestableGetProjectCmdlet.cs" />
<Compile Include="Helpers\TestableInstallPackageCmdlet.cs" />
<Compile Include="Helpers\TestableInvokeInitializePackagesCmdlet.cs" />
<Compile Include="Helpers\TestablePackageManagementCmdlet.cs" />
<Compile Include="Helpers\TestableUninstallPackageCmdlet.cs" />
<Compile Include="Helpers\TestableUpdatePackageCmdlet.cs" />
<Compile Include="Src\CmdletTerminatorErrorTests.cs" />
<Compile Include="Src\GetPackageCmdletTests.cs" />
<Compile Include="Src\GetProjectCmdletTests.cs" />
<Compile Include="Src\InvokeInitializePackagesCmdletTests.cs" />
<Compile Include="Src\InstallPackageCmdletTests.cs" />
<Compile Include="Src\CmdletTestsBase.cs" />
<Compile Include="Src\PackageManagementCmdletTests.cs" />

93
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeInitializePackagesCmdletTests.cs

@ -0,0 +1,93 @@ @@ -0,0 +1,93 @@
// 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 ICSharpCode.PackageManagement.Scripting;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using PackageManagement.Cmdlets.Tests.Helpers;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Cmdlets.Tests
{
[TestFixture]
public class InvokeInitializePackagesCmdletTests
{
TestableInvokeInitializePackagesCmdlet cmdlet;
FakeCmdletTerminatingError fakeTerminatingError;
FakePackageManagementProjectService fakeProjectService;
FakePackageInitializationScriptsFactory scriptsFactory;
void CreateCmdlet()
{
cmdlet = new TestableInvokeInitializePackagesCmdlet();
fakeProjectService = cmdlet.FakeProjectService;
fakeTerminatingError = cmdlet.FakeCmdletTerminatingError;
scriptsFactory = cmdlet.FakeScriptsFactory;
}
void RunCmdlet()
{
cmdlet.CallProcessRecord();
}
void SolutionHasPackageInitializationScripts()
{
scriptsFactory.FakePackageInitializationScripts.AnyReturnValue = true;
}
void SolutionHasNoPackageInitializationScripts()
{
scriptsFactory.FakePackageInitializationScripts.AnyReturnValue = false;
}
[Test]
public void ProcessRecord_SolutionHasPackageInitializationScripts_PackageInitializationScriptsAreRun()
{
CreateCmdlet();
SolutionHasPackageInitializationScripts();
RunCmdlet();
bool run = scriptsFactory.FakePackageInitializationScripts.IsRunCalled;
Assert.IsTrue(run);
}
[Test]
public void ProcessRecord_SolutionHasNoPackageInitializationScripts_PackageInitializationScriptsAreNotRun()
{
CreateCmdlet();
SolutionHasNoPackageInitializationScripts();
RunCmdlet();
bool run = scriptsFactory.FakePackageInitializationScripts.IsRunCalled;
Assert.IsFalse(run);
}
[Test]
public void ProcessRecord_SolutionIsOpen_SolutionUsedToCreatePackageInitializationScripts()
{
CreateCmdlet();
RunCmdlet();
Solution expectedSolution = fakeProjectService.OpenSolution;
Solution actualSolution = scriptsFactory.SolutionPassedToCreatePackageInitializationScripts;
Assert.AreEqual(expectedSolution, actualSolution);
}
[Test]
public void ProcessRecord_SolutionHasPackageInitializationScripts_PackageScriptSessionIsCmdlet()
{
CreateCmdlet();
SolutionHasPackageInitializationScripts();
RunCmdlet();
IPackageScriptSession session = scriptsFactory.ScriptSessionPassedToCreatePackageInitializationScripts;
Assert.AreEqual(cmdlet, session);
}
}
}

3
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs

@ -26,7 +26,8 @@ namespace ICSharpCode.PackageManagement @@ -26,7 +26,8 @@ namespace ICSharpCode.PackageManagement
solution = new PackageManagementSolution(registeredPackageRepositories, packageManagementEvents);
consoleHost = new PackageManagementConsoleHost(solution, registeredPackageRepositories);
projectBrowserRefresher = new ProjectBrowserRefresher(projectService, packageManagementEvents);
packageInitializationScriptsRunner = new PackageInitializationScriptsRunnerForOpenedSolution(projectService);
packageInitializationScriptsRunner =
new PackageInitializationScriptsRunnerForOpenedSolution(projectService, consoleHost);
}
public static PackageManagementOptions Options {

1
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScripts.cs

@ -7,6 +7,7 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -7,6 +7,7 @@ namespace ICSharpCode.PackageManagement.Scripting
{
public interface IPackageInitializationScripts
{
bool Any();
void Run();
}
}

4
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScriptsFactory.cs

@ -8,6 +8,8 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -8,6 +8,8 @@ namespace ICSharpCode.PackageManagement.Scripting
{
public interface IPackageInitializationScriptsFactory
{
IPackageInitializationScripts CreatePackageInitializationScripts(Solution solution);
IPackageInitializationScripts CreatePackageInitializationScripts(
Solution solution,
IPackageScriptSession scriptSession);
}
}

8
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsFactory.cs

@ -20,12 +20,12 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -20,12 +20,12 @@ namespace ICSharpCode.PackageManagement.Scripting
this.consoleHost = consoleHost;
}
public IPackageInitializationScripts CreatePackageInitializationScripts(Solution solution)
public IPackageInitializationScripts CreatePackageInitializationScripts(
Solution solution,
IPackageScriptSession scriptSession)
{
IPowerShellHost powerShellHost = consoleHost.PowerShellHost;
var session = new PowerShellPackageScriptSession(powerShellHost, consoleHost.ScriptingConsole);
var repository = new SolutionPackageRepository(solution);
var scriptFactory = new PackageScriptFactory(session);
var scriptFactory = new PackageScriptFactory(scriptSession);
return new PackageInitializationScripts(repository, scriptFactory);
}
}

23
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolution.cs

@ -9,17 +9,22 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -9,17 +9,22 @@ namespace ICSharpCode.PackageManagement.Scripting
public class PackageInitializationScriptsRunnerForOpenedSolution
{
IPackageInitializationScriptsFactory scriptsFactory;
IPackageManagementConsoleHost consoleHost;
public PackageInitializationScriptsRunnerForOpenedSolution(IPackageManagementProjectService projectService)
: this(projectService, new PackageInitializationScriptsFactory())
public PackageInitializationScriptsRunnerForOpenedSolution(
IPackageManagementProjectService projectService,
IPackageManagementConsoleHost consoleHost)
: this(projectService, consoleHost, new PackageInitializationScriptsFactory())
{
}
public PackageInitializationScriptsRunnerForOpenedSolution(
IPackageManagementProjectService projectService,
IPackageManagementConsoleHost consoleHost,
IPackageInitializationScriptsFactory scriptsFactory)
{
projectService.SolutionLoaded += SolutionLoaded;
this.consoleHost = consoleHost;
this.scriptsFactory = scriptsFactory;
}
@ -30,8 +35,20 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -30,8 +35,20 @@ namespace ICSharpCode.PackageManagement.Scripting
void RunScripts(Solution solution)
{
IPackageInitializationScripts scripts = scriptsFactory.CreatePackageInitializationScripts(solution);
IPackageInitializationScripts scripts = CreatePackageInitializationScripts(solution);
scripts.Run();
}
IPackageInitializationScripts CreatePackageInitializationScripts(Solution solution)
{
PowerShellPackageScriptSession session = CreateScriptSession();
return scriptsFactory.CreatePackageInitializationScripts(solution, session);
}
PowerShellPackageScriptSession CreateScriptSession()
{
IPowerShellHost powerShellHost = consoleHost.PowerShellHost;
return new PowerShellPackageScriptSession(powerShellHost, consoleHost.ScriptingConsole);
}
}
}

7
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolution.cs

@ -14,5 +14,12 @@ namespace PackageManagement.Tests.Helpers @@ -14,5 +14,12 @@ namespace PackageManagement.Tests.Helpers
{
IsRunCalled = true;
}
public bool AnyReturnValue = true;
public bool Any()
{
return AnyReturnValue;
}
}
}

6
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolutionFactory.cs

@ -13,10 +13,14 @@ namespace PackageManagement.Tests.Helpers @@ -13,10 +13,14 @@ namespace PackageManagement.Tests.Helpers
new FakePackageInitializationScripts();
public Solution SolutionPassedToCreatePackageInitializationScripts;
public IPackageScriptSession ScriptSessionPassedToCreatePackageInitializationScripts;
public IPackageInitializationScripts CreatePackageInitializationScripts(Solution solution)
public IPackageInitializationScripts CreatePackageInitializationScripts(
Solution solution,
IPackageScriptSession scriptSession)
{
SolutionPassedToCreatePackageInitializationScripts = solution;
ScriptSessionPassedToCreatePackageInitializationScripts = scriptSession;
return FakePackageInitializationScripts;
}
}

6
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs

@ -95,10 +95,10 @@ namespace PackageManagement.Tests.Helpers @@ -95,10 +95,10 @@ namespace PackageManagement.Tests.Helpers
return PackageSourceToReturnFromGetActivePackageSource;
}
public FakePowerShellHost FakePowerShellHost = new FakePowerShellHost();
public IPowerShellHost PowerShellHost {
get {
throw new NotImplementedException();
}
get { return FakePowerShellHost; }
}
}
}

21
src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolutionTests.cs

@ -16,12 +16,14 @@ namespace PackageManagement.Tests.Scripting @@ -16,12 +16,14 @@ namespace PackageManagement.Tests.Scripting
FakePackageInitializationScriptsFactory fakeScriptsFactory;
FakePackageManagementProjectService fakeProjectService;
PackageInitializationScriptsRunnerForOpenedSolution runner;
FakePackageManagementConsoleHost fakeConsoleHost;
void CreateRunner()
{
fakeScriptsFactory = new FakePackageInitializationScriptsFactory();
fakeProjectService = new FakePackageManagementProjectService();
runner = new PackageInitializationScriptsRunnerForOpenedSolution(fakeProjectService, fakeScriptsFactory);
fakeConsoleHost = new FakePackageManagementConsoleHost();
fakeScriptsFactory = new FakePackageInitializationScriptsFactory();
runner = new PackageInitializationScriptsRunnerForOpenedSolution(fakeProjectService, fakeConsoleHost, fakeScriptsFactory);
}
Solution OpenSolution()
@ -47,11 +49,22 @@ namespace PackageManagement.Tests.Scripting @@ -47,11 +49,22 @@ namespace PackageManagement.Tests.Scripting
public void Instance_SolutionIsOpened_PackageInitializationScriptsCreatedUsingSolution()
{
CreateRunner();
var expectedSolution = OpenSolution();
Solution expectedSolution = OpenSolution();
var actualSolution = fakeScriptsFactory.SolutionPassedToCreatePackageInitializationScripts;
Solution actualSolution = fakeScriptsFactory.SolutionPassedToCreatePackageInitializationScripts;
Assert.AreEqual(expectedSolution, actualSolution);
}
[Test]
public void Instance_SolutionIsOpened_PowerShellPackageScriptSessionIsUsedToCreatePackageInitializationScripts()
{
CreateRunner();
OpenSolution();
PowerShellPackageScriptSession session = fakeScriptsFactory.ScriptSessionPassedToCreatePackageInitializationScripts as PowerShellPackageScriptSession;
Assert.IsNotNull(session);
}
}
}

Loading…
Cancel
Save