diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
index 45e720d59c..11bd3d4e7d 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/PackageManagement.Cmdlets.csproj
@@ -48,6 +48,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeInitializePackagesCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeInitializePackagesCmdlet.cs
new file mode 100644
index 0000000000..34a262defe
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InvokeInitializePackagesCmdlet.cs
@@ -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);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableInvokeInitializePackagesCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableInvokeInitializePackagesCmdlet.cs
new file mode 100644
index 0000000000..c6f03ed1e5
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Helpers/TestableInvokeInitializePackagesCmdlet.cs
@@ -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();
+ }
+ }
+}
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 e66a81a3ec..94f7b7c740 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/PackageManagement.Cmdlets.Tests.csproj
@@ -49,12 +49,14 @@
+
+
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeInitializePackagesCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeInitializePackagesCmdletTests.cs
new file mode 100644
index 0000000000..850318337f
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InvokeInitializePackagesCmdletTests.cs
@@ -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);
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs
index a24b66015d..705c91b400 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs
@@ -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 {
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScripts.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScripts.cs
index d40422a1cb..7eeaea96a4 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScripts.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScripts.cs
@@ -7,6 +7,7 @@ namespace ICSharpCode.PackageManagement.Scripting
{
public interface IPackageInitializationScripts
{
+ bool Any();
void Run();
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScriptsFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScriptsFactory.cs
index 31098f4e8a..f0e1acb5d9 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScriptsFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScriptsFactory.cs
@@ -8,6 +8,8 @@ namespace ICSharpCode.PackageManagement.Scripting
{
public interface IPackageInitializationScriptsFactory
{
- IPackageInitializationScripts CreatePackageInitializationScripts(Solution solution);
+ IPackageInitializationScripts CreatePackageInitializationScripts(
+ Solution solution,
+ IPackageScriptSession scriptSession);
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsFactory.cs
index 9c939489f5..111f593e9e 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsFactory.cs
@@ -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);
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolution.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolution.cs
index 73bd0a8831..3fbda526c6 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolution.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolution.cs
@@ -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
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);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolution.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolution.cs
index 70653db46e..4324904864 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolution.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolution.cs
@@ -14,5 +14,12 @@ namespace PackageManagement.Tests.Helpers
{
IsRunCalled = true;
}
+
+ public bool AnyReturnValue = true;
+
+ public bool Any()
+ {
+ return AnyReturnValue;
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolutionFactory.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolutionFactory.cs
index e0f51df81b..c0d151b97b 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolutionFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolutionFactory.cs
@@ -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;
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs
index 5beedf62cb..05a986152e 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementConsoleHost.cs
@@ -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; }
}
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolutionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolutionTests.cs
index c1295eaf16..916735db28 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolutionTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageInitializationScriptsRunnerForOpenedSolutionTests.cs
@@ -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
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);
+ }
}
}